@banch0u/core-project-test-repository 1.8.2 → 1.8.4

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,6 +1,6 @@
1
1
  .profile {
2
2
  display: flex;
3
- gap: 12px;
3
+ gap: 10px;
4
4
  align-items: center;
5
5
  .category {
6
6
  display: flex;
@@ -18,6 +18,7 @@
18
18
  display: flex;
19
19
  align-items: center;
20
20
  cursor: pointer;
21
+ padding: 0;
21
22
  svg {
22
23
  width: 20px;
23
24
  margin-top: 3.5px;
@@ -34,17 +35,7 @@
34
35
  border-radius: 50%;
35
36
  border: 1px solid #bebebe;
36
37
  }
37
- .pp {
38
- width: 39px;
39
- height: 39px;
40
- border-radius: 50%;
41
- // border: 1px solid #bebebe;
42
- background: var(--darkBlueColor);
43
- color: white;
44
- display: flex;
45
- justify-content: center;
46
- align-items: center;
47
- }
38
+
48
39
  .name {
49
40
  font-family: Inter;
50
41
  font-size: 12px;
@@ -129,3 +120,144 @@
129
120
  }
130
121
  }
131
122
  }
123
+ .icon_overlay {
124
+ background-color: var(--lightBlue);
125
+ // padding: 11px;
126
+ border-radius: 6px;
127
+ width: 46px;
128
+ height: 46px;
129
+ display: flex;
130
+ align-items: center;
131
+ justify-content: center;
132
+
133
+ svg {
134
+ width: 24px !important;
135
+ height: 24px !important;
136
+ margin-top: 0 !important;
137
+ }
138
+ }
139
+
140
+ .profileRow {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 12px;
144
+ position: relative;
145
+ }
146
+
147
+ .button {
148
+ background: transparent;
149
+ border: none;
150
+ display: flex;
151
+ align-items: center;
152
+ cursor: pointer;
153
+ padding: 0;
154
+
155
+ svg {
156
+ width: 20px;
157
+ margin-top: 3.5px;
158
+ }
159
+ }
160
+
161
+ .icon_overlay {
162
+ background-color: var(--lightBlue);
163
+ border-radius: 6px;
164
+ width: 46px;
165
+ height: 46px;
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+
170
+ svg {
171
+ width: 24px !important;
172
+ height: 24px !important;
173
+ margin-top: 0 !important;
174
+ }
175
+ }
176
+
177
+ .profile {
178
+ position: relative;
179
+ display: flex;
180
+ align-items: flex-end;
181
+ }
182
+
183
+ .profileHeader {
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: space-between;
187
+ gap: 8px;
188
+ padding: 7px 10px;
189
+ border-radius: 8px;
190
+ background: #eef5fc;
191
+ cursor: pointer;
192
+ width: 240px;
193
+
194
+ .pp {
195
+ width: 32px;
196
+ height: 32px;
197
+ border-radius: 4px;
198
+ background: var(--blue);
199
+ color: white;
200
+ display: flex;
201
+ align-items: center;
202
+ justify-content: center;
203
+ font-weight: 500;
204
+ font-size: 16px;
205
+ }
206
+
207
+ .name {
208
+ font-weight: 600;
209
+ font-size: 14px;
210
+ color: var(--black);
211
+ }
212
+ }
213
+
214
+ .arrow {
215
+ width: 10px;
216
+ height: 10px;
217
+ border-right: 2px solid var(--blue);
218
+ border-bottom: 2px solid var(--blue);
219
+ transform: rotate(45deg);
220
+ transition: transform 0.3s ease;
221
+ margin-right: 6px;
222
+ }
223
+
224
+ .arrow.open {
225
+ transform: rotate(-135deg);
226
+ }
227
+
228
+ .profileDropdown {
229
+ position: absolute;
230
+ top: 100%;
231
+ right: -1px;
232
+ width: 260px;
233
+ border-right: 1px solid var(--blue);
234
+ border-left: 1px solid var(--blue);
235
+ border-bottom: 1px solid var(--blue);
236
+
237
+ border-radius: 0px 0px 8px 8px;
238
+ background: #eef5fc;
239
+ z-index: 100;
240
+ display: flex;
241
+ flex-direction: column;
242
+ overflow: hidden;
243
+ }
244
+
245
+ .menuItem {
246
+ display: flex;
247
+ align-items: center;
248
+ gap: 10px;
249
+ padding: 10px 16px;
250
+ font-size: 16px;
251
+ cursor: pointer;
252
+ border-top: 1px solid var(--white);
253
+ text-decoration: none;
254
+ transition: background 0.2s ease;
255
+ color: var(--blue);
256
+ &:hover {
257
+ background: #e6f0fc;
258
+ }
259
+ }
260
+
261
+ .logoutText {
262
+ color: red;
263
+ }
package/dist/index.js CHANGED
@@ -18,7 +18,11 @@ export { default as NotFound } from "./pages/NotFound";
18
18
  import LoginPage from "./pages/Login";
19
19
  import PlatformPage from "./pages/Platform";
20
20
  import HeaderLayout from "./layout/Header";
21
+ import SidebarComponent from "./layout/Sidebar";
21
22
  import { CoreProvider } from "./store/coreProvider";
23
+ export var Sidebar = function Sidebar(props) {
24
+ return /*#__PURE__*/React.createElement(CoreProvider, null, /*#__PURE__*/React.createElement(SidebarComponent, props));
25
+ };
22
26
  export var Login = function Login() {
23
27
  return /*#__PURE__*/React.createElement(CoreProvider, null, /*#__PURE__*/React.createElement(LoginPage, null));
24
28
  };
@@ -0,0 +1,88 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import React, { useMemo, useRef, useEffect, useState } from "react";
3
+ import { useSelector } from "react-redux";
4
+ import { useLocation } from "react-router-dom";
5
+ import { Collapse } from "antd";
6
+ import { RightOutlined } from "@ant-design/icons";
7
+ import style from "./index.module.scss";
8
+ import { entryData } from "../../../pages/Platform/constant";
9
+ var Panel = Collapse.Panel;
10
+ var AppSelect = function AppSelect() {
11
+ var location = useLocation();
12
+ var _useSelector = useSelector(function (state) {
13
+ return state.auth;
14
+ }),
15
+ scopesData = _useSelector.scopesData;
16
+ var accordionRef = useRef(null);
17
+ var _useState = useState([]),
18
+ _useState2 = _slicedToArray(_useState, 2),
19
+ activeKey = _useState2[0],
20
+ setActiveKey = _useState2[1]; // manage open/close state
21
+
22
+ var filteredOptions = useMemo(function () {
23
+ return entryData.filter(function (item) {
24
+ return item.scopes === "account" || scopesData === "*" || (scopesData === null || scopesData === void 0 ? void 0 : scopesData.includes(item.scopes));
25
+ });
26
+ }, [scopesData]);
27
+ var baseSegment = useMemo(function () {
28
+ return window.location.pathname.split("/")[1];
29
+ }, [location.pathname]);
30
+ var active = useMemo(function () {
31
+ return filteredOptions.find(function (opt) {
32
+ return opt.pathname.includes("/".concat(baseSegment));
33
+ }) || filteredOptions[0];
34
+ }, [filteredOptions, baseSegment]);
35
+
36
+ // ✨ Outside click listener
37
+ useEffect(function () {
38
+ var handleClickOutside = function handleClickOutside(e) {
39
+ if (accordionRef.current && !accordionRef.current.contains(e.target)) {
40
+ setActiveKey([]); // collapse if clicked outside
41
+ }
42
+ };
43
+ document.addEventListener("mousedown", handleClickOutside);
44
+ return function () {
45
+ return document.removeEventListener("mousedown", handleClickOutside);
46
+ };
47
+ }, []);
48
+ return /*#__PURE__*/React.createElement("div", {
49
+ ref: accordionRef
50
+ }, /*#__PURE__*/React.createElement(Collapse, {
51
+ bordered: false,
52
+ activeKey: activeKey,
53
+ onChange: function onChange(key) {
54
+ return setActiveKey(key);
55
+ },
56
+ expandIconPosition: "end",
57
+ expandIcon: function expandIcon(_ref) {
58
+ var isActive = _ref.isActive;
59
+ return /*#__PURE__*/React.createElement("div", {
60
+ "data-no-invert": true
61
+ }, /*#__PURE__*/React.createElement(RightOutlined, {
62
+ style: {
63
+ transform: "rotate(".concat(isActive ? 270 : 90, "deg)"),
64
+ transition: "transform 0.2s ease",
65
+ color: "white",
66
+ fontSize: "14px"
67
+ }
68
+ }));
69
+ },
70
+ className: style.accordion
71
+ }, /*#__PURE__*/React.createElement(Panel, {
72
+ header: /*#__PURE__*/React.createElement("div", {
73
+ className: style.accordionHeader
74
+ }, /*#__PURE__*/React.createElement("div", null, active === null || active === void 0 ? void 0 : active.icon), /*#__PURE__*/React.createElement("span", null, active === null || active === void 0 ? void 0 : active.value)),
75
+ key: "1"
76
+ }, /*#__PURE__*/React.createElement("div", {
77
+ className: style.accordionBody
78
+ }, filteredOptions.filter(function (opt) {
79
+ return opt.pathname !== (active === null || active === void 0 ? void 0 : active.pathname);
80
+ }).map(function (option) {
81
+ return /*#__PURE__*/React.createElement("a", {
82
+ key: option.id,
83
+ href: option.pathname,
84
+ className: style.accordionOption
85
+ }, option.icon, /*#__PURE__*/React.createElement("span", null, option.value));
86
+ })))));
87
+ };
88
+ export default AppSelect;
@@ -0,0 +1,63 @@
1
+ .accordion {
2
+ background: var(--blue);
3
+ width: 250px;
4
+ }
5
+
6
+ .accordionHeader {
7
+ display: flex;
8
+ align-items: center;
9
+ gap: 10px;
10
+ span {
11
+ font-size: 18px;
12
+ font-weight: 500;
13
+ color: var(--white);
14
+ height: auto;
15
+ }
16
+ div {
17
+ height: 30px;
18
+ filter: brightness(0) invert(1) !important;
19
+ }
20
+ svg {
21
+ width: 30px !important;
22
+ height: 30px !important;
23
+ }
24
+ }
25
+
26
+ .accordionBody {
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: 8px;
30
+ }
31
+
32
+ .accordionOption {
33
+ background-color: var(--white);
34
+ color: var(--blue);
35
+ display: flex;
36
+ align-items: center;
37
+ padding: 10px;
38
+ border-radius: 6px;
39
+ gap: 10px;
40
+ font-size: 16px;
41
+ font-weight: 500;
42
+ font-size: 16px;
43
+ line-height: 100%;
44
+ letter-spacing: 0%;
45
+
46
+ cursor: pointer;
47
+ text-decoration: none;
48
+ transition: background 0.2s ease;
49
+
50
+ svg {
51
+ width: 26px;
52
+ height: 26px;
53
+ }
54
+
55
+ &:hover {
56
+ background-color: var(--lightBlue);
57
+ }
58
+ &:hover {
59
+ span {
60
+ color: var(--blue);
61
+ }
62
+ }
63
+ }
@@ -1,104 +1,26 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- import _regeneratorRuntime from "@babel/runtime/regenerator";
4
- import React, { useEffect, useState, useCallback } from "react";
2
+ import React, { useEffect, useState } from "react";
5
3
  import style from "./index.module.scss";
6
- import { DsgLogo } from "../../assets/icons";
7
4
  import ProfileOptions from "../../components/ProfileOptions";
8
- import { Link } from "react-router-dom";
9
- import { PLATFORM_PATH } from "../../utils/path";
10
- import { useDispatch, useSelector } from "react-redux";
11
- import { getCompanyInfo } from "../../store/slices/companyInfo";
12
- import api from "../../utils/axios";
5
+ import AppSelect from "./AppSelect";
13
6
  var Header = function Header() {
14
7
  var _useState = useState(localStorage.getItem("theme") || "light"),
15
8
  _useState2 = _slicedToArray(_useState, 2),
16
9
  theme = _useState2[0],
17
10
  setTheme = _useState2[1];
18
- var _useState3 = useState(null),
19
- _useState4 = _slicedToArray(_useState3, 2),
20
- imageSrc = _useState4[0],
21
- setImageSrc = _useState4[1];
22
- var dispatch = useDispatch();
23
- var companyInfo = useSelector(function (state) {
24
- return state.companyInfo.companyInfo;
25
- });
26
11
  var updateTheme = function updateTheme() {
27
12
  var newTheme = localStorage.getItem("theme") || "light";
28
13
  setTheme(newTheme);
29
14
  };
30
- var getBase64FromURL = useCallback(/*#__PURE__*/function () {
31
- var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(url) {
32
- var res;
33
- return _regeneratorRuntime.wrap(function _callee$(_context) {
34
- while (1) switch (_context.prev = _context.next) {
35
- case 0:
36
- _context.prev = 0;
37
- _context.next = 3;
38
- return api.get(url);
39
- case 3:
40
- res = _context.sent;
41
- return _context.abrupt("return", res === null || res === void 0 ? void 0 : res.data);
42
- case 7:
43
- _context.prev = 7;
44
- _context.t0 = _context["catch"](0);
45
- console.error("Error loading logo:", _context.t0);
46
- return _context.abrupt("return", null);
47
- case 11:
48
- case "end":
49
- return _context.stop();
50
- }
51
- }, _callee, null, [[0, 7]]);
52
- }));
53
- return function (_x) {
54
- return _ref.apply(this, arguments);
55
- };
56
- }(), []);
57
15
  useEffect(function () {
58
- dispatch(getCompanyInfo());
59
16
  window.addEventListener("themeChange", updateTheme);
60
17
  return function () {
61
18
  return window.removeEventListener("themeChange", updateTheme);
62
19
  };
63
- }, [dispatch]);
64
- useEffect(function () {
65
- var fetchImage = /*#__PURE__*/function () {
66
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
67
- var _companyInfo$;
68
- var base64;
69
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
70
- while (1) switch (_context2.prev = _context2.next) {
71
- case 0:
72
- if (!(companyInfo !== null && companyInfo !== void 0 && (_companyInfo$ = companyInfo[0]) !== null && _companyInfo$ !== void 0 && _companyInfo$.filePath)) {
73
- _context2.next = 5;
74
- break;
75
- }
76
- _context2.next = 3;
77
- return getBase64FromURL(companyInfo[0].filePath);
78
- case 3:
79
- base64 = _context2.sent;
80
- setImageSrc(base64);
81
- case 5:
82
- case "end":
83
- return _context2.stop();
84
- }
85
- }, _callee2);
86
- }));
87
- return function fetchImage() {
88
- return _ref2.apply(this, arguments);
89
- };
90
- }();
91
- fetchImage();
92
- }, [companyInfo, getBase64FromURL]);
20
+ }, []);
93
21
  return /*#__PURE__*/React.createElement("header", {
94
- className: style.header
95
- }, /*#__PURE__*/React.createElement(Link, {
96
- to: PLATFORM_PATH
97
- }, imageSrc ? /*#__PURE__*/React.createElement("img", {
98
- src: imageSrc,
99
- alt: "Company Logo"
100
- }) : theme === "dark" ? /*#__PURE__*/React.createElement(DsgLogo, {
101
- dark: true
102
- }) : /*#__PURE__*/React.createElement(DsgLogo, null)), /*#__PURE__*/React.createElement(ProfileOptions, null));
22
+ className: style.header,
23
+ "data-no-invert": true
24
+ }, /*#__PURE__*/React.createElement(AppSelect, null), /*#__PURE__*/React.createElement(ProfileOptions, null));
103
25
  };
104
26
  export default Header;
@@ -1,19 +1,15 @@
1
1
  .header {
2
- height: 84px;
3
- background: #fff;
2
+ height: 81px;
3
+ background: var(--blue);
4
4
  align-items: center;
5
5
  display: flex;
6
6
  align-items: center;
7
7
  justify-content: space-between;
8
- padding: 0 20px;
9
- border-bottom: 1px solid #c4c4c4;
8
+ padding: 0 17px;
10
9
  z-index: 1;
11
- svg {
12
- width: 123px;
13
- height: auto;
14
- }
15
- img {
16
- width: 95px;
17
- height: auto;
18
- }
10
+ position: relative;
11
+ overflow: visible; // ✅ allows dropdowns to escape
12
+ // z-index: 10;
13
+ }
14
+ .header {
19
15
  }
@@ -0,0 +1,147 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
+ import React, { useEffect, useState, useCallback } from "react";
5
+ import { Link, useLocation } from "react-router-dom";
6
+ import Cookies from "js-cookie";
7
+ import style from "./index.module.scss";
8
+ import { Layout, Menu } from "antd";
9
+ import { DsgLogo, DsgLogoEmblem } from "../../assets/icons";
10
+ import { PLATFORM_PATH } from "../../utils/path";
11
+ import { useDispatch, useSelector } from "react-redux";
12
+ import { getCompanyInfo } from "../../store/slices/companyInfo";
13
+ import api from "../../utils/axios";
14
+ var Sider = Layout.Sider;
15
+ var Sidebar = function Sidebar(_ref) {
16
+ var _items$flatMap$find;
17
+ var _ref$items = _ref.items,
18
+ items = _ref$items === void 0 ? [] : _ref$items;
19
+ var location = useLocation();
20
+ var dispatch = useDispatch();
21
+ var companyInfo = useSelector(function (state) {
22
+ return state.companyInfo.companyInfo;
23
+ });
24
+ var _useState = useState(false),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ collapsed = _useState2[0],
27
+ setCollapsed = _useState2[1];
28
+ var _useState3 = useState(null),
29
+ _useState4 = _slicedToArray(_useState3, 2),
30
+ imageSrc = _useState4[0],
31
+ setImageSrc = _useState4[1];
32
+ var _useState5 = useState(localStorage.getItem("theme") === "dark"),
33
+ _useState6 = _slicedToArray(_useState5, 2),
34
+ isDark = _useState6[0],
35
+ setIsDark = _useState6[1];
36
+ var handleCollapse = function handleCollapse() {
37
+ var newState = !collapsed;
38
+ setCollapsed(newState);
39
+ Cookies.set("sidebarCollapsed", newState, {
40
+ expires: 7
41
+ });
42
+ };
43
+ var getBase64FromURL = useCallback(/*#__PURE__*/function () {
44
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(url) {
45
+ var res;
46
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
47
+ while (1) switch (_context.prev = _context.next) {
48
+ case 0:
49
+ _context.prev = 0;
50
+ _context.next = 3;
51
+ return api.get(url);
52
+ case 3:
53
+ res = _context.sent;
54
+ return _context.abrupt("return", res === null || res === void 0 ? void 0 : res.data);
55
+ case 7:
56
+ _context.prev = 7;
57
+ _context.t0 = _context["catch"](0);
58
+ console.error("Error loading logo:", _context.t0);
59
+ return _context.abrupt("return", null);
60
+ case 11:
61
+ case "end":
62
+ return _context.stop();
63
+ }
64
+ }, _callee, null, [[0, 7]]);
65
+ }));
66
+ return function (_x) {
67
+ return _ref2.apply(this, arguments);
68
+ };
69
+ }(), []);
70
+ useEffect(function () {
71
+ var sidebarState = Cookies.get("sidebarCollapsed") === "true";
72
+ setCollapsed(sidebarState);
73
+ dispatch(getCompanyInfo());
74
+ }, [dispatch]);
75
+ console.log(companyInfo);
76
+ useEffect(function () {
77
+ var fetchLogo = /*#__PURE__*/function () {
78
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
79
+ var _companyInfo$;
80
+ var base64;
81
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
82
+ while (1) switch (_context2.prev = _context2.next) {
83
+ case 0:
84
+ if (!(companyInfo !== null && companyInfo !== void 0 && (_companyInfo$ = companyInfo[0]) !== null && _companyInfo$ !== void 0 && _companyInfo$.filePath)) {
85
+ _context2.next = 5;
86
+ break;
87
+ }
88
+ _context2.next = 3;
89
+ return getBase64FromURL(companyInfo[0].filePath);
90
+ case 3:
91
+ base64 = _context2.sent;
92
+ setImageSrc(base64);
93
+ case 5:
94
+ case "end":
95
+ return _context2.stop();
96
+ }
97
+ }, _callee2);
98
+ }));
99
+ return function fetchLogo() {
100
+ return _ref3.apply(this, arguments);
101
+ };
102
+ }();
103
+ fetchLogo();
104
+ }, [companyInfo, getBase64FromURL]);
105
+ useEffect(function () {
106
+ var handleThemeChange = function handleThemeChange() {
107
+ setIsDark(localStorage.getItem("theme") === "dark");
108
+ };
109
+ window.addEventListener("themeChange", handleThemeChange);
110
+ return function () {
111
+ window.removeEventListener("themeChange", handleThemeChange);
112
+ };
113
+ }, []);
114
+ var selectedKey = (_items$flatMap$find = items.flatMap(function (item) {
115
+ return item.children ? item.children : item;
116
+ }).find(function (item) {
117
+ return location.pathname.includes(item.key);
118
+ })) === null || _items$flatMap$find === void 0 ? void 0 : _items$flatMap$find.key;
119
+ return /*#__PURE__*/React.createElement(Sider, {
120
+ width: 270,
121
+ collapsible: true,
122
+ collapsed: collapsed,
123
+ collapsedWidth: 64,
124
+ trigger: null,
125
+ className: style.sidebar
126
+ }, /*#__PURE__*/React.createElement("div", {
127
+ className: "sideBar"
128
+ }, /*#__PURE__*/React.createElement(Menu, {
129
+ mode: "inline",
130
+ items: items,
131
+ selectedKeys: [selectedKey],
132
+ className: style.menu
133
+ })), /*#__PURE__*/React.createElement(Link, {
134
+ to: PLATFORM_PATH,
135
+ className: style.buttons
136
+ }, collapsed ? /*#__PURE__*/React.createElement(DsgLogoEmblem, null) : imageSrc ? /*#__PURE__*/React.createElement("img", {
137
+ src: imageSrc,
138
+ alt: "Company Logo"
139
+ }) : isDark ? /*#__PURE__*/React.createElement(DsgLogo, {
140
+ dark: true
141
+ }) : /*#__PURE__*/React.createElement(DsgLogo, null)), /*#__PURE__*/React.createElement("div", {
142
+ "data-no-invert": true,
143
+ className: style.collapseButton,
144
+ onClick: handleCollapse
145
+ }, collapsed ? "->" : "<-"));
146
+ };
147
+ export default Sidebar;
@@ -0,0 +1,50 @@
1
+ .sidebar {
2
+ background: #fff !important;
3
+ border: none;
4
+ position: relative;
5
+ box-shadow: 0px 0px 8px 0px #00000025;
6
+ height: calc(100vh - 85px);
7
+ border-radius: 0px 0px 12px 0px;
8
+ svg {
9
+ vertical-align: middle;
10
+ }
11
+ .menu {
12
+ margin-top: 10px;
13
+ padding: 0 6px;
14
+ li {
15
+ span {
16
+ margin-left: 8px;
17
+ font-size: 16px;
18
+ font-weight: 500;
19
+ line-height: 20px;
20
+ text-align: left;
21
+ }
22
+ }
23
+ }
24
+ .buttons {
25
+ position: absolute;
26
+ left: 15px;
27
+ bottom: 16px;
28
+ svg {
29
+ width: 100%;
30
+ height: auto;
31
+ padding-right: 15px;
32
+ }
33
+ img {
34
+ width: 100%;
35
+ height: auto;
36
+ padding-right: 15px;
37
+ }
38
+ }
39
+ .collapseButton {
40
+ position: absolute;
41
+ right: -12px;
42
+ top: 50%;
43
+ transform: translateY(-100%);
44
+ padding: 5px;
45
+ background: var(--blue);
46
+ border-radius: 50%;
47
+ color: var(--white);
48
+ cursor: pointer;
49
+ }
50
+ }