allaw-ui 4.6.4 → 4.6.6
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/dist/components/molecules/appointmentCard/AppointmentCard.d.ts +21 -0
- package/dist/components/molecules/appointmentCard/AppointmentCard.js +105 -0
- package/dist/components/molecules/appointmentCard/AppointmentCard.stories.d.ts +37 -0
- package/dist/components/molecules/appointmentCard/AppointmentCard.stories.js +106 -0
- package/dist/components/molecules/appointmentCard/appointmentCard.module.css +138 -0
- package/dist/components/molecules/appointmentCard/index.d.ts +2 -0
- package/dist/components/molecules/appointmentCard/index.js +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface AppointmentCardProps {
|
|
3
|
+
appointment: {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
formattedDate: string;
|
|
8
|
+
formattedTime: string;
|
|
9
|
+
state: "Confirmé" | "Planifié" | "En attente" | "Passé" | "Annulé";
|
|
10
|
+
meetingType: "INPERSON" | "VISIO" | "CALL" | "IMPORTED";
|
|
11
|
+
location?: string;
|
|
12
|
+
provider?: string;
|
|
13
|
+
attendees: Array<{
|
|
14
|
+
name: string;
|
|
15
|
+
role: "PROFESSIONAL" | "CLIENT";
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
onClick?: (appointment: AppointmentCardProps["appointment"]) => void;
|
|
19
|
+
}
|
|
20
|
+
declare const AppointmentCard: React.FC<AppointmentCardProps>;
|
|
21
|
+
export default AppointmentCard;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import styles from "./appointmentCard.module.css";
|
|
3
|
+
import AppointementStatusTag from "../../atoms/tags/AppointementStatusTag";
|
|
4
|
+
import Paragraph from "../../atoms/typography/Paragraph";
|
|
5
|
+
import TinyInfo from "../../atoms/typography/TinyInfo";
|
|
6
|
+
var mapStateToStatusTag = function (state) {
|
|
7
|
+
switch (state) {
|
|
8
|
+
case "Confirmé":
|
|
9
|
+
return "confirmed";
|
|
10
|
+
case "Planifié":
|
|
11
|
+
return "available";
|
|
12
|
+
case "En attente":
|
|
13
|
+
return "pending";
|
|
14
|
+
case "Passé":
|
|
15
|
+
return "passed";
|
|
16
|
+
case "Annulé":
|
|
17
|
+
return "cancelled";
|
|
18
|
+
default:
|
|
19
|
+
return "available";
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var getCardVariant = function (state) {
|
|
23
|
+
switch (state) {
|
|
24
|
+
case "Confirmé":
|
|
25
|
+
return "confirmed";
|
|
26
|
+
case "Planifié":
|
|
27
|
+
return "scheduled";
|
|
28
|
+
case "En attente":
|
|
29
|
+
return "pending";
|
|
30
|
+
case "Passé":
|
|
31
|
+
return "past";
|
|
32
|
+
case "Annulé":
|
|
33
|
+
return "cancelled";
|
|
34
|
+
default:
|
|
35
|
+
return "scheduled";
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var getMeetingTypeIcon = function (meetingType) {
|
|
39
|
+
switch (meetingType) {
|
|
40
|
+
case "INPERSON":
|
|
41
|
+
return (React.createElement(React.Fragment, null,
|
|
42
|
+
React.createElement("i", { className: "allaw-icon-map-pin" }),
|
|
43
|
+
React.createElement("span", null, "Pr\u00E9sentiel")));
|
|
44
|
+
case "VISIO":
|
|
45
|
+
return (React.createElement(React.Fragment, null,
|
|
46
|
+
React.createElement("i", { className: "allaw-icon-visio" }),
|
|
47
|
+
React.createElement("span", null, "Visio")));
|
|
48
|
+
case "CALL":
|
|
49
|
+
return (React.createElement(React.Fragment, null,
|
|
50
|
+
React.createElement("i", { className: "allaw-icon-phone" }),
|
|
51
|
+
React.createElement("span", null, "T\u00E9l\u00E9phone")));
|
|
52
|
+
case "IMPORTED":
|
|
53
|
+
return (React.createElement(React.Fragment, null,
|
|
54
|
+
React.createElement("i", { className: "allaw-icon-calendar" }),
|
|
55
|
+
React.createElement("span", null, "Calendrier connect\u00E9")));
|
|
56
|
+
default:
|
|
57
|
+
return (React.createElement(React.Fragment, null,
|
|
58
|
+
React.createElement("i", { className: "allaw-icon-calendar" }),
|
|
59
|
+
React.createElement("span", null, "Rendez-vous")));
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
var getPrimaryAttendee = function (attendees) {
|
|
63
|
+
if (attendees.length === 0)
|
|
64
|
+
return "";
|
|
65
|
+
// Chercher d'abord un professionnel
|
|
66
|
+
var professional = attendees.find(function (a) { return a.role === "PROFESSIONAL"; });
|
|
67
|
+
if (professional)
|
|
68
|
+
return professional.name;
|
|
69
|
+
// Sinon prendre le premier
|
|
70
|
+
return attendees[0].name;
|
|
71
|
+
};
|
|
72
|
+
var AppointmentCard = function (_a) {
|
|
73
|
+
var appointment = _a.appointment, onClick = _a.onClick;
|
|
74
|
+
var cardVariant = getCardVariant(appointment.state);
|
|
75
|
+
var statusTagVariant = mapStateToStatusTag(appointment.state);
|
|
76
|
+
var primaryAttendee = getPrimaryAttendee(appointment.attendees);
|
|
77
|
+
var handleClick = function () {
|
|
78
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(appointment);
|
|
79
|
+
};
|
|
80
|
+
var handleKeyDown = function (e) {
|
|
81
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
handleClick();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
return (React.createElement("div", { id: "appointmentCardWrapper", className: "".concat(styles.card, " ").concat(styles[cardVariant]), onClick: handleClick, onKeyDown: handleKeyDown, role: "button", tabIndex: 0, "aria-label": "Rendez-vous ".concat(appointment.title, " le ").concat(appointment.formattedDate) },
|
|
87
|
+
React.createElement("div", { id: "appointmentCardHeader", className: styles.cardHeader },
|
|
88
|
+
React.createElement("div", { id: "appointmentDateTime", className: styles.dateTime },
|
|
89
|
+
React.createElement(TinyInfo, { variant: "semiBold14", color: "dark-grey", text: appointment.formattedDate, className: styles.date }),
|
|
90
|
+
React.createElement("div", { id: "appointmentTime", className: styles.time }, appointment.formattedTime)),
|
|
91
|
+
React.createElement("div", { id: "appointmentStatusBadge", className: styles.statusBadge },
|
|
92
|
+
React.createElement(AppointementStatusTag, { status: statusTagVariant, variant: "default" }))),
|
|
93
|
+
React.createElement("div", { id: "appointmentCardBody", className: styles.cardBody },
|
|
94
|
+
React.createElement(Paragraph, { variant: "semiBold", color: "dark-grey", text: appointment.title, className: styles.title }),
|
|
95
|
+
appointment.description && (React.createElement(Paragraph, { variant: "medium", color: "mid-grey", text: appointment.description, className: styles.description })),
|
|
96
|
+
primaryAttendee && (React.createElement("div", { id: "appointmentAttendee", className: styles.attendee },
|
|
97
|
+
React.createElement(TinyInfo, { variant: "medium14", color: "dark-grey", text: primaryAttendee, startIcon: "allaw-icon-user", align: "left" })))),
|
|
98
|
+
React.createElement("div", { id: "appointmentCardFooter", className: styles.cardFooter },
|
|
99
|
+
React.createElement("div", { id: "appointmentMeetingType", className: styles.meetingType }, getMeetingTypeIcon(appointment.meetingType)),
|
|
100
|
+
appointment.location && appointment.meetingType === "INPERSON" && (React.createElement("div", { id: "appointmentLocation", className: styles.location },
|
|
101
|
+
React.createElement(TinyInfo, { variant: "medium12", color: "mid-grey", text: appointment.location, align: "right" }))),
|
|
102
|
+
appointment.provider && (React.createElement("div", { id: "appointmentProvider", className: styles.provider },
|
|
103
|
+
React.createElement(TinyInfo, { variant: "medium12", color: "mid-grey", text: appointment.provider, align: "right" }))))));
|
|
104
|
+
};
|
|
105
|
+
export default AppointmentCard;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
export let title: string;
|
|
3
|
+
export { AppointmentCard as component };
|
|
4
|
+
export let tags: string[];
|
|
5
|
+
export namespace argTypes {
|
|
6
|
+
namespace appointment {
|
|
7
|
+
let control: string;
|
|
8
|
+
}
|
|
9
|
+
namespace onClick {
|
|
10
|
+
let action: string;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export namespace parameters {
|
|
14
|
+
namespace actions {
|
|
15
|
+
let handles: string[];
|
|
16
|
+
}
|
|
17
|
+
namespace backgrounds {
|
|
18
|
+
let _default: string;
|
|
19
|
+
export { _default as default };
|
|
20
|
+
export let values: {
|
|
21
|
+
name: string;
|
|
22
|
+
value: string;
|
|
23
|
+
}[];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export default _default;
|
|
28
|
+
export const Confirmed: any;
|
|
29
|
+
export const Scheduled: any;
|
|
30
|
+
export const Pending: any;
|
|
31
|
+
export const Past: any;
|
|
32
|
+
export const Cancelled: any;
|
|
33
|
+
export const ImportedCalendar: any;
|
|
34
|
+
export const OriginalDesign: any;
|
|
35
|
+
export const WithoutDescription: any;
|
|
36
|
+
export const WithoutAttendees: any;
|
|
37
|
+
import AppointmentCard from "./AppointmentCard";
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import React from "react";
|
|
13
|
+
import AppointmentCard from "./AppointmentCard";
|
|
14
|
+
import "../../../styles/global.css";
|
|
15
|
+
export default {
|
|
16
|
+
title: "Components/Molecules/AppointmentCard",
|
|
17
|
+
component: AppointmentCard,
|
|
18
|
+
tags: ["autodocs"],
|
|
19
|
+
argTypes: {
|
|
20
|
+
appointment: {
|
|
21
|
+
control: "object",
|
|
22
|
+
},
|
|
23
|
+
onClick: {
|
|
24
|
+
action: "clicked",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
parameters: {
|
|
28
|
+
actions: {
|
|
29
|
+
handles: ["click .appointment-card"],
|
|
30
|
+
},
|
|
31
|
+
backgrounds: {
|
|
32
|
+
default: "light",
|
|
33
|
+
values: [
|
|
34
|
+
{ name: "light", value: "#ffffff" },
|
|
35
|
+
{ name: "grey", value: "#728ea7" },
|
|
36
|
+
{ name: "figma", value: "#404040" },
|
|
37
|
+
{ name: "dark", value: "#171e25" },
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
var Template = function (args) { return React.createElement(AppointmentCard, __assign({}, args)); };
|
|
43
|
+
var baseAppointment = {
|
|
44
|
+
id: "appointment-1",
|
|
45
|
+
title: "Consultation juridique",
|
|
46
|
+
description: "Première consultation pour étudier votre dossier",
|
|
47
|
+
formattedDate: "Lun. 8 Janvier 2024",
|
|
48
|
+
formattedTime: "14:30",
|
|
49
|
+
attendees: [
|
|
50
|
+
{
|
|
51
|
+
name: "Maître Dupont",
|
|
52
|
+
role: "PROFESSIONAL",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "Jean Martin",
|
|
56
|
+
role: "CLIENT",
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
export var Confirmed = Template.bind({});
|
|
61
|
+
Confirmed.args = {
|
|
62
|
+
appointment: __assign(__assign({}, baseAppointment), { state: "Confirmé", meetingType: "INPERSON", location: "15 Rue de la Paix, 75001 Paris", provider: "Cabinet Dupont & Associés" }),
|
|
63
|
+
};
|
|
64
|
+
export var Scheduled = Template.bind({});
|
|
65
|
+
Scheduled.args = {
|
|
66
|
+
appointment: __assign(__assign({}, baseAppointment), { state: "Planifié", meetingType: "VISIO", provider: "Cabinet Dupont & Associés" }),
|
|
67
|
+
};
|
|
68
|
+
export var Pending = Template.bind({});
|
|
69
|
+
Pending.args = {
|
|
70
|
+
appointment: __assign(__assign({}, baseAppointment), { state: "En attente", meetingType: "CALL", provider: "Cabinet Dupont & Associés" }),
|
|
71
|
+
};
|
|
72
|
+
export var Past = Template.bind({});
|
|
73
|
+
Past.args = {
|
|
74
|
+
appointment: __assign(__assign({}, baseAppointment), { title: "Finalisation convention divorce", description: "Révision finale de la convention de divorce et préparation du dépôt", state: "Passé", meetingType: "INPERSON", location: "18 Rue du Faubourg Saint-Honoré, Paris", formattedDate: "Dim. 12 janv.", formattedTime: "17:00 - 18:30" }),
|
|
75
|
+
};
|
|
76
|
+
export var Cancelled = Template.bind({});
|
|
77
|
+
Cancelled.args = {
|
|
78
|
+
appointment: __assign(__assign({}, baseAppointment), { state: "Annulé", meetingType: "VISIO", provider: "Cabinet Dupont & Associés" }),
|
|
79
|
+
};
|
|
80
|
+
export var ImportedCalendar = Template.bind({});
|
|
81
|
+
ImportedCalendar.args = {
|
|
82
|
+
appointment: __assign(__assign({}, baseAppointment), { state: "Confirmé", meetingType: "IMPORTED", provider: "Google Calendar" }),
|
|
83
|
+
};
|
|
84
|
+
// Story basée sur la capture d'origine
|
|
85
|
+
export var OriginalDesign = Template.bind({});
|
|
86
|
+
OriginalDesign.args = {
|
|
87
|
+
appointment: {
|
|
88
|
+
id: "appointment-original",
|
|
89
|
+
title: "Finalisation convention divorce",
|
|
90
|
+
description: "Révision finale de la convention de divorce et préparation du dépôt",
|
|
91
|
+
formattedDate: "Dim. 12 janv.",
|
|
92
|
+
formattedTime: "17:00 - 18:30",
|
|
93
|
+
state: "Passé",
|
|
94
|
+
meetingType: "INPERSON",
|
|
95
|
+
location: "18 Rue du Faubourg Saint-Honoré, Paris",
|
|
96
|
+
attendees: [],
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
export var WithoutDescription = Template.bind({});
|
|
100
|
+
WithoutDescription.args = {
|
|
101
|
+
appointment: __assign(__assign({}, baseAppointment), { description: undefined, state: "Confirmé", meetingType: "INPERSON", location: "15 Rue de la Paix, 75001 Paris", provider: "Cabinet Dupont & Associés" }),
|
|
102
|
+
};
|
|
103
|
+
export var WithoutAttendees = Template.bind({});
|
|
104
|
+
WithoutAttendees.args = {
|
|
105
|
+
appointment: __assign(__assign({}, baseAppointment), { attendees: [], state: "Planifié", meetingType: "VISIO", provider: "Cabinet Dupont & Associés" }),
|
|
106
|
+
};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
.card {
|
|
2
|
+
background: white;
|
|
3
|
+
border-radius: 12px;
|
|
4
|
+
border: 1px solid #e2e8f0;
|
|
5
|
+
padding: 1rem;
|
|
6
|
+
cursor: pointer;
|
|
7
|
+
transition: all 0.2s ease;
|
|
8
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.card:hover {
|
|
12
|
+
transform: translateY(-2px);
|
|
13
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.card:focus {
|
|
17
|
+
outline: none;
|
|
18
|
+
box-shadow: 0 0 0 2px #25beeb;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Variants de statut */
|
|
22
|
+
.card.confirmed {
|
|
23
|
+
border-left: 4px solid #29a36a;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.card.scheduled {
|
|
27
|
+
border-left: 4px solid #25beeb;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.card.pending {
|
|
31
|
+
border-left: 4px solid #ff9f43;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.card.past {
|
|
35
|
+
border-left: 4px solid #a2b5c8;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.card.cancelled {
|
|
39
|
+
border-left: 4px solid #e15151;
|
|
40
|
+
opacity: 0.7;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Header */
|
|
44
|
+
.cardHeader {
|
|
45
|
+
display: flex;
|
|
46
|
+
justify-content: space-between;
|
|
47
|
+
align-items: flex-start;
|
|
48
|
+
margin-bottom: 0.75rem;
|
|
49
|
+
gap: 1rem;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.dateTime {
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
gap: 0.25rem;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* .date - Styles gérés par TinyInfo */
|
|
59
|
+
|
|
60
|
+
.time {
|
|
61
|
+
font-size: 0.75rem;
|
|
62
|
+
color: #6b7280;
|
|
63
|
+
font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas,
|
|
64
|
+
"Courier New", monospace;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* .statusBadge - Styles gérés par AppointementStatusTag */
|
|
68
|
+
|
|
69
|
+
/* Body */
|
|
70
|
+
.cardBody {
|
|
71
|
+
margin-bottom: 1rem;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.title {
|
|
75
|
+
margin: 0 0 0.5rem 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.description {
|
|
79
|
+
margin: 0 0 0.75rem 0;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.attendee {
|
|
83
|
+
margin-bottom: 0.5rem;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Footer */
|
|
87
|
+
.cardFooter {
|
|
88
|
+
display: flex;
|
|
89
|
+
align-items: center;
|
|
90
|
+
justify-content: space-between;
|
|
91
|
+
gap: 1rem;
|
|
92
|
+
padding-top: 0.75rem;
|
|
93
|
+
border-top: 1px solid #f3f4f6;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.meetingType {
|
|
97
|
+
display: flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
gap: 0.375rem;
|
|
100
|
+
font-size: 0.8rem;
|
|
101
|
+
font-weight: 500;
|
|
102
|
+
color: #25beeb;
|
|
103
|
+
font-family: var(--font-open-sans, "Open Sans");
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.meetingType i {
|
|
107
|
+
font-size: 0.875rem;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.location,
|
|
111
|
+
.provider {
|
|
112
|
+
flex: 1;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* Responsive */
|
|
116
|
+
@media (max-width: 640px) {
|
|
117
|
+
.card {
|
|
118
|
+
padding: 0.875rem;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.cardHeader {
|
|
122
|
+
flex-direction: column;
|
|
123
|
+
align-items: flex-start;
|
|
124
|
+
gap: 0.5rem;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.cardFooter {
|
|
128
|
+
flex-direction: column;
|
|
129
|
+
align-items: flex-start;
|
|
130
|
+
gap: 0.5rem;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.location,
|
|
134
|
+
.provider {
|
|
135
|
+
text-align: left;
|
|
136
|
+
align-self: stretch;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as AppointmentCard } from "./AppointmentCard";
|
package/dist/index.d.ts
CHANGED
|
@@ -58,6 +58,8 @@ export { default as ContactCardEdit } from "./components/molecules/contactCard/C
|
|
|
58
58
|
export type { ContactCardEditProps } from "./components/molecules/contactCard/ContactCardEdit";
|
|
59
59
|
export { default as DetailedContactCard } from "./components/molecules/contactCard/DetailedContactCard";
|
|
60
60
|
export type { DetailedContactCardProps } from "./components/molecules/contactCard/DetailedContactCard";
|
|
61
|
+
export { default as AppointmentCard } from "./components/molecules/appointmentCard/AppointmentCard";
|
|
62
|
+
export type { AppointmentCardProps } from "./components/molecules/appointmentCard/AppointmentCard";
|
|
61
63
|
export { default as CaseCardLink } from "./components/molecules/caseLinkCard/CaseLinkCard";
|
|
62
64
|
export { default as ClientLinkCard } from "./components/molecules/clientLinkCard/ClientLinkCard";
|
|
63
65
|
export { default as CaseCardCompact } from "./components/molecules/caseCardCompact/CaseCardCompact";
|
package/dist/index.js
CHANGED
|
@@ -62,6 +62,8 @@ export { default as CaseCard } from "./components/molecules/caseCard/CaseCard";
|
|
|
62
62
|
export { default as ContactCard } from "./components/molecules/contactCard/ContactCard";
|
|
63
63
|
export { default as ContactCardEdit } from "./components/molecules/contactCard/ContactCardEdit";
|
|
64
64
|
export { default as DetailedContactCard } from "./components/molecules/contactCard/DetailedContactCard";
|
|
65
|
+
// Appointment Card
|
|
66
|
+
export { default as AppointmentCard } from "./components/molecules/appointmentCard/AppointmentCard";
|
|
65
67
|
// Case Link Card
|
|
66
68
|
export { default as CaseCardLink } from "./components/molecules/caseLinkCard/CaseLinkCard";
|
|
67
69
|
// Client Link Card
|