@madie/madie-design-system 1.2.36 → 1.2.38

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 (90) hide show
  1. package/.storybook/main.js +6 -0
  2. package/components/Instant/Instant.stories.js +28 -0
  3. package/components/Instant/index.jsx +267 -0
  4. package/components/MadieConfirmDialog/MadieConfirmDialog.stories.js +104 -0
  5. package/components/MadieConfirmDialog/index.jsx +64 -0
  6. package/components/TextField/index.jsx +36 -39
  7. package/components/index.js +2 -0
  8. package/coverage/clover.xml +116 -58
  9. package/coverage/coverage-final.json +8 -6
  10. package/coverage/lcov-report/index.html +43 -13
  11. package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
  12. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +1 -1
  13. package/coverage/lcov-report/react/components/Button/index.html +1 -1
  14. package/coverage/lcov-report/react/components/Button/index.js.html +17 -17
  15. package/coverage/lcov-report/react/components/DateField/DateField.jsx.html +1 -1
  16. package/coverage/lcov-report/react/components/DateField/index.html +1 -1
  17. package/coverage/lcov-report/react/components/DateTimeField/DateTimeField.jsx.html +1 -1
  18. package/coverage/lcov-report/react/components/DateTimeField/index.html +1 -1
  19. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +1 -1
  20. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +1 -1
  21. package/coverage/lcov-report/react/components/Error/error.js.html +1 -1
  22. package/coverage/lcov-report/react/components/Error/index.html +1 -1
  23. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +1 -1
  24. package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +1 -1
  25. package/coverage/lcov-report/react/components/Footer/footer.js.html +1 -1
  26. package/coverage/lcov-report/react/components/Footer/index.html +1 -1
  27. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +1 -1
  28. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +1 -1
  29. package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
  30. package/coverage/lcov-report/react/components/Infotip/index.js.html +1 -1
  31. package/coverage/lcov-report/react/components/InputLabel/index.html +1 -1
  32. package/coverage/lcov-report/react/components/InputLabel/index.jsx.html +4 -4
  33. package/coverage/lcov-report/react/components/Instant/index.html +116 -0
  34. package/coverage/lcov-report/react/components/Instant/index.jsx.html +886 -0
  35. package/coverage/lcov-report/react/components/MadieAlert/index.html +1 -1
  36. package/coverage/lcov-report/react/components/MadieAlert/index.jsx.html +1 -1
  37. package/coverage/lcov-report/react/components/MadieConfirmDialog/index.html +116 -0
  38. package/coverage/lcov-report/react/components/MadieConfirmDialog/index.jsx.html +277 -0
  39. package/coverage/lcov-report/react/components/MadieDeleteDialog/index.html +1 -1
  40. package/coverage/lcov-report/react/components/MadieDeleteDialog/index.jsx.html +1 -1
  41. package/coverage/lcov-report/react/components/MadieDialog/index.html +1 -1
  42. package/coverage/lcov-report/react/components/MadieDialog/index.jsx.html +14 -14
  43. package/coverage/lcov-report/react/components/MadieDiscardDialog/index.html +1 -1
  44. package/coverage/lcov-report/react/components/MadieDiscardDialog/index.jsx.html +1 -1
  45. package/coverage/lcov-report/react/components/MadieSpinner/index.html +1 -1
  46. package/coverage/lcov-report/react/components/MadieSpinner/index.jsx.html +1 -1
  47. package/coverage/lcov-report/react/components/MadieTooltip/index.html +1 -1
  48. package/coverage/lcov-report/react/components/MadieTooltip/index.jsx.html +3 -3
  49. package/coverage/lcov-report/react/components/MadieTooltipIcon/index.html +1 -1
  50. package/coverage/lcov-report/react/components/MadieTooltipIcon/index.jsx.html +3 -3
  51. package/coverage/lcov-report/react/components/Pagination/index.html +1 -1
  52. package/coverage/lcov-report/react/components/Pagination/index.jsx.html +1 -1
  53. package/coverage/lcov-report/react/components/Popover/index.html +1 -1
  54. package/coverage/lcov-report/react/components/Popover/index.js.html +1 -1
  55. package/coverage/lcov-report/react/components/ReadOnlyTextField/index.html +1 -1
  56. package/coverage/lcov-report/react/components/ReadOnlyTextField/index.jsx.html +1 -1
  57. package/coverage/lcov-report/react/components/Select/index.html +1 -1
  58. package/coverage/lcov-report/react/components/Select/index.jsx.html +1 -1
  59. package/coverage/lcov-report/react/components/Tabs/Tab.js.html +1 -1
  60. package/coverage/lcov-report/react/components/Tabs/index.html +1 -1
  61. package/coverage/lcov-report/react/components/Tabs/index.js.html +1 -1
  62. package/coverage/lcov-report/react/components/TextArea/index.html +1 -1
  63. package/coverage/lcov-report/react/components/TextArea/index.jsx.html +1 -1
  64. package/coverage/lcov-report/react/components/TextField/index.html +9 -9
  65. package/coverage/lcov-report/react/components/TextField/index.jsx.html +58 -67
  66. package/coverage/lcov-report/react/components/Toast/index.html +1 -1
  67. package/coverage/lcov-report/react/components/Toast/index.jsx.html +1 -1
  68. package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +1 -1
  69. package/coverage/lcov-report/react/components/Tooltip/index.html +1 -1
  70. package/coverage/lcov-report/react/components/Tooltip/index.js.html +1 -1
  71. package/coverage/lcov-report/react/components/Tooltip/position.js.html +1 -1
  72. package/coverage/lcov-report/react/index.html +1 -1
  73. package/coverage/lcov-report/react/index.js.html +1 -1
  74. package/coverage/lcov-report/react/lib/Chevron.jsx.html +1 -1
  75. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +1 -1
  76. package/coverage/lcov-report/react/lib/index.html +1 -1
  77. package/coverage/lcov.info +235 -114
  78. package/dist/browser.js +1 -1
  79. package/dist/index.js +1 -1
  80. package/dist/react/index.js +1 -1
  81. package/dist/react/index.js.map +1 -1
  82. package/package-lock.json +220 -131
  83. package/package.json +1 -1
  84. package/styles/_qpp-style.scss +1 -0
  85. package/styles/components/_madie-confirm-dialog.scss +34 -0
  86. package/styles/qppds/components/_madie-confirm-dialog.scss +35 -0
  87. package/styles/qppds/components/index.scss +1 -0
  88. package/test/components/Instant.test.js +83 -0
  89. package/test/components/MadieConfirmDialog.test.js +159 -0
  90. package/webpack.config.react.js +13 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@madie/madie-design-system",
3
- "version": "1.2.36",
3
+ "version": "1.2.38",
4
4
  "description": "Shared style guide across the Madie program.",
5
5
  "main": "dist/index.js",
6
6
  "homepage": "https://github.com/MeasureAuthoringTool/madie-design-system",
@@ -14,6 +14,7 @@
14
14
  @import 'components/links';
15
15
  @import 'components/madie-discard-dialog';
16
16
  @import 'components/madie-delete-dialog';
17
+ @import 'components/madie-confirm-dialog';
17
18
  @import 'components/madie-alert';
18
19
  @import 'components/madie-tooltip';
19
20
  @import 'components/text-field-variable';
@@ -0,0 +1,34 @@
1
+ #confirm-dialog-body {
2
+ font-family: Rubik, sans-serif;
3
+ display: flex;
4
+ flex-direction: column;
5
+
6
+ .dialog-warning-body {
7
+ font-size: 16px;
8
+ line-height: 19px;
9
+
10
+ p {
11
+ margin-bottom: 18px;
12
+ }
13
+
14
+ .strong {
15
+ font-weight: 500;
16
+ }
17
+ }
18
+
19
+ .dialog-warning-action {
20
+ font-size: 14px;
21
+ line-height: 26px;
22
+ font-weight: 400;
23
+ color: #d92f2f;
24
+ display: flex;
25
+ flex-direction: row;
26
+ align-items: center;
27
+ margin-left: -3px;
28
+
29
+ > p {
30
+ margin-left: 8px;
31
+ margin-bottom: 0;
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,35 @@
1
+ #confirm-dialog-body {
2
+ font-family: Rubik, sans-serif;
3
+ display: flex;
4
+ flex-direction: column;
5
+
6
+ .dialog-warning-body {
7
+ font-size: 16px;
8
+ line-height: 19px;
9
+
10
+ p {
11
+ margin-bottom: 18px;
12
+ }
13
+
14
+ .strong {
15
+ font-weight: 500;
16
+ }
17
+ }
18
+
19
+ .dialog-warning-action {
20
+ font-size: 14px;
21
+ line-height: 26px;
22
+ font-weight: 400;
23
+ color: #d92f2f;
24
+ display: flex;
25
+ flex-direction: row;
26
+ align-items: center;
27
+ margin-left: -3px;
28
+
29
+ > p {
30
+ margin-left: 8px;
31
+ margin-bottom: 0;
32
+ }
33
+ }
34
+ }
35
+
@@ -1,6 +1,7 @@
1
1
  @import './link';
2
2
  @import './madie-discard-dialog';
3
3
  @import './madie-delete-dialog';
4
+ @import './madie-confirm-dialog';
4
5
  @import './madie-tooltip';
5
6
  @import './madie-alert';
6
7
  @import './button';
@@ -0,0 +1,83 @@
1
+ import "@testing-library/jest-dom";
2
+ import React, { useState } from "react";
3
+ import { render, fireEvent, screen } from "@testing-library/react";
4
+ import Instant from "../../components/Instant";
5
+ import dayjs from "dayjs";
6
+
7
+ export const InstantTester = () => {
8
+ const [value, setValue] = useState("");
9
+ const handleDateTimeChange = (v) => {
10
+ setValue(v)
11
+ };
12
+ return (
13
+ <div>
14
+ <div data-testId="test-date">{value}</div>
15
+ <Instant
16
+ disabled={false}
17
+ id="status_date_time"
18
+ label="Status Date"
19
+ handleDateTimeChange={handleDateTimeChange}
20
+ dateTimeValue={value}
21
+ dateFieldSx={{}}
22
+ />
23
+ </div>)
24
+ }
25
+
26
+
27
+ describe("Instant", () => {
28
+ const { getByDisplayValue, findByTestId, findByText, getByText, getByTestId } = screen;
29
+ it("It renders as expected with static values", async () => {
30
+ const handleDateTimeChange = jest.fn();
31
+ render(
32
+ <div>
33
+ <Instant
34
+ disabled={false}
35
+ id="status_date_time"
36
+ label="Status Date"
37
+ handleDateTimeChange={handleDateTimeChange}
38
+ dateTimeValue={dayjs("2022-04-17")}
39
+ dateFieldSx={{}}
40
+ />
41
+ </div>
42
+ );
43
+ const labelText = await findByText("Status Date");
44
+ expect(labelText).toBeInTheDocument();
45
+ expect(await findByText("Status Date")).toBeInTheDocument();
46
+ expect(
47
+ getByDisplayValue("04/17/2022")
48
+ ).toBeInTheDocument();
49
+ });
50
+
51
+ it("we can change the date from null and when date to date", async () => {
52
+ await render(<InstantTester />)
53
+ const labelText = await findByText("Status Date");
54
+ expect(labelText).toBeInTheDocument();
55
+ expect(await findByText("Status Date")).toBeInTheDocument();
56
+ const inputField = await findByTestId("status_date_time-input");
57
+ fireEvent.change(inputField, { target: { value: "01/01/2026" } })
58
+ expect(
59
+ getByText("2026-01-01T00:00:00.000+00:00")
60
+ ).toBeInTheDocument();
61
+ fireEvent.change(inputField, { target: { value: "01/01/2027" } })
62
+ expect(
63
+ getByText("2027-01-01T00:00:00.000+00:00")
64
+ ).toBeInTheDocument();
65
+ });
66
+ it("Handles change for Hours, minutes, seconds, ms; does not combust.", async () => {
67
+
68
+ await render(<InstantTester />)
69
+ const labelText = await findByText("Status Date");
70
+ expect(labelText).toBeInTheDocument();
71
+ expect(await findByText("Status Date")).toBeInTheDocument();
72
+ const inputField = await findByTestId("status_date_time-input");
73
+ fireEvent.change(inputField, { target: { value: "01/01/2026" } })
74
+ expect(getByText("2026-01-01T00:00:00.000+00:00")).toBeInTheDocument();
75
+ fireEvent.change(getByTestId("status_date_time-hour-input"), { target : {value: "1"}})
76
+ fireEvent.change(getByTestId("status_date_time-minute-input"), { target : {value: "2"}})
77
+ fireEvent.change(getByTestId("status_date_time-second-input"), { target : {value: "3"}})
78
+ fireEvent.change(getByTestId("status_date_time-millisecond-input"), { target : {value: "4"}})
79
+ expect(
80
+ getByText("2026-01-01T01:02:03.004+00:00")
81
+ ).toBeInTheDocument();
82
+ });
83
+ });
@@ -0,0 +1,159 @@
1
+ import "@testing-library/jest-dom";
2
+ import { describe, expect, test } from "@jest/globals";
3
+ import MadieConfirmDialog from "../../components/MadieConfirmDialog/index";
4
+ import { act } from "react-dom/test-utils";
5
+ import { render, fireEvent, waitFor } from "@testing-library/react";
6
+
7
+ import React, { useState } from "react";
8
+
9
+ const DialogTester = () => {
10
+ const [dialogOpen, setDialogOpen] = useState(false);
11
+ return (
12
+ <div>
13
+ <button
14
+ data-testid="dialog-tester"
15
+ onClick={() => setDialogOpen(true)}
16
+ >
17
+ dialog tester
18
+ </button>
19
+ <MadieConfirmDialog
20
+ open={dialogOpen}
21
+ onClose={() => setDialogOpen(false)}
22
+ onContinue={() => setDialogOpen(false)}
23
+ dialogTitle="Are You Sure"
24
+ name="log out of UMLS"
25
+ action="confirm"
26
+ />
27
+ </div>
28
+ );
29
+ };
30
+
31
+ const DialogTesterForDiscard = () => {
32
+ const [dialogOpen, setDialogOpen] = useState(false);
33
+ return (
34
+ <div>
35
+ <button
36
+ data-testid="discard-dialog-tester"
37
+ onClick={() => setDialogOpen(true)}
38
+ >
39
+ discard dialog tester
40
+ </button>
41
+ <MadieConfirmDialog
42
+ open={dialogOpen}
43
+ onClose={() => setDialogOpen(false)}
44
+ onContinue={() => setDialogOpen(false)}
45
+ action="discard"
46
+ dialogTitle="Discard Changes"
47
+ name="discard your changes"
48
+ continueText= "Yes, Discard All Changes"
49
+ cancelText="No, Keep Working"
50
+ />
51
+ </div>
52
+ );
53
+ };
54
+
55
+ const DialogTesterForDelete = () => {
56
+ const [dialogOpen, setDialogOpen] = useState(false);
57
+ return (
58
+ <div>
59
+ <button
60
+ data-testid="delete-dialog-tester"
61
+ onClick={() => setDialogOpen(true)}
62
+ >
63
+ delete dialog tester
64
+ </button>
65
+ <MadieConfirmDialog
66
+ open={dialogOpen}
67
+ onClose={() => setDialogOpen(false)}
68
+ onContinue={() => setDialogOpen(false)}
69
+ action="delete"
70
+ dialogTitle="Are You Sure"
71
+ name="delete this Definition"
72
+ continueText="Yes, Delete"
73
+ />
74
+ </div>
75
+ );
76
+ };
77
+
78
+ describe("MadieConfirmDialog", () => {
79
+ test("Confirm Dialog renders", async () => {
80
+ await act(async () => {
81
+ const { findByTestId, getByTestId, queryByText } = await render(
82
+ <DialogTester />
83
+ );
84
+ const result = await findByTestId("dialog-tester");
85
+ fireEvent.click(result);
86
+ const confirmDialog = await getByTestId("confirm-dialog");
87
+ expect(confirmDialog).toBeInTheDocument();
88
+ await waitFor(() => {
89
+ expect(queryByText("log out of UMLS")).toBeVisible();
90
+ });
91
+ });
92
+ });
93
+
94
+ test("Discard Dialog renders", async () => {
95
+ await act(async () => {
96
+ const { findByTestId, getByTestId, queryByText } = await render(
97
+ <DialogTesterForDiscard />
98
+ );
99
+ const result = await findByTestId("discard-dialog-tester");
100
+ fireEvent.click(result);
101
+ const confirmDialog = await getByTestId("discard-dialog");
102
+ expect(confirmDialog).toBeInTheDocument();
103
+ await waitFor(() => {
104
+ expect(queryByText("You have unsaved changes.")).toBeVisible();
105
+ expect(queryByText("Discard Changes")).toBeVisible();
106
+ });
107
+ });
108
+ });
109
+
110
+ test("Delete Dialog renders", async () => {
111
+ await act(async () => {
112
+ const { findByTestId, getByTestId, queryByText } = await render(
113
+ <DialogTesterForDelete />
114
+ );
115
+ const result = await findByTestId("delete-dialog-tester");
116
+ fireEvent.click(result);
117
+ const confirmDialog = await getByTestId("delete-dialog");
118
+ expect(confirmDialog).toBeInTheDocument();
119
+ await waitFor(() => {
120
+ expect(queryByText("delete this Definition")).toBeVisible();
121
+ });
122
+ });
123
+ });
124
+
125
+ test("Dialog disappears onContinue", async () => {
126
+ await act(async () => {
127
+ const { findByTestId, getByTestId, queryByText } = await render(
128
+ <DialogTester />
129
+ );
130
+ const result = await findByTestId("dialog-tester");
131
+ fireEvent.click(result);
132
+ const continueButton = await getByTestId(
133
+ "confirm-dialog-continue-button"
134
+ );
135
+ expect(continueButton).toBeInTheDocument();
136
+ fireEvent.click(continueButton);
137
+ await waitFor(() => {
138
+ expect(queryByText("log out of UMLS")).not.toBeVisible();
139
+ });
140
+ });
141
+ });
142
+ test("Dialog disappears onClose", async () => {
143
+ await act(async () => {
144
+ const { findByTestId, getByTestId, queryByText } = await render(
145
+ <DialogTester />
146
+ );
147
+ const result = await findByTestId("dialog-tester");
148
+ fireEvent.click(result);
149
+ const cancelButton = await getByTestId(
150
+ "confirm-dialog-cancel-button"
151
+ );
152
+ expect(cancelButton).toBeInTheDocument();
153
+ fireEvent.click(cancelButton);
154
+ await waitFor(() => {
155
+ expect(queryByText("log out of UMLS")).not.toBeVisible();
156
+ });
157
+ });
158
+ });
159
+ });
@@ -80,6 +80,19 @@ module.exports = {
80
80
  libraryTarget: "umd",
81
81
  globalObject: "this",
82
82
  },
83
+ // below lines fix hot reload but put CI/CD into a hanging state
84
+ // watch: true,
85
+ // watchOptions: {
86
+ // ignored: /node_modules/, // Don't watch files in node_modules
87
+ // aggregateTimeout: 300,
88
+ // poll: 1000,
89
+ // },
90
+ // devServer: {
91
+ // // static: path.join(__dirname, "dist/react"),
92
+ // // compress: true,
93
+ // hot: true, // Enable hot module replacement
94
+ // watchFiles: ["src/**/*", "components/**/*"], // Watch these files
95
+ // },
83
96
  devtool: "source-map",
84
97
  module: _module,
85
98
  plugins,