beem-component 2.1.29 → 2.1.30

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 (76) hide show
  1. package/Dockerfile +1 -1
  2. package/Jenkinsfile +20 -5
  3. package/dist/assets/voiceCallIcon.svg +5 -0
  4. package/dist/components/Alert/Alert.js +83 -0
  5. package/dist/components/Alert/Alert.stories.js +66 -0
  6. package/dist/components/BmCustomCardTitle/CustomCardTitle.js +181 -0
  7. package/dist/components/BmCustomCardTitle/CustomCardTitle.stories.js +92 -0
  8. package/dist/components/BmSelector/BmSelector.js +15 -2
  9. package/dist/components/BmSelector/BmSelector.stories.js +14 -1
  10. package/dist/components/BmTabv2/BmTabv2.js +51 -0
  11. package/dist/components/BmTabv2/BmTabv2.stories.js +73 -0
  12. package/dist/components/Card_v2/Card.js +38 -12
  13. package/dist/components/ChatComponents/ChatBody/chatBody.js +404 -104
  14. package/dist/components/DepartmentCard/DepartmentCard.js +99 -0
  15. package/dist/components/DepartmentCard/DepartmentCard.stories.js +53 -0
  16. package/dist/components/HorizontalCard/HorizontalCard.js +142 -0
  17. package/dist/components/HorizontalCard/HorizontalCard.stories.js +40 -0
  18. package/dist/components/InfoPanel/InfoPanel.js +54 -17
  19. package/dist/components/InfoPanel/InfoPanel.stories.js +56 -4
  20. package/dist/components/Modals/modal.js +26 -10
  21. package/dist/components/Modals/modals.stories.js +13 -6
  22. package/dist/components/ProfileIcon/ProfileIcon.js +5 -0
  23. package/dist/components/ResourceCard/ResourceCard.js +132 -0
  24. package/dist/components/ResourceCard/ResourceCard.stories.js +94 -0
  25. package/dist/components/globalStyles.js +1 -1
  26. package/dist/components/index.js +42 -0
  27. package/dist/components/text.js +11 -10
  28. package/dist/components/typography.js +3 -2
  29. package/package.json +2 -1
  30. package/public/index.html +1 -0
  31. package/src/App.js +805 -1412
  32. package/src/fonts/Inter-Black.woff2 +0 -0
  33. package/src/fonts/Inter-Bold.woff2 +0 -0
  34. package/src/fonts/Inter-ExtraBold.woff2 +0 -0
  35. package/src/fonts/Inter-ExtraLight.woff2 +0 -0
  36. package/src/fonts/Inter-Light.woff2 +0 -0
  37. package/src/fonts/Inter-Medium.woff2 +0 -0
  38. package/src/fonts/Inter-Regular.woff2 +0 -0
  39. package/src/fonts/Inter-SemiBold.woff2 +0 -0
  40. package/src/fonts/Inter-Thin.woff2 +0 -0
  41. package/src/fonts/Inter-VariableFont_opsz,wght.ttf +0 -0
  42. package/src/fonts/InterDisplay-Black.woff2 +0 -0
  43. package/src/fonts/InterDisplay-Bold.woff2 +0 -0
  44. package/src/fonts/InterDisplay-ExtraBold.woff2 +0 -0
  45. package/src/fonts/InterDisplay-ExtraLight.woff2 +0 -0
  46. package/src/fonts/InterDisplay-Light.woff2 +0 -0
  47. package/src/fonts/InterDisplay-Medium.woff2 +0 -0
  48. package/src/fonts/InterDisplay-SemiBold.woff2 +0 -0
  49. package/src/fonts/InterDisplay-Thin.woff2 +0 -0
  50. package/src/fonts.scss +4 -1
  51. package/src/lib/assets/voiceCallIcon.svg +5 -0
  52. package/src/lib/components/Alert/Alert.js +111 -0
  53. package/src/lib/components/Alert/Alert.stories.jsx +66 -0
  54. package/src/lib/components/BmCustomCardTitle/CustomCardTitle.js +162 -0
  55. package/src/lib/components/BmCustomCardTitle/CustomCardTitle.stories.jsx +92 -0
  56. package/src/lib/components/BmSelector/BmSelector.js +14 -1
  57. package/src/lib/components/BmSelector/BmSelector.stories.jsx +10 -0
  58. package/src/lib/components/BmTabv2/BmTabv2.js +109 -0
  59. package/src/lib/components/BmTabv2/BmTabv2.stories.jsx +51 -0
  60. package/src/lib/components/Card_v2/Card.js +46 -13
  61. package/src/lib/components/ChatComponents/ChatBody/chatBody.js +553 -57
  62. package/src/lib/components/DepartmentCard/DepartmentCard.js +130 -0
  63. package/src/lib/components/DepartmentCard/DepartmentCard.stories.jsx +38 -0
  64. package/src/lib/components/HorizontalCard/HorizontalCard.js +276 -0
  65. package/src/lib/components/HorizontalCard/HorizontalCard.stories.jsx +33 -0
  66. package/src/lib/components/InfoPanel/InfoPanel.js +35 -11
  67. package/src/lib/components/InfoPanel/InfoPanel.stories.jsx +42 -2
  68. package/src/lib/components/Modals/modal.js +17 -4
  69. package/src/lib/components/Modals/modals.stories.js +10 -6
  70. package/src/lib/components/ProfileIcon/ProfileIcon.js +4 -0
  71. package/src/lib/components/ResourceCard/ResourceCard.js +213 -0
  72. package/src/lib/components/ResourceCard/ResourceCard.stories.jsx +68 -0
  73. package/src/lib/components/globalStyles.js +2 -1
  74. package/src/lib/components/index.js +13 -0
  75. package/src/lib/components/text.js +17 -11
  76. package/src/lib/components/typography.js +1 -0
@@ -0,0 +1,130 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ const CardWrapper = styled.div`
5
+ overflow: hidden;
6
+
7
+ border-radius: 0.5rem;
8
+ border: 1px solid #e5e7eb;
9
+ border-top: 4px solid ${({ borderTopColor }) => borderTopColor || '#cccccc'};
10
+
11
+ background-color: #ffffff;
12
+ opacity: ${({ isActive }) => (isActive ? 1 : 0.5)};
13
+ transition: opacity 0.3s;
14
+ `;
15
+
16
+ const Header = styled.div`
17
+ padding: 1rem 1rem 0.5rem 1rem;
18
+ `;
19
+
20
+ const TitleRow = styled.div`
21
+ display: flex;
22
+ justify-content: space-between;
23
+ align-items: flex-start;
24
+ `;
25
+
26
+ const CardTitle = styled.h3`
27
+ font-size: 1.125rem;
28
+ margin: 0;
29
+ `;
30
+
31
+ const CardDescription = styled.p`
32
+ font-size: 0.875rem;
33
+ color: #6b7280;
34
+ margin-top: 0.25rem;
35
+ `;
36
+
37
+ const Content = styled.div`
38
+ margin-top: 1rem;
39
+ padding: 0 1rem 0.5rem 1rem;
40
+ display: flex;
41
+ justify-content: space-between;
42
+ align-items: center;
43
+ `;
44
+
45
+ const ResourceText = styled.span`
46
+ font-size: 0.875rem;
47
+ color: #6b7280;
48
+ `;
49
+
50
+ const StatusRow = styled.div`
51
+ display: flex;
52
+ align-items: center;
53
+ `;
54
+
55
+ const StatusDot = styled.span`
56
+ flex-shrink: 0;
57
+ width: 0.5rem;
58
+ height: 0.5rem;
59
+ margin-right: 0.5rem;
60
+ border-radius: 9999px;
61
+ background-color: ${({ isActive }) => (isActive ? '#22c55e' : '#9ca3af')};
62
+ `;
63
+
64
+ const StatusText = styled.span`
65
+ font-size: 0.75rem;
66
+ color: #6b7280;
67
+ `;
68
+
69
+ const IconButtonsContainer = styled.div`
70
+ display: flex;
71
+ gap: 0.25rem;
72
+ `;
73
+
74
+ const IconButton = styled.button`
75
+ background: none;
76
+ border: none;
77
+ padding: 0;
78
+ height: 2rem;
79
+ width: 2rem;
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ cursor: pointer;
84
+ color: ${({ destructive }) => (destructive ? '#ef4444' : 'inherit')};
85
+
86
+ &:hover {
87
+ color: ${({ destructive }) => (destructive ? '#ef4444' : '#374151')};
88
+ }
89
+ `;
90
+
91
+ const BmDepartmentCard = ({
92
+ borderTopColor = '#cccccc',
93
+ isActive = true,
94
+ name,
95
+ description,
96
+ resourcesCount,
97
+ onEdit,
98
+ onDelete,
99
+ EditIcon,
100
+ DeleteIcon,
101
+ }) => {
102
+ return (
103
+ <CardWrapper borderTopColor={borderTopColor} isActive={isActive}>
104
+ <Header>
105
+ <TitleRow>
106
+ <CardTitle>{name}</CardTitle>
107
+ <IconButtonsContainer>
108
+ <IconButton onClick={onEdit}>
109
+ {EditIcon && <EditIcon fontSize="small" />}
110
+ </IconButton>
111
+ <IconButton destructive onClick={onDelete}>
112
+ {DeleteIcon && <DeleteIcon fontSize="small" />}
113
+ </IconButton>
114
+ </IconButtonsContainer>
115
+ </TitleRow>
116
+ <CardDescription>{description}</CardDescription>
117
+ </Header>
118
+ <Content>
119
+ <ResourceText>{resourcesCount} Resources</ResourceText>
120
+
121
+ <StatusRow>
122
+ <StatusDot isActive={isActive} />
123
+ <StatusText>{isActive ? 'Active' : 'Inactive'}</StatusText>
124
+ </StatusRow>
125
+ </Content>
126
+ </CardWrapper>
127
+ );
128
+ };
129
+
130
+ export default BmDepartmentCard;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import EditIcon from '@mui/icons-material/Edit';
3
+ import DeleteIcon from '@mui/icons-material/Delete';
4
+ import BmDepartmentCard from './DepartmentCard';
5
+
6
+ export default {
7
+ title: 'Components/BmDepartmentCard',
8
+ component: BmDepartmentCard,
9
+ argTypes: {
10
+ borderTopColor: { control: 'color' },
11
+ isActive: { control: 'boolean' },
12
+ name: { control: 'text' },
13
+ description: { control: 'text' },
14
+ resourcesCount: { control: 'number' },
15
+ },
16
+ };
17
+
18
+ const Template = (args) => (
19
+ <BmDepartmentCard {...args} EditIcon={EditIcon} DeleteIcon={DeleteIcon} />
20
+ );
21
+
22
+ export const Active = Template.bind({});
23
+ Active.args = {
24
+ borderTopColor: '#3b82f6',
25
+ isActive: true,
26
+ name: 'Radiology',
27
+ description: 'Handles imaging and scans for diagnosis',
28
+ resourcesCount: 5,
29
+ };
30
+
31
+ export const Inactive = Template.bind({});
32
+ Inactive.args = {
33
+ borderTopColor: '#ef4444',
34
+ isActive: false,
35
+ name: 'Cardiology',
36
+ description: 'Provides heart-related care and surgeries',
37
+ resourcesCount: 3,
38
+ };
@@ -0,0 +1,276 @@
1
+ import React from 'react';
2
+ import styled, { css } from 'styled-components';
3
+ import AccessTimeIcon from '@mui/icons-material/AccessTime';
4
+ import AttachMoneyIcon from '@mui/icons-material/AttachMoney';
5
+ import LocationOnOutlinedIcon from '@mui/icons-material/LocationOnOutlined';
6
+ import LinkIcon from '@mui/icons-material/Link';
7
+ import EditIcon from '@mui/icons-material/Edit';
8
+ import DeleteIcon from '@mui/icons-material/Delete';
9
+ import Groups2OutlinedIcon from '@mui/icons-material/Groups2Outlined';
10
+ import PeopleAltOutlinedIcon from '@mui/icons-material/PeopleAltOutlined';
11
+ import { lowerCase } from 'lodash';
12
+
13
+ const RowContainer = styled.div`
14
+ position: relative;
15
+ border: 1px solid rgba(0, 0, 0, 0.1);
16
+ border-radius: 8px;
17
+ padding: 16px;
18
+ transition: all 0.2s;
19
+ display: flex;
20
+ justify-content: space-between;
21
+ align-items: flex-start;
22
+ cursor: pointer;
23
+ gap: 12px;
24
+
25
+ &:hover {
26
+ border-color: rgba(0, 0, 0, 0.2);
27
+ }
28
+
29
+ ${({ isActive }) =>
30
+ !isActive &&
31
+ css`
32
+ opacity: 0.7;
33
+ `}
34
+
35
+ @media (max-width: 600px) {
36
+ flex-direction: column;
37
+ align-items: flex-start;
38
+ }
39
+ `;
40
+
41
+ const ColorBar = styled.div`
42
+ position: absolute;
43
+ top: 0;
44
+ left: 0;
45
+ width: 4px;
46
+ height: 100%;
47
+ border-top-left-radius: 8px;
48
+ border-bottom-left-radius: 8px;
49
+ background-color: ${(props) => props.color || '#ccc'};
50
+ `;
51
+
52
+ const InfoContainer = styled.div`
53
+ flex: 1;
54
+ padding-left: 12px;
55
+ `;
56
+
57
+ const TitleRow = styled.div`
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 8px;
61
+ flex-wrap: wrap;
62
+ `;
63
+
64
+ const Name = styled.h3`
65
+ margin: 0;
66
+ font-weight: 500;
67
+ `;
68
+
69
+ const Badge = styled.span`
70
+ display: inline-flex;
71
+ align-items: center;
72
+ padding: 2px 6px;
73
+ font-size: 12px;
74
+ border-radius: 4px;
75
+ ${({ variant }) =>
76
+ variant === 'outline'
77
+ ? css`
78
+ border: 1px solid #d1d5db;
79
+ color: #4b5563;
80
+ background-color: rgba(0, 0, 0, 0.04);
81
+ `
82
+ : css`
83
+ background-color: #e6f4ea;
84
+ color: #166534;
85
+ border: none;
86
+ `}
87
+ `;
88
+
89
+ const Description = styled.p`
90
+ margin-top: 4px;
91
+ font-size: 0.9rem;
92
+ color: #6b7280;
93
+ display: -webkit-box;
94
+ -webkit-line-clamp: 1;
95
+ -webkit-box-orient: vertical;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ word-break: break-word;
99
+ `;
100
+
101
+ const MetaRow = styled.div`
102
+ display: flex;
103
+ flex-wrap: wrap;
104
+ gap: 16px;
105
+ margin-top: 12px;
106
+ `;
107
+
108
+ const MetaItem = styled.div`
109
+ display: flex;
110
+ align-items: center;
111
+ font-size: 0.875rem;
112
+ color: #374151;
113
+
114
+ svg {
115
+ margin-right: 4px;
116
+ width: 18px;
117
+ height: 18px;
118
+ }
119
+ `;
120
+
121
+ const ActionButtons = styled.div`
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 4px;
125
+ opacity: 0;
126
+ transition: opacity 0.2s;
127
+ ${RowContainer}:hover & {
128
+ opacity: 1;
129
+ }
130
+ `;
131
+
132
+ const IconButton = styled.button`
133
+ background: transparent;
134
+ border: none;
135
+ padding: 4px;
136
+ cursor: pointer;
137
+ color: ${({ iconColor }) => iconColor || '#111827'};
138
+ transition: color 0.2s;
139
+
140
+ &:hover {
141
+ color: #111827;
142
+ }
143
+
144
+ &.danger:hover {
145
+ color: #dc2626;
146
+ }
147
+
148
+ @media (max-width: 600px) {
149
+ padding: 2px;
150
+ }
151
+ `;
152
+ const formatDuration = (duration) => {
153
+ if (duration > 60) {
154
+ const hours = Math.floor(duration / 60);
155
+ const mins = duration % 60;
156
+ return `${hours}h ${mins > 0 ? `${mins}m` : ''}`;
157
+ }
158
+ return `${duration}m`;
159
+ };
160
+ const BmHorizontalCard = ({
161
+ onView,
162
+ onDelete,
163
+ onCopyLink,
164
+ name,
165
+ description,
166
+ price,
167
+ color,
168
+ isActive,
169
+ location,
170
+ paymentRequired,
171
+ selectedResources,
172
+ address,
173
+ duration,
174
+ guest_limit,
175
+ deleteToolTip,
176
+ editToolTip,
177
+ copyToolTip,
178
+ }) => {
179
+ return (
180
+ <RowContainer isActive={isActive}>
181
+ <ColorBar color={color} />
182
+
183
+ <InfoContainer>
184
+ <TitleRow>
185
+ <Name>{name}</Name>
186
+
187
+ {!isActive && <Badge variant="outline">Inactive</Badge>}
188
+
189
+ {paymentRequired && (
190
+ <Badge>
191
+ <AttachMoneyIcon fontSize="small" />
192
+ Payment Required
193
+ </Badge>
194
+ )}
195
+ </TitleRow>
196
+
197
+ <Description>{description}</Description>
198
+
199
+ <MetaRow>
200
+ {duration && (
201
+ <MetaItem>
202
+ <AccessTimeIcon fontSize="small" />
203
+ <span>{formatDuration(duration)}</span>
204
+ </MetaItem>
205
+ )}
206
+ {price && (
207
+ <MetaItem>
208
+ <AttachMoneyIcon fontSize="small" />
209
+ <span>{price === 0 ? 'Free' : `${price}`}</span>
210
+ </MetaItem>
211
+ )}
212
+ <MetaItem>
213
+ <LocationOnOutlinedIcon fontSize="small" />
214
+ <span>
215
+ {location}
216
+ {lowerCase(location) === 'physical' && address
217
+ ? ` (${address.split(',')[0]}...)`
218
+ : ''}
219
+ </span>
220
+ </MetaItem>
221
+ {guest_limit && (
222
+ <MetaItem>
223
+ <Groups2OutlinedIcon fontSize="small" />
224
+ <span>
225
+ Max {guest_limit} attendee{guest_limit > 1 ? 's' : ''}
226
+ </span>
227
+ </MetaItem>
228
+ )}
229
+ {selectedResources && selectedResources.length > 0 && (
230
+ <MetaItem>
231
+ <PeopleAltOutlinedIcon fontSize="small" />
232
+ <span>
233
+ {selectedResources.length} resource
234
+ {selectedResources.length > 1 ? 's' : ''}
235
+ </span>
236
+ </MetaItem>
237
+ )}
238
+ </MetaRow>
239
+ </InfoContainer>
240
+
241
+ <ActionButtons>
242
+ <IconButton
243
+ onClick={(e) => {
244
+ e.stopPropagation();
245
+ onCopyLink();
246
+ }}
247
+ title={copyToolTip || ''}
248
+ >
249
+ <LinkIcon fontSize="small" />
250
+ </IconButton>
251
+ <IconButton
252
+ onClick={(e) => {
253
+ e.stopPropagation();
254
+ onView();
255
+ }}
256
+ title={editToolTip || ''}
257
+ >
258
+ <EditIcon fontSize="small" />
259
+ </IconButton>
260
+ <IconButton
261
+ iconColor="#dc2626"
262
+ className="danger"
263
+ onClick={(e) => {
264
+ e.stopPropagation();
265
+ onDelete();
266
+ }}
267
+ title={deleteToolTip || ''}
268
+ >
269
+ <DeleteIcon fontSize="small" />
270
+ </IconButton>
271
+ </ActionButtons>
272
+ </RowContainer>
273
+ );
274
+ };
275
+
276
+ export default BmHorizontalCard;
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { action } from '@storybook/addon-actions';
3
+ import BmHorizontalCard from './HorizontalCard';
4
+
5
+ export default {
6
+ title: 'Components/BmHorizontalCard',
7
+ component: BmHorizontalCard,
8
+ tags: ['autodocs'],
9
+ };
10
+
11
+ const sampleResources = [{ id: 1 }, { id: 2 }];
12
+
13
+ export const Example = () => (
14
+ <BmHorizontalCard
15
+ onView={action('View clicked')}
16
+ onDelete={action('Delete clicked')}
17
+ onCopyLink={action('Copy link clicked')}
18
+ name="Strategy Session"
19
+ description="Deep dive on your business strategy and next steps."
20
+ price={150}
21
+ color="#10b981"
22
+ isActive
23
+ location="physical"
24
+ paymentRequired="true"
25
+ selectedResources={sampleResources}
26
+ address="456 Innovation Avenue, Tech City"
27
+ duration={60}
28
+ guest_limit={10}
29
+ editToolTip="edit appointment type"
30
+ deleteToolTip="delete appointment type"
31
+ copyToolTip="copy appointment type link"
32
+ />
33
+ );
@@ -53,8 +53,8 @@ const IconBox = styled.div`
53
53
  color: ${({ iconColor }) => iconColor || '#00000'};
54
54
 
55
55
  @media (min-width: 45.7143rem) {
56
- height: 1.5rem;
57
- width: 1.5rem;
56
+ height: 1.4rem;
57
+ width: 1.4rem;
58
58
  }
59
59
  }
60
60
  `;
@@ -81,7 +81,7 @@ const SummarySubtitle = styled.p`
81
81
  `;
82
82
 
83
83
  const SectionContainer = styled.div`
84
- padding: 0.75rem 1rem;
84
+ padding: 0.6rem 1rem;
85
85
  display: flex;
86
86
  align-items: center;
87
87
  gap: 0.5rem;
@@ -134,8 +134,7 @@ const RowContainer = styled.div`
134
134
  `;
135
135
 
136
136
  const Label = styled.span`
137
- color: rgba(0, 0, 0, 0.6);
138
-
137
+ color: ${({ labelTextColor }) => hexToRgba(labelTextColor || '#000000', 0.6)};
139
138
  @media (max-width: 42.8571rem) {
140
139
  font-size: 0.75rem;
141
140
  }
@@ -143,7 +142,7 @@ const Label = styled.span`
143
142
 
144
143
  const Value = styled.span`
145
144
  font-weight: 500;
146
-
145
+ color: ${({ valueTextColor }) => hexToRgba(valueTextColor || '#000000', 1)};
147
146
  @media (max-width: 42.8571rem) {
148
147
  font-size: 0.75rem;
149
148
  }
@@ -151,7 +150,20 @@ const Value = styled.span`
151
150
 
152
151
  const Divider = styled.hr`
153
152
  border: none;
154
- border-top: 0.0714rem dashed rgba(51, 177, 186, 0.2);
153
+ border-top: ${({
154
+ showDivider,
155
+ dividerColor = '#33b1ba',
156
+ dividerType = 'dashed',
157
+ dividerWitdh = '1px',
158
+ dividerOpacity = '0.2',
159
+ }) => {
160
+ if (showDivider) {
161
+ return `${dividerWitdh} ${dividerType} ${hexToRgba(
162
+ dividerColor,
163
+ dividerOpacity
164
+ )}`;
165
+ }
166
+ }};
155
167
  margin: 1rem auto;
156
168
  max-width: 97%;
157
169
  @media (max-width: 42.8571rem) {
@@ -189,9 +201,21 @@ const Section = ({
189
201
  backgroundColor,
190
202
  iconColor,
191
203
  iconBackgroundColor,
204
+ dividerColor,
205
+ dividerWitdh,
206
+ dividerType,
207
+ dividerOpacity,
192
208
  }) => (
193
209
  <>
194
- {showDivider && <Divider />}
210
+ {showDivider && (
211
+ <Divider
212
+ dividerColor={dividerColor}
213
+ showDivider={showDivider}
214
+ dividerWitdh={dividerWitdh}
215
+ dividerType={dividerType}
216
+ dividerOpacity={dividerOpacity}
217
+ />
218
+ )}
195
219
  <SectionContainer backgroundColor={backgroundColor}>
196
220
  {Icon && (
197
221
  <IconBox
@@ -207,10 +231,10 @@ const Section = ({
207
231
  </>
208
232
  );
209
233
 
210
- const Row = ({ label, value }) => (
234
+ const Row = ({ label, value, labelTextColor, valueTextColor }) => (
211
235
  <RowContainer>
212
- <Label>{label}:</Label>
213
- <Value>{value}</Value>
236
+ <Label labelTextColor={labelTextColor}>{label}:</Label>
237
+ <Value valueTextColor={valueTextColor}>{value}</Value>
214
238
  </RowContainer>
215
239
  );
216
240
 
@@ -31,6 +31,16 @@ export default {
31
31
  iconColor: { control: 'color' },
32
32
  textColor: { control: 'color' },
33
33
  iconBackgroundColor: { control: 'boolean' },
34
+ dividerColor: { control: 'color' },
35
+ dividerWidth: { control: { type: 'text' }, defaultValue: '3px' },
36
+ dividerOpacity: { control: { type: 'text' }, defaultValue: '0.2' },
37
+ dividerType: {
38
+ control: { type: 'select' },
39
+ options: ['dashed', 'solid'],
40
+ defaultValue: 'dashed',
41
+ },
42
+ labelTextColor: { control: 'color' },
43
+ valueTextColor: { control: 'color' },
34
44
  },
35
45
  };
36
46
 
@@ -41,6 +51,12 @@ const Template = ({
41
51
  iconColor,
42
52
  textColor,
43
53
  iconBackgroundColor,
54
+ dividerColor,
55
+ dividerOpacity,
56
+ dividerType,
57
+ dividerWidth,
58
+ labelTextColor,
59
+ valueTextColor,
44
60
  }) => {
45
61
  if (variant === 'summary') {
46
62
  return (
@@ -78,7 +94,12 @@ const Template = ({
78
94
  <BmInfoPanel.Row label="Resource" value="Dr. Smith" />
79
95
  <BmInfoPanel.Row label="Duration" value="30 minutes" />
80
96
  <BmInfoPanel.Row label="Date" value="Monday, June 24, 2025" />
81
- <BmInfoPanel.Row label="Time" value="09:00 AM" />
97
+ <BmInfoPanel.Row
98
+ labelTextColor={labelTextColor}
99
+ valueTextColor={valueTextColor}
100
+ label="Time"
101
+ value="09:00 AM"
102
+ />
82
103
  </BmInfoPanel.Section>
83
104
 
84
105
  <BmInfoPanel.Section
@@ -86,6 +107,10 @@ const Template = ({
86
107
  icon={PersonIcon}
87
108
  showDivider={showDivider}
88
109
  iconColor={iconColor}
110
+ dividerColor={dividerColor}
111
+ dividerType={dividerType}
112
+ dividerOpacity={dividerOpacity}
113
+ dividerWitdh={dividerWidth}
89
114
  >
90
115
  <BmInfoPanel.Row label="Name" value="John Doe" />
91
116
  <BmInfoPanel.Row label="Email" value="john@example.com" />
@@ -103,6 +128,12 @@ Default.args = {
103
128
  iconColor: '#33B1BA',
104
129
  textColor: '#000000',
105
130
  iconBackgroundColor: false,
131
+ dividerColor: '#33b1ba',
132
+ dividerType: 'dashed',
133
+ dividerWidth: '1px',
134
+ dividerOpacity: '0.2',
135
+ labelTextColor: '#e46a8e',
136
+ valueTextColor: '#235e92',
106
137
  };
107
138
 
108
139
  export const ExampleSummary = () => {
@@ -142,7 +173,12 @@ export const ExampleDetails = () => {
142
173
  <BmInfoPanel.Row label="Type" value={appointmentDetails.title} />
143
174
  <BmInfoPanel.Row label="Department" value={formData.departmentName} />
144
175
  <BmInfoPanel.Row label="Resource" value={formData.resourceName} />
145
- <BmInfoPanel.Row label="Duration" value={appointmentDetails.duration} />
176
+ <BmInfoPanel.Row
177
+ labelTextColor="#e46a8e"
178
+ valueTextColor="#235e92"
179
+ label="Duration"
180
+ value={appointmentDetails.duration}
181
+ />
146
182
  <BmInfoPanel.Row label="Date" value={formData.date.toDateString()} />
147
183
  <BmInfoPanel.Row
148
184
  label="Time"
@@ -154,6 +190,10 @@ export const ExampleDetails = () => {
154
190
  title="Personal Information"
155
191
  icon={PersonIcon}
156
192
  showDivider
193
+ dividerColor="#33b1ba"
194
+ dividerType="dashed"
195
+ dividerWitdh="1px"
196
+ dividerOpacity="0.2"
157
197
  >
158
198
  <BmInfoPanel.Row label="Name" value={formData.name} />
159
199
  <BmInfoPanel.Row label="Phone" value={formData.phone} />
@@ -15,7 +15,7 @@ export const Overlay = styled.div`
15
15
  position: fixed;
16
16
  top: 0;
17
17
  left: 0;
18
- z-index: 9999;
18
+ z-index: ${({ zIndex }) => zIndex || 20};
19
19
  width: 100vw;
20
20
  height: 100vh;
21
21
  background-color: ${BmBgGrey45};
@@ -34,7 +34,12 @@ export const ModalContent = styled.div`
34
34
  margin-bottom: 0.5rem;
35
35
  }
36
36
  @media (min-width: 576px) {
37
- width: 500px;
37
+ width: ${({ size }) => {
38
+ if (size) {
39
+ return size;
40
+ }
41
+ return '500px';
42
+ }};
38
43
  }
39
44
  `;
40
45
 
@@ -53,7 +58,15 @@ export const ModalWrapper = styled.div`
53
58
  overflow-y: auto;
54
59
  `;
55
60
 
56
- const BmModal = ({ children, show, size, onHide, centered, ...rest }) => {
61
+ const BmModal = ({
62
+ children,
63
+ show,
64
+ size,
65
+ zIndex,
66
+ onHide,
67
+ centered,
68
+ ...rest
69
+ }) => {
57
70
  const [toggle, setToggle] = useState(show);
58
71
  useEffect(() => {
59
72
  setToggle(show);
@@ -77,7 +90,7 @@ const BmModal = ({ children, show, size, onHide, centered, ...rest }) => {
77
90
  <>
78
91
  {toggle && (
79
92
  <>
80
- <Overlay />
93
+ <Overlay zIndex={zIndex} />
81
94
  <ModalWrapper showModal={show} centered={centered} onHide={onHide}>
82
95
  <Provider value={{ toggle, setToggle, size, show, onHide }}>
83
96
  <ModalContent size={size} {...rest}>