@soyfri/shared-library 2.0.0-beta8 → 2.0.0
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/Button-C17mExpd.cjs.map +1 -1
- package/Button-UkkP-bNw.js.map +1 -1
- package/README.md +182 -150
- package/components/ActionMenu/ActionMenu.cjs +52 -52
- package/components/ActionMenu/ActionMenu.cjs.map +1 -1
- package/components/ActionMenu/ActionMenu.d.ts +20 -36
- package/components/ActionMenu/ActionMenu.js +55 -55
- package/components/ActionMenu/ActionMenu.js.map +1 -1
- package/components/ActionMenu/index.d.ts +2 -2
- package/components/AppBar/AppBar.cjs +3 -220
- package/components/AppBar/AppBar.cjs.map +1 -1
- package/components/AppBar/AppBar.d.ts +6 -6
- package/components/AppBar/AppBar.js +6 -223
- package/components/AppBar/AppBar.js.map +1 -1
- package/components/AppBar/index.d.ts +0 -6
- package/components/Autocomplete/Autocomplete.cjs +310 -4
- package/components/Autocomplete/Autocomplete.cjs.map +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +29 -26
- package/components/Autocomplete/Autocomplete.definitions.d.ts +2 -1
- package/components/Autocomplete/Autocomplete.helpers.d.ts +12 -8
- package/components/Autocomplete/Autocomplete.js +310 -4
- package/components/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Autocomplete/_parts/AutocompleteChips.d.ts +7 -6
- package/components/Autocomplete/_parts/AutocompleteOption.d.ts +10 -13
- package/components/Autocomplete/index.d.ts +1 -1
- package/components/Avatar/Avatar.cjs +159 -2
- package/components/Avatar/Avatar.cjs.map +1 -1
- package/components/Avatar/Avatar.js +159 -2
- package/components/Avatar/Avatar.js.map +1 -1
- package/components/Avatar/index.d.ts +1 -0
- package/components/Button/Button.d.ts +5 -5
- package/components/Button/index.d.ts +1 -0
- package/components/Card/Card.cjs +95 -7
- package/components/Card/Card.cjs.map +1 -1
- package/components/Card/Card.d.ts +3 -50
- package/components/Card/Card.js +95 -7
- package/components/Card/Card.js.map +1 -1
- package/components/Card/Card.sx.d.ts +3 -6
- package/components/Card/index.d.ts +1 -1
- package/{Switch-BIeobv6i.cjs → components/Checkbox/Checkbox.cjs} +30 -20
- package/components/Checkbox/Checkbox.cjs.map +1 -0
- package/components/Checkbox/Checkbox.d.ts +55 -0
- package/{Switch-DQEOxM2R.js → components/Checkbox/Checkbox.js} +29 -20
- package/components/Checkbox/Checkbox.js.map +1 -0
- package/components/Checkbox/Checkbox.sx.d.ts +13 -0
- package/components/Checkbox/index.d.ts +2 -0
- package/components/Checkbox.d.ts +6 -0
- package/components/Chip/Chip.cjs +73 -3
- package/components/Chip/Chip.cjs.map +1 -1
- package/components/Chip/Chip.js +72 -2
- package/components/Chip/Chip.js.map +1 -1
- package/components/Chip/index.d.ts +2 -1
- package/components/Chip.d.ts +4 -0
- package/components/Column/Column.cjs +1 -1
- package/components/Column/Column.cjs.map +1 -1
- package/components/Column/Column.d.ts +1 -1
- package/components/Column/Column.js +1 -1
- package/components/Column/Column.js.map +1 -1
- package/components/Column/index.d.ts +0 -1
- package/components/DatePicker/DatePicker.cjs +177 -3
- package/components/DatePicker/DatePicker.cjs.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +1 -13
- package/components/DatePicker/DatePicker.js +177 -3
- package/components/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/index.d.ts +1 -1
- package/components/DateRangePicker/DateRangePicker.cjs +73 -2
- package/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
- package/components/DateRangePicker/DateRangePicker.js +73 -2
- package/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/components/DateTimePicker/DateTimePicker.cjs +195 -3
- package/components/DateTimePicker/DateTimePicker.cjs.map +1 -1
- package/components/DateTimePicker/DateTimePicker.d.ts +9 -17
- package/components/DateTimePicker/DateTimePicker.definitions.d.ts +2 -0
- package/components/DateTimePicker/DateTimePicker.helpers.d.ts +4 -2
- package/components/DateTimePicker/DateTimePicker.js +195 -3
- package/components/DateTimePicker/DateTimePicker.js.map +1 -1
- package/components/DateTimePicker/index.d.ts +1 -1
- package/components/Drawer/Drawer.cjs +13 -7
- package/components/Drawer/Drawer.cjs.map +1 -1
- package/components/Drawer/Drawer.d.ts +3 -1
- package/components/Drawer/Drawer.js +14 -8
- package/components/Drawer/Drawer.js.map +1 -1
- package/components/Drawer/DrawerItem.d.ts +6 -1
- package/components/Gallery/Gallery.cjs +154 -79
- package/components/Gallery/Gallery.cjs.map +1 -1
- package/components/Gallery/Gallery.d.ts +25 -9
- package/components/Gallery/Gallery.js +154 -79
- package/components/Gallery/Gallery.js.map +1 -1
- package/components/Gallery/GalleryLightbox.d.ts +6 -10
- package/components/Gallery/GalleryMain.d.ts +3 -7
- package/components/Gallery/GalleryThumbnails.d.ts +7 -11
- package/components/Gallery/index.d.ts +2 -1
- package/components/Gallery.d.ts +4 -0
- package/components/Icon/Icon.cjs +6 -8
- package/components/Icon/Icon.cjs.map +1 -1
- package/components/Icon/Icon.d.ts +11 -17
- package/components/Icon/Icon.js +6 -8
- package/components/Icon/Icon.js.map +1 -1
- package/components/Icon/index.d.ts +2 -1
- package/components/Icon.d.ts +4 -0
- package/components/Input/Input.cjs +185 -3
- package/components/Input/Input.cjs.map +1 -1
- package/components/Input/Input.d.ts +9 -2
- package/components/Input/Input.helpers.d.ts +3 -3
- package/components/Input/Input.js +185 -3
- package/components/Input/Input.js.map +1 -1
- package/components/Input/index.d.ts +1 -1
- package/components/InputGroup/InputGroup.cjs +23 -22
- package/components/InputGroup/InputGroup.cjs.map +1 -1
- package/components/InputGroup/InputGroup.d.ts +4 -4
- package/components/InputGroup/InputGroup.js +22 -21
- package/components/InputGroup/InputGroup.js.map +1 -1
- package/components/InputGroup/index.d.ts +2 -1
- package/components/InputGroup.d.ts +4 -0
- package/components/Modal/Modal.cjs +345 -6
- package/components/Modal/Modal.cjs.map +1 -1
- package/components/Modal/Modal.d.ts +20 -5
- package/components/Modal/Modal.js +345 -6
- package/components/Modal/Modal.js.map +1 -1
- package/components/Modal/ModalBody.d.ts +6 -1
- package/components/Modal/ModalFooter.d.ts +4 -4
- package/components/Modal/ModalHeader.d.ts +6 -1
- package/components/Modal/index.d.ts +4 -3
- package/components/RadioGroup/RadioGroup.cjs +201 -3
- package/components/RadioGroup/RadioGroup.cjs.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +9 -3
- package/components/RadioGroup/RadioGroup.js +201 -3
- package/components/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/index.d.ts +1 -1
- package/components/Select/Select.cjs +310 -4
- package/components/Select/Select.cjs.map +1 -1
- package/components/Select/Select.d.ts +35 -20
- package/components/Select/Select.helpers.d.ts +6 -19
- package/components/Select/Select.js +310 -4
- package/components/Select/Select.js.map +1 -1
- package/components/Select/index.d.ts +1 -1
- package/components/Stat/Stat.cjs +83 -4
- package/components/Stat/Stat.cjs.map +1 -1
- package/components/Stat/Stat.js +82 -3
- package/components/Stat/Stat.js.map +1 -1
- package/components/Stat/index.d.ts +2 -1
- package/components/Stat.d.ts +4 -0
- package/components/StatusMessage/StatusMessage.cjs +105 -3
- package/components/StatusMessage/StatusMessage.cjs.map +1 -1
- package/components/StatusMessage/StatusMessage.d.ts +20 -36
- package/components/StatusMessage/StatusMessage.js +105 -3
- package/components/StatusMessage/StatusMessage.js.map +1 -1
- package/components/StatusMessage/StatusMessageContext.d.ts +16 -0
- package/components/StatusMessage/index.d.ts +2 -0
- package/components/Stepper/Stepper.cjs +324 -4
- package/components/Stepper/Stepper.cjs.map +1 -1
- package/components/Stepper/Stepper.d.ts +9 -8
- package/components/Stepper/Stepper.js +323 -3
- package/components/Stepper/Stepper.js.map +1 -1
- package/{hooks/Wizard/WizardContext.d.ts → components/Stepper/StepperContext.d.ts} +28 -22
- package/components/Stepper/_hooks/useHorizontalScroll.d.ts +19 -0
- package/components/Stepper/_parts/StepperScrollArrow.d.ts +19 -0
- package/components/Stepper/index.d.ts +6 -2
- package/components/Stepper.d.ts +4 -0
- package/components/Switch/Switch.cjs +181 -3
- package/components/Switch/Switch.cjs.map +1 -1
- package/components/Switch/Switch.d.ts +7 -2
- package/components/Switch/Switch.js +181 -3
- package/components/Switch/Switch.js.map +1 -1
- package/components/Table/Table.cjs +528 -2
- package/components/Table/Table.cjs.map +1 -1
- package/components/Table/Table.d.ts +1 -1
- package/components/Table/Table.js +528 -2
- package/components/Table/Table.js.map +1 -1
- package/components/Tabs/Tabs.cjs +110 -4
- package/components/Tabs/Tabs.cjs.map +1 -1
- package/components/Tabs/Tabs.d.ts +21 -16
- package/components/Tabs/Tabs.js +109 -3
- package/components/Tabs/Tabs.js.map +1 -1
- package/components/Tabs/index.d.ts +4 -2
- package/components/Tabs.d.ts +4 -0
- package/components/Timeline/Timeline.cjs +3 -2
- package/components/Timeline/Timeline.cjs.map +1 -1
- package/components/Timeline/Timeline.d.ts +4 -8
- package/components/Timeline/Timeline.js +3 -2
- package/components/Timeline/Timeline.js.map +1 -1
- package/components/Timeline/index.d.ts +4 -2
- package/components/Timeline.d.ts +4 -0
- package/components/_shared/mergeSx.d.ts +7 -0
- package/{formField.sx-DfVbMe0V.js → formField.sx-8_QRnKxv.js} +2 -11
- package/formField.sx-8_QRnKxv.js.map +1 -0
- package/{formField.sx-CQ1mbk9M.cjs → formField.sx-BAX7KwMR.cjs} +10 -19
- package/formField.sx-BAX7KwMR.cjs.map +1 -0
- package/index.cjs +31 -47
- package/index.cjs.map +1 -1
- package/index.d.ts +1 -30
- package/index.js +17 -48
- package/index.js.map +1 -1
- package/mergeSx-BXoNZjB_.js +10 -0
- package/mergeSx-BXoNZjB_.js.map +1 -0
- package/mergeSx-Dbccoo_H.cjs +9 -0
- package/mergeSx-Dbccoo_H.cjs.map +1 -0
- package/mui.d.ts +3 -2
- package/package.json +8 -20
- package/{resolvePreset-K6_BfWHD.js → resolvePreset-B-IB0ehH.js} +3 -3
- package/{resolvePreset-K6_BfWHD.js.map → resolvePreset-B-IB0ehH.js.map} +1 -1
- package/{resolvePreset-CxTI6_Ln.cjs → resolvePreset-CT3kU-K2.cjs} +3 -3
- package/{resolvePreset-CxTI6_Ln.cjs.map → resolvePreset-CT3kU-K2.cjs.map} +1 -1
- package/theme/componentStyles.d.ts +1 -1
- package/tokens-BRrcP_p_.js +21 -0
- package/tokens-BRrcP_p_.js.map +1 -0
- package/tokens-jaWWNk39.cjs +20 -0
- package/tokens-jaWWNk39.cjs.map +1 -0
- package/utils/index.d.ts +2 -0
- package/{components/ScrollTopButton → utils}/scrollToTop.d.ts +6 -7
- package/Autocomplete-BA-cGASd.js +0 -316
- package/Autocomplete-BA-cGASd.js.map +0 -1
- package/Autocomplete-C2x-lBvZ.cjs +0 -315
- package/Autocomplete-C2x-lBvZ.cjs.map +0 -1
- package/Avatar-9L7YMxya.cjs +0 -162
- package/Avatar-9L7YMxya.cjs.map +0 -1
- package/Avatar-BJTr-PBd.js +0 -163
- package/Avatar-BJTr-PBd.js.map +0 -1
- package/Card-DG_crfkK.cjs +0 -185
- package/Card-DG_crfkK.cjs.map +0 -1
- package/Card-Ug-ttVSh.js +0 -186
- package/Card-Ug-ttVSh.js.map +0 -1
- package/Chip-OPYQ1uQ_.js +0 -74
- package/Chip-OPYQ1uQ_.js.map +0 -1
- package/Chip-qoJLDiva.cjs +0 -73
- package/Chip-qoJLDiva.cjs.map +0 -1
- package/DatePicker-8f_9bwhS.js +0 -202
- package/DatePicker-8f_9bwhS.js.map +0 -1
- package/DatePicker-DLSfkgGA.cjs +0 -201
- package/DatePicker-DLSfkgGA.cjs.map +0 -1
- package/DateRangePicker-BVpeJCHI.js +0 -76
- package/DateRangePicker-BVpeJCHI.js.map +0 -1
- package/DateRangePicker-B_hKQhbj.cjs +0 -75
- package/DateRangePicker-B_hKQhbj.cjs.map +0 -1
- package/DateTimePicker-CWNW09-O.cjs +0 -220
- package/DateTimePicker-CWNW09-O.cjs.map +0 -1
- package/DateTimePicker-D4L9GAod.js +0 -221
- package/DateTimePicker-D4L9GAod.js.map +0 -1
- package/Input-Cp911l23.js +0 -174
- package/Input-Cp911l23.js.map +0 -1
- package/Input-DI0jfq5X.cjs +0 -173
- package/Input-DI0jfq5X.cjs.map +0 -1
- package/Modal-Bm_HH9cv.cjs +0 -319
- package/Modal-Bm_HH9cv.cjs.map +0 -1
- package/Modal-Bnz6d9m9.js +0 -320
- package/Modal-Bnz6d9m9.js.map +0 -1
- package/RadioGroup-CxqDHap1.cjs +0 -200
- package/RadioGroup-CxqDHap1.cjs.map +0 -1
- package/RadioGroup-DMi9FvMP.js +0 -201
- package/RadioGroup-DMi9FvMP.js.map +0 -1
- package/Select-3CBOfM2H.js +0 -447
- package/Select-3CBOfM2H.js.map +0 -1
- package/Select-Bku4f4f8.cjs +0 -446
- package/Select-Bku4f4f8.cjs.map +0 -1
- package/Stat-BUcFCGrz.cjs +0 -83
- package/Stat-BUcFCGrz.cjs.map +0 -1
- package/Stat-C06A_izS.js +0 -84
- package/Stat-C06A_izS.js.map +0 -1
- package/StatusMessage-C5B6oGZ_.cjs +0 -78
- package/StatusMessage-C5B6oGZ_.cjs.map +0 -1
- package/StatusMessage-D1GlfQdz.js +0 -79
- package/StatusMessage-D1GlfQdz.js.map +0 -1
- package/Step-Dq0N72YB.js +0 -49
- package/Step-Dq0N72YB.js.map +0 -1
- package/Step-a8U8O-91.cjs +0 -48
- package/Step-a8U8O-91.cjs.map +0 -1
- package/Switch-BIeobv6i.cjs.map +0 -1
- package/Switch-DQEOxM2R.js.map +0 -1
- package/Tab-Co31KY2k.cjs +0 -95
- package/Tab-Co31KY2k.cjs.map +0 -1
- package/Tab-DiK62gRz.js +0 -96
- package/Tab-DiK62gRz.js.map +0 -1
- package/Table-C2LbW0B1.js +0 -531
- package/Table-C2LbW0B1.js.map +0 -1
- package/Table-C4OM6rrC.cjs +0 -530
- package/Table-C4OM6rrC.cjs.map +0 -1
- package/components/AppBar/AppBarBrand.d.ts +0 -31
- package/components/AppBar/AppBarUserMenu.d.ts +0 -65
- package/components/Autocomplete/Autocomplete.types.d.ts +0 -1
- package/components/DatePicker/DatePicker.types.d.ts +0 -1
- package/components/DateTimePicker/DateTimePicker.types.d.ts +0 -1
- package/components/Input/Input.types.d.ts +0 -1
- package/components/PageLoader/PageLoader.cjs +0 -61
- package/components/PageLoader/PageLoader.cjs.map +0 -1
- package/components/PageLoader/PageLoader.d.ts +0 -38
- package/components/PageLoader/PageLoader.js +0 -61
- package/components/PageLoader/PageLoader.js.map +0 -1
- package/components/PageLoader/index.d.ts +0 -2
- package/components/PageLoader.d.ts +0 -6
- package/components/RadioGroup/RadioGroup.types.d.ts +0 -1
- package/components/ScrollTopButton/ScrollTopButton.cjs +0 -79
- package/components/ScrollTopButton/ScrollTopButton.cjs.map +0 -1
- package/components/ScrollTopButton/ScrollTopButton.d.ts +0 -48
- package/components/ScrollTopButton/ScrollTopButton.js +0 -79
- package/components/ScrollTopButton/ScrollTopButton.js.map +0 -1
- package/components/ScrollTopButton/index.d.ts +0 -4
- package/components/ScrollTopButton.d.ts +0 -6
- package/components/Select/Select.definitions.d.ts +0 -17
- package/components/Select/Select.types.d.ts +0 -1
- package/components/Select/_parts/SelectSearchHeader.d.ts +0 -15
- package/components/Select/_parts/SelectValue.d.ts +0 -22
- package/formField.sx-CQ1mbk9M.cjs.map +0 -1
- package/formField.sx-DfVbMe0V.js.map +0 -1
- package/hooks/Wizard/Wizard.cjs +0 -7
- package/hooks/Wizard/Wizard.cjs.map +0 -1
- package/hooks/Wizard/Wizard.js +0 -7
- package/hooks/Wizard/Wizard.js.map +0 -1
- package/hooks/Wizard/index.d.ts +0 -3
- package/hooks/Wizard/useWizard.d.ts +0 -9
- package/hooks/Wizard.d.ts +0 -2
- package/useWizard-CWdIxZzX.cjs +0 -94
- package/useWizard-CWdIxZzX.cjs.map +0 -1
- package/useWizard-CWq--C3o.js +0 -95
- package/useWizard-CWq--C3o.js.map +0 -1
- /package/{styles.css → index.css} +0 -0
package/components/Stat/Stat.cjs
CHANGED
|
@@ -1,6 +1,85 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
3
|
-
require(
|
|
4
|
-
const
|
|
5
|
-
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const React = require("react");
|
|
5
|
+
const material = require("@mui/material");
|
|
6
|
+
const Stat = ({
|
|
7
|
+
stat,
|
|
8
|
+
stat2,
|
|
9
|
+
label,
|
|
10
|
+
color = "#1469B8",
|
|
11
|
+
chipColor = "#1469B8",
|
|
12
|
+
chips = [],
|
|
13
|
+
simple = false,
|
|
14
|
+
chip = false,
|
|
15
|
+
chipList = false,
|
|
16
|
+
children,
|
|
17
|
+
statDisplay
|
|
18
|
+
}) => {
|
|
19
|
+
const selectedTemplate = React.useMemo(() => {
|
|
20
|
+
if (simple) return "simple";
|
|
21
|
+
if (chip) return "chip";
|
|
22
|
+
if (chipList) return "chipList";
|
|
23
|
+
return "default";
|
|
24
|
+
}, [simple, chip, chipList]);
|
|
25
|
+
const renderStatDisplay = () => {
|
|
26
|
+
return statDisplay ? statDisplay(stat) : /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", children: stat });
|
|
27
|
+
};
|
|
28
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
29
|
+
selectedTemplate === "default" && /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "stat", children: [
|
|
30
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h4", "data-testid": "selection-template-option-outlet", children: renderStatDisplay() }),
|
|
31
|
+
/* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "stat__label", display: "flex", alignItems: "center", gap: 1, children: [
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: label }),
|
|
33
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
34
|
+
material.Box,
|
|
35
|
+
{
|
|
36
|
+
width: 40,
|
|
37
|
+
height: 4,
|
|
38
|
+
bgcolor: color,
|
|
39
|
+
"data-testid": "stat-border",
|
|
40
|
+
borderRadius: 2
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
] })
|
|
44
|
+
] }),
|
|
45
|
+
selectedTemplate === "simple" && /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
|
|
46
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: label }),
|
|
47
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { "data-testid": "selection-template-option-outlet", children: renderStatDisplay() }),
|
|
48
|
+
stat2 && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { children: stat2 })
|
|
49
|
+
] }),
|
|
50
|
+
selectedTemplate === "chip" && /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: label }),
|
|
52
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
53
|
+
material.Chip,
|
|
54
|
+
{
|
|
55
|
+
"data-testid": "chip-template-option-outlet",
|
|
56
|
+
label: renderStatDisplay(),
|
|
57
|
+
sx: {
|
|
58
|
+
backgroundColor: chipColor,
|
|
59
|
+
color: "#fff",
|
|
60
|
+
fontWeight: "bold"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
] }),
|
|
65
|
+
selectedTemplate === "chipList" && /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
|
|
66
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: label }),
|
|
67
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Stack, { direction: "row", spacing: 1, children: chips.map((chip2, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
68
|
+
material.Chip,
|
|
69
|
+
{
|
|
70
|
+
label: chip2.stat,
|
|
71
|
+
sx: {
|
|
72
|
+
backgroundColor: chip2.chipColor,
|
|
73
|
+
color: "#fff",
|
|
74
|
+
fontWeight: "bold"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
i
|
|
78
|
+
)) })
|
|
79
|
+
] }),
|
|
80
|
+
children
|
|
81
|
+
] });
|
|
82
|
+
};
|
|
83
|
+
exports.Stat = Stat;
|
|
84
|
+
exports.default = Stat;
|
|
6
85
|
//# sourceMappingURL=Stat.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stat.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
1
|
+
{"version":3,"file":"Stat.cjs","sources":["../../../src/components/Stat/Stat.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Chip, Stack, Typography, Box } from '@mui/material';\n\nexport interface StatChip {\n stat: any;\n chipColor: string;\n}\n\nexport interface StatProps {\n stat: any; // Replace 'any' with the actual type of 'stat'\n stat2?: any; // Replace 'any' with the actual type of'stat2'\n label: string; // Replace 'any' with the actual type of'label'\n color?: string;\n chipColor?: string;\n chips?: StatChip[]; // Replace 'any' with the actual type of'chips'\n simple?: boolean;\n chip?: boolean;\n chipList?: boolean;\n children?: React.ReactNode;\n statDisplay?: (stat: any) => React.ReactNode;\n}\n\nexport const Stat: React.FC<StatProps> = ({\n stat,\n stat2,\n label,\n color = '#1469B8',\n chipColor = '#1469B8',\n chips = [],\n simple = false,\n chip = false,\n chipList = false,\n children,\n statDisplay,\n}) => {\n const selectedTemplate = useMemo(() => {\n if (simple) return 'simple';\n if (chip) return 'chip';\n if (chipList) return 'chipList';\n return 'default';\n }, [simple, chip, chipList]);\n\n const renderStatDisplay = () => {\n return statDisplay ? statDisplay(stat) : <Typography variant=\"h6\">{stat}</Typography>;\n };\n\n return (\n <>\n {selectedTemplate === 'default' && (\n <Box className=\"stat\">\n <Typography variant=\"h4\" data-testid=\"selection-template-option-outlet\">\n {renderStatDisplay()}\n </Typography>\n <Box className=\"stat__label\" display=\"flex\" alignItems=\"center\" gap={1}>\n <Typography variant=\"body1\">{label}</Typography>\n <Box\n width={40}\n height={4}\n bgcolor={color}\n data-testid=\"stat-border\"\n borderRadius={2}\n />\n </Box>\n </Box>\n )}\n\n {selectedTemplate === 'simple' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Typography data-testid=\"selection-template-option-outlet\">\n {renderStatDisplay()}\n </Typography>\n {stat2 && <Typography>{stat2}</Typography>}\n </Stack>\n )}\n\n {selectedTemplate === 'chip' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Chip\n data-testid=\"chip-template-option-outlet\"\n label={renderStatDisplay()}\n sx={{\n backgroundColor: chipColor,\n color: '#fff',\n fontWeight: 'bold',\n }}\n />\n </Stack>\n )}\n\n {selectedTemplate === 'chipList' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Stack direction=\"row\" spacing={1}>\n {chips.map((chip, i) => (\n <Chip\n key={i}\n label={chip.stat}\n sx={{\n backgroundColor: chip.chipColor,\n color: '#fff',\n fontWeight: 'bold',\n }}\n />\n ))}\n </Stack>\n </Stack>\n )}\n\n {/* Content projection (similar to ng-content) */}\n {children}\n </>\n );\n};\n\nexport default Stat;"],"names":["useMemo","Typography","jsxs","Fragment","Box","jsx","Stack","Chip","chip"],"mappings":";;;;;AAsBO,MAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,QAAQ,CAAA;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAM;AACJ,QAAM,mBAAmBA,MAAAA,QAAQ,MAAM;AACrC,QAAI,OAAQ,QAAO;AACnB,QAAI,KAAM,QAAO;AACjB,QAAI,SAAU,QAAO;AACrB,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,MAAM,QAAQ,CAAC;AAE3B,QAAM,oBAAoB,MAAM;AAC9B,WAAO,cAAc,YAAY,IAAI,mCAAKC,qBAAA,EAAW,SAAQ,MAAM,UAAA,KAAA,CAAK;AAAA,EAC1E;AAEA,SACEC,2BAAAA,KAAAC,qBAAA,EACG,UAAA;AAAA,IAAA,qBAAqB,aACpBD,gCAACE,SAAAA,KAAA,EAAI,WAAU,QACb,UAAA;AAAA,MAAAC,+BAACJ,SAAAA,cAAW,SAAQ,MAAK,eAAY,oCAClC,+BACH;AAAA,MACAC,2BAAAA,KAACE,SAAAA,OAAI,WAAU,eAAc,SAAQ,QAAO,YAAW,UAAS,KAAK,GACnE,UAAA;AAAA,QAAAC,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,QACnCI,2BAAAA;AAAAA,UAACD,SAAAA;AAAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,eAAY;AAAA,YACZ,cAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAChB,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGD,qBAAqB,YACpBF,gCAACI,SAAAA,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAAD,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnCI,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,eAAY,oCACrB,+BACH;AAAA,MACC,SAASI,2BAAAA,IAACJ,SAAAA,YAAA,EAAY,UAAA,MAAA,CAAM;AAAA,IAAA,GAC/B;AAAA,IAGD,qBAAqB,UACpBC,gCAACI,SAAAA,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAAD,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnCI,2BAAAA;AAAAA,QAACE,SAAAA;AAAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,OAAO,kBAAA;AAAA,UACP,IAAI;AAAA,YACF,iBAAiB;AAAA,YACjB,OAAO;AAAA,YACP,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAGD,qBAAqB,cACpBL,gCAACI,SAAAA,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAAD,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnCI,2BAAAA,IAACC,SAAAA,OAAA,EAAM,WAAU,OAAM,SAAS,GAC7B,UAAA,MAAM,IAAI,CAACE,OAAM,MAChBH,2BAAAA;AAAAA,QAACE,SAAAA;AAAAA,QAAA;AAAA,UAEC,OAAOC,MAAK;AAAA,UACZ,IAAI;AAAA,YACF,iBAAiBA,MAAK;AAAA,YACtB,OAAO;AAAA,YACP,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,QANK;AAAA,MAAA,CAQR,EAAA,CACH;AAAA,IAAA,GACF;AAAA,IAID;AAAA,EAAA,GACH;AAEJ;;;"}
|
package/components/Stat/Stat.js
CHANGED
|
@@ -1,6 +1,85 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { Box, Typography, Stack, Chip } from "@mui/material";
|
|
4
|
+
const Stat = ({
|
|
5
|
+
stat,
|
|
6
|
+
stat2,
|
|
7
|
+
label,
|
|
8
|
+
color = "#1469B8",
|
|
9
|
+
chipColor = "#1469B8",
|
|
10
|
+
chips = [],
|
|
11
|
+
simple = false,
|
|
12
|
+
chip = false,
|
|
13
|
+
chipList = false,
|
|
14
|
+
children,
|
|
15
|
+
statDisplay
|
|
16
|
+
}) => {
|
|
17
|
+
const selectedTemplate = useMemo(() => {
|
|
18
|
+
if (simple) return "simple";
|
|
19
|
+
if (chip) return "chip";
|
|
20
|
+
if (chipList) return "chipList";
|
|
21
|
+
return "default";
|
|
22
|
+
}, [simple, chip, chipList]);
|
|
23
|
+
const renderStatDisplay = () => {
|
|
24
|
+
return statDisplay ? statDisplay(stat) : /* @__PURE__ */ jsx(Typography, { variant: "h6", children: stat });
|
|
25
|
+
};
|
|
26
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
|
+
selectedTemplate === "default" && /* @__PURE__ */ jsxs(Box, { className: "stat", children: [
|
|
28
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h4", "data-testid": "selection-template-option-outlet", children: renderStatDisplay() }),
|
|
29
|
+
/* @__PURE__ */ jsxs(Box, { className: "stat__label", display: "flex", alignItems: "center", gap: 1, children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body1", children: label }),
|
|
31
|
+
/* @__PURE__ */ jsx(
|
|
32
|
+
Box,
|
|
33
|
+
{
|
|
34
|
+
width: 40,
|
|
35
|
+
height: 4,
|
|
36
|
+
bgcolor: color,
|
|
37
|
+
"data-testid": "stat-border",
|
|
38
|
+
borderRadius: 2
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
] })
|
|
42
|
+
] }),
|
|
43
|
+
selectedTemplate === "simple" && /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
|
|
44
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body1", children: label }),
|
|
45
|
+
/* @__PURE__ */ jsx(Typography, { "data-testid": "selection-template-option-outlet", children: renderStatDisplay() }),
|
|
46
|
+
stat2 && /* @__PURE__ */ jsx(Typography, { children: stat2 })
|
|
47
|
+
] }),
|
|
48
|
+
selectedTemplate === "chip" && /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
|
|
49
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body1", children: label }),
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
Chip,
|
|
52
|
+
{
|
|
53
|
+
"data-testid": "chip-template-option-outlet",
|
|
54
|
+
label: renderStatDisplay(),
|
|
55
|
+
sx: {
|
|
56
|
+
backgroundColor: chipColor,
|
|
57
|
+
color: "#fff",
|
|
58
|
+
fontWeight: "bold"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
] }),
|
|
63
|
+
selectedTemplate === "chipList" && /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body1", children: label }),
|
|
65
|
+
/* @__PURE__ */ jsx(Stack, { direction: "row", spacing: 1, children: chips.map((chip2, i) => /* @__PURE__ */ jsx(
|
|
66
|
+
Chip,
|
|
67
|
+
{
|
|
68
|
+
label: chip2.stat,
|
|
69
|
+
sx: {
|
|
70
|
+
backgroundColor: chip2.chipColor,
|
|
71
|
+
color: "#fff",
|
|
72
|
+
fontWeight: "bold"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
i
|
|
76
|
+
)) })
|
|
77
|
+
] }),
|
|
78
|
+
children
|
|
79
|
+
] });
|
|
80
|
+
};
|
|
3
81
|
export {
|
|
4
|
-
|
|
82
|
+
Stat,
|
|
83
|
+
Stat as default
|
|
5
84
|
};
|
|
6
85
|
//# sourceMappingURL=Stat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stat.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Stat.js","sources":["../../../src/components/Stat/Stat.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Chip, Stack, Typography, Box } from '@mui/material';\n\nexport interface StatChip {\n stat: any;\n chipColor: string;\n}\n\nexport interface StatProps {\n stat: any; // Replace 'any' with the actual type of 'stat'\n stat2?: any; // Replace 'any' with the actual type of'stat2'\n label: string; // Replace 'any' with the actual type of'label'\n color?: string;\n chipColor?: string;\n chips?: StatChip[]; // Replace 'any' with the actual type of'chips'\n simple?: boolean;\n chip?: boolean;\n chipList?: boolean;\n children?: React.ReactNode;\n statDisplay?: (stat: any) => React.ReactNode;\n}\n\nexport const Stat: React.FC<StatProps> = ({\n stat,\n stat2,\n label,\n color = '#1469B8',\n chipColor = '#1469B8',\n chips = [],\n simple = false,\n chip = false,\n chipList = false,\n children,\n statDisplay,\n}) => {\n const selectedTemplate = useMemo(() => {\n if (simple) return 'simple';\n if (chip) return 'chip';\n if (chipList) return 'chipList';\n return 'default';\n }, [simple, chip, chipList]);\n\n const renderStatDisplay = () => {\n return statDisplay ? statDisplay(stat) : <Typography variant=\"h6\">{stat}</Typography>;\n };\n\n return (\n <>\n {selectedTemplate === 'default' && (\n <Box className=\"stat\">\n <Typography variant=\"h4\" data-testid=\"selection-template-option-outlet\">\n {renderStatDisplay()}\n </Typography>\n <Box className=\"stat__label\" display=\"flex\" alignItems=\"center\" gap={1}>\n <Typography variant=\"body1\">{label}</Typography>\n <Box\n width={40}\n height={4}\n bgcolor={color}\n data-testid=\"stat-border\"\n borderRadius={2}\n />\n </Box>\n </Box>\n )}\n\n {selectedTemplate === 'simple' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Typography data-testid=\"selection-template-option-outlet\">\n {renderStatDisplay()}\n </Typography>\n {stat2 && <Typography>{stat2}</Typography>}\n </Stack>\n )}\n\n {selectedTemplate === 'chip' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Chip\n data-testid=\"chip-template-option-outlet\"\n label={renderStatDisplay()}\n sx={{\n backgroundColor: chipColor,\n color: '#fff',\n fontWeight: 'bold',\n }}\n />\n </Stack>\n )}\n\n {selectedTemplate === 'chipList' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Stack direction=\"row\" spacing={1}>\n {chips.map((chip, i) => (\n <Chip\n key={i}\n label={chip.stat}\n sx={{\n backgroundColor: chip.chipColor,\n color: '#fff',\n fontWeight: 'bold',\n }}\n />\n ))}\n </Stack>\n </Stack>\n )}\n\n {/* Content projection (similar to ng-content) */}\n {children}\n </>\n );\n};\n\nexport default Stat;"],"names":["chip"],"mappings":";;;AAsBO,MAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,QAAQ,CAAA;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAM;AACJ,QAAM,mBAAmB,QAAQ,MAAM;AACrC,QAAI,OAAQ,QAAO;AACnB,QAAI,KAAM,QAAO;AACjB,QAAI,SAAU,QAAO;AACrB,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,MAAM,QAAQ,CAAC;AAE3B,QAAM,oBAAoB,MAAM;AAC9B,WAAO,cAAc,YAAY,IAAI,wBAAK,YAAA,EAAW,SAAQ,MAAM,UAAA,KAAA,CAAK;AAAA,EAC1E;AAEA,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,qBAAqB,aACpB,qBAAC,KAAA,EAAI,WAAU,QACb,UAAA;AAAA,MAAA,oBAAC,cAAW,SAAQ,MAAK,eAAY,oCAClC,+BACH;AAAA,MACA,qBAAC,OAAI,WAAU,eAAc,SAAQ,QAAO,YAAW,UAAS,KAAK,GACnE,UAAA;AAAA,QAAA,oBAAC,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,QACnC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,eAAY;AAAA,YACZ,cAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAChB,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGD,qBAAqB,YACpB,qBAAC,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAA,oBAAC,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnC,oBAAC,YAAA,EAAW,eAAY,oCACrB,+BACH;AAAA,MACC,SAAS,oBAAC,YAAA,EAAY,UAAA,MAAA,CAAM;AAAA,IAAA,GAC/B;AAAA,IAGD,qBAAqB,UACpB,qBAAC,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAA,oBAAC,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,OAAO,kBAAA;AAAA,UACP,IAAI;AAAA,YACF,iBAAiB;AAAA,YACjB,OAAO;AAAA,YACP,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAGD,qBAAqB,cACpB,qBAAC,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAA,oBAAC,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnC,oBAAC,OAAA,EAAM,WAAU,OAAM,SAAS,GAC7B,UAAA,MAAM,IAAI,CAACA,OAAM,MAChB;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,OAAOA,MAAK;AAAA,UACZ,IAAI;AAAA,YACF,iBAAiBA,MAAK;AAAA,YACtB,OAAO;AAAA,YACP,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,QANK;AAAA,MAAA,CAQR,EAAA,CACH;AAAA,IAAA,GACF;AAAA,IAID;AAAA,EAAA,GACH;AAEJ;"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { default
|
|
1
|
+
export { Stat, default } from './Stat';
|
|
2
|
+
export type { StatProps, StatChip } from './Stat';
|
package/components/Stat.d.ts
CHANGED
|
@@ -1,6 +1,108 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const React = require("react");
|
|
5
|
+
const material = require("@mui/material");
|
|
6
|
+
const iconsMaterial = require("@mui/icons-material");
|
|
7
|
+
const StatusMessage = ({
|
|
8
|
+
title,
|
|
9
|
+
description,
|
|
10
|
+
messageType = "success",
|
|
11
|
+
displayType = "alert",
|
|
12
|
+
close,
|
|
13
|
+
open: controlledOpen
|
|
14
|
+
}) => {
|
|
15
|
+
const [internalOpen, setInternalOpen] = React.useState(true);
|
|
16
|
+
const titleId = React.useId();
|
|
17
|
+
const descId = React.useId();
|
|
18
|
+
const isControlled = controlledOpen !== void 0;
|
|
19
|
+
const isOpen = isControlled ? controlledOpen : internalOpen;
|
|
20
|
+
const handleClose = () => {
|
|
21
|
+
if (!isControlled) setInternalOpen(false);
|
|
22
|
+
close == null ? void 0 : close();
|
|
23
|
+
};
|
|
24
|
+
const alertVariant = messageType === "danger" ? "error" : messageType;
|
|
25
|
+
const icon = messageType === "success" ? /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.CheckCircleOutline, { sx: { fontSize: 64, color: "success.main" } }) : messageType === "danger" ? /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.ErrorOutline, { sx: { fontSize: 64, color: "error.main" } }) : /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.WarningAmber, { sx: { fontSize: 64, color: "warning.main" } });
|
|
26
|
+
if (!description) return null;
|
|
27
|
+
if (!isOpen) return null;
|
|
28
|
+
if (displayType === "modal") {
|
|
29
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
30
|
+
material.Dialog,
|
|
31
|
+
{
|
|
32
|
+
open: isOpen,
|
|
33
|
+
onClose: handleClose,
|
|
34
|
+
"aria-labelledby": title ? titleId : void 0,
|
|
35
|
+
"aria-describedby": descId,
|
|
36
|
+
maxWidth: "md",
|
|
37
|
+
slotProps: {
|
|
38
|
+
paper: {
|
|
39
|
+
sx: { borderRadius: "16px", p: 2 }
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
children: [
|
|
43
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
44
|
+
material.DialogContent,
|
|
45
|
+
{
|
|
46
|
+
sx: {
|
|
47
|
+
display: "flex",
|
|
48
|
+
flexDirection: "column",
|
|
49
|
+
alignItems: "center",
|
|
50
|
+
textAlign: "center",
|
|
51
|
+
p: 4,
|
|
52
|
+
gap: 2
|
|
53
|
+
},
|
|
54
|
+
children: [
|
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mb: 2 }, children: icon }),
|
|
56
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(
|
|
57
|
+
material.Typography,
|
|
58
|
+
{
|
|
59
|
+
id: titleId,
|
|
60
|
+
variant: "h4",
|
|
61
|
+
component: "h2",
|
|
62
|
+
sx: { fontWeight: "bold" },
|
|
63
|
+
children: title
|
|
64
|
+
}
|
|
65
|
+
),
|
|
66
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { id: descId, variant: "body1", color: "text.secondary", children: description })
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
),
|
|
70
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.DialogActions, { sx: { justifyContent: "center", p: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Button, { onClick: handleClose, variant: "contained", color: alertVariant, children: "Aceptar" }) })
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
76
|
+
material.Alert,
|
|
77
|
+
{
|
|
78
|
+
severity: alertVariant,
|
|
79
|
+
sx: { mb: 2, mt: 2 },
|
|
80
|
+
onClose: close !== void 0 ? handleClose : void 0,
|
|
81
|
+
children: [
|
|
82
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", sx: { fontWeight: "bold" }, children: title }),
|
|
83
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", sx: { mt: 1 }, children: description })
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
const initialValues = {
|
|
89
|
+
state: void 0,
|
|
90
|
+
setMessage: () => {
|
|
91
|
+
},
|
|
92
|
+
cleanMessage: () => {
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
const StatusMessageContext = React.createContext(initialValues);
|
|
96
|
+
const useStatusMessageContext = () => React.useContext(StatusMessageContext);
|
|
97
|
+
const StatusMessageProvider = ({ children }) => {
|
|
98
|
+
const [stateMessage, setMessage] = React.useState(void 0);
|
|
99
|
+
const cleanMessage = () => {
|
|
100
|
+
setMessage(void 0);
|
|
101
|
+
};
|
|
102
|
+
return /* @__PURE__ */ jsxRuntime.jsx(StatusMessageContext.Provider, { value: { setMessage, cleanMessage, state: stateMessage }, children });
|
|
103
|
+
};
|
|
104
|
+
exports.StatusMessage = StatusMessage;
|
|
105
|
+
exports.StatusMessageProvider = StatusMessageProvider;
|
|
106
|
+
exports.default = StatusMessage;
|
|
107
|
+
exports.useStatusMessageContext = useStatusMessageContext;
|
|
6
108
|
//# sourceMappingURL=StatusMessage.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusMessage.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
1
|
+
{"version":3,"file":"StatusMessage.cjs","sources":["../../../src/components/StatusMessage/StatusMessage.tsx","../../../src/components/StatusMessage/StatusMessageContext.tsx"],"sourcesContent":["import { useId, useState, type FC } from 'react';\nimport {\n Alert,\n Box,\n Typography,\n Dialog,\n DialogContent,\n DialogActions,\n Button,\n} from '@mui/material';\nimport {\n ErrorOutline as ErrorOutlineIcon,\n CheckCircleOutline as CheckCircleOutlineIcon,\n WarningAmber as WarningAmberIcon,\n} from '@mui/icons-material';\n\nexport interface StatusMessageProps {\n /** Título del mensaje. */\n title?: string;\n /** Descripción/contenido detallado. Requerido para que el componente renderice. */\n description?: string;\n /** Tipo de mensaje (controla color + icono). `danger` mapea a `error` de MUI. */\n messageType?: 'success' | 'danger' | 'warning';\n /** Forma de presentación: alerta inline o modal. Default: `'alert'`. */\n displayType?: 'alert' | 'modal';\n /** Callback al cerrar. Si se omite, no se muestra botón de cerrar. */\n close?: () => void;\n /**\n * Controla visibilidad. Si se omite, el componente maneja su propio\n * state (se oculta solo al llamar `close`). Si se pasa, queda controlled\n * y el consumer es responsable de actualizarlo.\n */\n open?: boolean;\n}\n\n/**\n * Mensaje de éxito / error / advertencia en forma de alerta inline o modal.\n *\n * - **Uncontrolled**: sin pasar `open`, el componente maneja su propia\n * visibilidad. Al llamar `close`, se oculta automáticamente.\n * - **Controlled**: pasando `open`, el consumer decide cuándo mostrar/ocultar.\n */\nexport const StatusMessage: FC<StatusMessageProps> = ({\n title,\n description,\n messageType = 'success',\n displayType = 'alert',\n close,\n open: controlledOpen,\n}) => {\n const [internalOpen, setInternalOpen] = useState(true);\n const titleId = useId();\n const descId = useId();\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleClose = () => {\n if (!isControlled) setInternalOpen(false);\n close?.();\n };\n\n const alertVariant = messageType === 'danger' ? 'error' : messageType;\n\n const icon =\n messageType === 'success' ? (\n <CheckCircleOutlineIcon sx={{ fontSize: 64, color: 'success.main' }} />\n ) : messageType === 'danger' ? (\n <ErrorOutlineIcon sx={{ fontSize: 64, color: 'error.main' }} />\n ) : (\n <WarningAmberIcon sx={{ fontSize: 64, color: 'warning.main' }} />\n );\n\n if (!description) return null;\n if (!isOpen) return null;\n\n if (displayType === 'modal') {\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={descId}\n maxWidth=\"md\"\n slotProps={{\n paper: {\n sx: { borderRadius: '16px', p: 2 },\n },\n }}\n >\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n p: 4,\n gap: 2,\n }}\n >\n <Box sx={{ mb: 2 }}>{icon}</Box>\n {title && (\n <Typography\n id={titleId}\n variant=\"h4\"\n component=\"h2\"\n sx={{ fontWeight: 'bold' }}\n >\n {title}\n </Typography>\n )}\n <Typography id={descId} variant=\"body1\" color=\"text.secondary\">\n {description}\n </Typography>\n </DialogContent>\n <DialogActions sx={{ justifyContent: 'center', p: 2 }}>\n <Button onClick={handleClose} variant=\"contained\" color={alertVariant}>\n Aceptar\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return (\n <Alert\n severity={alertVariant}\n sx={{ mb: 2, mt: 2 }}\n onClose={close !== undefined ? handleClose : undefined}\n >\n {title && (\n <Typography variant=\"h6\" sx={{ fontWeight: 'bold' }}>\n {title}\n </Typography>\n )}\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n {description}\n </Typography>\n </Alert>\n );\n};\n\nexport default StatusMessage;\n","import {\n createContext,\n useState,\n useContext,\n type Dispatch,\n type SetStateAction,\n type ReactNode,\n} from 'react';\nimport type { StatusMessageProps } from './StatusMessage';\n\nexport type StatusMessageState = {\n [K in 'title' | 'description' | 'messageType']: StatusMessageProps[K] | undefined;\n} & Pick<StatusMessageProps, 'displayType'>;\n\ninterface StatusMessageContextValue {\n state: StatusMessageState | undefined;\n setMessage: Dispatch<SetStateAction<StatusMessageState | undefined>>;\n cleanMessage: () => void;\n}\n\nconst initialValues: StatusMessageContextValue = {\n state: undefined,\n setMessage: () => {},\n cleanMessage: () => {},\n};\n\nconst StatusMessageContext = createContext<StatusMessageContextValue>(initialValues);\n\nexport const useStatusMessageContext = () => useContext(StatusMessageContext);\n\ninterface StatusMessageProviderProps {\n children: ReactNode;\n}\n\nexport const StatusMessageProvider = ({ children }: StatusMessageProviderProps) => {\n const [stateMessage, setMessage] = useState<StatusMessageState | undefined>(undefined);\n const cleanMessage = () => {\n setMessage(undefined);\n };\n\n return (\n <StatusMessageContext.Provider value={{ setMessage, cleanMessage, state: stateMessage }}>\n {children}\n </StatusMessageContext.Provider>\n );\n};\n"],"names":["useState","useId","jsx","CheckCircleOutlineIcon","ErrorOutlineIcon","WarningAmberIcon","jsxs","Dialog","DialogContent","Box","Typography","DialogActions","Button","Alert","createContext","useContext"],"mappings":"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"}
|
|
@@ -1,44 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
* `StatusMessage` es un componente de React que muestra mensajes de éxito, error o advertencia
|
|
3
|
-
* en un modal o una alerta, utilizando el sistema de diseño de Material-UI.
|
|
4
|
-
*
|
|
5
|
-
* El componente puede mostrar alertas con estilos específicos o un modal personalizable
|
|
6
|
-
* usando `Dialog` y otros componentes de MUI. También puede incluir una función opcional
|
|
7
|
-
* para cerrar el mensaje.
|
|
8
|
-
*
|
|
9
|
-
* @param {StatusMessageProps} props - Las propiedades del componente.
|
|
10
|
-
* @param {string | undefined} props.title - Título del mensaje que se muestra en el modal o alerta.
|
|
11
|
-
* @param {string} [props.description] - Descripción o contenido detallado del mensaje.
|
|
12
|
-
* @param {'success' | 'danger' | 'warning'} [props.messageType='success'] - Tipo de mensaje que determina el estilo visual. 'danger' se mapea a 'error' de MUI.
|
|
13
|
-
* @param {'alert' | 'modal'} [props.displayType='alert'] - Determina si el mensaje se muestra como alerta o modal.
|
|
14
|
-
* @param {() => void} [props.close] - Función opcional para ejecutar al cerrar el mensaje.
|
|
15
|
-
* @returns {React.FC<StatusMessageProps>} Un componente funcional de React que muestra mensajes personalizados.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* // Ejemplo de uso como una alerta:
|
|
19
|
-
* <StatusMessage
|
|
20
|
-
* title="Operación Exitosa"
|
|
21
|
-
* description="La operación se ha completado correctamente."
|
|
22
|
-
* messageType="success"
|
|
23
|
-
* displayType="alert"
|
|
24
|
-
* />
|
|
25
|
-
*
|
|
26
|
-
* // Ejemplo de uso como un modal:
|
|
27
|
-
* <StatusMessage
|
|
28
|
-
* title="Advertencia"
|
|
29
|
-
* description="Se ha producido un error inesperado."
|
|
30
|
-
* messageType="danger"
|
|
31
|
-
* displayType="modal"
|
|
32
|
-
* close={() => console.log('Modal cerrado')}
|
|
33
|
-
* />
|
|
34
|
-
*/
|
|
1
|
+
import { FC } from 'react';
|
|
35
2
|
export interface StatusMessageProps {
|
|
36
|
-
|
|
3
|
+
/** Título del mensaje. */
|
|
4
|
+
title?: string;
|
|
5
|
+
/** Descripción/contenido detallado. Requerido para que el componente renderice. */
|
|
37
6
|
description?: string;
|
|
7
|
+
/** Tipo de mensaje (controla color + icono). `danger` mapea a `error` de MUI. */
|
|
38
8
|
messageType?: 'success' | 'danger' | 'warning';
|
|
9
|
+
/** Forma de presentación: alerta inline o modal. Default: `'alert'`. */
|
|
39
10
|
displayType?: 'alert' | 'modal';
|
|
11
|
+
/** Callback al cerrar. Si se omite, no se muestra botón de cerrar. */
|
|
40
12
|
close?: () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Controla visibilidad. Si se omite, el componente maneja su propio
|
|
15
|
+
* state (se oculta solo al llamar `close`). Si se pasa, queda controlled
|
|
16
|
+
* y el consumer es responsable de actualizarlo.
|
|
17
|
+
*/
|
|
41
18
|
open?: boolean;
|
|
42
19
|
}
|
|
43
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Mensaje de éxito / error / advertencia en forma de alerta inline o modal.
|
|
22
|
+
*
|
|
23
|
+
* - **Uncontrolled**: sin pasar `open`, el componente maneja su propia
|
|
24
|
+
* visibilidad. Al llamar `close`, se oculta automáticamente.
|
|
25
|
+
* - **Controlled**: pasando `open`, el consumer decide cuándo mostrar/ocultar.
|
|
26
|
+
*/
|
|
27
|
+
export declare const StatusMessage: FC<StatusMessageProps>;
|
|
44
28
|
export default StatusMessage;
|
|
@@ -1,6 +1,108 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useId, createContext, useContext } from "react";
|
|
3
|
+
import { Dialog, DialogContent, Box, Typography, DialogActions, Button, Alert } from "@mui/material";
|
|
4
|
+
import { CheckCircleOutline, ErrorOutline, WarningAmber } from "@mui/icons-material";
|
|
5
|
+
const StatusMessage = ({
|
|
6
|
+
title,
|
|
7
|
+
description,
|
|
8
|
+
messageType = "success",
|
|
9
|
+
displayType = "alert",
|
|
10
|
+
close,
|
|
11
|
+
open: controlledOpen
|
|
12
|
+
}) => {
|
|
13
|
+
const [internalOpen, setInternalOpen] = useState(true);
|
|
14
|
+
const titleId = useId();
|
|
15
|
+
const descId = useId();
|
|
16
|
+
const isControlled = controlledOpen !== void 0;
|
|
17
|
+
const isOpen = isControlled ? controlledOpen : internalOpen;
|
|
18
|
+
const handleClose = () => {
|
|
19
|
+
if (!isControlled) setInternalOpen(false);
|
|
20
|
+
close == null ? void 0 : close();
|
|
21
|
+
};
|
|
22
|
+
const alertVariant = messageType === "danger" ? "error" : messageType;
|
|
23
|
+
const icon = messageType === "success" ? /* @__PURE__ */ jsx(CheckCircleOutline, { sx: { fontSize: 64, color: "success.main" } }) : messageType === "danger" ? /* @__PURE__ */ jsx(ErrorOutline, { sx: { fontSize: 64, color: "error.main" } }) : /* @__PURE__ */ jsx(WarningAmber, { sx: { fontSize: 64, color: "warning.main" } });
|
|
24
|
+
if (!description) return null;
|
|
25
|
+
if (!isOpen) return null;
|
|
26
|
+
if (displayType === "modal") {
|
|
27
|
+
return /* @__PURE__ */ jsxs(
|
|
28
|
+
Dialog,
|
|
29
|
+
{
|
|
30
|
+
open: isOpen,
|
|
31
|
+
onClose: handleClose,
|
|
32
|
+
"aria-labelledby": title ? titleId : void 0,
|
|
33
|
+
"aria-describedby": descId,
|
|
34
|
+
maxWidth: "md",
|
|
35
|
+
slotProps: {
|
|
36
|
+
paper: {
|
|
37
|
+
sx: { borderRadius: "16px", p: 2 }
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
children: [
|
|
41
|
+
/* @__PURE__ */ jsxs(
|
|
42
|
+
DialogContent,
|
|
43
|
+
{
|
|
44
|
+
sx: {
|
|
45
|
+
display: "flex",
|
|
46
|
+
flexDirection: "column",
|
|
47
|
+
alignItems: "center",
|
|
48
|
+
textAlign: "center",
|
|
49
|
+
p: 4,
|
|
50
|
+
gap: 2
|
|
51
|
+
},
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ jsx(Box, { sx: { mb: 2 }, children: icon }),
|
|
54
|
+
title && /* @__PURE__ */ jsx(
|
|
55
|
+
Typography,
|
|
56
|
+
{
|
|
57
|
+
id: titleId,
|
|
58
|
+
variant: "h4",
|
|
59
|
+
component: "h2",
|
|
60
|
+
sx: { fontWeight: "bold" },
|
|
61
|
+
children: title
|
|
62
|
+
}
|
|
63
|
+
),
|
|
64
|
+
/* @__PURE__ */ jsx(Typography, { id: descId, variant: "body1", color: "text.secondary", children: description })
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
),
|
|
68
|
+
/* @__PURE__ */ jsx(DialogActions, { sx: { justifyContent: "center", p: 2 }, children: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "contained", color: alertVariant, children: "Aceptar" }) })
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
return /* @__PURE__ */ jsxs(
|
|
74
|
+
Alert,
|
|
75
|
+
{
|
|
76
|
+
severity: alertVariant,
|
|
77
|
+
sx: { mb: 2, mt: 2 },
|
|
78
|
+
onClose: close !== void 0 ? handleClose : void 0,
|
|
79
|
+
children: [
|
|
80
|
+
title && /* @__PURE__ */ jsx(Typography, { variant: "h6", sx: { fontWeight: "bold" }, children: title }),
|
|
81
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", sx: { mt: 1 }, children: description })
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
};
|
|
86
|
+
const initialValues = {
|
|
87
|
+
state: void 0,
|
|
88
|
+
setMessage: () => {
|
|
89
|
+
},
|
|
90
|
+
cleanMessage: () => {
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const StatusMessageContext = createContext(initialValues);
|
|
94
|
+
const useStatusMessageContext = () => useContext(StatusMessageContext);
|
|
95
|
+
const StatusMessageProvider = ({ children }) => {
|
|
96
|
+
const [stateMessage, setMessage] = useState(void 0);
|
|
97
|
+
const cleanMessage = () => {
|
|
98
|
+
setMessage(void 0);
|
|
99
|
+
};
|
|
100
|
+
return /* @__PURE__ */ jsx(StatusMessageContext.Provider, { value: { setMessage, cleanMessage, state: stateMessage }, children });
|
|
101
|
+
};
|
|
2
102
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
103
|
+
StatusMessage,
|
|
104
|
+
StatusMessageProvider,
|
|
105
|
+
StatusMessage as default,
|
|
106
|
+
useStatusMessageContext
|
|
5
107
|
};
|
|
6
108
|
//# sourceMappingURL=StatusMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusMessage.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"StatusMessage.js","sources":["../../../src/components/StatusMessage/StatusMessage.tsx","../../../src/components/StatusMessage/StatusMessageContext.tsx"],"sourcesContent":["import { useId, useState, type FC } from 'react';\nimport {\n Alert,\n Box,\n Typography,\n Dialog,\n DialogContent,\n DialogActions,\n Button,\n} from '@mui/material';\nimport {\n ErrorOutline as ErrorOutlineIcon,\n CheckCircleOutline as CheckCircleOutlineIcon,\n WarningAmber as WarningAmberIcon,\n} from '@mui/icons-material';\n\nexport interface StatusMessageProps {\n /** Título del mensaje. */\n title?: string;\n /** Descripción/contenido detallado. Requerido para que el componente renderice. */\n description?: string;\n /** Tipo de mensaje (controla color + icono). `danger` mapea a `error` de MUI. */\n messageType?: 'success' | 'danger' | 'warning';\n /** Forma de presentación: alerta inline o modal. Default: `'alert'`. */\n displayType?: 'alert' | 'modal';\n /** Callback al cerrar. Si se omite, no se muestra botón de cerrar. */\n close?: () => void;\n /**\n * Controla visibilidad. Si se omite, el componente maneja su propio\n * state (se oculta solo al llamar `close`). Si se pasa, queda controlled\n * y el consumer es responsable de actualizarlo.\n */\n open?: boolean;\n}\n\n/**\n * Mensaje de éxito / error / advertencia en forma de alerta inline o modal.\n *\n * - **Uncontrolled**: sin pasar `open`, el componente maneja su propia\n * visibilidad. Al llamar `close`, se oculta automáticamente.\n * - **Controlled**: pasando `open`, el consumer decide cuándo mostrar/ocultar.\n */\nexport const StatusMessage: FC<StatusMessageProps> = ({\n title,\n description,\n messageType = 'success',\n displayType = 'alert',\n close,\n open: controlledOpen,\n}) => {\n const [internalOpen, setInternalOpen] = useState(true);\n const titleId = useId();\n const descId = useId();\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleClose = () => {\n if (!isControlled) setInternalOpen(false);\n close?.();\n };\n\n const alertVariant = messageType === 'danger' ? 'error' : messageType;\n\n const icon =\n messageType === 'success' ? (\n <CheckCircleOutlineIcon sx={{ fontSize: 64, color: 'success.main' }} />\n ) : messageType === 'danger' ? (\n <ErrorOutlineIcon sx={{ fontSize: 64, color: 'error.main' }} />\n ) : (\n <WarningAmberIcon sx={{ fontSize: 64, color: 'warning.main' }} />\n );\n\n if (!description) return null;\n if (!isOpen) return null;\n\n if (displayType === 'modal') {\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={descId}\n maxWidth=\"md\"\n slotProps={{\n paper: {\n sx: { borderRadius: '16px', p: 2 },\n },\n }}\n >\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n p: 4,\n gap: 2,\n }}\n >\n <Box sx={{ mb: 2 }}>{icon}</Box>\n {title && (\n <Typography\n id={titleId}\n variant=\"h4\"\n component=\"h2\"\n sx={{ fontWeight: 'bold' }}\n >\n {title}\n </Typography>\n )}\n <Typography id={descId} variant=\"body1\" color=\"text.secondary\">\n {description}\n </Typography>\n </DialogContent>\n <DialogActions sx={{ justifyContent: 'center', p: 2 }}>\n <Button onClick={handleClose} variant=\"contained\" color={alertVariant}>\n Aceptar\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return (\n <Alert\n severity={alertVariant}\n sx={{ mb: 2, mt: 2 }}\n onClose={close !== undefined ? handleClose : undefined}\n >\n {title && (\n <Typography variant=\"h6\" sx={{ fontWeight: 'bold' }}>\n {title}\n </Typography>\n )}\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n {description}\n </Typography>\n </Alert>\n );\n};\n\nexport default StatusMessage;\n","import {\n createContext,\n useState,\n useContext,\n type Dispatch,\n type SetStateAction,\n type ReactNode,\n} from 'react';\nimport type { StatusMessageProps } from './StatusMessage';\n\nexport type StatusMessageState = {\n [K in 'title' | 'description' | 'messageType']: StatusMessageProps[K] | undefined;\n} & Pick<StatusMessageProps, 'displayType'>;\n\ninterface StatusMessageContextValue {\n state: StatusMessageState | undefined;\n setMessage: Dispatch<SetStateAction<StatusMessageState | undefined>>;\n cleanMessage: () => void;\n}\n\nconst initialValues: StatusMessageContextValue = {\n state: undefined,\n setMessage: () => {},\n cleanMessage: () => {},\n};\n\nconst StatusMessageContext = createContext<StatusMessageContextValue>(initialValues);\n\nexport const useStatusMessageContext = () => useContext(StatusMessageContext);\n\ninterface StatusMessageProviderProps {\n children: ReactNode;\n}\n\nexport const StatusMessageProvider = ({ children }: StatusMessageProviderProps) => {\n const [stateMessage, setMessage] = useState<StatusMessageState | undefined>(undefined);\n const cleanMessage = () => {\n setMessage(undefined);\n };\n\n return (\n <StatusMessageContext.Provider value={{ setMessage, cleanMessage, state: stateMessage }}>\n {children}\n </StatusMessageContext.Provider>\n );\n};\n"],"names":["CheckCircleOutlineIcon","ErrorOutlineIcon","WarningAmberIcon"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Dispatch, SetStateAction, ReactNode } from 'react';
|
|
2
|
+
import { StatusMessageProps } from './StatusMessage';
|
|
3
|
+
export type StatusMessageState = {
|
|
4
|
+
[K in 'title' | 'description' | 'messageType']: StatusMessageProps[K] | undefined;
|
|
5
|
+
} & Pick<StatusMessageProps, 'displayType'>;
|
|
6
|
+
interface StatusMessageContextValue {
|
|
7
|
+
state: StatusMessageState | undefined;
|
|
8
|
+
setMessage: Dispatch<SetStateAction<StatusMessageState | undefined>>;
|
|
9
|
+
cleanMessage: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const useStatusMessageContext: () => StatusMessageContextValue;
|
|
12
|
+
interface StatusMessageProviderProps {
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
export declare const StatusMessageProvider: ({ children }: StatusMessageProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { StatusMessage, default } from './StatusMessage';
|
|
2
2
|
export type { StatusMessageProps } from './StatusMessage';
|
|
3
|
+
export { StatusMessageProvider, useStatusMessageContext } from './StatusMessageContext';
|
|
4
|
+
export type { StatusMessageState } from './StatusMessageContext';
|