@deix/rossini-core 0.1.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.
Files changed (82) hide show
  1. package/README.md +3 -0
  2. package/lib/package.json +73 -0
  3. package/lib/src/components/buttons/Avatar/Avatar.d.ts +8 -0
  4. package/lib/src/components/buttons/Avatar/Avatar.d.ts.map +1 -0
  5. package/lib/src/components/buttons/Avatar/Avatar.js +52 -0
  6. package/lib/src/components/buttons/LanguageSelect/LanguageSelect.d.ts +16 -0
  7. package/lib/src/components/buttons/LanguageSelect/LanguageSelect.d.ts.map +1 -0
  8. package/lib/src/components/buttons/LanguageSelect/LanguageSelect.js +52 -0
  9. package/lib/src/components/buttons/LanguageSelect/translations.json +9 -0
  10. package/lib/src/components/buttons/ToggleButtonGroup/ToggleButtonGroup.d.ts +41 -0
  11. package/lib/src/components/buttons/ToggleButtonGroup/ToggleButtonGroup.d.ts.map +1 -0
  12. package/lib/src/components/buttons/ToggleButtonGroup/ToggleButtonGroup.js +20 -0
  13. package/lib/src/components/buttons/index.d.ts +4 -0
  14. package/lib/src/components/buttons/index.d.ts.map +1 -0
  15. package/lib/src/components/buttons/index.js +3 -0
  16. package/lib/src/components/layout/MinimalLayout/MinimalLayout.d.ts +12 -0
  17. package/lib/src/components/layout/MinimalLayout/MinimalLayout.d.ts.map +1 -0
  18. package/lib/src/components/layout/MinimalLayout/MinimalLayout.js +57 -0
  19. package/lib/src/components/layout/MinimalLayout/translations.json +8 -0
  20. package/lib/src/components/layout/StandardLayout/StandardLayout.d.ts +16 -0
  21. package/lib/src/components/layout/StandardLayout/StandardLayout.d.ts.map +1 -0
  22. package/lib/src/components/layout/StandardLayout/StandardLayout.js +67 -0
  23. package/lib/src/components/layout/StandardLayout/translations.json +8 -0
  24. package/lib/src/components/layout/components/AppLogo/AppLogo.d.ts +19 -0
  25. package/lib/src/components/layout/components/AppLogo/AppLogo.d.ts.map +1 -0
  26. package/lib/src/components/layout/components/AppLogo/AppLogo.js +25 -0
  27. package/lib/src/components/layout/components/Footer/Footer.d.ts +27 -0
  28. package/lib/src/components/layout/components/Footer/Footer.d.ts.map +1 -0
  29. package/lib/src/components/layout/components/Footer/Footer.js +100 -0
  30. package/lib/src/components/layout/components/Sidebar/Sidebar.d.ts +23 -0
  31. package/lib/src/components/layout/components/Sidebar/Sidebar.d.ts.map +1 -0
  32. package/lib/src/components/layout/components/Sidebar/Sidebar.js +206 -0
  33. package/lib/src/components/layout/components/Topbar/ElevationScroll.d.ts +7 -0
  34. package/lib/src/components/layout/components/Topbar/ElevationScroll.d.ts.map +1 -0
  35. package/lib/src/components/layout/components/Topbar/ElevationScroll.js +13 -0
  36. package/lib/src/components/layout/components/Topbar/Topbar.d.ts +13 -0
  37. package/lib/src/components/layout/components/Topbar/Topbar.d.ts.map +1 -0
  38. package/lib/src/components/layout/components/Topbar/Topbar.js +46 -0
  39. package/lib/src/components/layout/components/Topbar/Topbar.styles.d.ts +18 -0
  40. package/lib/src/components/layout/components/Topbar/Topbar.styles.d.ts.map +1 -0
  41. package/lib/src/components/layout/components/Topbar/Topbar.styles.js +8 -0
  42. package/lib/src/components/layout/components/Topbar/translations.json +26 -0
  43. package/lib/src/components/layout/components/Topline/TopLine.d.ts +4 -0
  44. package/lib/src/components/layout/components/Topline/TopLine.d.ts.map +1 -0
  45. package/lib/src/components/layout/components/Topline/TopLine.js +13 -0
  46. package/lib/src/components/layout/index.d.ts +3 -0
  47. package/lib/src/components/layout/index.d.ts.map +1 -0
  48. package/lib/src/components/layout/index.js +2 -0
  49. package/lib/src/components/progress/CircularLoading/CircularLoading.d.ts +8 -0
  50. package/lib/src/components/progress/CircularLoading/CircularLoading.d.ts.map +1 -0
  51. package/lib/src/components/progress/CircularLoading/CircularLoading.js +16 -0
  52. package/lib/src/components/progress/CircularLoading/translations.json +8 -0
  53. package/lib/src/components/progress/DotWaveLoading/DotWaveLoading.d.ts +8 -0
  54. package/lib/src/components/progress/DotWaveLoading/DotWaveLoading.d.ts.map +1 -0
  55. package/lib/src/components/progress/DotWaveLoading/DotWaveLoading.js +18 -0
  56. package/lib/src/components/progress/DotWaveLoading/translations.json +8 -0
  57. package/lib/src/components/progress/index.d.ts +3 -0
  58. package/lib/src/components/progress/index.d.ts.map +1 -0
  59. package/lib/src/components/progress/index.js +2 -0
  60. package/lib/src/types/api.d.ts +16 -0
  61. package/lib/src/types/api.d.ts.map +1 -0
  62. package/lib/src/types/api.js +1 -0
  63. package/lib/src/types/languages.d.ts +12 -0
  64. package/lib/src/types/languages.d.ts.map +1 -0
  65. package/lib/src/types/languages.js +3 -0
  66. package/lib/src/types/palette.d.ts +16 -0
  67. package/lib/src/types/palette.d.ts.map +1 -0
  68. package/lib/src/types/palette.js +1 -0
  69. package/lib/src/utils/hooks/useAPI.d.ts +3 -0
  70. package/lib/src/utils/hooks/useAPI.d.ts.map +1 -0
  71. package/lib/src/utils/hooks/useAPI.js +9 -0
  72. package/lib/src/utils/hooks/useKeycloak.d.ts +8 -0
  73. package/lib/src/utils/hooks/useKeycloak.d.ts.map +1 -0
  74. package/lib/src/utils/hooks/useKeycloak.js +69 -0
  75. package/lib/src/utils/hooks/useLocale.d.ts +3 -0
  76. package/lib/src/utils/hooks/useLocale.d.ts.map +1 -0
  77. package/lib/src/utils/hooks/useLocale.js +6 -0
  78. package/lib/src/utils/hooks/usePersistedState.d.ts +2 -0
  79. package/lib/src/utils/hooks/usePersistedState.d.ts.map +1 -0
  80. package/lib/src/utils/hooks/usePersistedState.js +27 -0
  81. package/lib/tsconfig-lib.tsbuildinfo +1 -0
  82. package/package.json +73 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Rossini Core
2
+
3
+ Rossini helps you build UI fast by providing a series of components and utilities featuring the Deix style.
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@deix/rossini-core",
3
+ "version": "0.1.0",
4
+ "main": "lib/index.js",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/deixsrl/rossini-core.git"
8
+ },
9
+ "license": "UNLICENSED",
10
+ "private": false,
11
+ "author": {
12
+ "name": "Jacopo Corno"
13
+ },
14
+ "scripts": {
15
+ "dev": "next dev",
16
+ "build": "next build",
17
+ "start": "next start",
18
+ "lint": "next lint",
19
+ "build-lib": "tsc -p tsconfig-lib.json",
20
+ "storybook": "start-storybook -p 6006",
21
+ "build-storybook": "build-storybook"
22
+ },
23
+ "peerDependencies": {
24
+ "@types/react": "^18.0.25",
25
+ "@types/react-dom": "^18.0.8",
26
+ "react": "^18.2.0",
27
+ "react-dom": "^18.2.0"
28
+ },
29
+ "devDependencies": {
30
+ "@babel/core": "^7.20.7",
31
+ "@storybook/addon-actions": "^6.5.15",
32
+ "@storybook/addon-essentials": "^6.5.15",
33
+ "@storybook/addon-interactions": "^6.5.15",
34
+ "@storybook/addon-links": "^6.5.15",
35
+ "@storybook/builder-webpack5": "^6.5.15",
36
+ "@storybook/manager-webpack5": "^6.5.15",
37
+ "@storybook/react": "^6.5.15",
38
+ "@storybook/testing-library": "^0.0.13",
39
+ "@types/node": "18.11.18",
40
+ "@types/react": "18.0.26",
41
+ "@types/react-dom": "18.0.10",
42
+ "@typescript-eslint/eslint-plugin": "^5.47.1",
43
+ "babel-loader": "^8.3.0",
44
+ "eslint": "8.31.0",
45
+ "eslint-config-next": "^13.1.1",
46
+ "eslint-config-prettier": "^8.5.0",
47
+ "eslint-plugin-prettier": "^4.2.1",
48
+ "eslint-plugin-storybook": "^0.6.8",
49
+ "next": "13.1.1",
50
+ "react": "18.2.0",
51
+ "react-docgen-typescript": "^2.2.2",
52
+ "react-dom": "18.2.0",
53
+ "storybook-addon-locale": "^0.3.6",
54
+ "storybook-addon-next-router": "^4.0.2",
55
+ "typescript": "4.9.4"
56
+ },
57
+ "dependencies": {
58
+ "@emotion/react": "^11.10.5",
59
+ "@emotion/styled": "^11.10.5",
60
+ "@fontsource/raleway": "^4.5.11",
61
+ "@material-ui/icons": "^4.11.3",
62
+ "@mui/icons-material": "^5.11.0",
63
+ "@mui/material": "^5.11.2",
64
+ "@uiball/loaders": "^1.2.6",
65
+ "axios": "^1.2.2",
66
+ "flag-icons": "^6.6.6",
67
+ "next-themes": "^0.2.1",
68
+ "react-query": "^3.39.2"
69
+ },
70
+ "files": [
71
+ "lib/**/*"
72
+ ]
73
+ }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface AvatarProps {
3
+ logoutUrl?: string;
4
+ accountSettingsUrl?: string;
5
+ }
6
+ declare const Avatar: React.FC<AvatarProps>;
7
+ export default Avatar;
8
+ //# sourceMappingURL=Avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../../src/components/buttons/Avatar/Avatar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAiBxC,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAyEjC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,52 @@
1
+ import Link from 'next/link';
2
+ import React, { useState } from 'react';
3
+ import FaceIcon from '@mui/icons-material/Face';
4
+ import LogoutIcon from '@mui/icons-material/Logout';
5
+ import { Avatar as MUIAvatar, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip, useTheme, } from '@mui/material';
6
+ import { useAPI } from '../../../utils/hooks/useAPI';
7
+ import { useUserInfo } from '../../../utils/hooks/useKeycloak';
8
+ var Avatar = function (_a) {
9
+ var logoutUrl = _a.logoutUrl, accountSettingsUrl = _a.accountSettingsUrl;
10
+ var muiTheme = useTheme();
11
+ // Menu
12
+ var _b = useState(null), anchorEl = _b[0], setAnchorEl = _b[1];
13
+ var open = Boolean(anchorEl);
14
+ var handleClick = function (event) {
15
+ setAnchorEl(event.currentTarget);
16
+ };
17
+ var handleClose = function () {
18
+ setAnchorEl(null);
19
+ };
20
+ // User data
21
+ var apiClient = useAPI(accountSettingsUrl);
22
+ var userInfo = useUserInfo(apiClient).data;
23
+ return (React.createElement(React.Fragment, null,
24
+ React.createElement(Tooltip, { title: (userInfo === null || userInfo === void 0 ? void 0 : userInfo.preferredUserName) || 'Anonymous User' },
25
+ React.createElement(MUIAvatar, { alt: (userInfo === null || userInfo === void 0 ? void 0 : userInfo.preferredUserName) || 'user-name', sx: {
26
+ bgcolor: muiTheme.palette.primary.main,
27
+ width: 24,
28
+ height: 24,
29
+ }, onClick: handleClick })),
30
+ React.createElement(Menu, { anchorEl: anchorEl, open: open, onClose: handleClose, anchorOrigin: {
31
+ vertical: 'bottom',
32
+ horizontal: 'right',
33
+ }, transformOrigin: {
34
+ vertical: 'top',
35
+ horizontal: 'right',
36
+ }, PaperProps: {
37
+ sx: {
38
+ padding: '4px',
39
+ },
40
+ } },
41
+ accountSettingsUrl && (React.createElement(Link, { href: accountSettingsUrl },
42
+ React.createElement(MenuItem, { onClick: handleClose },
43
+ React.createElement(ListItemIcon, null,
44
+ React.createElement(FaceIcon, { fontSize: 'small' })),
45
+ React.createElement(ListItemText, null, "Account")))),
46
+ logoutUrl && (React.createElement(Link, { href: logoutUrl },
47
+ React.createElement(MenuItem, { onClick: handleClose },
48
+ React.createElement(ListItemIcon, null,
49
+ React.createElement(LogoutIcon, { fontSize: 'small' })),
50
+ React.createElement(ListItemText, null, "Logout")))))));
51
+ };
52
+ export default Avatar;
@@ -0,0 +1,16 @@
1
+ import { FunctionComponent } from 'react';
2
+ import 'flag-icons/css/flag-icons.min.css';
3
+ import { Language, Locale } from '../../../types/languages';
4
+ export interface LanguageSelectProps {
5
+ /**
6
+ * Internationalization locale.
7
+ */
8
+ locale?: Locale;
9
+ /**
10
+ * List of language options
11
+ */
12
+ languages?: Language[];
13
+ }
14
+ export declare const LanguageSelect: FunctionComponent<LanguageSelectProps>;
15
+ export default LanguageSelect;
16
+ //# sourceMappingURL=LanguageSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageSelect.d.ts","sourceRoot":"","sources":["../../../../../src/components/buttons/LanguageSelect/LanguageSelect.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAejD,OAAO,mCAAmC,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAG5D,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,CA6EjE,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import Link from 'next/link';
3
+ import { useRouter } from 'next/router';
4
+ import LanguageIcon from '@mui/icons-material/Language';
5
+ import { IconButton, ListItemIcon, ListItemText, Menu, MenuItem, MenuList, Tooltip, } from '@mui/material';
6
+ import 'flag-icons/css/flag-icons.min.css';
7
+ import t from './translations.json';
8
+ export var LanguageSelect = function (_a) {
9
+ var _b = _a.locale, locale = _b === void 0 ? 'en' : _b, _c = _a.languages, languages = _c === void 0 ? [
10
+ {
11
+ id: 'en',
12
+ label: 'English',
13
+ countryCode: 'us',
14
+ MUILocale: 'enUS',
15
+ },
16
+ ] : _c;
17
+ // Menu controls
18
+ var _d = React.useState(null), anchorEl = _d[0], setAnchorEl = _d[1];
19
+ var open = Boolean(anchorEl);
20
+ var openOptions = function (evt) {
21
+ setAnchorEl(evt.currentTarget);
22
+ };
23
+ var closeOptions = function () {
24
+ setAnchorEl(null);
25
+ };
26
+ // Set the current language
27
+ var setLocale = function (locale) {
28
+ document.cookie = "NEXT_LOCALE=".concat(locale, "; max-age=31536000; path=/");
29
+ };
30
+ var router = useRouter();
31
+ return (React.createElement(React.Fragment, null,
32
+ React.createElement(Tooltip, { title: t['tooltip'][locale] },
33
+ React.createElement(IconButton, { component: 'span', "aria-label": 'language', onClick: openOptions },
34
+ React.createElement(LanguageIcon, null))),
35
+ React.createElement(Menu, { anchorEl: anchorEl, id: 'language-menu', open: open, onClose: closeOptions, onClick: closeOptions, anchorOrigin: {
36
+ vertical: 'bottom',
37
+ horizontal: 'right',
38
+ }, transformOrigin: {
39
+ vertical: 'top',
40
+ horizontal: 'right',
41
+ }, PaperProps: {
42
+ sx: {
43
+ padding: '4px',
44
+ },
45
+ } },
46
+ React.createElement(MenuList, { dense: true }, languages === null || languages === void 0 ? void 0 : languages.map(function (lang) { return (React.createElement(Link, { key: lang.id, href: router.asPath, locale: lang.id },
47
+ React.createElement(MenuItem, { selected: lang.id === locale, onClick: function () { return setLocale(lang.id); } },
48
+ React.createElement(ListItemIcon, null,
49
+ React.createElement("span", { className: "fi fi-".concat(lang.countryCode) })),
50
+ React.createElement(ListItemText, null, lang.label)))); })))));
51
+ };
52
+ export default LanguageSelect;
@@ -0,0 +1,9 @@
1
+ {
2
+ "tooltip": {
3
+ "de": "Sprache",
4
+ "en": "Language",
5
+ "fr": "Langue",
6
+ "it": "Lingua",
7
+ "es": "Idioma"
8
+ }
9
+ }
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import { StringTranslation } from '../../../types/languages';
3
+ export interface ButtonGroupOption {
4
+ /**
5
+ * Option unique identifier.
6
+ */
7
+ id: string;
8
+ /**
9
+ * The label to be shown
10
+ */
11
+ label: StringTranslation;
12
+ /**
13
+ * A description for the option to appear in the tooltip
14
+ */
15
+ tooltip?: StringTranslation;
16
+ /**
17
+ * Whether the option is disabled
18
+ */
19
+ disabled?: boolean;
20
+ }
21
+ interface ToggleButtonGroupProps {
22
+ /**
23
+ * A list of options.
24
+ */
25
+ options: ButtonGroupOption[];
26
+ /**
27
+ * Function to be called when a button is clicked.
28
+ */
29
+ onChange: (newValue: string) => void;
30
+ /**
31
+ * Size of the buttons.
32
+ */
33
+ size?: 'small' | 'medium' | 'large';
34
+ /**
35
+ * The controlled value.
36
+ */
37
+ value: string;
38
+ }
39
+ declare const ToggleButtonGroup: React.FC<ToggleButtonGroupProps>;
40
+ export default ToggleButtonGroup;
41
+ //# sourceMappingURL=ToggleButtonGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonGroup.d.ts","sourceRoot":"","sources":["../../../../../src/components/buttons/ToggleButtonGroup/ToggleButtonGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,iBAAiB,CAAC;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,sBAAsB;IAC9B;;OAEG;IACH,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAoCvD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { Button, Tooltip } from '@mui/material';
3
+ import { useLocale } from '../../../utils/hooks/useLocale';
4
+ var ToggleButtonGroup = function (_a) {
5
+ var onChange = _a.onChange, options = _a.options, _b = _a.size, size = _b === void 0 ? 'small' : _b, value = _a.value;
6
+ var locale = useLocale();
7
+ // Handle selection
8
+ var _c = useState(''), selected = _c[0], setSelected = _c[1];
9
+ useEffect(function () {
10
+ if (value) {
11
+ setSelected(value);
12
+ }
13
+ }, [value]);
14
+ return (React.createElement("div", { style: { display: 'flex', alignItems: 'center' } }, options.map(function (opt) {
15
+ var _a;
16
+ return (React.createElement(Tooltip, { key: opt.id, title: ((_a = opt.tooltip) === null || _a === void 0 ? void 0 : _a[locale]) || '' },
17
+ React.createElement(Button, { key: opt.id, size: size, color: 'primary', disabled: opt.disabled, variant: opt.id === selected ? 'contained' : 'outlined', onClick: function () { return onChange(opt.id); } }, opt.label[locale])));
18
+ })));
19
+ };
20
+ export default ToggleButtonGroup;
@@ -0,0 +1,4 @@
1
+ export { default as Avatar } from './Avatar/Avatar';
2
+ export { default as LanguageSelect } from './LanguageSelect/LanguageSelect';
3
+ export { default as ToggleButtonGroup } from './ToggleButtonGroup/ToggleButtonGroup';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/buttons/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as Avatar } from './Avatar/Avatar';
2
+ export { default as LanguageSelect } from './LanguageSelect/LanguageSelect';
3
+ export { default as ToggleButtonGroup } from './ToggleButtonGroup/ToggleButtonGroup';
@@ -0,0 +1,12 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { ImageProps } from 'next/image';
3
+ interface MinimalLayoutProps {
4
+ isLoading?: boolean;
5
+ isError?: boolean;
6
+ error?: Error;
7
+ logoSource?: ImageProps['src'];
8
+ children?: ReactNode;
9
+ }
10
+ declare const MinimalLayout: React.FC<MinimalLayoutProps>;
11
+ export default MinimalLayout;
12
+ //# sourceMappingURL=MinimalLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinimalLayout.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/MinimalLayout/MinimalLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAc,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAC;AAUhE,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAuF/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { Box, Typography, useTheme as useMUITheme } from '@mui/material';
3
+ import Image from 'next/image';
4
+ import { useRouter } from 'next/router';
5
+ import { DotWaveLoading } from '../../progress';
6
+ import Footer from '../components/Footer/Footer';
7
+ import TopLine from '../components/Topline/TopLine';
8
+ import t from './translations.json';
9
+ var MinimalLayout = function (_a) {
10
+ var isLoading = _a.isLoading, isError = _a.isError, error = _a.error, logoSource = _a.logoSource, children = _a.children;
11
+ var theme = useMUITheme();
12
+ var router = useRouter();
13
+ var locale = router.locale || 'en';
14
+ return (React.createElement(React.Fragment, null,
15
+ React.createElement(TopLine, null),
16
+ React.createElement(Box, { sx: {
17
+ display: 'flex',
18
+ flexDirection: 'column',
19
+ paddingBottom: '10px',
20
+ minHeight: '100vh',
21
+ width: '100%',
22
+ background: theme.palette.background.default,
23
+ } },
24
+ isLoading && React.createElement(DotWaveLoading, { locale: locale }),
25
+ !isLoading && isError && (React.createElement(Box, { sx: {
26
+ flexGrow: 1,
27
+ maxWidth: '100%',
28
+ overflowX: 'hidden',
29
+ paddingTop: '10px',
30
+ paddingBottom: '10px',
31
+ paddingLeft: '27px',
32
+ paddingRight: '27px',
33
+ } },
34
+ React.createElement("div", { style: {
35
+ display: 'flex',
36
+ flexDirection: 'column',
37
+ justifyContent: 'center',
38
+ alignItems: 'center',
39
+ height: '100vh',
40
+ } },
41
+ React.createElement(Image, { src: '/images/illustrations/undraw_server_down.svg', alt: 'error-page', width: 300, height: 300 }),
42
+ React.createElement(Typography, { variant: 'h4', color: 'error', align: 'center' }, t['errorPageLoad'][locale]),
43
+ error && (React.createElement(Typography, { variant: 'body1', color: 'error', align: 'center' },
44
+ "Error: ",
45
+ error.message))))),
46
+ !isLoading && (React.createElement(Box, { sx: {
47
+ flexGrow: 1,
48
+ maxWidth: '100%',
49
+ overflowX: 'hidden',
50
+ paddingTop: '10px',
51
+ paddingBottom: '10px',
52
+ paddingLeft: '27px',
53
+ paddingRight: '27px',
54
+ } }, children)),
55
+ React.createElement(Footer, { logoSource: logoSource, text: 'Deix Srl', textURL: 'https://deixsrl.com' }))));
56
+ };
57
+ export default MinimalLayout;
@@ -0,0 +1,8 @@
1
+ {
2
+ "errorPageLoad": {
3
+ "de": "Ups! Beim Abrufen der Seiteninformationen ist ein Fehler aufgetreten.",
4
+ "en": "Oops! Something went wrong retrieving page information.",
5
+ "fr": "Oups! Quelque chose s'est mal passé lors de la récupération des informations de la page.",
6
+ "it": "Oops! Qualcosa è andato storto nel recupero delle informazioni sulla pagina."
7
+ }
8
+ }
@@ -0,0 +1,16 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { ImageProps } from 'next/image';
3
+ import { SidebarLink } from '../components/Sidebar/Sidebar';
4
+ interface StandardLayoutProps {
5
+ isLoading?: boolean;
6
+ isError?: boolean;
7
+ error?: Error;
8
+ children?: ReactNode;
9
+ logoSource?: ImageProps['src'];
10
+ sidebarLinks?: SidebarLink[];
11
+ logoutUrl?: string;
12
+ accountSettingsUrl?: string;
13
+ }
14
+ declare const StandardLayout: React.FC<StandardLayoutProps>;
15
+ export default StandardLayout;
16
+ //# sourceMappingURL=StandardLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StandardLayout.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/StandardLayout/StandardLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASzC,OAAc,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAC;AAMhE,OAAgB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAQrE,UAAU,mBAAmB;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAwHjD,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import { Box, Typography, useMediaQuery, useTheme as useMUITheme } from '@mui/material';
3
+ import Image from 'next/image';
4
+ import { useRouter } from 'next/router';
5
+ import { DotWaveLoading } from '../../progress';
6
+ import AppLogo from '../components/AppLogo/AppLogo';
7
+ import Footer from '../components/Footer/Footer';
8
+ import Sidebar from '../components/Sidebar/Sidebar';
9
+ import Topbar from '../components/Topbar/Topbar';
10
+ import TopLine from '../components/Topline/TopLine';
11
+ import { usePersistedState } from '../../../utils/hooks/usePersistedState';
12
+ import t from './translations.json';
13
+ var StandardLayout = function (_a) {
14
+ var isLoading = _a.isLoading, isError = _a.isError, error = _a.error, logoSource = _a.logoSource, _b = _a.sidebarLinks, sidebarLinks = _b === void 0 ? [] : _b, logoutUrl = _a.logoutUrl, accountSettingsUrl = _a.accountSettingsUrl, children = _a.children;
15
+ var theme = useMUITheme();
16
+ var router = useRouter();
17
+ var locale = router.locale || 'en';
18
+ // Get if we are dealing with mobile client
19
+ var isMobile = !useMediaQuery(theme.breakpoints.up('lg'));
20
+ // Persist user preference about the sidebar
21
+ var _c = usePersistedState('sidebarOpen', isMobile ? false : true), sidebarOpen = _c[0], setSidebarOpen = _c[1];
22
+ return (React.createElement(React.Fragment, null,
23
+ React.createElement(TopLine, null),
24
+ React.createElement(Sidebar, { links: sidebarLinks, onClose: function () { return setSidebarOpen(false); }, open: sidebarOpen, isMobile: isMobile, logo: React.createElement(AppLogo, { logoSource: logoSource, open: sidebarOpen }), locale: locale }),
25
+ React.createElement(Box, { sx: {
26
+ display: 'flex',
27
+ flexDirection: 'column',
28
+ paddingBottom: '10px',
29
+ minHeight: '100vh',
30
+ width: '100%',
31
+ background: theme.palette.background.default,
32
+ } },
33
+ React.createElement(Topbar, { onClose: function () { return setSidebarOpen(false); }, onOpen: function () { return setSidebarOpen(true); }, open: sidebarOpen, locale: locale, logoutUrl: logoutUrl, accountSettingsUrl: accountSettingsUrl }),
34
+ isLoading && React.createElement(DotWaveLoading, { locale: locale }),
35
+ !isLoading && isError && (React.createElement(Box, { sx: {
36
+ flexGrow: 1,
37
+ maxWidth: '100%',
38
+ overflowX: 'hidden',
39
+ paddingTop: '10px',
40
+ paddingBottom: '10px',
41
+ paddingLeft: '27px',
42
+ paddingRight: '27px',
43
+ } },
44
+ React.createElement("div", { style: {
45
+ display: 'flex',
46
+ flexDirection: 'column',
47
+ justifyContent: 'center',
48
+ alignItems: 'center',
49
+ height: '100vh',
50
+ } },
51
+ React.createElement(Image, { src: '/images/illustrations/undraw_server_down.svg', alt: 'error-page', width: 300, height: 300 }),
52
+ React.createElement(Typography, { variant: 'h4', color: 'error', align: 'center' }, t['errorPageLoad'][locale]),
53
+ error && (React.createElement(Typography, { variant: 'body1', color: 'error', align: 'center' },
54
+ "Error: ",
55
+ error.message))))),
56
+ !isLoading && (React.createElement(Box, { sx: {
57
+ flexGrow: 1,
58
+ maxWidth: '100%',
59
+ overflowX: 'hidden',
60
+ paddingTop: '10px',
61
+ paddingBottom: '10px',
62
+ paddingLeft: '27px',
63
+ paddingRight: '27px',
64
+ } }, children)),
65
+ React.createElement(Footer, { logoSource: logoSource, text: 'Deix Srl', textURL: 'https://deixsrl.com' }))));
66
+ };
67
+ export default StandardLayout;
@@ -0,0 +1,8 @@
1
+ {
2
+ "errorPageLoad": {
3
+ "de": "Ups! Beim Abrufen der Seiteninformationen ist ein Fehler aufgetreten.",
4
+ "en": "Oops! Something went wrong retrieving page information.",
5
+ "fr": "Oups! Quelque chose s'est mal passé lors de la récupération des informations de la page.",
6
+ "it": "Oops! Qualcosa è andato storto nel recupero delle informazioni sulla pagina."
7
+ }
8
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { ImageProps } from 'next/image';
3
+ interface LogoProps {
4
+ /**
5
+ * Name of the app to be shown next to the logo.
6
+ */
7
+ name?: string;
8
+ /**
9
+ * Logo image source.
10
+ */
11
+ logoSource: ImageProps['src'];
12
+ /**
13
+ * Whether the sidebar is open or not.
14
+ */
15
+ open: boolean;
16
+ }
17
+ declare const AppLogo: React.FC<LogoProps>;
18
+ export default AppLogo;
19
+ //# sourceMappingURL=AppLogo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppLogo.d.ts","sourceRoot":"","sources":["../../../../../../src/components/layout/components/AppLogo/AppLogo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO/C,UAAU,SAAS;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAqChC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import Image from 'next/image';
3
+ import { Typography } from '@mui/material';
4
+ import { useTheme } from '@mui/material/styles';
5
+ import packageInfo from '../../../../../package.json';
6
+ var AppLogo = function (_a) {
7
+ var _b = _a.name, name = _b === void 0 ? packageInfo.name.charAt(0).toUpperCase() + packageInfo.name.slice(1) : _b, open = _a.open, logoSource = _a.logoSource;
8
+ var muiTheme = useTheme();
9
+ return (React.createElement("div", { style: {
10
+ display: 'flex',
11
+ flexWrap: 'wrap',
12
+ alignItems: 'center',
13
+ justifyContent: 'center',
14
+ } },
15
+ logoSource && (React.createElement(Image, { src: logoSource, alt: 'logo', width: 36, height: 36 })),
16
+ open && (React.createElement(React.Fragment, null,
17
+ React.createElement(Typography, { variant: 'h4', sx: {
18
+ background: muiTheme.palette.gradient.main,
19
+ backgroundClip: 'text',
20
+ WebkitBackgroundClip: 'text',
21
+ WebkitTextFillColor: 'transparent',
22
+ marginLeft: '8px',
23
+ } }, name)))));
24
+ };
25
+ export default AppLogo;
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { ImageProps } from 'next/image';
3
+ export interface FooterProps {
4
+ /**
5
+ * Logo image source.
6
+ */
7
+ logoSource?: ImageProps['src'];
8
+ /**
9
+ * Text to be shown next to the logo.
10
+ */
11
+ text?: string;
12
+ /**
13
+ * Link to be rerouted to when the text is clicked.
14
+ */
15
+ textURL?: string;
16
+ /**
17
+ * The URL for the backend API. This will send a request to /info for the name and version of the API and show this information. If this is not provided or if the fetch fails nothing is shown in the footer.
18
+ */
19
+ apiURL?: string;
20
+ /**
21
+ * A React component to be shown underneath the main footer.
22
+ */
23
+ children?: unknown;
24
+ }
25
+ declare const Footer: React.FC<FooterProps>;
26
+ export default Footer;
27
+ //# sourceMappingURL=Footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../../../src/components/layout/components/Footer/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAc/C,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA+EjC,CAAC;AAEF,eAAe,MAAM,CAAC"}