@campxdev/react-blueprint 2.3.4 → 2.3.7

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.
@@ -1,9 +1,10 @@
1
1
  import { FC, MouseEvent } from 'react';
2
2
  export interface IconProps {
3
- color?: string;
4
3
  size?: number;
5
- hoverColor?: string;
4
+ color?: string;
6
5
  disabled?: boolean;
6
+ hoverColor?: string;
7
+ backgroundColor?: string;
7
8
  onClick?: (event: MouseEvent<Element>) => void;
8
9
  }
9
10
  export type IconComponent = FC<IconProps>;
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from 'react';
2
+ import './CustomJoyRideStyles.css';
3
+ interface JoyrideStep {
4
+ target: string;
5
+ content: string | ReactNode;
6
+ title?: string;
7
+ placement?: 'top' | 'bottom' | 'left' | 'right' | 'center' | 'auto';
8
+ disableBeacon?: boolean;
9
+ hideCloseButton?: boolean;
10
+ showProgress?: boolean;
11
+ showSkipButton?: boolean;
12
+ spotlightClicks?: boolean;
13
+ styles?: Record<string, any>;
14
+ }
15
+ export declare const ReactJoyRide: ({ steps, children, tourName, }: {
16
+ steps: JoyrideStep[];
17
+ children?: ReactNode;
18
+ tourName: string;
19
+ }) => import("react/jsx-runtime").JSX.Element;
20
+ export {};
@@ -7,6 +7,7 @@ export * from './Chips/Chips';
7
7
  export * from './DataTable/DataTable';
8
8
  export * from './EditableDataTable/EditableDataTable';
9
9
  export * from './EmptyIllustration/EmptyIllustration';
10
+ export * from './ReactJoyride/ReactJoyride';
10
11
  export * from './SidePanel/SidePanel';
11
12
  export * from './StatusCard/StatusCard';
12
13
  export * from './Timeline/Timeline';
package/dist/index.d.ts CHANGED
@@ -72,10 +72,11 @@ declare const UnAuthorized: ({ component }: {
72
72
  }) => react_jsx_runtime.JSX.Element;
73
73
 
74
74
  interface IconProps {
75
- color?: string;
76
75
  size?: number;
77
- hoverColor?: string;
76
+ color?: string;
78
77
  disabled?: boolean;
78
+ hoverColor?: string;
79
+ backgroundColor?: string;
79
80
  onClick?: (event: MouseEvent$1<Element>) => void;
80
81
  }
81
82
  type IconComponent = FC<IconProps>;
@@ -598,6 +599,24 @@ declare const EmptyIllustration: ({ message, imageSize, messageProps, containerP
598
599
  containerProps?: SxProps;
599
600
  }) => react_jsx_runtime.JSX.Element;
600
601
 
602
+ interface JoyrideStep {
603
+ target: string;
604
+ content: string | ReactNode;
605
+ title?: string;
606
+ placement?: 'top' | 'bottom' | 'left' | 'right' | 'center' | 'auto';
607
+ disableBeacon?: boolean;
608
+ hideCloseButton?: boolean;
609
+ showProgress?: boolean;
610
+ showSkipButton?: boolean;
611
+ spotlightClicks?: boolean;
612
+ styles?: Record<string, any>;
613
+ }
614
+ declare const ReactJoyRide: ({ steps, children, tourName, }: {
615
+ steps: JoyrideStep[];
616
+ children?: ReactNode;
617
+ tourName: string;
618
+ }) => react_jsx_runtime.JSX.Element;
619
+
601
620
  interface SidePanelProps {
602
621
  variables?: {
603
622
  label: string;
@@ -1575,5 +1594,5 @@ declare const splitBreadcrumbIdSlug: (param: string) => {
1575
1594
  declare const isLocal: boolean;
1576
1595
  declare const isDevelopment: boolean;
1577
1596
 
1578
- export { Accordion, AccordionGroup, ActivityLogView, Alert, AnimatedGIFs, AppHeader, AppHeaderV2, AppLayout, BarChart, Breadcrumbs, Button, Calendar, Card, CellContainer, CenterBox, Chips, CircularAvatar, ComingSoon, ConfirmDialog, DataTable, DatePicker, DateTimePicker, DensitySelector, Dialog, DialogButton, DropDownButton, DropDownIcon, DropdownMenu, DropdownMenuItem, EditableDataTable, EditableTableCore, EmptyIllustration, FileUpload, FloatingContent, FloatingHelpDocs, FooterContainerContainer, FormActions, FormControlWrapper, FormWrapper, HelpPopup, IconButtons, Icons, InternalServerError, LabelWrapper, LineChart, MuiThemeProvider, MultiCheckBox, NoInterneConnection, NoItemFound, OtpInput, PageContent, PageHeader, PageNotFound, PasswordField, PieChart, PreviewFiles, ProgressCard, RadioGroup, ResourceNotFound, SearchBar, Select, SidePanel, SidePanelVariables, Sidebar, SingleCheckBox, SingleSelect, Snackbar, Spinner, SquareAvatar, StatusCard, Stepper, StyledContainer, Svgs, Switch, SwitchInstitutionPopup, TableColumnsSelector, TableColumnsSelectorMenuFooter, TabsContainer, TabsLayout, TextField, TimePicker, Timeline, ToolTipContent, Tooltip, Tutorial, Typography, UnAuthorized, UploadDialog, UserProfilePopup, calculateEventStats, createBreadcrumbIdSlug, darkTheme, exportEventsToCSV, filterEventsByDateRange, generateBusinessEvents, generateRecurringEvents, getBreadcrumbsCharacter, groupEventsByDate, isDevelopment, isLocal, lightTheme, reactBlueprintReducers, splitBreadcrumbIdSlug, usePageHeader, useParams, useUrlParams, validateEvent };
1597
+ export { Accordion, AccordionGroup, ActivityLogView, Alert, AnimatedGIFs, AppHeader, AppHeaderV2, AppLayout, BarChart, Breadcrumbs, Button, Calendar, Card, CellContainer, CenterBox, Chips, CircularAvatar, ComingSoon, ConfirmDialog, DataTable, DatePicker, DateTimePicker, DensitySelector, Dialog, DialogButton, DropDownButton, DropDownIcon, DropdownMenu, DropdownMenuItem, EditableDataTable, EditableTableCore, EmptyIllustration, FileUpload, FloatingContent, FloatingHelpDocs, FooterContainerContainer, FormActions, FormControlWrapper, FormWrapper, HelpPopup, IconButtons, Icons, InternalServerError, LabelWrapper, LineChart, MuiThemeProvider, MultiCheckBox, NoInterneConnection, NoItemFound, OtpInput, PageContent, PageHeader, PageNotFound, PasswordField, PieChart, PreviewFiles, ProgressCard, RadioGroup, ReactJoyRide, ResourceNotFound, SearchBar, Select, SidePanel, SidePanelVariables, Sidebar, SingleCheckBox, SingleSelect, Snackbar, Spinner, SquareAvatar, StatusCard, Stepper, StyledContainer, Svgs, Switch, SwitchInstitutionPopup, TableColumnsSelector, TableColumnsSelectorMenuFooter, TabsContainer, TabsLayout, TextField, TimePicker, Timeline, ToolTipContent, Tooltip, Tutorial, Typography, UnAuthorized, UploadDialog, UserProfilePopup, calculateEventStats, createBreadcrumbIdSlug, darkTheme, exportEventsToCSV, filterEventsByDateRange, generateBusinessEvents, generateRecurringEvents, getBreadcrumbsCharacter, groupEventsByDate, isDevelopment, isLocal, lightTheme, reactBlueprintReducers, splitBreadcrumbIdSlug, usePageHeader, useParams, useUrlParams, validateEvent };
1579
1598
  export type { AccordionProps, Activity, ActivityAction, AlertProps, AppHeaderProps, AppHeaderV2Props, AppLayoutProps, BarChartProps, BreadcrumbsProps, ButtonConfig, ButtonProps, CalendarDateClickInfo, CalendarDateSelectInfo, CalendarEvent, CalendarEventClickInfo, CalendarEventDropInfo, CalendarEventResizeInfo, CalendarHeaderToolbar, CalendarProps, CalendarView, CardProps, CheckboxProps, CircularAvatarProps, ConfirmDialogProps, ConfirmDialogType, DataTableProps, DensitySelectorProps, DialogButtonProps, DialogProps, DropdownMenuItemProps, DropdownMenuProps, EditableDataTableProps, EventStats, FileUploadProps, FloatingContainerProps, FormActionsProps, HelpDocsAction, HelpDocsConfig, IconComponent, IconProps, IconsType, LineChartProps, MultiCheckboxProps, OtpInputProps, PageContentProps, PasswordFieldProps, PieChartProps, PreviewFilesProps, ProgressCardProps, RadioGroupProps, RecurringEventConfig, SearchBarProps, SelectProps, Severity, SideMenuItemProps, SidePanelProps, SingleSelectProps, SnackbarProps, SquareAvatarProps, StatusCardProps, SubMenuItemProps, SwitchProps, TableColumnsSelectorProps, TabsContainerProps, TextFieldProps, TimelineItems, TimelineProps, TooltipContentProps, TooltipProps, TypographyProps, UploadDialogProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@campxdev/react-blueprint",
3
- "version": "2.3.4",
3
+ "version": "2.3.7",
4
4
  "description": "React UI component library for CampX applications",
5
5
  "author": "CampX",
6
6
  "license": "MIT",
@@ -1,8 +1,8 @@
1
1
  import { AcademicFeesIcon } from './IconComponents/AcademicFeesIcon';
2
2
  import { AcademicsIcon } from './IconComponents/AcademicIcon';
3
- import { ActivitiesIcon } from './IconComponents/ActivitiesIcon';
4
3
  import { AccordionArrow } from './IconComponents/AccordionArrow';
5
4
  import { ActiveDevicesIcon } from './IconComponents/ActiveDevicesIcon';
5
+ import { ActivitiesIcon } from './IconComponents/ActivitiesIcon';
6
6
  import { ActivitylogsIcon } from './IconComponents/ActivityLogsIcon';
7
7
  import { AddSquare } from './IconComponents/AddSquare';
8
8
  import { AdminIcon } from './IconComponents/AdminIcon';
@@ -176,10 +176,11 @@ import { FC, MouseEvent } from 'react';
176
176
  import { ChallansIcon } from './IconComponents/ChallansIcon';
177
177
 
178
178
  export interface IconProps {
179
- color?: string;
180
179
  size?: number;
181
- hoverColor?: string;
180
+ color?: string;
182
181
  disabled?: boolean;
182
+ hoverColor?: string;
183
+ backgroundColor?: string;
183
184
  onClick?: (event: MouseEvent<Element>) => void;
184
185
  }
185
186
 
@@ -0,0 +1,84 @@
1
+ /* Modern ReactJoyride Styles */
2
+ .react-joyride__tooltip {
3
+ background-color: #ffffff !important;
4
+ border-radius: 12px !important;
5
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) !important;
6
+ border: 1px solid #f3f4f6 !important;
7
+ font-family: 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif !important;
8
+ padding-top: 16px !important;
9
+ }
10
+
11
+ .react-joyride__tooltip div {
12
+ text-align: left !important;
13
+ }
14
+
15
+
16
+ .react-joyride__tooltip > div:nth-child(1) div:nth-child(2) {
17
+ padding: 0 !important;
18
+ font-size: 14px !important;
19
+ line-height: 1.5 !important;
20
+ color: #4b5563 !important;
21
+ }
22
+
23
+ /* Adjust skip button positioning */
24
+ .react-joyride__tooltip button[data-action="skip"] {
25
+ top: 16px !important;
26
+ right: 16px !important;
27
+ }
28
+
29
+ /* Beacon styling */
30
+ .react-joyride__beacon {
31
+ background-color: #3b82f6 !important;
32
+ border: 3px solid #3b82f6 !important;
33
+ border-radius: 50% !important;
34
+ box-shadow: 0 0 0 6px rgba(59, 130, 246, 0.2) !important;
35
+ }
36
+
37
+ .react-joyride__beacon::before {
38
+ background-color: #3b82f6 !important;
39
+ animation: joyride-beacon-pulse 1.5s ease-in-out infinite !important;
40
+ }
41
+
42
+ /* Button hover effects */
43
+ .react-joyride__tooltip button[data-action="next"]:hover {
44
+ background-color: #000000 !important;
45
+ transform: translateY(-1px) !important;
46
+ }
47
+
48
+ .react-joyride__tooltip button[data-action="back"]:hover {
49
+ background-color: #f9fafb !important;
50
+ border-color: #d1d5db !important;
51
+ }
52
+
53
+ .react-joyride__tooltip button[data-action="skip"]:hover {
54
+ background-color: #f3f4f6 !important;
55
+ color: #374151 !important;
56
+ }
57
+
58
+ /* Progress indicator */
59
+ .react-joyride__tooltip .react-joyride__tooltip-footer {
60
+ margin-top: 16px !important;
61
+ padding-top: 16px !important;
62
+ border-top: 1px solid #f3f4f6 !important;
63
+ }
64
+
65
+ /* Arrow styling */
66
+ .react-joyride__tooltip-arrow {
67
+ filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1)) !important;
68
+ }
69
+
70
+ /* Custom keyframe for beacon pulse */
71
+ @keyframes joyride-beacon-pulse {
72
+ 0% {
73
+ transform: scale(1);
74
+ opacity: 1;
75
+ }
76
+ 50% {
77
+ transform: scale(1.2);
78
+ opacity: 0.7;
79
+ }
80
+ 100% {
81
+ transform: scale(1);
82
+ opacity: 1;
83
+ }
84
+ }
@@ -0,0 +1,264 @@
1
+ import { Box, Button, Typography } from '@mui/material';
2
+ import { ReactNode, useState } from 'react';
3
+ import Joyride, { CallBackProps } from 'react-joyride';
4
+ import './CustomJoyRideStyles.css';
5
+
6
+ interface JoyrideStep {
7
+ target: string;
8
+ content: string | ReactNode;
9
+ title?: string;
10
+ placement?: 'top' | 'bottom' | 'left' | 'right' | 'center' | 'auto';
11
+ disableBeacon?: boolean;
12
+ hideCloseButton?: boolean;
13
+ showProgress?: boolean;
14
+ showSkipButton?: boolean;
15
+ spotlightClicks?: boolean;
16
+ styles?: Record<string, any>;
17
+ }
18
+
19
+ export const ReactJoyRide = ({
20
+ steps,
21
+ children,
22
+ tourName,
23
+ }: {
24
+ steps: JoyrideStep[];
25
+ children?: ReactNode;
26
+ tourName: string;
27
+ }) => {
28
+ const [run, setRun] = useState(false);
29
+ const [stepIndex, setStepIndex] = useState(0);
30
+
31
+ const handleJoyRideCallback = (data: CallBackProps) => {
32
+ const { action, status, index } = data;
33
+
34
+ if (action === 'next' || action === 'prev') {
35
+ setStepIndex(index + (action === 'next' ? 1 : 0));
36
+ }
37
+
38
+ if (action === 'reset') {
39
+ setRun(false);
40
+ setStepIndex(0);
41
+ }
42
+ };
43
+
44
+ const customSteps = steps.map((step, index) => {
45
+ const customStep = {
46
+ ...step,
47
+ title: '', // Remove the automatic title
48
+ content: (
49
+ <Box
50
+ sx={{
51
+ fontFamily: 'Roboto, sans-serif',
52
+ display: 'flex',
53
+ flexDirection: 'column',
54
+ }}
55
+ >
56
+ <Typography
57
+ variant="caption"
58
+ sx={{
59
+ color: '#6b7280',
60
+ fontWeight: 500,
61
+ textTransform: 'uppercase',
62
+ letterSpacing: '0.5px',
63
+ fontSize: '11px',
64
+ }}
65
+ >
66
+ Step {index + 1}
67
+ </Typography>
68
+ <Box sx={{ padding: '4px 0' }}>
69
+ <Typography
70
+ sx={{
71
+ lineHeight: 1.5,
72
+ color: '#4b5563',
73
+ fontFamily: 'Poppins, sans-serif',
74
+ fontSize: '16px',
75
+ fontWeight: '600',
76
+ marginTop: '12px',
77
+ }}
78
+ >
79
+ {step.title}
80
+ </Typography>
81
+ </Box>
82
+ <Box sx={{ padding: '4px 0' }}>
83
+ <Typography
84
+ sx={{
85
+ fontSize: '14px',
86
+ lineHeight: 1.5,
87
+ color: '#4b5563',
88
+ fontFamily: 'Heebo, sans-serif',
89
+ fontWeight: '500',
90
+ }}
91
+ >
92
+ {step.content}
93
+ </Typography>
94
+ </Box>
95
+ </Box>
96
+ ),
97
+ };
98
+ return customStep;
99
+ });
100
+
101
+ return (
102
+ <>
103
+ <Box>
104
+ {/* @ts-ignore */}
105
+ <Joyride
106
+ callback={handleJoyRideCallback}
107
+ run={run}
108
+ steps={customSteps as any[]}
109
+ styles={
110
+ {
111
+ options: {
112
+ primaryColor: '#121212',
113
+ textColor: '#1f2937',
114
+ backgroundColor: '#ffffff',
115
+ overlayColor: 'rgba(0, 0, 0, 0.4)',
116
+ arrowColor: '#ffffff',
117
+ zIndex: 1000,
118
+ },
119
+ tooltip: {
120
+ borderRadius: '12px',
121
+ boxShadow:
122
+ '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
123
+ fontSize: '14px',
124
+ padding: '20px',
125
+ minWidth: '320px',
126
+ maxWidth: '400px',
127
+ },
128
+ tooltipContainer: {
129
+ textAlign: 'left' as const,
130
+ },
131
+ tooltipTitle: {
132
+ fontSize: '16px',
133
+ fontWeight: '600',
134
+ color: '#1f2937',
135
+ fontFamily: 'Poppins, sans-serif',
136
+ },
137
+ tooltipContent: {
138
+ fontSize: '14px',
139
+ lineHeight: '1.5',
140
+ color: '#4b5563',
141
+ padding: '0',
142
+ fontFamily: 'Heebo, sans-serif !important',
143
+ fontWeight: '400',
144
+ },
145
+ buttonNext: {
146
+ backgroundColor: '#121212',
147
+ color: 'white',
148
+ borderRadius: '8px',
149
+ fontSize: '14px',
150
+ fontWeight: '500',
151
+ height: '40px',
152
+ minWidth: '80px',
153
+ padding: '0 16px',
154
+ border: 'none',
155
+ cursor: 'pointer' as const,
156
+ transition: 'all 0.2s ease',
157
+ fontFamily: 'Roboto, sans-serif',
158
+ },
159
+ buttonBack: {
160
+ backgroundColor: 'transparent',
161
+ color: '#121212',
162
+ borderRadius: '8px',
163
+ fontSize: '14px',
164
+ fontWeight: '500',
165
+ height: '40px',
166
+ minWidth: '80px',
167
+ padding: '0 16px',
168
+ border: '1.5px solid #e5e7eb',
169
+ cursor: 'pointer' as const,
170
+ transition: 'all 0.2s ease',
171
+ marginRight: '8px',
172
+ fontFamily: 'Roboto, sans-serif',
173
+ },
174
+ buttonSkip: {
175
+ backgroundColor: 'transparent',
176
+ color: '#6b7280',
177
+ fontSize: '13px',
178
+ fontWeight: '500',
179
+ border: 'none',
180
+ cursor: 'pointer' as const,
181
+ position: 'absolute' as const,
182
+ top: '16px',
183
+ right: '16px',
184
+ padding: '4px 8px',
185
+ borderRadius: '6px',
186
+ transition: 'all 0.2s ease',
187
+ fontFamily: 'Roboto, sans-serif',
188
+ },
189
+ buttonClose: {
190
+ display: 'none' as const,
191
+ },
192
+ beacon: {
193
+ backgroundColor: '#3b82f6',
194
+ borderRadius: '50%',
195
+ border: '3px solid #3b82f6',
196
+ boxShadow: '0 0 0 6px rgba(59, 130, 246, 0.2)',
197
+ },
198
+ beaconInner: {
199
+ backgroundColor: '#3b82f6',
200
+ borderRadius: '50%',
201
+ },
202
+ } as any
203
+ }
204
+ continuous
205
+ showSkipButton
206
+ showProgress
207
+ scrollToFirstStep
208
+ disableOverlay={false}
209
+ disableOverlayClose
210
+ disableScrolling={false}
211
+ hideCloseButton
212
+ locale={{
213
+ last: 'Finish',
214
+ next: 'Next',
215
+ skip: 'Skip',
216
+ back: 'Previous',
217
+ }}
218
+ />
219
+
220
+ {children}
221
+
222
+ <Button
223
+ onClick={() => setRun(true)}
224
+ variant="contained"
225
+ sx={{
226
+ position: 'fixed',
227
+ top: '50%',
228
+ right: '0px',
229
+ transform: 'translateY(-50%)',
230
+ zIndex: 1000,
231
+ borderRadius: '8px 0 0 8px',
232
+ backgroundColor: '#E0E0E7',
233
+ color: '#4b5261ff',
234
+ fontSize: '14px',
235
+ fontWeight: 500,
236
+ padding: '60px 4px',
237
+ minWidth: 'auto',
238
+ textTransform: 'none',
239
+ border: '1px solid #D0D0E3',
240
+ borderRight: 'none',
241
+ fontFamily: 'Roboto, sans-serif',
242
+ letterSpacing: '0.025em',
243
+ writingMode: 'vertical-rl',
244
+ textOrientation: 'mixed',
245
+ whiteSpace: 'nowrap',
246
+ transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 2)',
247
+ '&:hover': {
248
+ backgroundColor: '#1E027F',
249
+ color: 'white',
250
+ boxShadow:
251
+ '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
252
+ transform: 'translateY(-50%) translateX(-4px)',
253
+ },
254
+ '&:active': {
255
+ transform: 'translateY(-50%) translateX(0px)',
256
+ },
257
+ }}
258
+ >
259
+ Take a Tour
260
+ </Button>
261
+ </Box>
262
+ </>
263
+ );
264
+ };
@@ -7,6 +7,7 @@ export * from './Chips/Chips';
7
7
  export * from './DataTable/DataTable';
8
8
  export * from './EditableDataTable/EditableDataTable';
9
9
  export * from './EmptyIllustration/EmptyIllustration';
10
+ export * from './ReactJoyride/ReactJoyride';
10
11
  export * from './SidePanel/SidePanel';
11
12
  export * from './StatusCard/StatusCard';
12
13
  export * from './Timeline/Timeline';
@@ -76,4 +76,7 @@ const MainContent = styled(Box)(({ theme }: { theme?: any }) => ({
76
76
  '&::-webkit-scrollbar': {
77
77
  display: 'none', // Safari and Chrome
78
78
  },
79
+ [theme.breakpoints.down('md')]: {
80
+ padding: '0 8px',
81
+ },
79
82
  }));
@@ -26,9 +26,10 @@ const AppBarContainer = styled('header')(({ theme }: { theme?: any }) => ({
26
26
  flexShrink: 0, // Prevent AppBar from shrinking
27
27
 
28
28
  [theme.breakpoints.down('md')]: {
29
- height: '56px',
30
- minHeight: '56px',
31
- padding: '0 16px',
29
+ height: '54px',
30
+ minHeight: '54px',
31
+ padding: '0 16px 0px 0px',
32
+ backgroundColor: theme.palette.surface.paperBackground,
32
33
  },
33
34
 
34
35
  // Ensure proper spacing for child elements
@@ -75,6 +76,9 @@ export const AppBar: React.FC<AppBarProps> = ({
75
76
  padding: '24px',
76
77
  backgroundColor: theme.palette.secondary.light,
77
78
  borderRadius: '0px',
79
+ [theme.breakpoints.down('md')]: {
80
+ padding: '20px',
81
+ },
78
82
  }}
79
83
  >
80
84
  <HamburgerMenuIcon />