@drivy/cobalt 0.51.0 → 1.0.0-beta.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/cjs/tokens/zIndexes.js +2 -1
- package/cjs/tokens/zIndexes.js.map +1 -1
- package/components/Accordion/index.js +16 -32
- package/components/Accordion/index.js.map +1 -1
- package/components/Alerter/index.js +45 -77
- package/components/Alerter/index.js.map +1 -1
- package/components/ContainedIcon/index.js.map +1 -1
- package/components/Form/Autocomplete/index.js +176 -155
- package/components/Form/Autocomplete/index.js.map +1 -1
- package/components/Form/Slider.js +40 -19
- package/components/Form/Slider.js.map +1 -1
- package/components/Form/field.js +9 -1
- package/components/Form/field.js.map +1 -1
- package/components/Modal/ModalHeader.js +10 -7
- package/components/Modal/ModalHeader.js.map +1 -1
- package/components/Modal/index.js +33 -97
- package/components/Modal/index.js.map +1 -1
- package/components/PhotoDropzone/index.js +2 -5
- package/components/PhotoDropzone/index.js.map +1 -1
- package/components/Tabs/index.js +19 -118
- package/components/Tabs/index.js.map +1 -1
- package/index.js +3 -3
- package/package.json +5 -12
- package/src/tokens/zIndexes.js +2 -1
- package/src/tokens/zIndexes.js.map +1 -1
- package/styles/components/Accordion/index.scss +40 -19
- package/styles/components/Alerter/index.scss +42 -42
- package/styles/components/ContainedIcon/index.scss +64 -8
- package/styles/components/Form/Autocomplete/index.scss +52 -74
- package/styles/components/Form/RadioWithDetails.scss +2 -12
- package/styles/components/Form/Slider.scss +46 -55
- package/styles/components/Form/TextInput.scss +4 -0
- package/styles/components/Form/field.scss +2 -2
- package/styles/components/Modal/index.scss +82 -63
- package/styles/components/PhotoDropzone/index.scss +4 -0
- package/styles/components/Tabs/index.scss +18 -120
- package/styles/core/z-index.scss +1 -0
- package/tokens/zIndexes.js +2 -1
- package/tokens/zIndexes.js.map +1 -1
- package/types/src/components/Accordion/index.d.ts +15 -66
- package/types/src/components/Alerter/index.d.ts +8 -19
- package/types/src/components/ContainedIcon/index.d.ts +1 -1
- package/types/src/components/Form/Autocomplete/index.d.ts +38 -37
- package/types/src/components/Form/Slider.d.ts +12 -77
- package/types/src/components/Form/field.d.ts +16 -1
- package/types/src/components/Modal/ModalHeader.d.ts +1 -1
- package/types/src/components/Modal/index.d.ts +2 -2
- package/types/src/components/Tabs/index.d.ts +9 -6
- package/types/src/index.d.ts +1 -1
- package/types/src/tokens/index.d.ts +1 -0
- package/utilities.css +59 -0
- package/utils/getCobaltTailwindcssConfig.js.map +1 -1
- package/components/Alerter/Alert.js +0 -47
- package/components/Alerter/Alert.js.map +0 -1
- package/components/Modal/ModalBody.js +0 -11
- package/components/Modal/ModalBody.js.map +0 -1
- package/components/utils/Timer.js +0 -24
- package/components/utils/Timer.js.map +0 -1
- package/components/utils/dom.js +0 -8
- package/components/utils/dom.js.map +0 -1
- package/components/utils/px.js +0 -5
- package/components/utils/px.js.map +0 -1
- package/hooks/useElementHeight.js +0 -34
- package/hooks/useElementHeight.js.map +0 -1
- package/types/src/components/Alerter/Alert.d.ts +0 -9
- package/types/src/components/Modal/ModalBody.d.ts +0 -8
package/cjs/tokens/zIndexes.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zIndexes.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zIndexes.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,52 +1,36 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useId } from 'react';
|
|
2
|
+
import { Accordion as Accordion$1, useAccordionItemContext } from '@ark-ui/react';
|
|
3
|
+
export { useAccordionItemContext } from '@ark-ui/react';
|
|
2
4
|
import cx from 'classnames';
|
|
3
|
-
import { useAccordionItemContext, AccordionButton, AccordionPanel, Accordion as Accordion$1, AccordionItem as AccordionItem$1 } from '@reach/accordion';
|
|
4
|
-
export { useAccordionItemContext } from '@reach/accordion';
|
|
5
5
|
import ToggleIcon from './ToggleIcon.js';
|
|
6
|
-
import { animated, useSpring } from '@react-spring/web';
|
|
7
|
-
import useElementHeight from '../../hooks/useElementHeight.js';
|
|
8
6
|
|
|
9
|
-
const
|
|
10
|
-
const AccordionItemHeader = forwardRef(({ headingLevel = 4, className, leftToggleIcon = false, useChevron = false, children, ...props }, ref) => {
|
|
11
|
-
const { isExpanded } = useAccordionItemContext();
|
|
7
|
+
const AccordionItemHeader = ({ children, className, headingLevel = 4, leftToggleIcon, useChevron = false, ...props }) => {
|
|
12
8
|
const Heading = `h${headingLevel}`;
|
|
9
|
+
const { expanded } = useAccordionItemContext();
|
|
13
10
|
return (React.createElement(Heading, null,
|
|
14
|
-
React.createElement(
|
|
11
|
+
React.createElement(Accordion$1.ItemTrigger, { className: cx("cobalt-accordion__header", {
|
|
15
12
|
"cobalt-accordion__header--left-toggle-icon": leftToggleIcon,
|
|
16
13
|
}), ...props },
|
|
17
14
|
React.createElement("span", { className: cx("cobalt-accordion__header-content", className) }, children),
|
|
18
|
-
React.createElement(ToggleIcon, { useChevron: useChevron, isOpen:
|
|
19
|
-
}
|
|
15
|
+
React.createElement(ToggleIcon, { useChevron: useChevron, isOpen: expanded }))));
|
|
16
|
+
};
|
|
20
17
|
AccordionItemHeader.displayName = "Accordion.Item.Header";
|
|
21
|
-
const AnimatedAccordionPanel = animated(AccordionPanel);
|
|
22
18
|
const AccordionItemPanel = ({ children, className, ...props }) => {
|
|
23
|
-
|
|
24
|
-
const { ref, height } = useElementHeight();
|
|
25
|
-
const animation = useSpring({
|
|
26
|
-
opacity: isExpanded ? 1 : 0,
|
|
27
|
-
height: isExpanded ? height : 0,
|
|
28
|
-
overflow: "hidden",
|
|
29
|
-
config: accordionSpringConfig,
|
|
30
|
-
});
|
|
31
|
-
return (React.createElement(AnimatedAccordionPanel, { style: animation,
|
|
32
|
-
// We need to set hidden to false for the exit animations to work
|
|
33
|
-
// but the panel should still be hidden from the accessibility tree
|
|
34
|
-
// when the panel is closed. We'll use aria-hidden instead.
|
|
35
|
-
hidden: false, "aria-hidden": !isExpanded || undefined, ...props },
|
|
36
|
-
React.createElement("div", { ref: ref, className: cx("cobalt-accordion__panel", className) }, children)));
|
|
19
|
+
return (React.createElement(Accordion$1.ItemContent, { className: cx("cobalt-accordion__panel", className), ...props }, children));
|
|
37
20
|
};
|
|
38
21
|
AccordionItemPanel.displayName = "Accordion.Item.Panel";
|
|
39
|
-
const AccordionItem = ({ children, className, ...props }) => {
|
|
40
|
-
|
|
22
|
+
const AccordionItem = ({ children, className, value, ...props }) => {
|
|
23
|
+
const accordionItemId = value || useId();
|
|
24
|
+
return (React.createElement(Accordion$1.Item, { className: cx("cobalt-accordions-list__item", className), value: accordionItemId, ...props }, children));
|
|
41
25
|
};
|
|
42
26
|
AccordionItem.displayName = "Accordion.Item";
|
|
43
27
|
AccordionItem.Header = AccordionItemHeader;
|
|
44
28
|
AccordionItem.Panel = AccordionItemPanel;
|
|
45
|
-
const Accordion = ({ className, children,
|
|
46
|
-
|
|
47
|
-
return (React.createElement(Accordion$1, { className: cx("cobalt-accordions-list", className), collapsible: !hasIndex && collapsible, multiple: !hasIndex && multiple, index: index, ...props }, children));
|
|
29
|
+
const Accordion = ({ className, children, collapsible = true, onValueChange, ...props }) => {
|
|
30
|
+
return (React.createElement(Accordion$1.Root, { className: cx("cobalt-accordions-list", className), collapsible: collapsible, onValueChange: (details) => onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(details.value), ...props }, children));
|
|
48
31
|
};
|
|
32
|
+
Accordion.displayName = "Accordion";
|
|
49
33
|
Accordion.Item = AccordionItem;
|
|
50
34
|
|
|
51
|
-
export {
|
|
35
|
+
export { Accordion as default };
|
|
52
36
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Accordion/index.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Accordion/index.tsx"],"sourcesContent":["import React, { useId } from \"react\"\nimport {\n AccordionItemProps as ArkAccordionItemProps,\n AccordionItemTriggerProps as ArkAccordionItemTriggerProps,\n AccordionRootProps as ArkAccordionRootProps,\n Accordion as ArkAccordion,\n useAccordionItemContext,\n AccordionItemContentProps as ArkAccordionItemContentProps,\n AccordionValueChangeDetails,\n} from \"@ark-ui/react\"\nimport cx from \"classnames\"\nimport ToggleIcon from \"./ToggleIcon\"\n\nexport { useAccordionItemContext } from \"@ark-ui/react\"\n\ntype HeadingLevelMapType = {\n h2: 2\n h3: 3\n h4: 4\n h5: 5\n h6: 6\n}\n\ntype HeadingTag = keyof HeadingLevelMapType\n\nexport type AccordionItemHeaderPropsType = {\n /**\n * To improve the semantics of the markup further, the ARIA guidelines dictate\n * that each accordion item's button should be wrapped in an element with\n * role=\"heading\", or more simply, an HTML heading tag.\n */\n headingLevel?: HeadingLevelMapType[HeadingTag]\n className?: string\n leftToggleIcon?: boolean\n useChevron?: boolean\n} & ArkAccordionItemTriggerProps\n\nexport type AccordionItemPanelPropsType = ArkAccordionItemContentProps\n\nexport type AccordionItemPropsType = Omit<ArkAccordionItemProps, \"value\"> & {\n value?: ArkAccordionItemProps[\"value\"]\n}\n\nexport type AccordionPropsType = Omit<\n ArkAccordionRootProps,\n \"onValueChange\"\n> & {\n onValueChange?: (value: AccordionValueChangeDetails[\"value\"]) => void\n}\n\nconst AccordionItemHeader = ({\n children,\n className,\n headingLevel = 4,\n leftToggleIcon,\n useChevron = false,\n ...props\n}: AccordionItemHeaderPropsType) => {\n const Heading = `h${headingLevel}` as HeadingTag\n const { expanded } = useAccordionItemContext()\n\n return (\n <Heading>\n <ArkAccordion.ItemTrigger\n className={cx(\"cobalt-accordion__header\", {\n \"cobalt-accordion__header--left-toggle-icon\": leftToggleIcon,\n })}\n {...props}\n >\n <span className={cx(\"cobalt-accordion__header-content\", className)}>\n {children}\n </span>\n <ToggleIcon useChevron={useChevron} isOpen={expanded} />\n </ArkAccordion.ItemTrigger>\n </Heading>\n )\n}\n\nAccordionItemHeader.displayName = \"Accordion.Item.Header\"\n\nconst AccordionItemPanel = ({\n children,\n className,\n ...props\n}: AccordionItemPanelPropsType) => {\n return (\n <ArkAccordion.ItemContent\n className={cx(\"cobalt-accordion__panel\", className)}\n {...props}\n >\n {children}\n </ArkAccordion.ItemContent>\n )\n}\n\nAccordionItemPanel.displayName = \"Accordion.Item.Panel\"\n\nconst AccordionItem = ({\n children,\n className,\n value,\n ...props\n}: AccordionItemPropsType) => {\n const accordionItemId = value || useId()\n\n return (\n <ArkAccordion.Item\n className={cx(\"cobalt-accordions-list__item\", className)}\n value={accordionItemId}\n {...props}\n >\n {children}\n </ArkAccordion.Item>\n )\n}\nAccordionItem.displayName = \"Accordion.Item\"\nAccordionItem.Header = AccordionItemHeader\nAccordionItem.Panel = AccordionItemPanel\n\nconst Accordion = ({\n className,\n children,\n collapsible = true,\n onValueChange,\n ...props\n}: AccordionPropsType) => {\n return (\n <ArkAccordion.Root\n className={cx(\"cobalt-accordions-list\", className)}\n collapsible={collapsible}\n onValueChange={(details) => onValueChange?.(details.value)}\n {...props}\n >\n {children}\n </ArkAccordion.Root>\n )\n}\n\nAccordion.displayName = \"Accordion\"\nAccordion.Item = AccordionItem\n\nexport default Accordion\n"],"names":["ArkAccordion"],"mappings":";;;;;;AAkDA,MAAM,mBAAmB,GAAG,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,YAAY,GAAG,CAAC,EAChB,cAAc,EACd,UAAU,GAAG,KAAK,EAClB,GAAG,KAAK,EACqB,KAAI;AACjC,IAAA,MAAM,OAAO,GAAG,CAAI,CAAA,EAAA,YAAY,EAAgB,CAAA;AAChD,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,uBAAuB,EAAE,CAAA;IAE9C,QACE,oBAAC,OAAO,EAAA,IAAA;QACN,KAAC,CAAA,aAAA,CAAAA,WAAY,CAAC,WAAW,EAAA,EACvB,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE;AACxC,gBAAA,4CAA4C,EAAE,cAAc;AAC7D,aAAA,CAAC,KACE,KAAK,EAAA;YAET,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,EAC/D,EAAA,QAAQ,CACJ;AACP,YAAA,KAAA,CAAA,aAAA,CAAC,UAAU,EAAA,EAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAA,CAAI,CAC/B,CACnB,EACX;AACH,CAAC,CAAA;AAED,mBAAmB,CAAC,WAAW,GAAG,uBAAuB,CAAA;AAEzD,MAAM,kBAAkB,GAAG,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACoB,KAAI;IAChC,QACE,oBAACA,WAAY,CAAC,WAAW,EACvB,EAAA,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,EAC/C,GAAA,KAAK,IAER,QAAQ,CACgB,EAC5B;AACH,CAAC,CAAA;AAED,kBAAkB,CAAC,WAAW,GAAG,sBAAsB,CAAA;AAEvD,MAAM,aAAa,GAAG,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACe,KAAI;AAC3B,IAAA,MAAM,eAAe,GAAG,KAAK,IAAI,KAAK,EAAE,CAAA;IAExC,QACE,KAAC,CAAA,aAAA,CAAAA,WAAY,CAAC,IAAI,IAChB,SAAS,EAAE,EAAE,CAAC,8BAA8B,EAAE,SAAS,CAAC,EACxD,KAAK,EAAE,eAAe,EAAA,GAClB,KAAK,EAER,EAAA,QAAQ,CACS,EACrB;AACH,CAAC,CAAA;AACD,aAAa,CAAC,WAAW,GAAG,gBAAgB,CAAA;AAC5C,aAAa,CAAC,MAAM,GAAG,mBAAmB,CAAA;AAC1C,aAAa,CAAC,KAAK,GAAG,kBAAkB,CAAA;AAExC,MAAM,SAAS,GAAG,CAAC,EACjB,SAAS,EACT,QAAQ,EACR,WAAW,GAAG,IAAI,EAClB,aAAa,EACb,GAAG,KAAK,EACW,KAAI;AACvB,IAAA,QACE,KAAC,CAAA,aAAA,CAAAA,WAAY,CAAC,IAAI,EAAA,EAChB,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,EAClD,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,CAAC,OAAO,KAAK,aAAa,KAAb,IAAA,IAAA,aAAa,uBAAb,aAAa,CAAG,OAAO,CAAC,KAAK,CAAC,EACtD,GAAA,KAAK,IAER,QAAQ,CACS,EACrB;AACH,EAAC;AAED,SAAS,CAAC,WAAW,GAAG,WAAW,CAAA;AACnC,SAAS,CAAC,IAAI,GAAG,aAAa;;;;"}
|
|
@@ -1,88 +1,56 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { createToaster, Portal, Toaster, Toast } from '@ark-ui/react';
|
|
3
|
+
import '../Icon/index.js';
|
|
4
4
|
import cx from 'classnames';
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import 'lodash.throttle';
|
|
9
|
-
import { remToPx } from '../utils/px.js';
|
|
5
|
+
import InfoFilledIcon from '../Icon/__generated__/InfoFilledIcon.js';
|
|
6
|
+
import CheckCircleIcon from '../Icon/__generated__/CheckCircleIcon.js';
|
|
7
|
+
import ContextualWarningCircleFilledIcon from '../Icon/__generated__/ContextualWarningCircleFilledIcon.js';
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// We can't send alerts in the queue without providing a way to dismiss it
|
|
24
|
-
if (type === AlertActionType.send && hasDismiss(alertData))
|
|
25
|
-
return [alertData].concat(queue);
|
|
26
|
-
return queue;
|
|
27
|
-
}
|
|
28
|
-
const defaultSendAlert = () => initialQueue; // we never actually use this
|
|
29
|
-
const AlertsContext = React.createContext({
|
|
30
|
-
queue: initialQueue,
|
|
31
|
-
sendAlert: defaultSendAlert, // just to mock out the dispatch type and make it not optional
|
|
9
|
+
const DEFAULT_TIMEOUT = 3000;
|
|
10
|
+
const MAX_TEXT_TIMEOUT = 9000;
|
|
11
|
+
const computeTimeDurationFromText = (content) => {
|
|
12
|
+
if (typeof content !== "string")
|
|
13
|
+
return DEFAULT_TIMEOUT;
|
|
14
|
+
return Math.min(Math.max(DEFAULT_TIMEOUT, content.length * 90), MAX_TEXT_TIMEOUT);
|
|
15
|
+
};
|
|
16
|
+
const toaster = createToaster({
|
|
17
|
+
overlap: true,
|
|
18
|
+
gap: 12,
|
|
19
|
+
placement: "bottom",
|
|
20
|
+
max: 12,
|
|
32
21
|
});
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
type:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const sendAlert = (args) => {
|
|
42
|
-
const alertData = { ...args, id: nanoid() };
|
|
43
|
-
dispatch({
|
|
44
|
-
type: AlertActionType.send,
|
|
45
|
-
...alertData,
|
|
46
|
-
dismiss: () => dismissAlert(alertData),
|
|
47
|
-
});
|
|
22
|
+
const useAlerts = () => {
|
|
23
|
+
return {
|
|
24
|
+
sendAlert: ({ message, status, duration, }) => toaster.create({
|
|
25
|
+
description: message,
|
|
26
|
+
type: status,
|
|
27
|
+
placement: "bottom",
|
|
28
|
+
duration: duration !== null && duration !== void 0 ? duration : computeTimeDurationFromText(message),
|
|
29
|
+
}),
|
|
48
30
|
};
|
|
49
|
-
return React.createElement(AlertsContext.Provider, { value: { queue, sendAlert }, ...props });
|
|
50
31
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
32
|
+
const STATUS_ICONS_MAP = {
|
|
33
|
+
info: InfoFilledIcon,
|
|
34
|
+
success: CheckCircleIcon,
|
|
35
|
+
error: ContextualWarningCircleFilledIcon,
|
|
54
36
|
};
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
leave: isMobile ? remToPx(2) : remToPx(5),
|
|
62
|
-
};
|
|
63
|
-
const transition = useTransition(queue, {
|
|
64
|
-
keys: queue.map((a) => a.id),
|
|
65
|
-
from: { opacity: 0, transform: transformSpring.from },
|
|
66
|
-
enter: { opacity: 1, transform: transformSpring.enter },
|
|
67
|
-
leave: { opacity: 0, transform: transformSpring.leave },
|
|
68
|
-
config: config.stiff,
|
|
69
|
-
});
|
|
37
|
+
const STATUS_ICON_COLOR_MAP = {
|
|
38
|
+
info: "infoAlt",
|
|
39
|
+
success: "success",
|
|
40
|
+
error: "error",
|
|
41
|
+
};
|
|
42
|
+
const Alerter = ({ children }) => {
|
|
70
43
|
return (React.createElement(React.Fragment, null,
|
|
44
|
+
children,
|
|
71
45
|
React.createElement(Portal, null,
|
|
72
|
-
React.createElement(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
React.createElement(Alert, { status: alertData.status, dismiss: alertData.dismiss }, alertData.message)))))),
|
|
81
|
-
children));
|
|
82
|
-
};
|
|
83
|
-
const Alerter = (props) => {
|
|
84
|
-
return (React.createElement(AlertsProvider, null,
|
|
85
|
-
React.createElement(InnerAlerter, { ...props })));
|
|
46
|
+
React.createElement(Toaster, { toaster: toaster, className: "cobalt-alerter" }, (toast) => {
|
|
47
|
+
const status = toast.type;
|
|
48
|
+
const IconComp = STATUS_ICONS_MAP[status];
|
|
49
|
+
return (React.createElement(Toast.Root, { className: cx("cobalt-alert"), key: toast.id },
|
|
50
|
+
React.createElement("div", { className: "cobalt-alert__wrapper" },
|
|
51
|
+
React.createElement(IconComp, { size: 20, color: STATUS_ICON_COLOR_MAP[status] }),
|
|
52
|
+
React.createElement(Toast.Description, null, toast.description))));
|
|
53
|
+
}))));
|
|
86
54
|
};
|
|
87
55
|
|
|
88
56
|
export { Alerter as default, useAlerts };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Alerter/index.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Alerter/index.tsx"],"sourcesContent":["import React, { type PropsWithChildren } from \"react\"\nimport { Toast, Toaster, createToaster, Portal } from \"@ark-ui/react\"\nimport {\n InfoFilledIcon,\n CheckCircleIcon,\n ContextualWarningCircleFilledIcon,\n IconColorsType,\n} from \"../Icon\"\nimport cx from \"classnames\"\n\nconst DEFAULT_TIMEOUT = 3000\nconst MAX_TEXT_TIMEOUT = 9000\n\nexport type AlertStatus = \"info\" | \"success\" | \"error\"\n\nconst computeTimeDurationFromText = (\n content: string | React.ReactNode\n): number => {\n if (typeof content !== \"string\") return DEFAULT_TIMEOUT\n return Math.min(\n Math.max(DEFAULT_TIMEOUT, content.length * 90),\n MAX_TEXT_TIMEOUT\n )\n}\n\nconst toaster = createToaster({\n overlap: true,\n gap: 12,\n placement: \"bottom\",\n max: 12,\n})\n\nexport const useAlerts = () => {\n return {\n sendAlert: ({\n message,\n status,\n duration,\n }: {\n message: React.ReactNode\n status: AlertStatus\n duration?: number\n }) =>\n toaster.create({\n description: message,\n type: status,\n placement: \"bottom\",\n duration: duration ?? computeTimeDurationFromText(message),\n }),\n }\n}\n\nconst STATUS_ICONS_MAP: { [k in AlertStatus]: typeof InfoFilledIcon } = {\n info: InfoFilledIcon,\n success: CheckCircleIcon,\n error: ContextualWarningCircleFilledIcon,\n}\n\nconst STATUS_ICON_COLOR_MAP: { [k in AlertStatus]: IconColorsType } = {\n info: \"infoAlt\",\n success: \"success\",\n error: \"error\",\n}\n\nconst Alerter = ({ children }: PropsWithChildren) => {\n return (\n <>\n {children}\n <Portal>\n <Toaster toaster={toaster} className=\"cobalt-alerter\">\n {(toast) => {\n const status = toast.type as AlertStatus\n const IconComp = STATUS_ICONS_MAP[status]\n return (\n <Toast.Root className={cx(\"cobalt-alert\")} key={toast.id}>\n <div className=\"cobalt-alert__wrapper\">\n <IconComp size={20} color={STATUS_ICON_COLOR_MAP[status]} />\n <Toast.Description>{toast.description}</Toast.Description>\n </div>\n </Toast.Root>\n )\n }}\n </Toaster>\n </Portal>\n </>\n )\n}\n\nexport default Alerter\n"],"names":[],"mappings":";;;;;;;;AAUA,MAAM,eAAe,GAAG,IAAI,CAAA;AAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAI7B,MAAM,2BAA2B,GAAG,CAClC,OAAiC,KACvB;IACV,IAAI,OAAO,OAAO,KAAK,QAAQ;AAAE,QAAA,OAAO,eAAe,CAAA;AACvD,IAAA,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,EAC9C,gBAAgB,CACjB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,aAAa,CAAC;AAC5B,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,GAAG,EAAE,EAAE;AACR,CAAA,CAAC,CAAA;AAEK,MAAM,SAAS,GAAG,MAAK;IAC5B,OAAO;AACL,QAAA,SAAS,EAAE,CAAC,EACV,OAAO,EACP,MAAM,EACN,QAAQ,GAKT,KACC,OAAO,CAAC,MAAM,CAAC;AACb,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAR,QAAQ,GAAI,2BAA2B,CAAC,OAAO,CAAC;SAC3D,CAAC;KACL,CAAA;AACH,EAAC;AAED,MAAM,gBAAgB,GAAkD;AACtE,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,OAAO,EAAE,eAAe;AACxB,IAAA,KAAK,EAAE,iCAAiC;CACzC,CAAA;AAED,MAAM,qBAAqB,GAA2C;AACpE,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,KAAK,EAAE,OAAO;CACf,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAqB,KAAI;AAClD,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;QACG,QAAQ;AACT,QAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,IAAA;AACL,YAAA,KAAA,CAAA,aAAA,CAAC,OAAO,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,gBAAgB,EAAA,EAClD,CAAC,KAAK,KAAI;AACT,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAmB,CAAA;AACxC,gBAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;AACzC,gBAAA,QACE,KAAC,CAAA,aAAA,CAAA,KAAK,CAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,EAAA;oBACtD,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,uBAAuB,EAAA;AACpC,wBAAA,KAAA,CAAA,aAAA,CAAC,QAAQ,EAAA,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAAI,CAAA;wBAC5D,KAAC,CAAA,aAAA,CAAA,KAAK,CAAC,WAAW,EAAE,IAAA,EAAA,KAAK,CAAC,WAAW,CAAqB,CACtD,CACK,EACd;AACH,aAAC,CACO,CACH,CACR,EACJ;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/ContainedIcon/index.tsx"],"sourcesContent":["import React from \"react\"\nimport capitalize from \"../utils/capitalize\"\nimport { IconColorsType } from \"../Icon\"\nimport cx from \"classnames\"\n\ntype Extends<T, U extends T> = U\n\ntype ContainedIconColorType
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/ContainedIcon/index.tsx"],"sourcesContent":["import React from \"react\"\nimport capitalize from \"../utils/capitalize\"\nimport { IconColorsType } from \"../Icon\"\nimport cx from \"classnames\"\n\ntype Extends<T, U extends T> = U\n\ntype ContainedIconColorType =\n | Extends<\n IconColorsType,\n | \"base\"\n | \"accent\"\n | \"disabled\"\n | \"error\"\n | \"info\"\n | \"success\"\n | \"connect\"\n | \"keyExchange\"\n | \"rideshare\"\n | \"accentAlt\"\n | \"disabledAlt\"\n | \"errorAlt\"\n | \"infoAlt\"\n | \"successAlt\"\n | \"connectAlt\"\n >\n | \"baseAlt\"\n\nexport type ContainedIconPropsType = {\n icon: React.JSX.Element\n color?: ContainedIconColorType\n className?: string\n}\n\nexport function ContainedIcon({\n icon,\n color = \"base\",\n className,\n}: ContainedIconPropsType) {\n return (\n <div\n className={cx(\n className,\n `cobalt-contained-icon cobalt-contained-icon--color${capitalize(color)}`\n )}\n >\n {icon}\n </div>\n )\n}\n"],"names":[],"mappings":";;;;AAkCM,SAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,GAAG,MAAM,EACd,SAAS,GACc,EAAA;AACvB,IAAA,QACE,KACE,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,EAAE,CACX,SAAS,EACT,CAAA,kDAAA,EAAqD,UAAU,CAAC,KAAK,CAAC,CAAE,CAAA,CACzE,IAEA,IAAI,CACD,EACP;AACH;;;;"}
|