goobs-frontend 0.7.60 → 0.7.63

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.
@@ -25,23 +25,47 @@ import {
25
25
  } from '../../../styles/palette'
26
26
  import { Typography } from './../../Typography'
27
27
 
28
+ /**
29
+ * Props for the VerticalVariant component.
30
+ */
28
31
  export interface VerticalVariantProps {
32
+ /** An array of navigation items, sub-navigation items, or views. */
29
33
  items: (NavProps | SubNav | View)[]
34
+ /** Determines whether to show the search bar. */
30
35
  showSearchbar: boolean
36
+ /** Determines whether to show the dropdown. */
31
37
  showDropdown: boolean
38
+ /** Determines whether to show the title. */
32
39
  showTitle: boolean
40
+ /** Determines whether to show a divider line. */
33
41
  showLine: boolean
42
+ /** The title of the vertical navigation. */
34
43
  verticalNavTitle: string
44
+ /** The label for the dropdown. */
35
45
  dropdownLabel: string
46
+ /** The label for the search bar. */
36
47
  searchbarLabel: string
48
+ /** The anchor position of the drawer ('left' or 'right'). */
37
49
  anchor: 'left' | 'right'
50
+ /** An array of expanded navigation items. */
38
51
  expandedNavs: string[]
52
+ /** Function to set the expanded navigation items. */
39
53
  setExpandedNavs: React.Dispatch<React.SetStateAction<string[]>>
54
+ /** An array of expanded sub-navigation items. */
40
55
  expandedSubnavs: string[]
56
+ /** Function to set the expanded sub-navigation items. */
41
57
  setExpandedSubnavs: React.Dispatch<React.SetStateAction<string[]>>
58
+ /** The width of the vertical navigation drawer. */
42
59
  verticalNavWidth: string
43
60
  }
44
61
 
62
+ /**
63
+ * VerticalVariant component that renders a vertical navigation drawer.
64
+ * It supports nested navigation items, sub-navigation items, and views.
65
+ *
66
+ * @param {VerticalVariantProps} props - The props for the VerticalVariant component.
67
+ * @returns {JSX.Element} The rendered VerticalVariant component.
68
+ */
45
69
  function VerticalVariant({
46
70
  items,
47
71
  showSearchbar,
@@ -60,10 +84,19 @@ function VerticalVariant({
60
84
  }: VerticalVariantProps) {
61
85
  const router = useRouter()
62
86
 
87
+ /**
88
+ * Extracts navigation options from the items array.
89
+ */
63
90
  const navOptions = items
64
91
  .filter((item): item is NavProps => 'title' in item && 'subnavs' in item)
65
92
  .map(nav => nav.title ?? '')
66
93
 
94
+ /**
95
+ * Handles click events on navigation items.
96
+ * Supports different trigger types: route and onClick.
97
+ *
98
+ * @param {NavProps} nav - The navigation item that was clicked.
99
+ */
67
100
  const handleNavClick = (nav: NavProps) => {
68
101
  console.log('Clicked Nav:', nav.title)
69
102
  if (nav.trigger === 'route') {
@@ -77,6 +110,14 @@ function VerticalVariant({
77
110
  }
78
111
  }
79
112
 
113
+ /**
114
+ * Recursively renders navigation items, sub-navigation items, and views.
115
+ *
116
+ * @param {NavProps | SubNav | View} item - The item to render.
117
+ * @param {number} level - The nesting level of the item.
118
+ * @param {string} [activeAndHoverColor] - The color to use for active and hover states.
119
+ * @returns {JSX.Element | null} The rendered item or null if the item type is not recognized.
120
+ */
80
121
  const renderItem = (
81
122
  item: NavProps | SubNav | View,
82
123
  level: number,
@@ -1,9 +1,8 @@
1
1
  'use client'
2
- import React, { useState, useEffect, useMemo } from 'react'
2
+ import React, { useState, useMemo } from 'react'
3
3
  import type { JSX } from 'react'
4
4
  import HorizontalVariant from './HorizontalVariant'
5
5
  import VerticalVariant from './VerticalVariant'
6
- import { get, JSONValue } from 'goobs-cache'
7
6
 
8
7
  // Type definition for alignment options
9
8
  type Alignment = 'left' | 'center' | 'right' | 'inherit' | 'justify'
@@ -78,7 +77,7 @@ function Nav({
78
77
  // State for expanded navigation items
79
78
  const [expandedNavs, setExpandedNavs] = useState<string[]>([])
80
79
  const [expandedSubnavs, setExpandedSubnavs] = useState<string[]>([])
81
- const [verticalNavWidth, setVerticalNavWidth] = useState<number>(250) // Default width
80
+ const [verticalNavWidth] = useState<number>(250) // Default width, no longer using goobs-cache
82
81
 
83
82
  // Memoized navigation items
84
83
  const navs = useMemo(() => {
@@ -97,17 +96,6 @@ function Nav({
97
96
  return navs
98
97
  }, [items])
99
98
 
100
- // Effect to fetch vertical nav width from cache
101
- useEffect(() => {
102
- const fetchVerticalNavWidth = async () => {
103
- const result = await get('verticalNavWidth', 'client')
104
- if (result && typeof result === 'object' && 'value' in result) {
105
- setVerticalNavWidth((result as JSONValue).value as number)
106
- }
107
- }
108
- fetchVerticalNavWidth()
109
- }, [])
110
-
111
99
  // Render vertical or horizontal variant based on orientation
112
100
  if (orientation === 'vertical') {
113
101
  return (
@@ -12,7 +12,6 @@ const defaultConfig: PricingProps = {
12
12
  gridname: 'pricingtableheader',
13
13
  alignment: 'center' as Alignment,
14
14
  margintop: 1,
15
- marginbottom: 0,
16
15
  gridwidth: '100%',
17
16
  },
18
17
  // Configuration for the table title
@@ -23,15 +22,11 @@ const defaultConfig: PricingProps = {
23
22
  column: 1,
24
23
  gridname: 'pricingtableheader',
25
24
  alignment: 'left' as Alignment,
26
- marginleft: 1,
25
+ marginleft: 3,
26
+ marginbottom: 1,
27
27
  mobilewidth: '100%',
28
28
  tabletwidth: '100%',
29
29
  computerwidth: '100%',
30
- cellconfig: {
31
- border: 'none',
32
- minHeight: '40px',
33
- width: '100%',
34
- },
35
30
  },
36
31
  },
37
32
  // Configuration for package columns
@@ -41,16 +36,9 @@ const defaultConfig: PricingProps = {
41
36
  column: 2,
42
37
  gridname: 'pricingtableheader',
43
38
  alignment: 'center' as Alignment,
44
- marginleft: 1,
45
- marginbottom: 1,
46
39
  mobilewidth: '80%',
47
- tabletwidth: '45%',
48
- computerwidth: '45%',
49
- cellconfig: {
50
- border: 'none',
51
- minHeight: '40px',
52
- width: '100%',
53
- },
40
+ tabletwidth: '48%',
41
+ computerwidth: '48%',
54
42
  },
55
43
  },
56
44
  // Configuration for monthly pricing
@@ -60,15 +48,10 @@ const defaultConfig: PricingProps = {
60
48
  row: 2,
61
49
  column: 1,
62
50
  mobilewidth: '100%',
63
- tabletwidth: '45%',
64
- computerwidth: '45%',
51
+ tabletwidth: '48%',
52
+ computerwidth: '48%',
65
53
  gridname: 'pricingtableheader',
66
54
  alignment: 'center' as Alignment,
67
- cellconfig: {
68
- border: 'none',
69
- minHeight: '40px',
70
- width: '100%',
71
- },
72
55
  },
73
56
  },
74
57
  // Configuration for annual pricing
@@ -78,15 +61,10 @@ const defaultConfig: PricingProps = {
78
61
  row: 2,
79
62
  column: 2,
80
63
  mobilewidth: '100%',
81
- tabletwidth: '45%',
82
- computerwidth: '45%',
64
+ tabletwidth: '48%',
65
+ computerwidth: '48%',
83
66
  gridname: 'pricingtableheader',
84
67
  alignment: 'center' as Alignment,
85
- cellconfig: {
86
- border: 'none',
87
- minHeight: '40px',
88
- width: '100%',
89
- },
90
68
  },
91
69
  },
92
70
  // Configuration for the feature grid
@@ -105,15 +83,10 @@ const defaultConfig: PricingProps = {
105
83
  row: 1,
106
84
  column: 1,
107
85
  mobilewidth: '80%',
108
- tabletwidth: '50%',
109
- computerwidth: '50%',
86
+ tabletwidth: '48%',
87
+ computerwidth: '48%',
110
88
  gridname: 'pricingtablefeatures',
111
89
  alignment: 'left' as Alignment,
112
- marginleft: 1,
113
- cellconfig: {
114
- border: 'solid',
115
- minHeight: '40px',
116
- },
117
90
  },
118
91
  tiedtopackage: {
119
92
  tiedtopackages: 'true',
@@ -121,34 +94,24 @@ const defaultConfig: PricingProps = {
121
94
  row: 1,
122
95
  column: 2,
123
96
  mobilewidth: '20%',
124
- tabletwidth: '50%',
125
- computerwidth: '50%',
97
+ tabletwidth: '48%',
98
+ computerwidth: '48%',
126
99
  gridname: 'pricingtablefeatures',
127
100
  alignment: 'center' as Alignment,
128
- cellconfig: {
129
- border: 'solid',
130
- minHeight: '40px',
131
- },
132
101
  },
133
102
  },
134
103
  subfeatures: [
135
104
  {
136
105
  title: 'Pricing Table',
137
- titlelink: '',
138
106
  infopopuptext: 'Pricing table subfeature info',
139
107
  columnconfig: {
140
108
  row: 2,
141
109
  column: 1,
142
110
  mobilewidth: '80%',
143
- tabletwidth: '50%',
144
- computerwidth: '50%',
111
+ tabletwidth: '48%',
112
+ computerwidth: '48%',
145
113
  gridname: 'pricingtablefeatures',
146
114
  alignment: 'left' as Alignment,
147
- marginleft: 3,
148
- cellconfig: {
149
- border: 'solid',
150
- minHeight: '40px',
151
- },
152
115
  },
153
116
  tiedtopackage: {
154
117
  tiedtopackages: 'true',
@@ -156,14 +119,10 @@ const defaultConfig: PricingProps = {
156
119
  row: 2,
157
120
  column: 2,
158
121
  mobilewidth: '20%',
159
- tabletwidth: '50%',
160
- computerwidth: '50%',
122
+ tabletwidth: '48%',
123
+ computerwidth: '48%',
161
124
  gridname: 'pricingtablefeatures',
162
125
  alignment: 'center' as Alignment,
163
- cellconfig: {
164
- border: 'solid',
165
- minHeight: '40px',
166
- },
167
126
  },
168
127
  },
169
128
  },
@@ -175,15 +134,10 @@ const defaultConfig: PricingProps = {
175
134
  row: 3,
176
135
  column: 1,
177
136
  mobilewidth: '80%',
178
- tabletwidth: '50%',
179
- computerwidth: '50%',
137
+ tabletwidth: '48%',
138
+ computerwidth: '48%',
180
139
  gridname: 'pricingtablefeatures',
181
140
  alignment: 'left' as Alignment,
182
- marginleft: 3,
183
- cellconfig: {
184
- border: 'solid',
185
- minHeight: '40px',
186
- },
187
141
  },
188
142
  tiedtopackage: {
189
143
  tiedtopackages: 'true',
@@ -191,14 +145,10 @@ const defaultConfig: PricingProps = {
191
145
  row: 3,
192
146
  column: 2,
193
147
  mobilewidth: '20%',
194
- tabletwidth: '50%',
195
- computerwidth: '50%',
148
+ tabletwidth: '48%',
149
+ computerwidth: '48%',
196
150
  gridname: 'pricingtablefeatures',
197
151
  alignment: 'center' as Alignment,
198
- cellconfig: {
199
- border: 'solid',
200
- minHeight: '40px',
201
- },
202
152
  },
203
153
  },
204
154
  },
@@ -211,15 +161,10 @@ const defaultConfig: PricingProps = {
211
161
  row: 4,
212
162
  column: 1,
213
163
  mobilewidth: '80%',
214
- tabletwidth: '50%',
215
- computerwidth: '50%',
164
+ tabletwidth: '48%',
165
+ computerwidth: '48%',
216
166
  gridname: 'pricingtablefeatures',
217
167
  alignment: 'left' as Alignment,
218
- marginleft: 1,
219
- cellconfig: {
220
- border: 'solid',
221
- minHeight: '40px',
222
- },
223
168
  },
224
169
  tiedtopackage: {
225
170
  tiedtopackages: 'true',
@@ -227,14 +172,10 @@ const defaultConfig: PricingProps = {
227
172
  row: 4,
228
173
  column: 2,
229
174
  mobilewidth: '20%',
230
- tabletwidth: '50%',
231
- computerwidth: '50%',
175
+ tabletwidth: '48%',
176
+ computerwidth: '48%',
232
177
  gridname: 'pricingtablefeatures',
233
178
  alignment: 'center' as Alignment,
234
- cellconfig: {
235
- border: 'solid',
236
- minHeight: '40px',
237
- },
238
179
  },
239
180
  },
240
181
  subfeatures: [
@@ -247,14 +188,9 @@ const defaultConfig: PricingProps = {
247
188
  column: 1,
248
189
  mobilewidth: '80%',
249
190
  tabletwidth: '50%',
250
- computerwidth: '50%',
191
+ computerwidth: '48%',
251
192
  gridname: 'pricingtablefeatures',
252
193
  alignment: 'left' as Alignment,
253
- marginleft: 3,
254
- cellconfig: {
255
- border: 'solid',
256
- minHeight: '40px',
257
- },
258
194
  },
259
195
  tiedtopackage: {
260
196
  tiedtopackages: 'true',
@@ -262,14 +198,10 @@ const defaultConfig: PricingProps = {
262
198
  row: 5,
263
199
  column: 2,
264
200
  mobilewidth: '20%',
265
- tabletwidth: '50%',
266
- computerwidth: '50%',
201
+ tabletwidth: '48%',
202
+ computerwidth: '48%',
267
203
  gridname: 'pricingtablefeatures',
268
204
  alignment: 'center' as Alignment,
269
- cellconfig: {
270
- border: 'solid',
271
- minHeight: '40px',
272
- },
273
205
  },
274
206
  },
275
207
  },
@@ -281,15 +213,10 @@ const defaultConfig: PricingProps = {
281
213
  row: 6,
282
214
  column: 1,
283
215
  mobilewidth: '80%',
284
- tabletwidth: '50%',
285
- computerwidth: '50%',
216
+ tabletwidth: '48%',
217
+ computerwidth: '48%',
286
218
  gridname: 'pricingtablefeatures',
287
219
  alignment: 'left' as Alignment,
288
- marginleft: 3,
289
- cellconfig: {
290
- border: 'solid',
291
- minHeight: '40px',
292
- },
293
220
  },
294
221
  tiedtopackage: {
295
222
  tiedtopackages: 'true',
@@ -297,14 +224,10 @@ const defaultConfig: PricingProps = {
297
224
  row: 6,
298
225
  column: 2,
299
226
  mobilewidth: '20%',
300
- tabletwidth: '50%',
301
- computerwidth: '50%',
227
+ tabletwidth: '48%',
228
+ computerwidth: '48%',
302
229
  gridname: 'pricingtablefeatures',
303
230
  alignment: 'center' as Alignment,
304
- cellconfig: {
305
- border: 'solid',
306
- minHeight: '40px',
307
- },
308
231
  },
309
232
  },
310
233
  },
@@ -319,15 +242,12 @@ const defaultConfig: PricingProps = {
319
242
  row: 7,
320
243
  column: 2,
321
244
  mobilewidth: '100%',
322
- tabletwidth: '50%',
323
- computerwidth: '50%',
245
+ marginbottom: 1,
246
+ marginright: 1,
247
+ tabletwidth: '100%',
248
+ computerwidth: '48%',
324
249
  gridname: 'pricingtablefeatures',
325
250
  alignment: 'center' as Alignment,
326
- cellconfig: {
327
- border: 'none',
328
- minHeight: '50px',
329
- width: '50%',
330
- },
331
251
  },
332
252
  },
333
253
  }
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- import React, { useState } from 'react'
2
+ import React from 'react'
3
3
  import { Box, Paper } from '@mui/material'
4
4
  import InfoIcon from '@mui/icons-material/Info'
5
5
  import CheckCircleIcon from '@mui/icons-material/CheckCircle'
@@ -87,9 +87,6 @@ const PricingTable: React.FC<PricingProps> = props => {
87
87
  // Merge default config with provided props
88
88
  const config: PricingProps = { ...defaultConfig, ...props }
89
89
 
90
- // State for selected package
91
- const [selectedPackage] = useState<string>('goobs-frontend-unlimited')
92
-
93
90
  const router = useRouter()
94
91
 
95
92
  /**
@@ -125,10 +122,10 @@ const PricingTable: React.FC<PricingProps> = props => {
125
122
  shrunklabellocation="above"
126
123
  componentvariant="dropdown"
127
124
  shrunkfontcolor={black.main}
128
- value={selectedPackage}
129
125
  outlinecolor={black.main}
130
126
  backgroundcolor={semiTransparentBlack.main}
131
- options={['ThothOS']}
127
+ defaultOption="ThothOS"
128
+ options={['ThothOS', 'ThothOS Pro', 'ThothOS Enterprise']}
132
129
  />
133
130
  ),
134
131
  })
@@ -142,7 +139,7 @@ const PricingTable: React.FC<PricingProps> = props => {
142
139
  <Typography
143
140
  text={config.monthlyprice.prices}
144
141
  fontcolor={black.main}
145
- fontvariant="merrih6"
142
+ fontvariant="merrih5"
146
143
  />
147
144
  ),
148
145
  })
@@ -156,7 +153,7 @@ const PricingTable: React.FC<PricingProps> = props => {
156
153
  <Typography
157
154
  text={config.annualprice.annualprices}
158
155
  fontcolor={black.main}
159
- fontvariant="merrih6"
156
+ fontvariant="merrih5"
160
157
  />
161
158
  ),
162
159
  })
@@ -203,7 +200,6 @@ const PricingTable: React.FC<PricingProps> = props => {
203
200
  const tiedConfig: columnconfig = {
204
201
  ...feature.tiedtopackage.columnconfig,
205
202
  cellconfig: {
206
- border: 'solid',
207
203
  minHeight: '40px',
208
204
  },
209
205
  component: feature.tiedtopackage.tiedtopackages ? (
@@ -225,7 +221,7 @@ const PricingTable: React.FC<PricingProps> = props => {
225
221
  <Typography
226
222
  text={subFeature.title}
227
223
  fontcolor={black.main}
228
- fontvariant="merrih6"
224
+ fontvariant="merriparagraph"
229
225
  noWrap
230
226
  />
231
227
  {subFeature.infopopuptext && (
@@ -252,7 +248,6 @@ const PricingTable: React.FC<PricingProps> = props => {
252
248
  const tiedConfig: columnconfig = {
253
249
  ...subFeature.tiedtopackage.columnconfig,
254
250
  cellconfig: {
255
- border: 'solid',
256
251
  minHeight: '40px',
257
252
  },
258
253
  component: subFeature.tiedtopackage.tiedtopackages ? (
@@ -281,6 +276,7 @@ const PricingTable: React.FC<PricingProps> = props => {
281
276
  fontcolor={white.main}
282
277
  backgroundcolor={black.main}
283
278
  href={buttonLink}
279
+ width="100%"
284
280
  onClick={() => router.push(buttonLink)}
285
281
  text={config.buttoncolumns.buttontexts}
286
282
  />
@@ -1,4 +1,4 @@
1
- import React, { useState } from 'react'
1
+ import React from 'react'
2
2
  import { InputAdornment, Button, Box } from '@mui/material'
3
3
  import SearchIcon from '../../Icons/Search'
4
4
  import ShowHideEyeIcon from '../../Icons/ShowHideEye'
@@ -11,6 +11,7 @@ export interface AdornmentProps {
11
11
  componentvariant: string
12
12
  iconcolor?: string
13
13
  passwordVisible?: boolean
14
+ togglePasswordVisibility?: () => void
14
15
  marginRight?: number | string
15
16
  handleIncrement?: () => void
16
17
  handleDecrement?: () => void
@@ -43,18 +44,15 @@ export const EndAdornment: React.FC<AdornmentProps> = props => {
43
44
  const {
44
45
  componentvariant,
45
46
  passwordVisible,
47
+ togglePasswordVisibility,
46
48
  handleIncrement,
47
49
  handleDecrement,
48
50
  } = props
49
- const [isPasswordVisible, setIsPasswordVisible] = useState(
50
- passwordVisible || false
51
- )
51
+
52
52
  const adornmentStyle = {
53
53
  cursor: 'pointer',
54
54
  }
55
- const togglePasswordVisibility = () => {
56
- setIsPasswordVisible(!isPasswordVisible)
57
- }
55
+
58
56
  // Render the show/hide eye icon for the password variant
59
57
  if (componentvariant === 'password') {
60
58
  return (
@@ -63,7 +61,7 @@ export const EndAdornment: React.FC<AdornmentProps> = props => {
63
61
  onClick={togglePasswordVisibility}
64
62
  style={adornmentStyle}
65
63
  >
66
- <ShowHideEyeIcon visible={isPasswordVisible} />
64
+ <ShowHideEyeIcon visible={passwordVisible} />
67
65
  </InputAdornment>
68
66
  )
69
67
  }