@atlaskit/flag 14.4.1
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/CHANGELOG.md +1244 -0
- package/LICENSE +13 -0
- package/README.md +13 -0
- package/__perf__/autodismiss.tsx +18 -0
- package/__perf__/default.tsx +18 -0
- package/__perf__/withFlagGroup.tsx +20 -0
- package/auto-dismiss-flag/package.json +7 -0
- package/constants/package.json +7 -0
- package/dist/cjs/auto-dismiss-flag.js +89 -0
- package/dist/cjs/constants.js +8 -0
- package/dist/cjs/expander.js +41 -0
- package/dist/cjs/flag-actions.js +64 -0
- package/dist/cjs/flag-group.js +107 -0
- package/dist/cjs/flag-provider.js +119 -0
- package/dist/cjs/flag.js +219 -0
- package/dist/cjs/index.js +51 -0
- package/dist/cjs/theme.js +160 -0
- package/dist/cjs/types.js +10 -0
- package/dist/cjs/version.json +5 -0
- package/dist/es2019/auto-dismiss-flag.js +67 -0
- package/dist/es2019/constants.js +1 -0
- package/dist/es2019/expander.js +33 -0
- package/dist/es2019/flag-actions.js +73 -0
- package/dist/es2019/flag-group.js +130 -0
- package/dist/es2019/flag-provider.js +68 -0
- package/dist/es2019/flag.js +245 -0
- package/dist/es2019/index.js +4 -0
- package/dist/es2019/theme.js +119 -0
- package/dist/es2019/types.js +2 -0
- package/dist/es2019/version.json +5 -0
- package/dist/esm/auto-dismiss-flag.js +67 -0
- package/dist/esm/constants.js +1 -0
- package/dist/esm/expander.js +29 -0
- package/dist/esm/flag-actions.js +50 -0
- package/dist/esm/flag-group.js +85 -0
- package/dist/esm/flag-provider.js +92 -0
- package/dist/esm/flag.js +195 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/theme.js +129 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/version.json +5 -0
- package/dist/types/auto-dismiss-flag.d.ts +4 -0
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/expander.d.ts +9 -0
- package/dist/types/flag-actions.d.ts +14 -0
- package/dist/types/flag-group.d.ts +27 -0
- package/dist/types/flag-provider.d.ts +26 -0
- package/dist/types/flag.d.ts +3 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/theme.d.ts +9 -0
- package/dist/types/types.d.ts +79 -0
- package/expander/package.json +7 -0
- package/extract-react-types/show-flag-args.tsx +5 -0
- package/flag/package.json +7 -0
- package/flag-actions/package.json +7 -0
- package/flag-group/package.json +7 -0
- package/flag-provider/package.json +7 -0
- package/package.json +80 -0
- package/theme/package.json +7 -0
- package/types/package.json +7 -0
package/dist/esm/flag.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
|
3
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
5
|
+
|
|
6
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
|
7
|
+
|
|
8
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
9
|
+
|
|
10
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
11
|
+
|
|
12
|
+
/** @jsx jsx */
|
|
13
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
14
|
+
import { css, jsx } from '@emotion/core';
|
|
15
|
+
import ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';
|
|
16
|
+
import ChevronUpIcon from '@atlaskit/icon/glyph/chevron-up';
|
|
17
|
+
import CrossIcon from '@atlaskit/icon/glyph/cross';
|
|
18
|
+
import GlobalTheme from '@atlaskit/theme/components';
|
|
19
|
+
import { borderRadius, gridSize as getGridSize, layers } from '@atlaskit/theme/constants';
|
|
20
|
+
import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next/usePlatformLeafEventHandler';
|
|
21
|
+
import { DEFAULT_APPEARANCE } from './constants';
|
|
22
|
+
import { flagBorderColor, flagShadowColor, getFlagBackgroundColor, getFlagFocusRingColor, getFlagTextColor } from './theme';
|
|
23
|
+
import Expander from './expander';
|
|
24
|
+
import Actions from './flag-actions';
|
|
25
|
+
import { useFlagGroup } from './flag-group';
|
|
26
|
+
|
|
27
|
+
function noop() {}
|
|
28
|
+
|
|
29
|
+
var analyticsAttributes = {
|
|
30
|
+
componentName: 'flag',
|
|
31
|
+
packageName: "@atlaskit/flag",
|
|
32
|
+
packageVersion: "14.4.1"
|
|
33
|
+
};
|
|
34
|
+
var gridSize = getGridSize();
|
|
35
|
+
var doubleGridSize = gridSize * 2;
|
|
36
|
+
var headerHeight = gridSize * 4;
|
|
37
|
+
|
|
38
|
+
var Flag = function Flag(props) {
|
|
39
|
+
var _props$actions = props.actions,
|
|
40
|
+
actions = _props$actions === void 0 ? [] : _props$actions,
|
|
41
|
+
_props$appearance = props.appearance,
|
|
42
|
+
appearance = _props$appearance === void 0 ? DEFAULT_APPEARANCE : _props$appearance,
|
|
43
|
+
icon = props.icon,
|
|
44
|
+
title = props.title,
|
|
45
|
+
description = props.description,
|
|
46
|
+
linkComponent = props.linkComponent,
|
|
47
|
+
onMouseOver = props.onMouseOver,
|
|
48
|
+
_props$onFocus = props.onFocus,
|
|
49
|
+
onFocus = _props$onFocus === void 0 ? noop : _props$onFocus,
|
|
50
|
+
onMouseOut = props.onMouseOut,
|
|
51
|
+
_props$onBlur = props.onBlur,
|
|
52
|
+
onBlur = _props$onBlur === void 0 ? noop : _props$onBlur,
|
|
53
|
+
_props$onDismissed = props.onDismissed,
|
|
54
|
+
onDismissedProp = _props$onDismissed === void 0 ? noop : _props$onDismissed,
|
|
55
|
+
testId = props.testId,
|
|
56
|
+
id = props.id,
|
|
57
|
+
analyticsContext = props.analyticsContext;
|
|
58
|
+
|
|
59
|
+
var _useFlagGroup = useFlagGroup(),
|
|
60
|
+
onDismissedFromFlagGroup = _useFlagGroup.onDismissed,
|
|
61
|
+
isDismissAllowed = _useFlagGroup.isDismissAllowed;
|
|
62
|
+
|
|
63
|
+
var onDismissed = useCallback(function (id, analyticsEvent) {
|
|
64
|
+
onDismissedProp(id, analyticsEvent);
|
|
65
|
+
onDismissedFromFlagGroup(id, analyticsEvent);
|
|
66
|
+
}, [onDismissedProp, onDismissedFromFlagGroup]);
|
|
67
|
+
|
|
68
|
+
var _useState = useState(false),
|
|
69
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
70
|
+
isExpanded = _useState2[0],
|
|
71
|
+
setIsExpanded = _useState2[1];
|
|
72
|
+
|
|
73
|
+
var onDismissedAnalytics = usePlatformLeafEventHandler(_objectSpread({
|
|
74
|
+
fn: onDismissed,
|
|
75
|
+
action: 'dismissed',
|
|
76
|
+
analyticsData: analyticsContext
|
|
77
|
+
}, analyticsAttributes));
|
|
78
|
+
var isBold = appearance !== DEFAULT_APPEARANCE;
|
|
79
|
+
var renderToggleOrDismissButton = useCallback(function (_ref) {
|
|
80
|
+
var mode = _ref.mode;
|
|
81
|
+
|
|
82
|
+
// If it is normal appearance a toggle button cannot be rendered
|
|
83
|
+
// Ensure onDismissed is defined and isDismissAllowed is true to render
|
|
84
|
+
// the dismiss button
|
|
85
|
+
if (!isBold && !isDismissAllowed) {
|
|
86
|
+
return null;
|
|
87
|
+
} // If it is bold then ensure there is a description or actions to render
|
|
88
|
+
// the toggle button
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
if (isBold && !description && !actions.length) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
var ButtonIcon = CrossIcon;
|
|
96
|
+
var buttonLabel = 'Dismiss';
|
|
97
|
+
|
|
98
|
+
var buttonAction = function buttonAction() {
|
|
99
|
+
if (isDismissAllowed) {
|
|
100
|
+
onDismissedAnalytics(id);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
var size = 'small';
|
|
105
|
+
var buttonTestId = testId && "".concat(testId, "-dismiss");
|
|
106
|
+
var a11yProps = {};
|
|
107
|
+
|
|
108
|
+
if (isBold) {
|
|
109
|
+
ButtonIcon = isExpanded ? ChevronUpIcon : ChevronDownIcon;
|
|
110
|
+
buttonLabel = isExpanded ? 'Collapse' : 'Expand';
|
|
111
|
+
|
|
112
|
+
buttonAction = function buttonAction() {
|
|
113
|
+
return setIsExpanded(!isExpanded);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
size = 'large';
|
|
117
|
+
buttonTestId = testId && "".concat(testId, "-toggle");
|
|
118
|
+
a11yProps = {
|
|
119
|
+
'aria-expanded': isExpanded
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return jsx("button", _extends({
|
|
124
|
+
css: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n appearance: none;\n background: none;\n border: none;\n border-radius: ", "px;\n color: ", ";\n cursor: pointer;\n flex: 0 0 auto;\n line-height: 1;\n margin-left: ", "px;\n padding: 0;\n white-space: nowrap;\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px ", ";\n }\n "])), borderRadius(), getFlagTextColor(appearance, mode), gridSize, getFlagFocusRingColor(appearance, mode)),
|
|
125
|
+
onClick: buttonAction,
|
|
126
|
+
"data-testid": buttonTestId,
|
|
127
|
+
type: "button"
|
|
128
|
+
}, a11yProps), jsx(ButtonIcon, {
|
|
129
|
+
label: buttonLabel,
|
|
130
|
+
size: size
|
|
131
|
+
}));
|
|
132
|
+
}, [actions.length, appearance, description, id, isBold, isDismissAllowed, isExpanded, onDismissedAnalytics, testId]);
|
|
133
|
+
useEffect(function () {
|
|
134
|
+
// If buttons are removed as a prop, update isExpanded to be false
|
|
135
|
+
if (isBold && isExpanded && !description && !actions.length) {
|
|
136
|
+
setIsExpanded(false);
|
|
137
|
+
}
|
|
138
|
+
}, [actions.length, description, isBold, isExpanded]);
|
|
139
|
+
var onFocusAnalytics = usePlatformLeafEventHandler(_objectSpread({
|
|
140
|
+
fn: onFocus,
|
|
141
|
+
action: 'focused',
|
|
142
|
+
analyticsData: analyticsContext
|
|
143
|
+
}, analyticsAttributes));
|
|
144
|
+
var onBlurAnalytics = usePlatformLeafEventHandler(_objectSpread({
|
|
145
|
+
fn: onBlur,
|
|
146
|
+
action: 'blurred',
|
|
147
|
+
analyticsData: analyticsContext
|
|
148
|
+
}, analyticsAttributes));
|
|
149
|
+
var autoDismissProps = {
|
|
150
|
+
onMouseOver: onMouseOver,
|
|
151
|
+
onFocus: onFocusAnalytics,
|
|
152
|
+
onMouseOut: onMouseOut,
|
|
153
|
+
onBlur: onBlurAnalytics
|
|
154
|
+
};
|
|
155
|
+
var OptionalDismissButton = renderToggleOrDismissButton;
|
|
156
|
+
var boxShadow = "0 20px 32px -8px ".concat(flagShadowColor);
|
|
157
|
+
|
|
158
|
+
if (!isBold) {
|
|
159
|
+
boxShadow = "0 0 1px ".concat(flagBorderColor, ", ").concat(boxShadow);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return jsx(GlobalTheme.Consumer, null, function (tokens) {
|
|
163
|
+
var mode = tokens.mode;
|
|
164
|
+
var textColour = getFlagTextColor(appearance, mode);
|
|
165
|
+
return jsx("div", _extends({
|
|
166
|
+
css: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n background-color: ", ";\n border-radius: ", "px;\n box-shadow: ", ";\n color: ", ";\n transition: background-color 200ms;\n width: 100%;\n z-index: ", ";\n "])), getFlagBackgroundColor(appearance, mode), borderRadius(), boxShadow, textColour, layers.flag()),
|
|
167
|
+
role: "alert",
|
|
168
|
+
"data-testid": testId
|
|
169
|
+
}, autoDismissProps), jsx("div", {
|
|
170
|
+
css: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n width: 100%;\n padding: ", "px;\n box-sizing: border-box;\n border-radius: ", "px;\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px\n ", ";\n }\n\n @supports not selector(*:focus-visible) {\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px\n ", ";\n }\n }\n\n @media screen and (forced-colors: active),\n screen and (-ms-high-contrast: active) {\n &:focus-visible {\n outline: 1px solid;\n }\n }\n "])), doubleGridSize, borderRadius(), getFlagFocusRingColor(appearance, mode), getFlagFocusRingColor(appearance, mode)) // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
|
|
171
|
+
,
|
|
172
|
+
tabIndex: 0
|
|
173
|
+
}, jsx("div", {
|
|
174
|
+
css: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n height: ", "px;\n "])), headerHeight)
|
|
175
|
+
}, icon, jsx("span", {
|
|
176
|
+
css: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n color: ", ";\n font-weight: 600;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding: 0 0 0 ", "px;\n "])), textColour, doubleGridSize)
|
|
177
|
+
}, title), jsx(OptionalDismissButton, {
|
|
178
|
+
mode: mode
|
|
179
|
+
})), jsx(Expander, {
|
|
180
|
+
isExpanded: !isBold || isExpanded,
|
|
181
|
+
testId: testId
|
|
182
|
+
}, description && jsx("div", {
|
|
183
|
+
css: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n color: ", ";\n word-wrap: break-word;\n overflow: auto;\n max-height: 100px; /* height is defined as 5 lines maximum by design */\n "])), textColour),
|
|
184
|
+
"data-testid": testId && "".concat(testId, "-description")
|
|
185
|
+
}, description), jsx(Actions, {
|
|
186
|
+
actions: actions,
|
|
187
|
+
appearance: appearance,
|
|
188
|
+
linkComponent: linkComponent,
|
|
189
|
+
testId: testId,
|
|
190
|
+
mode: mode
|
|
191
|
+
}))));
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
export default Flag;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import * as colors from '@atlaskit/theme/colors';
|
|
2
|
+
var flagBackgroundColor = {
|
|
3
|
+
error: {
|
|
4
|
+
light: colors.R400,
|
|
5
|
+
dark: colors.R300
|
|
6
|
+
},
|
|
7
|
+
info: {
|
|
8
|
+
light: colors.N500,
|
|
9
|
+
dark: colors.N500
|
|
10
|
+
},
|
|
11
|
+
normal: {
|
|
12
|
+
light: colors.N0,
|
|
13
|
+
dark: colors.DN50
|
|
14
|
+
},
|
|
15
|
+
success: {
|
|
16
|
+
light: colors.G400,
|
|
17
|
+
dark: colors.G300
|
|
18
|
+
},
|
|
19
|
+
warning: {
|
|
20
|
+
light: colors.Y200,
|
|
21
|
+
dark: colors.Y300
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export var getFlagBackgroundColor = function getFlagBackgroundColor(appearance, mode) {
|
|
25
|
+
return flagBackgroundColor[appearance][mode];
|
|
26
|
+
};
|
|
27
|
+
export var flagBorderColor = colors.N60A;
|
|
28
|
+
var flagTextColor = {
|
|
29
|
+
error: {
|
|
30
|
+
light: colors.N0,
|
|
31
|
+
dark: colors.DN40
|
|
32
|
+
},
|
|
33
|
+
info: {
|
|
34
|
+
light: colors.N0,
|
|
35
|
+
dark: colors.DN600
|
|
36
|
+
},
|
|
37
|
+
normal: {
|
|
38
|
+
light: colors.N500,
|
|
39
|
+
dark: colors.DN600
|
|
40
|
+
},
|
|
41
|
+
success: {
|
|
42
|
+
light: colors.N0,
|
|
43
|
+
dark: colors.DN40
|
|
44
|
+
},
|
|
45
|
+
warning: {
|
|
46
|
+
light: colors.N700,
|
|
47
|
+
dark: colors.DN40
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
export var getFlagTextColor = function getFlagTextColor(appearance, mode) {
|
|
51
|
+
return flagTextColor[appearance][mode];
|
|
52
|
+
};
|
|
53
|
+
export var flagShadowColor = colors.N50A;
|
|
54
|
+
var flagFocusRingColor = {
|
|
55
|
+
error: {
|
|
56
|
+
light: colors.N40,
|
|
57
|
+
dark: colors.N40
|
|
58
|
+
},
|
|
59
|
+
info: {
|
|
60
|
+
light: colors.N40,
|
|
61
|
+
dark: colors.N40
|
|
62
|
+
},
|
|
63
|
+
normal: {
|
|
64
|
+
light: colors.B100,
|
|
65
|
+
dark: colors.B100
|
|
66
|
+
},
|
|
67
|
+
success: {
|
|
68
|
+
light: colors.N40,
|
|
69
|
+
dark: colors.N40
|
|
70
|
+
},
|
|
71
|
+
warning: {
|
|
72
|
+
light: colors.N200,
|
|
73
|
+
dark: colors.N200
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
export var getFlagFocusRingColor = function getFlagFocusRingColor(appearance, mode) {
|
|
77
|
+
return flagFocusRingColor[appearance][mode];
|
|
78
|
+
};
|
|
79
|
+
var lightButtonBackground = 'rgba(255, 255, 255, 0.08)';
|
|
80
|
+
var actionBackground = {
|
|
81
|
+
success: {
|
|
82
|
+
light: lightButtonBackground,
|
|
83
|
+
dark: colors.N30A
|
|
84
|
+
},
|
|
85
|
+
info: {
|
|
86
|
+
light: lightButtonBackground,
|
|
87
|
+
dark: lightButtonBackground
|
|
88
|
+
},
|
|
89
|
+
error: {
|
|
90
|
+
light: lightButtonBackground,
|
|
91
|
+
dark: colors.N30A
|
|
92
|
+
},
|
|
93
|
+
warning: {
|
|
94
|
+
light: colors.N30A,
|
|
95
|
+
dark: colors.N30A
|
|
96
|
+
},
|
|
97
|
+
normal: {
|
|
98
|
+
light: 'none',
|
|
99
|
+
dark: 'none'
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
var actionColor = {
|
|
103
|
+
success: {
|
|
104
|
+
light: colors.N0,
|
|
105
|
+
dark: colors.DN40
|
|
106
|
+
},
|
|
107
|
+
info: {
|
|
108
|
+
light: colors.N0,
|
|
109
|
+
dark: colors.DN600
|
|
110
|
+
},
|
|
111
|
+
error: {
|
|
112
|
+
light: colors.N0,
|
|
113
|
+
dark: colors.DN600
|
|
114
|
+
},
|
|
115
|
+
warning: {
|
|
116
|
+
light: colors.N700,
|
|
117
|
+
dark: colors.DN40
|
|
118
|
+
},
|
|
119
|
+
normal: {
|
|
120
|
+
light: colors.B400,
|
|
121
|
+
dark: colors.B100
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
export var getActionBackground = function getActionBackground(appearance, mode) {
|
|
125
|
+
return actionBackground[appearance][mode];
|
|
126
|
+
};
|
|
127
|
+
export var getActionColor = function getActionColor(appearance, mode) {
|
|
128
|
+
return actionColor[appearance][mode];
|
|
129
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { ComponentType } from 'react';
|
|
3
|
+
import { CustomThemeButtonProps } from '@atlaskit/button/types';
|
|
4
|
+
import { ThemeModes } from '@atlaskit/theme/types';
|
|
5
|
+
import { ActionsType, AppearanceTypes } from './types';
|
|
6
|
+
declare type Props = {
|
|
7
|
+
appearance: AppearanceTypes;
|
|
8
|
+
actions: ActionsType;
|
|
9
|
+
linkComponent?: ComponentType<CustomThemeButtonProps>;
|
|
10
|
+
mode: ThemeModes;
|
|
11
|
+
testId?: string;
|
|
12
|
+
};
|
|
13
|
+
declare const FlagActions: (props: Props) => JSX.Element | null;
|
|
14
|
+
export default FlagActions;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
import type { UIAnalyticsEvent } from '@atlaskit/analytics-next';
|
|
4
|
+
declare type Props = {
|
|
5
|
+
/** ID attribute used for DOM selection. */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Describes the specific role of this FlagGroup for users viewing the page with a screen reader (defaults to `Flag notifications`). */
|
|
8
|
+
label?: string;
|
|
9
|
+
/** Describes the specific tag on which the screen reader text will be rendered (defaults to `h2`). */
|
|
10
|
+
labelTag?: React.ElementType;
|
|
11
|
+
/** Flag elements to be displayed. */
|
|
12
|
+
children?: Array<ReactElement> | ReactElement | null | boolean;
|
|
13
|
+
/** Handler which will be called when a Flag's dismiss button is clicked.
|
|
14
|
+
* Receives the id of the dismissed Flag as a parameter.
|
|
15
|
+
*/
|
|
16
|
+
onDismissed?: (id: number | string, analyticsEvent: UIAnalyticsEvent) => void;
|
|
17
|
+
};
|
|
18
|
+
export declare const flagWidth: number;
|
|
19
|
+
export declare const flagAnimationTime = 400;
|
|
20
|
+
declare type FlagGroupAPI = {
|
|
21
|
+
onDismissed: (id: number | string, analyticsEvent: UIAnalyticsEvent) => void;
|
|
22
|
+
isDismissAllowed: boolean;
|
|
23
|
+
};
|
|
24
|
+
export declare const FlagGroupContext: import("react").Context<FlagGroupAPI>;
|
|
25
|
+
export declare function useFlagGroup(): FlagGroupAPI;
|
|
26
|
+
declare const FlagGroup: (props: Props) => JSX.Element;
|
|
27
|
+
export default FlagGroup;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FlagPropsWithoutId } from './types';
|
|
3
|
+
declare type FlagId = string | number;
|
|
4
|
+
export declare type Combine<First, Second> = Omit<First, keyof Second> & Second;
|
|
5
|
+
export interface CreateFlagArgs extends FlagPropsWithoutId {
|
|
6
|
+
/** A unique identifier used for rendering and onDismissed callbacks.
|
|
7
|
+
* This will be autogenerated if you don’t supply one.
|
|
8
|
+
* If you don’t want the same flag showing multiple times, provide a unique id.
|
|
9
|
+
*/
|
|
10
|
+
id?: FlagId;
|
|
11
|
+
/** Marks whether the flag should render as an AutoDismissFlag */
|
|
12
|
+
isAutoDismiss?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare type FlagArgs = Combine<CreateFlagArgs, {
|
|
15
|
+
id: FlagId;
|
|
16
|
+
}>;
|
|
17
|
+
export declare type DismissFn = () => void;
|
|
18
|
+
export declare type FlagAPI = {
|
|
19
|
+
showFlag: (args: CreateFlagArgs) => DismissFn;
|
|
20
|
+
};
|
|
21
|
+
export declare function useFlags(): FlagAPI;
|
|
22
|
+
export declare function FlagsProvider({ children }: {
|
|
23
|
+
children: React.ReactNode;
|
|
24
|
+
}): JSX.Element;
|
|
25
|
+
export declare const withFlagsProvider: (fn: () => React.ReactNode) => React.ReactNode;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default } from './flag';
|
|
2
|
+
export { default as AutoDismissFlag } from './auto-dismiss-flag';
|
|
3
|
+
export { default as FlagGroup } from './flag-group';
|
|
4
|
+
export { useFlags, withFlagsProvider, FlagsProvider } from './flag-provider';
|
|
5
|
+
export type { CreateFlagArgs, DismissFn, FlagAPI, FlagArgs, } from './flag-provider';
|
|
6
|
+
export type { FlagProps, ActionsType, AppearanceTypes } from './types';
|