@digitaldefiance/express-suite-react-components 2.2.0 → 2.3.0

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/README.md CHANGED
@@ -66,10 +66,46 @@ yarn add @digitaldefiance/express-suite-react-components
66
66
  ### Types & Interfaces
67
67
 
68
68
  - **IMenuOption** - Menu option interface
69
- - **IncludeOnMenu** - Menu location enumeration
69
+ - **MenuType** - Extensible menu type system (see [Menu Type Extensibility Guide](docs/MENU_TYPE_EXTENSIBILITY.md))
70
70
 
71
71
  ## Usage
72
72
 
73
+ ### Menu System
74
+
75
+ The menu system supports extensible menu types. See the [Menu Type Extensibility Guide](docs/MENU_TYPE_EXTENSIBILITY.md) for details on creating custom menus.
76
+
77
+ ```tsx
78
+ import { TopMenu, MenuTypes, createMenuType } from '@digitaldefiance/express-suite-react-components';
79
+
80
+ // Use built-in menu types
81
+ const menuOptions = [
82
+ {
83
+ id: 'dashboard',
84
+ label: 'Dashboard',
85
+ link: '/dashboard',
86
+ includeOnMenus: [MenuTypes.SideMenu, MenuTypes.TopMenu],
87
+ index: 0,
88
+ requiresAuth: true,
89
+ },
90
+ ];
91
+
92
+ // Create custom menu types
93
+ const AdminMenu = createMenuType('AdminMenu');
94
+
95
+ function App() {
96
+ return (
97
+ <TopMenu
98
+ Logo={<MyLogo />}
99
+ additionalMenus={[{
100
+ menuType: AdminMenu,
101
+ menuIcon: <AdminIcon />,
102
+ priority: 10,
103
+ }]}
104
+ />
105
+ );
106
+ }
107
+ ```
108
+
73
109
  ### Authentication
74
110
 
75
111
  ```tsx
@@ -261,6 +297,67 @@ MIT © Digital Defiance
261
297
 
262
298
  ## ChangeLog
263
299
 
300
+ ### v2.3.0
301
+
302
+ #### Breaking Changes
303
+ - **Removed `IncludeOnMenu` enum** - Replaced with extensible `MenuType` system using branded string types
304
+ - Menu system now requires `MenuTypes` constant instead of enum values
305
+
306
+ #### Added
307
+ - **Extensible Menu Type System** - New `MenuType` branded string type with `createMenuType()` factory function
308
+ - **`MenuTypes` constant** - Built-in menu types (SideMenu, TopMenu, UserMenu) replacing enum
309
+ - **`createMenuType()` function** - Factory for creating custom menu types with type safety
310
+ - **`AdditionalDropdownMenu` interface** - Support for custom dropdown menus in TopMenu component
311
+ - **`additionalMenus` prop** on TopMenu - Allows adding custom menu dropdowns with priority ordering
312
+ - **Menu Type Extensibility Guide** - Comprehensive documentation at `docs/MENU_TYPE_EXTENSIBILITY.md`
313
+
314
+ #### Changed
315
+ - **IMenuOption.includeOnMenus** - Now uses `MenuType[]` instead of `IncludeOnMenu[]`
316
+ - **DropdownMenu.menuType** - Now accepts `MenuType` instead of `IncludeOnMenu`
317
+ - **MenuContext.getMenuOptions** - Now accepts `MenuType` parameter instead of `IncludeOnMenu`
318
+ - All menu components updated to use `MenuTypes` constant
319
+ - Updated README with menu system usage examples and extensibility guide link
320
+
321
+ #### Migration Guide
322
+ ```typescript
323
+ // Old (v2.2.x)
324
+ import { IncludeOnMenu } from '@digitaldefiance/express-suite-react-components';
325
+ includeOnMenus: [IncludeOnMenu.SideMenu, IncludeOnMenu.UserMenu]
326
+
327
+ // New (v2.3.0)
328
+ import { MenuTypes } from '@digitaldefiance/express-suite-react-components';
329
+ includeOnMenus: [MenuTypes.SideMenu, MenuTypes.UserMenu]
330
+
331
+ // Create custom menu types
332
+ import { createMenuType } from '@digitaldefiance/express-suite-react-components';
333
+ const AdminMenu = createMenuType('AdminMenu');
334
+
335
+ ### v2.2.1
336
+
337
+ - Update BackupCodeLoginForm
338
+
339
+ ### v2.2.0
340
+
341
+ #### Changed
342
+ - Updated peer dependencies: pinned `react-router-dom` to `6.29.0`
343
+ - Updated dependencies: `@digitaldefiance/i18n-lib` to `3.6.0`, `@digitaldefiance/suite-core-lib` to `2.2.1`
344
+ - Updated dev dependencies: pinned `react` and `react-dom` to `19.0.0`, downgraded `@testing-library/react` to `16.0.1`
345
+ - Replaced `BrowserRouter` with `MemoryRouter` in test files for better test isolation
346
+
347
+ #### Added
348
+ - Jest environment options: `resources: 'usable'` and `runScripts: 'dangerously'` for improved test compatibility
349
+ - `@testing-library/react-hooks` dev dependency (`8.0.1`)
350
+ - React strict mode configuration in test setup
351
+ - Custom render utility with `MemoryRouter` wrapper in `tests/test-utils.tsx`
352
+
353
+ #### Fixed
354
+ - Test environment configuration for React 19 compatibility
355
+ - Router setup in AuthProvider tests to use `MemoryRouter`
356
+
357
+ #### Removed
358
+ - Unused `renderWithProviders` helper function in UnAuthRoute tests
359
+ - External mock dependency for RegisterForm tests (inlined mock data)
360
+
264
361
  ### v2.1.57
265
362
 
266
363
  - Update libs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/express-suite-react-components",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "React MUI components for Digital Defiance Express Suite",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@digitaldefiance/i18n-lib": "3.6.0",
29
- "@digitaldefiance/suite-core-lib": "2.2.1",
29
+ "@digitaldefiance/suite-core-lib": "2.2.4",
30
30
  "@emotion/react": "^11.14.0",
31
31
  "@emotion/styled": "^11.14.0",
32
32
  "@mui/icons-material": "^7.0.2",
@@ -20,11 +20,7 @@ export interface BackupCodeLoginFormProps {
20
20
  }>;
21
21
  onNavigate?: (path: string, state?: any) => void;
22
22
  isAuthenticated?: boolean;
23
- emailValidation?: Yup.StringSchema;
24
- usernameValidation?: Yup.StringSchema;
25
- codeValidation?: Yup.StringSchema;
26
- passwordValidation?: Yup.StringSchema;
27
- confirmPasswordValidation?: Yup.StringSchema;
23
+ validationSchema?: Yup.ObjectSchema<any>;
28
24
  labels?: {
29
25
  title?: string;
30
26
  email?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"BackupCodeLoginForm.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/BackupCodeLoginForm.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,EAAE,EAAY,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAI3B,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,CACR,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,OAAO,EACxB,WAAW,CAAC,EAAE,MAAM,KACjB,OAAO,CACR;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACzE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CACrC,CAAC;IACF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IACnC,kBAAkB,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IACtC,cAAc,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IAClC,kBAAkB,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IACtC,yBAAyB,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IAC7C,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CAgQ5D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"BackupCodeLoginForm.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/BackupCodeLoginForm.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,EAAE,EAAY,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAI3B,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,CACR,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,OAAO,EACxB,WAAW,CAAC,EAAE,MAAM,KACjB,OAAO,CACR;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACzE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CACrC,CAAC;IACF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CA4P5D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -9,28 +9,13 @@ const react_1 = require("react");
9
9
  const Yup = tslib_1.__importStar(require("yup"));
10
10
  const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
11
11
  const contexts_1 = require("../contexts");
12
- const BackupCodeLoginForm = ({ onSubmit, onNavigate, isAuthenticated = false, emailValidation, usernameValidation, codeValidation, passwordValidation, confirmPasswordValidation, labels = {}, }) => {
12
+ const BackupCodeLoginForm = ({ onSubmit, onNavigate, isAuthenticated = false, validationSchema, labels = {}, }) => {
13
13
  const { tComponent } = (0, contexts_1.useI18n)();
14
14
  const [loginType, setLoginType] = (0, react_1.useState)('email');
15
15
  const [loginError, setLoginError] = (0, react_1.useState)(null);
16
16
  const [recoveredMnemonic, setRecoveredMnemonic] = (0, react_1.useState)(null);
17
17
  const [successMessage, setSuccessMessage] = (0, react_1.useState)(null);
18
18
  const [codesRemaining, setCodesRemaining] = (0, react_1.useState)(null);
19
- const validation = {
20
- email: emailValidation || Yup.string()
21
- .email(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidEmail))
22
- .required(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_Required)),
23
- username: usernameValidation || Yup.string()
24
- .matches(suite_core_lib_1.Constants.UsernameRegex, tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_UsernameRegexErrorTemplate))
25
- .required(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_Required)),
26
- code: codeValidation || Yup.string()
27
- .required(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_Required))
28
- .matches(suite_core_lib_1.Constants.BACKUP_CODES.DisplayRegex, tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidBackupCode)),
29
- password: passwordValidation || Yup.string()
30
- .matches(suite_core_lib_1.Constants.PasswordRegex, tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_PasswordRegexErrorTemplate)),
31
- confirmPassword: confirmPasswordValidation || Yup.string()
32
- .oneOf([Yup.ref('newPassword')], tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_PasswordMatch)),
33
- };
34
19
  const translatedLabels = {
35
20
  title: labels.title || tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.BackupCodeRecovery_Title),
36
21
  email: labels.email || tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Email),
@@ -48,11 +33,26 @@ const BackupCodeLoginForm = ({ onSubmit, onNavigate, isAuthenticated = false, em
48
33
  codesRemaining: labels.codesRemaining || tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.BackupCodeRecovery_CodesRemainingTemplate),
49
34
  unexpectedError: tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError),
50
35
  };
51
- const validationSchema = Yup.object({
52
- [loginType]: loginType === 'email' ? validation.email : validation.username,
53
- code: validation.code,
54
- newPassword: validation.password,
55
- confirmNewPassword: validation.confirmPassword,
36
+ const yupFieldValidation = {
37
+ email: Yup.string()
38
+ .email(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidEmail))
39
+ .required(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_Required)),
40
+ username: Yup.string()
41
+ .matches(suite_core_lib_1.Constants.UsernameRegex, tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_UsernameRegexErrorTemplate))
42
+ .required(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_Required)),
43
+ code: Yup.string()
44
+ .required(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_Required))
45
+ .matches(suite_core_lib_1.Constants.BACKUP_CODES.DisplayRegex, tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidBackupCode)),
46
+ password: Yup.string()
47
+ .matches(suite_core_lib_1.Constants.PasswordRegex, tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_PasswordRegexErrorTemplate)),
48
+ confirmPassword: Yup.string()
49
+ .oneOf([Yup.ref('newPassword')], tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Validation_PasswordMatch)),
50
+ };
51
+ const yupSchema = validationSchema ?? Yup.object({
52
+ [loginType]: loginType === 'email' ? yupFieldValidation.email : yupFieldValidation.username,
53
+ code: yupFieldValidation.code,
54
+ newPassword: yupFieldValidation.password,
55
+ confirmNewPassword: yupFieldValidation.confirmPassword,
56
56
  });
57
57
  const formik = (0, formik_1.useFormik)({
58
58
  initialValues: {
@@ -63,7 +63,7 @@ const BackupCodeLoginForm = ({ onSubmit, onNavigate, isAuthenticated = false, em
63
63
  confirmNewPassword: '',
64
64
  recoverMnemonic: false,
65
65
  },
66
- validationSchema,
66
+ validationSchema: yupSchema,
67
67
  onSubmit: async (values, { setSubmitting }) => {
68
68
  try {
69
69
  const loginResult = await onSubmit(loginType === 'email' ? values.email : values.username, values.code, loginType === 'email', values.recoverMnemonic, values.newPassword && values.newPassword.length > 0 ? values.newPassword : undefined);
@@ -1,7 +1,7 @@
1
1
  import { FC, ReactElement } from 'react';
2
- import { IncludeOnMenu } from '../enumerations/IncludeOnMenu';
2
+ import { MenuType } from '../types/MenuType';
3
3
  interface DropdownMenuProps {
4
- menuType: IncludeOnMenu;
4
+ menuType: MenuType;
5
5
  menuIcon: ReactElement;
6
6
  }
7
7
  export declare const DropdownMenu: FC<DropdownMenuProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/DropdownMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAc,YAAY,EAAyB,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAI9D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA6E9C,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/DropdownMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAc,YAAY,EAAyB,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,UAAU,iBAAiB;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA6E9C,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -4,13 +4,13 @@ exports.SideMenu = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const material_1 = require("@mui/material");
6
6
  const react_router_dom_1 = require("react-router-dom");
7
- const IncludeOnMenu_1 = require("../enumerations/IncludeOnMenu");
7
+ const MenuType_1 = require("../types/MenuType");
8
8
  const MenuContext_1 = require("../contexts/MenuContext");
9
9
  const SideMenuListItem_1 = require("./SideMenuListItem");
10
10
  const SideMenu = ({ isOpen, onClose }) => {
11
11
  const { getMenuOptions } = (0, MenuContext_1.useMenu)();
12
12
  const navigate = (0, react_router_dom_1.useNavigate)();
13
- const menuOptions = getMenuOptions(IncludeOnMenu_1.IncludeOnMenu.SideMenu, true);
13
+ const menuOptions = getMenuOptions(MenuType_1.MenuTypes.SideMenu, true);
14
14
  const handleNavigate = (link) => {
15
15
  if (typeof link === 'string') {
16
16
  navigate(link);
@@ -1,6 +1,13 @@
1
- import React, { FC } from 'react';
1
+ import React, { FC, ReactElement } from 'react';
2
+ import { MenuType } from '../types/MenuType';
3
+ export interface AdditionalDropdownMenu {
4
+ menuType: MenuType;
5
+ menuIcon: ReactElement;
6
+ priority?: number;
7
+ }
2
8
  export interface TopMenuProps {
3
9
  Logo: React.ReactNode;
10
+ additionalMenus?: Array<AdditionalDropdownMenu>;
4
11
  }
5
12
  export declare const TopMenu: FC<TopMenuProps>;
6
13
  export default TopMenu;
@@ -1 +1 @@
1
- {"version":3,"file":"TopMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/TopMenu.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,EAAE,EAAE,EAAwB,MAAM,OAAO,CAAC;AAUxD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;CACvB;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAgEpC,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"TopMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/components/TopMenu.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,YAAY,EAAwB,MAAM,OAAO,CAAC;AAStE,OAAO,EAAE,QAAQ,EAAa,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAuEpC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -4,6 +4,7 @@ exports.TopMenu = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const Menu_1 = tslib_1.__importDefault(require("@mui/icons-material/Menu"));
7
+ const DropdownMenu_1 = require("./DropdownMenu");
7
8
  const material_1 = require("@mui/material");
8
9
  const react_1 = require("react");
9
10
  const react_router_dom_1 = require("react-router-dom");
@@ -13,7 +14,8 @@ const SideMenu_1 = require("./SideMenu");
13
14
  const UserLanguageSelector_1 = require("./UserLanguageSelector");
14
15
  const UserMenu_1 = require("./UserMenu");
15
16
  const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
16
- const TopMenu = ({ Logo }) => {
17
+ const MenuType_1 = require("../types/MenuType");
18
+ const TopMenu = ({ Logo, additionalMenus }) => {
17
19
  const { isAuthenticated } = (0, react_1.useContext)(AuthProvider_1.AuthContext);
18
20
  const [isSideMenuOpen, setIsSideMenuOpen] = (0, react_1.useState)(false);
19
21
  const handleOpenSideMenu = () => setIsSideMenuOpen(true);
@@ -29,7 +31,12 @@ const TopMenu = ({ Logo }) => {
29
31
  marginRight: 2,
30
32
  display: 'flex',
31
33
  alignItems: 'center',
32
- }, children: Logo }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h6", component: "div", sx: { flexGrow: 1 }, children: siteTitle }), (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { display: 'flex', alignItems: 'center' }, children: [isAuthenticated ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/dashboard", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Dashboard)) }), (0, jsx_runtime_1.jsx)(UserMenu_1.UserMenu, {})] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/login", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Login_LoginButton)) }), (0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/register", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.RegisterButton)) })] })), (0, jsx_runtime_1.jsx)(UserLanguageSelector_1.UserLanguageSelector, {})] })] }), (0, jsx_runtime_1.jsx)(SideMenu_1.SideMenu, { isOpen: isSideMenuOpen, onClose: handleCloseSideMenu })] }));
34
+ }, children: Logo }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "h6", component: "div", sx: { flexGrow: 1 }, children: siteTitle }), (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { display: 'flex', alignItems: 'center' }, children: [isAuthenticated ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/dashboard", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Dashboard)) }), [
35
+ ...additionalMenus?.map((menu, index) => ({ ...menu, key: `custom-${index}`, isUserMenu: false })) ?? [],
36
+ { menuType: MenuType_1.MenuTypes.UserMenu, menuIcon: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}), priority: 0, key: 'user-menu', isUserMenu: true }
37
+ ]
38
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))
39
+ .map(menu => menu.isUserMenu ? (0, jsx_runtime_1.jsx)(UserMenu_1.UserMenu, {}, menu.key) : (0, jsx_runtime_1.jsx)(DropdownMenu_1.DropdownMenu, { menuType: menu.menuType, menuIcon: menu.menuIcon }, menu.key))] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/login", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Login_LoginButton)) }), (0, jsx_runtime_1.jsx)(material_1.Button, { color: "inherit", component: react_router_dom_1.Link, to: "/register", children: t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.RegisterButton)) })] })), (0, jsx_runtime_1.jsx)(UserLanguageSelector_1.UserLanguageSelector, {})] })] }), (0, jsx_runtime_1.jsx)(SideMenu_1.SideMenu, { isOpen: isSideMenuOpen, onClose: handleCloseSideMenu })] }));
33
40
  };
34
41
  exports.TopMenu = TopMenu;
35
42
  exports.default = exports.TopMenu;
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UserMenu = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const icons_material_1 = require("@mui/icons-material");
6
- const IncludeOnMenu_1 = require("../enumerations/IncludeOnMenu");
6
+ const MenuType_1 = require("../types/MenuType");
7
7
  const DropdownMenu_1 = require("./DropdownMenu");
8
8
  const UserMenu = () => {
9
- return ((0, jsx_runtime_1.jsx)(DropdownMenu_1.DropdownMenu, { menuType: IncludeOnMenu_1.IncludeOnMenu.UserMenu, menuIcon: (0, jsx_runtime_1.jsx)(icons_material_1.AccountCircle, {}) }));
9
+ return ((0, jsx_runtime_1.jsx)(DropdownMenu_1.DropdownMenu, { menuType: MenuType_1.MenuTypes.UserMenu, menuIcon: (0, jsx_runtime_1.jsx)(icons_material_1.AccountCircle, {}) }));
10
10
  };
11
11
  exports.UserMenu = UserMenu;
12
12
  exports.default = exports.UserMenu;
@@ -1,12 +1,12 @@
1
1
  import { FC, ReactNode } from 'react';
2
- import { IncludeOnMenu } from '../enumerations/IncludeOnMenu';
2
+ import { MenuType } from '../types/MenuType';
3
3
  import { IMenuOption } from '../interfaces/IMenuOption';
4
4
  interface MenuProviderProps {
5
5
  children: ReactNode;
6
6
  }
7
7
  interface MenuContextType {
8
8
  menuOptions: IMenuOption[];
9
- getMenuOptions: (menuType: IncludeOnMenu, includeDividers: boolean) => IMenuOption[];
9
+ getMenuOptions: (menuType: MenuType, includeDividers: boolean) => IMenuOption[];
10
10
  registerMenuOption: (option: IMenuOption) => () => void;
11
11
  registerMenuOptions: (options: IMenuOption[]) => () => void;
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MenuContext.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/MenuContext.tsx"],"names":[],"mappings":"AAeA,OAAO,EACL,EAAE,EACF,SAAS,EAOV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,cAAc,EAAE,CACd,QAAQ,EAAE,aAAa,EACvB,eAAe,EAAE,OAAO,KACrB,WAAW,EAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,IAAI,CAAC;IACxD,mBAAmB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC;CAC7D;AAID,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAwN9C,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,eAM1B,CAAC"}
1
+ {"version":3,"file":"MenuContext.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/contexts/MenuContext.tsx"],"names":[],"mappings":"AAeA,OAAO,EACL,EAAE,EACF,SAAS,EAOV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,QAAQ,EAAa,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,cAAc,EAAE,CACd,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,OAAO,KACrB,WAAW,EAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,IAAI,CAAC;IACxD,mBAAmB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC;CAC7D;AAID,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAwN9C,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,eAM1B,CAAC"}
@@ -8,7 +8,7 @@ const suite_core_lib_2 = require("@digitaldefiance/suite-core-lib");
8
8
  const icons_material_1 = require("@mui/icons-material");
9
9
  const react_1 = require("react");
10
10
  const AuthProvider_1 = require("./AuthProvider");
11
- const IncludeOnMenu_1 = require("../enumerations/IncludeOnMenu");
11
+ const MenuType_1 = require("../types/MenuType");
12
12
  const I18nProvider_1 = require("./I18nProvider");
13
13
  const ThemeProvider_1 = require("./ThemeProvider");
14
14
  const MenuContext = (0, react_1.createContext)(undefined);
@@ -51,14 +51,14 @@ const MenuProvider = ({ children }) => {
51
51
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.Dashboard, {}),
52
52
  link: '/dashboard',
53
53
  requiresAuth: true,
54
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.SideMenu],
54
+ includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
55
55
  index: index++,
56
56
  },
57
57
  {
58
58
  id: 'user-divider',
59
59
  label: '',
60
60
  divider: true,
61
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.SideMenu],
61
+ includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
62
62
  index: index++,
63
63
  requiresAuth: false,
64
64
  },
@@ -68,7 +68,7 @@ const MenuProvider = ({ children }) => {
68
68
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.ExitToApp, {}),
69
69
  link: '/logout',
70
70
  requiresAuth: true,
71
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
71
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
72
72
  index: index++,
73
73
  },
74
74
  {
@@ -77,7 +77,7 @@ const MenuProvider = ({ children }) => {
77
77
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.Login, {}),
78
78
  link: '/login',
79
79
  requiresAuth: false,
80
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
80
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
81
81
  index: index++,
82
82
  },
83
83
  {
@@ -86,7 +86,7 @@ const MenuProvider = ({ children }) => {
86
86
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.PersonAdd, {}),
87
87
  link: '/register',
88
88
  requiresAuth: false,
89
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
89
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
90
90
  index: index++,
91
91
  },
92
92
  {
@@ -95,7 +95,7 @@ const MenuProvider = ({ children }) => {
95
95
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.LockOpen, {}),
96
96
  link: '/forgot-password',
97
97
  requiresAuth: false,
98
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
98
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
99
99
  index: index++,
100
100
  },
101
101
  {
@@ -104,7 +104,7 @@ const MenuProvider = ({ children }) => {
104
104
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.LockReset, {}),
105
105
  link: '/change-password',
106
106
  requiresAuth: true,
107
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
107
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
108
108
  index: index++,
109
109
  },
110
110
  {
@@ -113,7 +113,7 @@ const MenuProvider = ({ children }) => {
113
113
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
114
114
  link: '/backup-code',
115
115
  requiresAuth: false,
116
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
116
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
117
117
  index: index++,
118
118
  },
119
119
  {
@@ -122,14 +122,14 @@ const MenuProvider = ({ children }) => {
122
122
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.Autorenew, {}),
123
123
  link: '/backup-codes',
124
124
  requiresAuth: true,
125
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
125
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
126
126
  index: index++,
127
127
  },
128
128
  {
129
129
  id: 'divider',
130
130
  label: '',
131
131
  divider: true,
132
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.SideMenu],
132
+ includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
133
133
  index: index++,
134
134
  requiresAuth: false,
135
135
  },
@@ -139,7 +139,7 @@ const MenuProvider = ({ children }) => {
139
139
  action: clearMnemonic,
140
140
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
141
141
  requiresAuth: true,
142
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
142
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
143
143
  index: index++,
144
144
  filter: () => !!mnemonic,
145
145
  },
@@ -149,7 +149,7 @@ const MenuProvider = ({ children }) => {
149
149
  action: clearWallet,
150
150
  icon: (0, jsx_runtime_1.jsx)(icons_material_1.Key, {}),
151
151
  requiresAuth: true,
152
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.UserMenu, IncludeOnMenu_1.IncludeOnMenu.SideMenu],
152
+ includeOnMenus: [MenuType_1.MenuTypes.UserMenu, MenuType_1.MenuTypes.SideMenu],
153
153
  index: index++,
154
154
  filter: () => !!wallet,
155
155
  },
@@ -158,7 +158,7 @@ const MenuProvider = ({ children }) => {
158
158
  id: 'color-divider',
159
159
  label: '',
160
160
  divider: true,
161
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.SideMenu],
161
+ includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
162
162
  index: index++,
163
163
  requiresAuth: undefined,
164
164
  },
@@ -168,7 +168,7 @@ const MenuProvider = ({ children }) => {
168
168
  ? t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ThemeToggle_Light))
169
169
  : t(tComponent(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_2.SuiteCoreStringKey.Common_ThemeToggle_Dark)),
170
170
  icon: mode === 'dark' ? (0, jsx_runtime_1.jsx)(icons_material_1.Brightness7, {}) : (0, jsx_runtime_1.jsx)(icons_material_1.Brightness4, {}),
171
- includeOnMenus: [IncludeOnMenu_1.IncludeOnMenu.SideMenu],
171
+ includeOnMenus: [MenuType_1.MenuTypes.SideMenu],
172
172
  index: index++,
173
173
  requiresAuth: undefined,
174
174
  action: toggleColorMode,
package/src/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  export * from './auth';
2
2
  export * from './components';
3
3
  export * from './contexts';
4
- export * from './enumerations';
5
4
  export * from './hooks';
6
5
  export * from './interfaces';
7
6
  export * from './services';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-express-suite-react-components/src/index.ts"],"names":[],"mappings":"AACA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-express-suite-react-components/src/index.ts"],"names":[],"mappings":"AACA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
package/src/index.js CHANGED
@@ -5,7 +5,6 @@ const tslib_1 = require("tslib");
5
5
  tslib_1.__exportStar(require("./auth"), exports);
6
6
  tslib_1.__exportStar(require("./components"), exports);
7
7
  tslib_1.__exportStar(require("./contexts"), exports);
8
- tslib_1.__exportStar(require("./enumerations"), exports);
9
8
  tslib_1.__exportStar(require("./hooks"), exports);
10
9
  tslib_1.__exportStar(require("./interfaces"), exports);
11
10
  tslib_1.__exportStar(require("./services"), exports);
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { IncludeOnMenu } from '../enumerations';
2
+ import { MenuType } from '../types/MenuType';
3
3
  import { To } from 'react-router-dom';
4
4
  export interface IMenuOption {
5
5
  /**
@@ -13,7 +13,7 @@ export interface IMenuOption {
13
13
  /**
14
14
  * Where the menu option should be displayed
15
15
  */
16
- includeOnMenus: IncludeOnMenu[];
16
+ includeOnMenus: MenuType[];
17
17
  /**
18
18
  * Display order for the menu option. Lower numbers are displayed first.
19
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"IMenuOption.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/interfaces/IMenuOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC;IAC7C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;CAC3C"}
1
+ {"version":3,"file":"IMenuOption.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/interfaces/IMenuOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC;IAC7C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;CAC3C"}
@@ -0,0 +1,11 @@
1
+ export type MenuType = string & {
2
+ readonly __brand: 'MenuType';
3
+ };
4
+ export declare const createMenuType: (id: string) => MenuType;
5
+ export declare const MenuTypes: {
6
+ readonly SideMenu: MenuType;
7
+ readonly TopMenu: MenuType;
8
+ readonly UserMenu: MenuType;
9
+ };
10
+ export type BuiltInMenuType = typeof MenuTypes[keyof typeof MenuTypes];
11
+ //# sourceMappingURL=MenuType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuType.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/MenuType.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAGjE,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,QAA0B,CAAC;AAGvE,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAGX,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MenuTypes = exports.createMenuType = void 0;
4
+ // Factory function to create menu types
5
+ const createMenuType = (id) => id;
6
+ exports.createMenuType = createMenuType;
7
+ // Built-in menu types
8
+ exports.MenuTypes = {
9
+ SideMenu: (0, exports.createMenuType)('SideMenu'),
10
+ TopMenu: (0, exports.createMenuType)('TopMenu'),
11
+ UserMenu: (0, exports.createMenuType)('UserMenu'),
12
+ };
@@ -1,3 +1,2 @@
1
- export * from './expirationSeconds';
2
- export * from './translation';
1
+ export * from './MenuType';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./expirationSeconds"), exports);
5
- tslib_1.__exportStar(require("./translation"), exports);
4
+ tslib_1.__exportStar(require("./MenuType"), exports);
@@ -1,6 +0,0 @@
1
- export declare enum IncludeOnMenu {
2
- SideMenu = 0,
3
- TopMenu = 1,
4
- UserMenu = 2
5
- }
6
- //# sourceMappingURL=IncludeOnMenu.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IncludeOnMenu.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/enumerations/IncludeOnMenu.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,QAAQ,IAAA;CACT"}
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IncludeOnMenu = void 0;
4
- var IncludeOnMenu;
5
- (function (IncludeOnMenu) {
6
- IncludeOnMenu[IncludeOnMenu["SideMenu"] = 0] = "SideMenu";
7
- IncludeOnMenu[IncludeOnMenu["TopMenu"] = 1] = "TopMenu";
8
- IncludeOnMenu[IncludeOnMenu["UserMenu"] = 2] = "UserMenu";
9
- })(IncludeOnMenu || (exports.IncludeOnMenu = IncludeOnMenu = {}));
@@ -1,2 +0,0 @@
1
- export * from './IncludeOnMenu';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-express-suite-react-components/src/enumerations/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -1,4 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./IncludeOnMenu"), exports);