@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/LICENSE
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Copyright 2019 Atlassian Pty Ltd
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Flag
|
|
2
|
+
|
|
3
|
+
A flag is used for confirmations, alerts, and acknowledgments that require minimal user interaction, often displayed using a flag group.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
yarn add @atlaskit/flag
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
Detailed docs and example usage can be found [here](https://atlassian.design/components/flag/).
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import InfoIcon from '@atlaskit/icon/glyph/info';
|
|
4
|
+
|
|
5
|
+
import { AutoDismissFlag } from '../src';
|
|
6
|
+
|
|
7
|
+
export default function FlagInfo() {
|
|
8
|
+
return (
|
|
9
|
+
<AutoDismissFlag
|
|
10
|
+
appearance="info"
|
|
11
|
+
icon={<InfoIcon label="Info" />}
|
|
12
|
+
id="info"
|
|
13
|
+
title="Where is everybody?"
|
|
14
|
+
description="There’s no one in this project. Add yourself or your team to get the party started."
|
|
15
|
+
actions={[]}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import InfoIcon from '@atlaskit/icon/glyph/info';
|
|
4
|
+
|
|
5
|
+
import Flag from '../src';
|
|
6
|
+
|
|
7
|
+
export default function FlagInfo() {
|
|
8
|
+
return (
|
|
9
|
+
<Flag
|
|
10
|
+
appearance="info"
|
|
11
|
+
icon={<InfoIcon label="Info" />}
|
|
12
|
+
id="info"
|
|
13
|
+
title="Where is everybody?"
|
|
14
|
+
description="There’s no one in this project. Add yourself or your team to get the party started."
|
|
15
|
+
actions={[]}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import SuccessIcon from '@atlaskit/icon/glyph/check-circle';
|
|
4
|
+
import { G400 } from '@atlaskit/theme/colors';
|
|
5
|
+
|
|
6
|
+
import Flag, { FlagGroup } from '../src';
|
|
7
|
+
|
|
8
|
+
export default () => (
|
|
9
|
+
<FlagGroup>
|
|
10
|
+
<Flag
|
|
11
|
+
appearance="success"
|
|
12
|
+
icon={<SuccessIcon label="Success" secondaryColor={G400} />}
|
|
13
|
+
id="success"
|
|
14
|
+
key="success"
|
|
15
|
+
title="Connected"
|
|
16
|
+
description="All wires now hooked up."
|
|
17
|
+
actions={[{ content: 'Alrighty then', onClick: () => {} }]}
|
|
18
|
+
/>
|
|
19
|
+
</FlagGroup>
|
|
20
|
+
);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = exports.AUTO_DISMISS_SECONDS = void 0;
|
|
11
|
+
|
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
|
|
16
|
+
var _usePlatformLeafEventHandler = require("@atlaskit/analytics-next/usePlatformLeafEventHandler");
|
|
17
|
+
|
|
18
|
+
var _flag = _interopRequireDefault(require("./flag"));
|
|
19
|
+
|
|
20
|
+
var _flagGroup = require("./flag-group");
|
|
21
|
+
|
|
22
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
|
+
|
|
24
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
|
+
|
|
26
|
+
var packageName = "@atlaskit/flag";
|
|
27
|
+
var packageVersion = "14.4.1";
|
|
28
|
+
var AUTO_DISMISS_SECONDS = 8;
|
|
29
|
+
exports.AUTO_DISMISS_SECONDS = AUTO_DISMISS_SECONDS;
|
|
30
|
+
|
|
31
|
+
function noop() {}
|
|
32
|
+
|
|
33
|
+
var AutoDismissFlag = function AutoDismissFlag(props) {
|
|
34
|
+
var id = props.id,
|
|
35
|
+
analyticsContext = props.analyticsContext,
|
|
36
|
+
_props$onDismissed = props.onDismissed,
|
|
37
|
+
onDismissedProp = _props$onDismissed === void 0 ? noop : _props$onDismissed;
|
|
38
|
+
var autoDismissTimer = (0, _react.useRef)(null);
|
|
39
|
+
|
|
40
|
+
var _useFlagGroup = (0, _flagGroup.useFlagGroup)(),
|
|
41
|
+
onDismissedFromFlagGroup = _useFlagGroup.onDismissed,
|
|
42
|
+
isDismissAllowed = _useFlagGroup.isDismissAllowed;
|
|
43
|
+
|
|
44
|
+
var onDismissed = (0, _react.useCallback)(function (id, analyticsEvent) {
|
|
45
|
+
onDismissedProp(id, analyticsEvent);
|
|
46
|
+
onDismissedFromFlagGroup(id, analyticsEvent);
|
|
47
|
+
}, [onDismissedProp, onDismissedFromFlagGroup]);
|
|
48
|
+
var onDismissedAnalytics = (0, _usePlatformLeafEventHandler.usePlatformLeafEventHandler)({
|
|
49
|
+
fn: onDismissed,
|
|
50
|
+
action: 'dismissed',
|
|
51
|
+
analyticsData: analyticsContext,
|
|
52
|
+
componentName: 'flag',
|
|
53
|
+
packageName: packageName,
|
|
54
|
+
packageVersion: packageVersion
|
|
55
|
+
});
|
|
56
|
+
var isAutoDismissAllowed = isDismissAllowed && onDismissed;
|
|
57
|
+
var dismissFlag = (0, _react.useCallback)(function () {
|
|
58
|
+
if (isAutoDismissAllowed) {
|
|
59
|
+
onDismissedAnalytics(id);
|
|
60
|
+
}
|
|
61
|
+
}, [id, onDismissedAnalytics, isAutoDismissAllowed]);
|
|
62
|
+
var stopAutoDismissTimer = (0, _react.useCallback)(function () {
|
|
63
|
+
if (autoDismissTimer.current) {
|
|
64
|
+
clearTimeout(autoDismissTimer.current);
|
|
65
|
+
autoDismissTimer.current = null;
|
|
66
|
+
}
|
|
67
|
+
}, []);
|
|
68
|
+
var startAutoDismissTimer = (0, _react.useCallback)(function () {
|
|
69
|
+
if (!isAutoDismissAllowed) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
stopAutoDismissTimer();
|
|
74
|
+
autoDismissTimer.current = window.setTimeout(dismissFlag, AUTO_DISMISS_SECONDS * 1000);
|
|
75
|
+
}, [dismissFlag, stopAutoDismissTimer, isAutoDismissAllowed]);
|
|
76
|
+
(0, _react.useEffect)(function () {
|
|
77
|
+
startAutoDismissTimer();
|
|
78
|
+
return stopAutoDismissTimer;
|
|
79
|
+
}, [startAutoDismissTimer, stopAutoDismissTimer]);
|
|
80
|
+
return /*#__PURE__*/_react.default.createElement(_flag.default, (0, _extends2.default)({}, props, {
|
|
81
|
+
onMouseOver: stopAutoDismissTimer,
|
|
82
|
+
onFocus: stopAutoDismissTimer,
|
|
83
|
+
onMouseOut: startAutoDismissTimer,
|
|
84
|
+
onBlur: startAutoDismissTimer
|
|
85
|
+
}));
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
var _default = AutoDismissFlag;
|
|
89
|
+
exports.default = _default;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
11
|
+
|
|
12
|
+
var _core = require("@emotion/core");
|
|
13
|
+
|
|
14
|
+
var _motion = require("@atlaskit/motion");
|
|
15
|
+
|
|
16
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
17
|
+
|
|
18
|
+
var _templateObject;
|
|
19
|
+
|
|
20
|
+
var paddingLeft = (0, _constants.gridSize)() * 5;
|
|
21
|
+
|
|
22
|
+
var Expander = function Expander(_ref) {
|
|
23
|
+
var children = _ref.children,
|
|
24
|
+
isExpanded = _ref.isExpanded,
|
|
25
|
+
testId = _ref.testId;
|
|
26
|
+
// Need to always render the ExpanderInternal otherwise the
|
|
27
|
+
// reveal transition doesn't happen. We can't use CSS animation for
|
|
28
|
+
// the the reveal because we don't know the height of the content.
|
|
29
|
+
return (0, _core.jsx)("div", {
|
|
30
|
+
"aria-hidden": !isExpanded,
|
|
31
|
+
css: (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n max-height: ", "px;\n transition: max-height 0.3s;\n display: flex;\n flex: 1 1 100%;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n padding: 0 0 0 ", "px;\n "])), isExpanded ? 150 : 0, paddingLeft),
|
|
32
|
+
"data-testid": testId && "".concat(testId, "-expander")
|
|
33
|
+
}, (0, _core.jsx)(_motion.ExitingPersistence, {
|
|
34
|
+
appear: true
|
|
35
|
+
}, isExpanded && (0, _core.jsx)(_motion.FadeIn, null, function (props) {
|
|
36
|
+
return (0, _core.jsx)("div", props, children);
|
|
37
|
+
})));
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
var _default = Expander;
|
|
41
|
+
exports.default = _default;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
11
|
+
|
|
12
|
+
var _core = require("@emotion/core");
|
|
13
|
+
|
|
14
|
+
var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
|
|
15
|
+
|
|
16
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
17
|
+
|
|
18
|
+
var _constants2 = require("./constants");
|
|
19
|
+
|
|
20
|
+
var _theme = require("./theme");
|
|
21
|
+
|
|
22
|
+
var _templateObject, _templateObject2, _templateObject3;
|
|
23
|
+
|
|
24
|
+
var gridSize = (0, _constants.gridSize)();
|
|
25
|
+
var separatorWidth = gridSize * 2;
|
|
26
|
+
var defaultAppearanceTranslate = gridSize / 4;
|
|
27
|
+
|
|
28
|
+
var FlagActions = function FlagActions(props) {
|
|
29
|
+
var _props$appearance = props.appearance,
|
|
30
|
+
appearance = _props$appearance === void 0 ? _constants2.DEFAULT_APPEARANCE : _props$appearance,
|
|
31
|
+
_props$actions = props.actions,
|
|
32
|
+
actions = _props$actions === void 0 ? [] : _props$actions,
|
|
33
|
+
linkComponent = props.linkComponent,
|
|
34
|
+
mode = props.mode,
|
|
35
|
+
testId = props.testId;
|
|
36
|
+
|
|
37
|
+
if (!actions.length) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var isBold = appearance !== _constants2.DEFAULT_APPEARANCE;
|
|
42
|
+
return (0, _core.jsx)("div", {
|
|
43
|
+
css: (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n flex-wrap: wrap;\n padding-top: ", "px;\n transform: ", ";\n align-items: center;\n "])), gridSize, appearance === _constants2.DEFAULT_APPEARANCE ? "translateX(-".concat(defaultAppearanceTranslate, "px)") : 0),
|
|
44
|
+
"data-testid": testId && "".concat(testId, "-actions")
|
|
45
|
+
}, actions.map(function (action, index) {
|
|
46
|
+
return [index && !isBold ? (0, _core.jsx)("div", {
|
|
47
|
+
css: (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n text-align: center;\n display: inline-block;\n width: ", "px;\n "])), separatorWidth),
|
|
48
|
+
key: index + 0.5
|
|
49
|
+
}, "\xB7") : '', (0, _core.jsx)(_customThemeButton.default, {
|
|
50
|
+
onClick: action.onClick,
|
|
51
|
+
href: action.href,
|
|
52
|
+
target: action.target,
|
|
53
|
+
appearance: isBold ? 'default' : 'link',
|
|
54
|
+
component: linkComponent,
|
|
55
|
+
spacing: "compact",
|
|
56
|
+
testId: action.testId,
|
|
57
|
+
key: index,
|
|
58
|
+
css: (0, _core.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n &&,\n a&& {\n margin-left: ", "px;\n font-weight: 500;\n padding: 0 ", "px !important;\n background: ", ";\n color: ", " !important;\n }\n &&:focus,\n a&&:focus {\n box-shadow: 0 0 0 2px ", ";\n }\n &&:hover,\n &&:active,\n a&&:hover,\n a&&:active {\n text-decoration: underline;\n }\n "])), index && isBold ? gridSize : 0, appearance === 'normal' ? 0 : gridSize, (0, _theme.getActionBackground)(appearance, mode), (0, _theme.getActionColor)(appearance, mode), (0, _theme.getFlagFocusRingColor)(appearance, mode))
|
|
59
|
+
}, action.content)];
|
|
60
|
+
}));
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
var _default = FlagActions;
|
|
64
|
+
exports.default = _default;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useFlagGroup = useFlagGroup;
|
|
9
|
+
exports.default = exports.FlagGroupContext = exports.flagAnimationTime = exports.flagWidth = void 0;
|
|
10
|
+
|
|
11
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
12
|
+
|
|
13
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
14
|
+
|
|
15
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
16
|
+
|
|
17
|
+
var _react = require("react");
|
|
18
|
+
|
|
19
|
+
var _core = require("@emotion/core");
|
|
20
|
+
|
|
21
|
+
var _motion = require("@atlaskit/motion");
|
|
22
|
+
|
|
23
|
+
var _portal = _interopRequireDefault(require("@atlaskit/portal"));
|
|
24
|
+
|
|
25
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
26
|
+
|
|
27
|
+
var _templateObject, _templateObject2, _templateObject3;
|
|
28
|
+
|
|
29
|
+
var gridSize = (0, _constants.gridSize)();
|
|
30
|
+
var flagWidth = gridSize * 50;
|
|
31
|
+
exports.flagWidth = flagWidth;
|
|
32
|
+
var flagAnimationTime = 400;
|
|
33
|
+
exports.flagAnimationTime = flagAnimationTime;
|
|
34
|
+
var flagBottom = gridSize * 6;
|
|
35
|
+
var flagLeft = gridSize * 10;
|
|
36
|
+
|
|
37
|
+
function noop() {}
|
|
38
|
+
|
|
39
|
+
var defaultFlagGroupContext = {
|
|
40
|
+
onDismissed: function onDismissed() {},
|
|
41
|
+
isDismissAllowed: false
|
|
42
|
+
};
|
|
43
|
+
var FlagGroupContext = /*#__PURE__*/(0, _react.createContext)(defaultFlagGroupContext);
|
|
44
|
+
exports.FlagGroupContext = FlagGroupContext;
|
|
45
|
+
|
|
46
|
+
function useFlagGroup() {
|
|
47
|
+
return (0, _react.useContext)(FlagGroupContext);
|
|
48
|
+
} // transition: none is set on first-of-type to prevent a bug in Firefox
|
|
49
|
+
// that causes a broken transition
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
var baseStyles = "\n bottom: 0;\n position: absolute;\n width: ".concat(flagWidth, "px;\n transition: transform ").concat(flagAnimationTime, "ms ease-in-out;\n\n @media (max-width: 560px) {\n width: 100vw;\n }\n\n &:first-of-type {\n transition: none;\n transform: translate(0,0);\n }\n\n &:nth-of-type(n + 2) {\n animation-duration: 0ms;\n transform: translateX(0) translateY(100%) translateY(").concat(2 * gridSize, "px);\n }\n\n /* Layer the 'primary' flag above the 'secondary' flag */\n &:nth-of-type(1) {\n z-index: 5;\n }\n &:nth-of-type(2) {\n z-index: 4;\n }\n\n &:nth-of-type(n + 4) {\n visibility: hidden;\n }\n");
|
|
53
|
+
|
|
54
|
+
var FlagGroup = function FlagGroup(props) {
|
|
55
|
+
var id = props.id,
|
|
56
|
+
_props$label = props.label,
|
|
57
|
+
label = _props$label === void 0 ? 'Flag notifications' : _props$label,
|
|
58
|
+
_props$labelTag = props.labelTag,
|
|
59
|
+
LabelTag = _props$labelTag === void 0 ? 'h2' : _props$labelTag,
|
|
60
|
+
children = props.children,
|
|
61
|
+
_props$onDismissed = props.onDismissed,
|
|
62
|
+
onDismissed = _props$onDismissed === void 0 ? noop : _props$onDismissed;
|
|
63
|
+
var hasFlags = Array.isArray(children) ? children.length > 0 : Boolean(children);
|
|
64
|
+
var dismissFlagContext = (0, _react.useMemo)(function () {
|
|
65
|
+
return {
|
|
66
|
+
onDismissed: onDismissed,
|
|
67
|
+
isDismissAllowed: true
|
|
68
|
+
};
|
|
69
|
+
}, [onDismissed]);
|
|
70
|
+
|
|
71
|
+
var renderChildren = function renderChildren() {
|
|
72
|
+
return children && (0, _typeof2.default)(children) === 'object' ? _react.Children.map(children, function (flag, index) {
|
|
73
|
+
var isDismissAllowed = index === 0;
|
|
74
|
+
return (0, _core.jsx)(_motion.SlideIn, {
|
|
75
|
+
enterFrom: 'left',
|
|
76
|
+
fade: 'inout',
|
|
77
|
+
duration: flagAnimationTime,
|
|
78
|
+
animationTimingFunction: function animationTimingFunction() {
|
|
79
|
+
return _motion.easeIn;
|
|
80
|
+
}
|
|
81
|
+
}, function (props) {
|
|
82
|
+
return (0, _core.jsx)("div", (0, _extends2.default)({}, props, {
|
|
83
|
+
css: (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n ", "\n ", "\n "])), baseStyles, isDismissAllowed ? // Transform needed to push up while 1st flag is leaving
|
|
84
|
+
// Exiting time should match the exiting time of motion so is halved
|
|
85
|
+
"\n && + * {\n transform: translate(0, 0);\n transition-duration: ".concat(flagAnimationTime / 2, "ms\n }") : '')
|
|
86
|
+
}), (0, _core.jsx)(FlagGroupContext.Provider, {
|
|
87
|
+
value: // Only the first flag should be able to be dismissed.
|
|
88
|
+
isDismissAllowed ? dismissFlagContext : defaultFlagGroupContext
|
|
89
|
+
}, flag));
|
|
90
|
+
});
|
|
91
|
+
}) : false;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
return (0, _core.jsx)(_portal.default, {
|
|
95
|
+
zIndex: _constants.layers.flag()
|
|
96
|
+
}, (0, _core.jsx)("div", {
|
|
97
|
+
id: id,
|
|
98
|
+
css: (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n bottom: ", "px;\n left: ", "px;\n position: fixed;\n z-index: ", ";\n @media (max-width: 560px) {\n bottom: 0;\n left: 0;\n }\n "])), flagBottom, flagLeft, _constants.layers.flag())
|
|
99
|
+
}, hasFlags ? (0, _core.jsx)(LabelTag, {
|
|
100
|
+
css: (0, _core.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n border: 0;\n clip: rect(1px, 1px, 1px, 1px);\n height: 1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n "])))
|
|
101
|
+
}, label) : null, (0, _core.jsx)(_motion.ExitingPersistence, {
|
|
102
|
+
appear: false
|
|
103
|
+
}, renderChildren())));
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
var _default = FlagGroup;
|
|
107
|
+
exports.default = _default;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.useFlags = useFlags;
|
|
11
|
+
exports.FlagsProvider = FlagsProvider;
|
|
12
|
+
exports.withFlagsProvider = void 0;
|
|
13
|
+
|
|
14
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
15
|
+
|
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
17
|
+
|
|
18
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
19
|
+
|
|
20
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
+
|
|
22
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
25
|
+
|
|
26
|
+
var _autoDismissFlag = _interopRequireDefault(require("./auto-dismiss-flag"));
|
|
27
|
+
|
|
28
|
+
var _flag = _interopRequireDefault(require("./flag"));
|
|
29
|
+
|
|
30
|
+
var _flagGroup = _interopRequireDefault(require("./flag-group"));
|
|
31
|
+
|
|
32
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
|
+
|
|
34
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
35
|
+
|
|
36
|
+
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; }
|
|
37
|
+
|
|
38
|
+
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) { (0, _defineProperty2.default)(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; }
|
|
39
|
+
|
|
40
|
+
var FlagContext = /*#__PURE__*/_react.default.createContext(null);
|
|
41
|
+
|
|
42
|
+
function useFlags() {
|
|
43
|
+
var api = (0, _react.useContext)(FlagContext);
|
|
44
|
+
|
|
45
|
+
if (api == null) {
|
|
46
|
+
throw new Error('Unable to find FlagProviderContext');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return api;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
var getUniqueId = function () {
|
|
53
|
+
var count = 0;
|
|
54
|
+
return function () {
|
|
55
|
+
return "flag-provider-unique-id:".concat(count++);
|
|
56
|
+
};
|
|
57
|
+
}();
|
|
58
|
+
|
|
59
|
+
function FlagsProvider(_ref) {
|
|
60
|
+
var children = _ref.children;
|
|
61
|
+
|
|
62
|
+
var _useState = (0, _react.useState)([]),
|
|
63
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
64
|
+
flags = _useState2[0],
|
|
65
|
+
setFlags = _useState2[1];
|
|
66
|
+
|
|
67
|
+
var removeFlag = (0, _react.useCallback)(function (id) {
|
|
68
|
+
setFlags(function (current) {
|
|
69
|
+
return current.slice(0).filter(function (flag) {
|
|
70
|
+
return flag.id !== id;
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}, []);
|
|
74
|
+
var api = (0, _react.useMemo)(function () {
|
|
75
|
+
return {
|
|
76
|
+
showFlag: function show(value) {
|
|
77
|
+
var flag = _objectSpread(_objectSpread({}, value), {}, {
|
|
78
|
+
id: value.id || getUniqueId()
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
setFlags(function (current) {
|
|
82
|
+
var index = current.findIndex(function (value) {
|
|
83
|
+
return value.id === flag.id;
|
|
84
|
+
}); // If flag is not found add it
|
|
85
|
+
|
|
86
|
+
if (index === -1) {
|
|
87
|
+
return [flag].concat((0, _toConsumableArray2.default)(current));
|
|
88
|
+
} // If flag already exists with the same id, then replace it
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
var shallow = (0, _toConsumableArray2.default)(current);
|
|
92
|
+
shallow[index] = flag;
|
|
93
|
+
return shallow;
|
|
94
|
+
});
|
|
95
|
+
return function dismiss() {
|
|
96
|
+
removeFlag(flag.id);
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}, [removeFlag]);
|
|
101
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(FlagContext.Provider, {
|
|
102
|
+
value: api
|
|
103
|
+
}, children), /*#__PURE__*/_react.default.createElement(_flagGroup.default, {
|
|
104
|
+
onDismissed: removeFlag
|
|
105
|
+
}, flags.map(function (flag) {
|
|
106
|
+
var isAutoDismiss = flag.isAutoDismiss,
|
|
107
|
+
restProps = (0, _objectWithoutProperties2.default)(flag, ["isAutoDismiss"]);
|
|
108
|
+
var FlagType = isAutoDismiss ? _autoDismissFlag.default : _flag.default;
|
|
109
|
+
return /*#__PURE__*/_react.default.createElement(FlagType, (0, _extends2.default)({}, restProps, {
|
|
110
|
+
key: flag.id
|
|
111
|
+
}));
|
|
112
|
+
})));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
var withFlagsProvider = function withFlagsProvider(fn) {
|
|
116
|
+
return /*#__PURE__*/_react.default.createElement(FlagsProvider, null, fn());
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
exports.withFlagsProvider = withFlagsProvider;
|