@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
@@ -0,0 +1,4 @@
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';
@@ -0,0 +1,119 @@
1
+ import * as colors from '@atlaskit/theme/colors';
2
+ const 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 const getFlagBackgroundColor = (appearance, mode) => flagBackgroundColor[appearance][mode];
25
+ export const flagBorderColor = colors.N60A;
26
+ const flagTextColor = {
27
+ error: {
28
+ light: colors.N0,
29
+ dark: colors.DN40
30
+ },
31
+ info: {
32
+ light: colors.N0,
33
+ dark: colors.DN600
34
+ },
35
+ normal: {
36
+ light: colors.N500,
37
+ dark: colors.DN600
38
+ },
39
+ success: {
40
+ light: colors.N0,
41
+ dark: colors.DN40
42
+ },
43
+ warning: {
44
+ light: colors.N700,
45
+ dark: colors.DN40
46
+ }
47
+ };
48
+ export const getFlagTextColor = (appearance, mode) => flagTextColor[appearance][mode];
49
+ export const flagShadowColor = colors.N50A;
50
+ const flagFocusRingColor = {
51
+ error: {
52
+ light: colors.N40,
53
+ dark: colors.N40
54
+ },
55
+ info: {
56
+ light: colors.N40,
57
+ dark: colors.N40
58
+ },
59
+ normal: {
60
+ light: colors.B100,
61
+ dark: colors.B100
62
+ },
63
+ success: {
64
+ light: colors.N40,
65
+ dark: colors.N40
66
+ },
67
+ warning: {
68
+ light: colors.N200,
69
+ dark: colors.N200
70
+ }
71
+ };
72
+ export const getFlagFocusRingColor = (appearance, mode) => flagFocusRingColor[appearance][mode];
73
+ const lightButtonBackground = 'rgba(255, 255, 255, 0.08)';
74
+ const actionBackground = {
75
+ success: {
76
+ light: lightButtonBackground,
77
+ dark: colors.N30A
78
+ },
79
+ info: {
80
+ light: lightButtonBackground,
81
+ dark: lightButtonBackground
82
+ },
83
+ error: {
84
+ light: lightButtonBackground,
85
+ dark: colors.N30A
86
+ },
87
+ warning: {
88
+ light: colors.N30A,
89
+ dark: colors.N30A
90
+ },
91
+ normal: {
92
+ light: 'none',
93
+ dark: 'none'
94
+ }
95
+ };
96
+ const actionColor = {
97
+ success: {
98
+ light: colors.N0,
99
+ dark: colors.DN40
100
+ },
101
+ info: {
102
+ light: colors.N0,
103
+ dark: colors.DN600
104
+ },
105
+ error: {
106
+ light: colors.N0,
107
+ dark: colors.DN600
108
+ },
109
+ warning: {
110
+ light: colors.N700,
111
+ dark: colors.DN40
112
+ },
113
+ normal: {
114
+ light: colors.B400,
115
+ dark: colors.B100
116
+ }
117
+ };
118
+ export const getActionBackground = (appearance, mode) => actionBackground[appearance][mode];
119
+ export const getActionColor = (appearance, mode) => actionColor[appearance][mode];
@@ -0,0 +1,2 @@
1
+ // exported for testing - keep in sync from `type AppearanceTypes`
2
+ export const AppearanceArray = ['error', 'info', 'normal', 'success', 'warning']; // CreateFlagsArg makes id optional so define this prop separately
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "@atlaskit/flag",
3
+ "version": "14.4.1",
4
+ "sideEffects": false
5
+ }
@@ -0,0 +1,67 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { useCallback, useEffect, useRef } from 'react';
3
+ import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next/usePlatformLeafEventHandler';
4
+ import Flag from './flag';
5
+ import { useFlagGroup } from './flag-group';
6
+ var packageName = "@atlaskit/flag";
7
+ var packageVersion = "14.4.1";
8
+ export var AUTO_DISMISS_SECONDS = 8;
9
+
10
+ function noop() {}
11
+
12
+ var AutoDismissFlag = function AutoDismissFlag(props) {
13
+ var id = props.id,
14
+ analyticsContext = props.analyticsContext,
15
+ _props$onDismissed = props.onDismissed,
16
+ onDismissedProp = _props$onDismissed === void 0 ? noop : _props$onDismissed;
17
+ var autoDismissTimer = useRef(null);
18
+
19
+ var _useFlagGroup = useFlagGroup(),
20
+ onDismissedFromFlagGroup = _useFlagGroup.onDismissed,
21
+ isDismissAllowed = _useFlagGroup.isDismissAllowed;
22
+
23
+ var onDismissed = useCallback(function (id, analyticsEvent) {
24
+ onDismissedProp(id, analyticsEvent);
25
+ onDismissedFromFlagGroup(id, analyticsEvent);
26
+ }, [onDismissedProp, onDismissedFromFlagGroup]);
27
+ var onDismissedAnalytics = usePlatformLeafEventHandler({
28
+ fn: onDismissed,
29
+ action: 'dismissed',
30
+ analyticsData: analyticsContext,
31
+ componentName: 'flag',
32
+ packageName: packageName,
33
+ packageVersion: packageVersion
34
+ });
35
+ var isAutoDismissAllowed = isDismissAllowed && onDismissed;
36
+ var dismissFlag = useCallback(function () {
37
+ if (isAutoDismissAllowed) {
38
+ onDismissedAnalytics(id);
39
+ }
40
+ }, [id, onDismissedAnalytics, isAutoDismissAllowed]);
41
+ var stopAutoDismissTimer = useCallback(function () {
42
+ if (autoDismissTimer.current) {
43
+ clearTimeout(autoDismissTimer.current);
44
+ autoDismissTimer.current = null;
45
+ }
46
+ }, []);
47
+ var startAutoDismissTimer = useCallback(function () {
48
+ if (!isAutoDismissAllowed) {
49
+ return;
50
+ }
51
+
52
+ stopAutoDismissTimer();
53
+ autoDismissTimer.current = window.setTimeout(dismissFlag, AUTO_DISMISS_SECONDS * 1000);
54
+ }, [dismissFlag, stopAutoDismissTimer, isAutoDismissAllowed]);
55
+ useEffect(function () {
56
+ startAutoDismissTimer();
57
+ return stopAutoDismissTimer;
58
+ }, [startAutoDismissTimer, stopAutoDismissTimer]);
59
+ return /*#__PURE__*/React.createElement(Flag, _extends({}, props, {
60
+ onMouseOver: stopAutoDismissTimer,
61
+ onFocus: stopAutoDismissTimer,
62
+ onMouseOut: startAutoDismissTimer,
63
+ onBlur: startAutoDismissTimer
64
+ }));
65
+ };
66
+
67
+ export default AutoDismissFlag;
@@ -0,0 +1 @@
1
+ export var DEFAULT_APPEARANCE = 'normal';
@@ -0,0 +1,29 @@
1
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
+
3
+ var _templateObject;
4
+
5
+ /** @jsx jsx */
6
+ import { css, jsx } from '@emotion/core';
7
+ import { ExitingPersistence, FadeIn } from '@atlaskit/motion';
8
+ import { gridSize } from '@atlaskit/theme/constants';
9
+ var paddingLeft = gridSize() * 5;
10
+
11
+ var Expander = function Expander(_ref) {
12
+ var children = _ref.children,
13
+ isExpanded = _ref.isExpanded,
14
+ testId = _ref.testId;
15
+ // Need to always render the ExpanderInternal otherwise the
16
+ // reveal transition doesn't happen. We can't use CSS animation for
17
+ // the the reveal because we don't know the height of the content.
18
+ return jsx("div", {
19
+ "aria-hidden": !isExpanded,
20
+ css: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\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),
21
+ "data-testid": testId && "".concat(testId, "-expander")
22
+ }, jsx(ExitingPersistence, {
23
+ appear: true
24
+ }, isExpanded && jsx(FadeIn, null, function (props) {
25
+ return jsx("div", props, children);
26
+ })));
27
+ };
28
+
29
+ export default Expander;
@@ -0,0 +1,50 @@
1
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
+
3
+ var _templateObject, _templateObject2, _templateObject3;
4
+
5
+ /** @jsx jsx */
6
+ import { css, jsx } from '@emotion/core';
7
+ import Button from '@atlaskit/button/custom-theme-button';
8
+ import { gridSize as getGridSize } from '@atlaskit/theme/constants';
9
+ import { DEFAULT_APPEARANCE } from './constants';
10
+ import { getActionBackground, getActionColor, getFlagFocusRingColor } from './theme';
11
+ var gridSize = getGridSize();
12
+ var separatorWidth = gridSize * 2;
13
+ var defaultAppearanceTranslate = gridSize / 4;
14
+
15
+ var FlagActions = function FlagActions(props) {
16
+ var _props$appearance = props.appearance,
17
+ appearance = _props$appearance === void 0 ? DEFAULT_APPEARANCE : _props$appearance,
18
+ _props$actions = props.actions,
19
+ actions = _props$actions === void 0 ? [] : _props$actions,
20
+ linkComponent = props.linkComponent,
21
+ mode = props.mode,
22
+ testId = props.testId;
23
+
24
+ if (!actions.length) {
25
+ return null;
26
+ }
27
+
28
+ var isBold = appearance !== DEFAULT_APPEARANCE;
29
+ return jsx("div", {
30
+ css: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-wrap: wrap;\n padding-top: ", "px;\n transform: ", ";\n align-items: center;\n "])), gridSize, appearance === DEFAULT_APPEARANCE ? "translateX(-".concat(defaultAppearanceTranslate, "px)") : 0),
31
+ "data-testid": testId && "".concat(testId, "-actions")
32
+ }, actions.map(function (action, index) {
33
+ return [index && !isBold ? jsx("div", {
34
+ css: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n text-align: center;\n display: inline-block;\n width: ", "px;\n "])), separatorWidth),
35
+ key: index + 0.5
36
+ }, "\xB7") : '', jsx(Button, {
37
+ onClick: action.onClick,
38
+ href: action.href,
39
+ target: action.target,
40
+ appearance: isBold ? 'default' : 'link',
41
+ component: linkComponent,
42
+ spacing: "compact",
43
+ testId: action.testId,
44
+ key: index,
45
+ css: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\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, getActionBackground(appearance, mode), getActionColor(appearance, mode), getFlagFocusRingColor(appearance, mode))
46
+ }, action.content)];
47
+ }));
48
+ };
49
+
50
+ export default FlagActions;
@@ -0,0 +1,85 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
3
+ import _typeof from "@babel/runtime/helpers/typeof";
4
+
5
+ var _templateObject, _templateObject2, _templateObject3;
6
+
7
+ /** @jsx jsx */
8
+ import { Children, createContext, useContext, useMemo } from 'react';
9
+ import { css, jsx } from '@emotion/core';
10
+ import { easeIn, ExitingPersistence, SlideIn } from '@atlaskit/motion';
11
+ import Portal from '@atlaskit/portal';
12
+ import { gridSize as getGridSize, layers } from '@atlaskit/theme/constants';
13
+ var gridSize = getGridSize();
14
+ export var flagWidth = gridSize * 50;
15
+ export var flagAnimationTime = 400;
16
+ var flagBottom = gridSize * 6;
17
+ var flagLeft = gridSize * 10;
18
+
19
+ function noop() {}
20
+
21
+ var defaultFlagGroupContext = {
22
+ onDismissed: function onDismissed() {},
23
+ isDismissAllowed: false
24
+ };
25
+ export var FlagGroupContext = /*#__PURE__*/createContext(defaultFlagGroupContext);
26
+ export function useFlagGroup() {
27
+ return useContext(FlagGroupContext);
28
+ } // transition: none is set on first-of-type to prevent a bug in Firefox
29
+ // that causes a broken transition
30
+
31
+ 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");
32
+
33
+ var FlagGroup = function FlagGroup(props) {
34
+ var id = props.id,
35
+ _props$label = props.label,
36
+ label = _props$label === void 0 ? 'Flag notifications' : _props$label,
37
+ _props$labelTag = props.labelTag,
38
+ LabelTag = _props$labelTag === void 0 ? 'h2' : _props$labelTag,
39
+ children = props.children,
40
+ _props$onDismissed = props.onDismissed,
41
+ onDismissed = _props$onDismissed === void 0 ? noop : _props$onDismissed;
42
+ var hasFlags = Array.isArray(children) ? children.length > 0 : Boolean(children);
43
+ var dismissFlagContext = useMemo(function () {
44
+ return {
45
+ onDismissed: onDismissed,
46
+ isDismissAllowed: true
47
+ };
48
+ }, [onDismissed]);
49
+
50
+ var renderChildren = function renderChildren() {
51
+ return children && _typeof(children) === 'object' ? Children.map(children, function (flag, index) {
52
+ var isDismissAllowed = index === 0;
53
+ return jsx(SlideIn, {
54
+ enterFrom: 'left',
55
+ fade: 'inout',
56
+ duration: flagAnimationTime,
57
+ animationTimingFunction: function animationTimingFunction() {
58
+ return easeIn;
59
+ }
60
+ }, function (props) {
61
+ return jsx("div", _extends({}, props, {
62
+ css: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n ", "\n ", "\n "])), baseStyles, isDismissAllowed ? // Transform needed to push up while 1st flag is leaving
63
+ // Exiting time should match the exiting time of motion so is halved
64
+ "\n && + * {\n transform: translate(0, 0);\n transition-duration: ".concat(flagAnimationTime / 2, "ms\n }") : '')
65
+ }), jsx(FlagGroupContext.Provider, {
66
+ value: // Only the first flag should be able to be dismissed.
67
+ isDismissAllowed ? dismissFlagContext : defaultFlagGroupContext
68
+ }, flag));
69
+ });
70
+ }) : false;
71
+ };
72
+
73
+ return jsx(Portal, {
74
+ zIndex: layers.flag()
75
+ }, jsx("div", {
76
+ id: id,
77
+ css: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\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, layers.flag())
78
+ }, hasFlags ? jsx(LabelTag, {
79
+ css: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\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 "])))
80
+ }, label) : null, jsx(ExitingPersistence, {
81
+ appear: false
82
+ }, renderChildren())));
83
+ };
84
+
85
+ export default FlagGroup;
@@ -0,0 +1,92 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
6
+
7
+ 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; }
8
+
9
+ 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; }
10
+
11
+ import React, { useCallback, useContext, useMemo, useState } from 'react';
12
+ import AutoDismissFlag from './auto-dismiss-flag';
13
+ import Flag from './flag';
14
+ import FlagGroup from './flag-group';
15
+ var FlagContext = /*#__PURE__*/React.createContext(null);
16
+ export function useFlags() {
17
+ var api = useContext(FlagContext);
18
+
19
+ if (api == null) {
20
+ throw new Error('Unable to find FlagProviderContext');
21
+ }
22
+
23
+ return api;
24
+ }
25
+
26
+ var getUniqueId = function () {
27
+ var count = 0;
28
+ return function () {
29
+ return "flag-provider-unique-id:".concat(count++);
30
+ };
31
+ }();
32
+
33
+ export function FlagsProvider(_ref) {
34
+ var children = _ref.children;
35
+
36
+ var _useState = useState([]),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ flags = _useState2[0],
39
+ setFlags = _useState2[1];
40
+
41
+ var removeFlag = useCallback(function (id) {
42
+ setFlags(function (current) {
43
+ return current.slice(0).filter(function (flag) {
44
+ return flag.id !== id;
45
+ });
46
+ });
47
+ }, []);
48
+ var api = useMemo(function () {
49
+ return {
50
+ showFlag: function show(value) {
51
+ var flag = _objectSpread(_objectSpread({}, value), {}, {
52
+ id: value.id || getUniqueId()
53
+ });
54
+
55
+ setFlags(function (current) {
56
+ var index = current.findIndex(function (value) {
57
+ return value.id === flag.id;
58
+ }); // If flag is not found add it
59
+
60
+ if (index === -1) {
61
+ return [flag].concat(_toConsumableArray(current));
62
+ } // If flag already exists with the same id, then replace it
63
+
64
+
65
+ var shallow = _toConsumableArray(current);
66
+
67
+ shallow[index] = flag;
68
+ return shallow;
69
+ });
70
+ return function dismiss() {
71
+ removeFlag(flag.id);
72
+ };
73
+ }
74
+ };
75
+ }, [removeFlag]);
76
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FlagContext.Provider, {
77
+ value: api
78
+ }, children), /*#__PURE__*/React.createElement(FlagGroup, {
79
+ onDismissed: removeFlag
80
+ }, flags.map(function (flag) {
81
+ var isAutoDismiss = flag.isAutoDismiss,
82
+ restProps = _objectWithoutProperties(flag, ["isAutoDismiss"]);
83
+
84
+ var FlagType = isAutoDismiss ? AutoDismissFlag : Flag;
85
+ return /*#__PURE__*/React.createElement(FlagType, _extends({}, restProps, {
86
+ key: flag.id
87
+ }));
88
+ })));
89
+ }
90
+ export var withFlagsProvider = function withFlagsProvider(fn) {
91
+ return /*#__PURE__*/React.createElement(FlagsProvider, null, fn());
92
+ };