@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.
Files changed (60) hide show
  1. package/CHANGELOG.md +1244 -0
  2. package/LICENSE +13 -0
  3. package/README.md +13 -0
  4. package/__perf__/autodismiss.tsx +18 -0
  5. package/__perf__/default.tsx +18 -0
  6. package/__perf__/withFlagGroup.tsx +20 -0
  7. package/auto-dismiss-flag/package.json +7 -0
  8. package/constants/package.json +7 -0
  9. package/dist/cjs/auto-dismiss-flag.js +89 -0
  10. package/dist/cjs/constants.js +8 -0
  11. package/dist/cjs/expander.js +41 -0
  12. package/dist/cjs/flag-actions.js +64 -0
  13. package/dist/cjs/flag-group.js +107 -0
  14. package/dist/cjs/flag-provider.js +119 -0
  15. package/dist/cjs/flag.js +219 -0
  16. package/dist/cjs/index.js +51 -0
  17. package/dist/cjs/theme.js +160 -0
  18. package/dist/cjs/types.js +10 -0
  19. package/dist/cjs/version.json +5 -0
  20. package/dist/es2019/auto-dismiss-flag.js +67 -0
  21. package/dist/es2019/constants.js +1 -0
  22. package/dist/es2019/expander.js +33 -0
  23. package/dist/es2019/flag-actions.js +73 -0
  24. package/dist/es2019/flag-group.js +130 -0
  25. package/dist/es2019/flag-provider.js +68 -0
  26. package/dist/es2019/flag.js +245 -0
  27. package/dist/es2019/index.js +4 -0
  28. package/dist/es2019/theme.js +119 -0
  29. package/dist/es2019/types.js +2 -0
  30. package/dist/es2019/version.json +5 -0
  31. package/dist/esm/auto-dismiss-flag.js +67 -0
  32. package/dist/esm/constants.js +1 -0
  33. package/dist/esm/expander.js +29 -0
  34. package/dist/esm/flag-actions.js +50 -0
  35. package/dist/esm/flag-group.js +85 -0
  36. package/dist/esm/flag-provider.js +92 -0
  37. package/dist/esm/flag.js +195 -0
  38. package/dist/esm/index.js +4 -0
  39. package/dist/esm/theme.js +129 -0
  40. package/dist/esm/types.js +2 -0
  41. package/dist/esm/version.json +5 -0
  42. package/dist/types/auto-dismiss-flag.d.ts +4 -0
  43. package/dist/types/constants.d.ts +2 -0
  44. package/dist/types/expander.d.ts +9 -0
  45. package/dist/types/flag-actions.d.ts +14 -0
  46. package/dist/types/flag-group.d.ts +27 -0
  47. package/dist/types/flag-provider.d.ts +26 -0
  48. package/dist/types/flag.d.ts +3 -0
  49. package/dist/types/index.d.ts +6 -0
  50. package/dist/types/theme.d.ts +9 -0
  51. package/dist/types/types.d.ts +79 -0
  52. package/expander/package.json +7 -0
  53. package/extract-react-types/show-flag-args.tsx +5 -0
  54. package/flag/package.json +7 -0
  55. package/flag-actions/package.json +7 -0
  56. package/flag-group/package.json +7 -0
  57. package/flag-provider/package.json +7 -0
  58. package/package.json +80 -0
  59. package/theme/package.json +7 -0
  60. 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,7 @@
1
+ {
2
+ "name": "@atlaskit/flag/auto-dismiss-flag",
3
+ "main": "../dist/cjs/auto-dismiss-flag.js",
4
+ "module": "../dist/esm/auto-dismiss-flag.js",
5
+ "module:es2019": "../dist/es2019/auto-dismiss-flag.js",
6
+ "types": "../dist/types/auto-dismiss-flag.d.ts"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@atlaskit/flag/constants",
3
+ "main": "../dist/cjs/constants.js",
4
+ "module": "../dist/esm/constants.js",
5
+ "module:es2019": "../dist/es2019/constants.js",
6
+ "types": "../dist/types/constants.d.ts"
7
+ }
@@ -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,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DEFAULT_APPEARANCE = void 0;
7
+ var DEFAULT_APPEARANCE = 'normal';
8
+ exports.DEFAULT_APPEARANCE = DEFAULT_APPEARANCE;
@@ -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;