kelt-ui-kit-react 2.0.2 → 2.0.3

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 (127) hide show
  1. package/README.md +0 -26
  2. package/dist/_core/type/generiqueType.d.ts +4 -0
  3. package/dist/badge/Badge.d.ts +3 -1
  4. package/dist/button/Button.d.ts +1 -1
  5. package/dist/button/button.interface.d.ts +1 -2
  6. package/dist/dataTable/DataTable.d.ts +17 -14
  7. package/dist/dataTable/dataTable.interface.d.ts +24 -19
  8. package/dist/dataTable/dataTableActions/DataTableAction.d.ts +3 -5
  9. package/dist/dataTable/dataTableColumn/DataTableColumn.d.ts +13 -7
  10. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/DataTableColumnFilter.d.ts +10 -0
  11. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDate/DataTableColumnFilterDate.d.ts +9 -0
  12. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDateRange/dataTableColumnFilterDateRange.d.ts +9 -0
  13. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterEnum/DataTableColumnFilterEnum.d.ts +13 -0
  14. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterString/DataTableColumnFilterString.d.ts +9 -0
  15. package/dist/dataTable/dataTableColumn/dataTableColumnSort/DataTableColumnSort.d.ts +11 -0
  16. package/dist/dataTable/dataTableFilters/DataTableFilters.d.ts +7 -0
  17. package/dist/dataTable/dataTableLoading/DataTableLoading.d.ts +1 -3
  18. package/dist/dataTable/dataTableRow/DataTableRow.d.ts +5 -6
  19. package/dist/dataTable/dataTableRow/dataTableRowOverlay/DataTableRowOverlay.d.ts +12 -0
  20. package/dist/dataTable/dataTableRow/dataTableRowValue/DataTableRowValue.d.ts +11 -0
  21. package/dist/expands/expand/expand.d.ts +1 -1
  22. package/dist/form/Form.d.ts +2 -4
  23. package/dist/form/form.enum.d.ts +2 -3
  24. package/dist/form/form.interface.d.ts +2 -19
  25. package/dist/form/input/Input.d.ts +3 -0
  26. package/dist/form/inputNumber/InputNumber.d.ts +0 -2
  27. package/dist/grid/col/Col.d.ts +6 -3
  28. package/dist/grid/col/colStyled/ColStyled.d.ts +5 -7
  29. package/dist/grid/grid.interface.d.ts +5 -9
  30. package/dist/header/Header.d.ts +1 -1
  31. package/dist/header/header.interface.d.ts +1 -2
  32. package/dist/icon/Icon.d.ts +1 -1
  33. package/dist/icon/icon.interface.d.ts +1 -0
  34. package/dist/index.d.ts +1 -5
  35. package/dist/index.js +3606 -3543
  36. package/dist/menus/menu/Menu.d.ts +0 -1
  37. package/dist/overlayPanel/OverlayPanel.d.ts +4 -2
  38. package/dist/overlayPanel/overlayPanelStyled/OverlayPanelStyled.d.ts +2 -0
  39. package/dist/select/Select.d.ts +6 -2
  40. package/dist/select/selectOption.interface.d.ts +1 -0
  41. package/dist/style.css +1 -1
  42. package/dist/tabs/Tabs.d.ts +2 -1
  43. package/dist/toaster/store/useToasterStore.d.ts +0 -1
  44. package/index.html +2 -1
  45. package/package/package.json +56 -0
  46. package/package/src/sidebar/Sidebar.tsx +208 -0
  47. package/package/src/sidebar/sidebar.css +104 -0
  48. package/package.json +1 -1
  49. package/src/App.menu.tsx +0 -8
  50. package/src/_core/type/generiqueType.tsx +4 -0
  51. package/src/badge/Badge.tsx +9 -1
  52. package/src/badge/badge.css +4 -0
  53. package/src/button/Button.tsx +1 -3
  54. package/src/button/button.css +2 -2
  55. package/src/button/button.interface.tsx +1 -2
  56. package/src/card/card.css +25 -5
  57. package/src/card/cardAction/CardAction.tsx +4 -4
  58. package/src/damier/Damier.tsx +7 -16
  59. package/src/damier/damier.css +4 -11
  60. package/src/dataTable/DataTable.tsx +685 -542
  61. package/src/dataTable/DataTable.view.tsx +48 -24
  62. package/src/dataTable/dataTable.css +134 -159
  63. package/src/dataTable/dataTable.interface.ts +25 -19
  64. package/src/dataTable/dataTableActions/DataTableAction.tsx +14 -25
  65. package/src/dataTable/dataTableColumn/DataTableColumn.tsx +64 -14
  66. package/src/dataTable/dataTableColumn/dataTableColumnFilter/DataTableColumnFilter.tsx +36 -0
  67. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilter.css +0 -0
  68. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDate/DataTableColumnFilterDate.tsx +39 -0
  69. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDateRange/dataTableColumnFilterDateRange.tsx +80 -0
  70. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterEnum/DataTableColumnFilterEnum.tsx +89 -0
  71. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterString/DataTableColumnFilterString.tsx +37 -0
  72. package/src/dataTable/dataTableColumn/dataTableColumnSort/DataTableColumnSort.tsx +42 -0
  73. package/src/dataTable/dataTableFilters/DataTableFilters.tsx +91 -0
  74. package/src/dataTable/dataTableFilters/dataTableFilters.css +16 -0
  75. package/src/dataTable/dataTableLoading/DataTableLoading.tsx +4 -15
  76. package/src/dataTable/dataTableRow/DataTableRow.tsx +64 -180
  77. package/src/dataTable/dataTableRow/dataTableRowOverlay/DataTableRowOverlay.tsx +80 -0
  78. package/src/dataTable/dataTableRow/dataTableRowValue/DataTableRowValue.tsx +123 -0
  79. package/src/expands/Expands.tsx +2 -16
  80. package/src/expands/expand/expand.tsx +5 -122
  81. package/src/expands/expands.css +3 -8
  82. package/src/form/Form.tsx +93 -258
  83. package/src/form/Form.view.tsx +1 -9
  84. package/src/form/form.css +1 -51
  85. package/src/form/form.enum.ts +1 -2
  86. package/src/form/form.interface.tsx +2 -28
  87. package/src/form/input/Input.tsx +61 -7
  88. package/src/form/input/input.css +23 -1
  89. package/src/form/inputNumber/InputNumber.tsx +6 -11
  90. package/src/form/inputPrice/InputPrice.tsx +2 -4
  91. package/src/grid/col/Col.tsx +7 -5
  92. package/src/grid/col/colStyled/ColStyled.tsx +7 -21
  93. package/src/grid/grid.interface.tsx +5 -11
  94. package/src/grid/row/row.css +2 -2
  95. package/src/header/Header.tsx +2 -4
  96. package/src/header/header.css +0 -17
  97. package/src/header/header.interface.tsx +1 -2
  98. package/src/icon/Icon.tsx +6 -2
  99. package/src/icon/icon.interface.tsx +1 -0
  100. package/src/index.css +12 -58
  101. package/src/index.ts +2 -12
  102. package/src/menus/Menus.tsx +0 -1
  103. package/src/menus/menu/Menu.tsx +1 -2
  104. package/src/overlayPanel/OverlayPanel.tsx +71 -18
  105. package/src/overlayPanel/overlay.context.tsx +6 -4
  106. package/src/overlayPanel/overlayPanel.css +10 -1
  107. package/src/overlayPanel/overlayPanelStyled/OverlayPanelStyled.tsx +7 -2
  108. package/src/select/Select.tsx +178 -41
  109. package/src/select/select.css +94 -13
  110. package/src/select/selectOption.interface.ts +1 -0
  111. package/src/sidebar/Sidebar.tsx +5 -107
  112. package/src/sidebar/sidebar.css +1 -18
  113. package/src/tabs/Tabs.tsx +20 -1
  114. package/src/tabs/tabs.css +3 -9
  115. package/src/toaster/Toaster.tsx +2 -7
  116. package/src/toaster/Toaster.view.tsx +0 -1
  117. package/src/toaster/store/useToasterStore.tsx +0 -2
  118. package/src/toaster/toaster.css +2 -7
  119. package/dist/addressSearch/AddressSearch.d.ts +0 -20
  120. package/dist/addressSearch/AddressSearch.view.d.ts +0 -1
  121. package/dist/geocoding/GeocodingService.d.ts +0 -13
  122. package/dist/geocoding/geocoding.interface.d.ts +0 -20
  123. package/src/addressSearch/AddressSearch.tsx +0 -246
  124. package/src/addressSearch/AddressSearch.view.tsx +0 -52
  125. package/src/addressSearch/addressSearch.css +0 -133
  126. package/src/geocoding/GeocodingService.ts +0 -89
  127. package/src/geocoding/geocoding.interface.ts +0 -25
@@ -14,5 +14,6 @@ export type TabsProps = {
14
14
  className?: string;
15
15
  tabClassName?: string;
16
16
  panelClassName?: string;
17
+ keepMountedVisited?: boolean;
17
18
  };
18
- export declare const Tabs: ({ items, defaultIndex, index, onChange, className, tabClassName, panelClassName, }: TabsProps) => import("react/jsx-runtime").JSX.Element;
19
+ export declare const Tabs: ({ items, defaultIndex, index, onChange, className, tabClassName, panelClassName, keepMountedVisited, }: TabsProps) => import("react/jsx-runtime").JSX.Element;
@@ -12,7 +12,6 @@ type ToasterState = {
12
12
  severity?: "info" | "success" | "error" | "warning";
13
13
  duration?: number;
14
14
  children?: React.ReactNode;
15
- close?: boolean;
16
15
  }) => void;
17
16
  hideToast: () => void;
18
17
  };
package/index.html CHANGED
@@ -5,7 +5,8 @@
5
5
  <meta charset="UTF-8" />
6
6
  <link rel="preconnect" href="https://fonts.googleapis.com">
7
7
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
8
- <link href="https://fonts.googleapis.com/css2?family=Lexend:wght@100..900&display=swap" rel="stylesheet">
8
+ <link href="https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100..900;1,100..900&display=swap"
9
+ rel="stylesheet">
9
10
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
10
11
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
11
12
  <title>Vite + React + TS</title>
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "kelt-ui-kit-react",
3
+ "type": "module",
4
+ "version": "1.8.2",
5
+ "private": false,
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "dependencies": {
9
+ "@types/node": "^22.5.5",
10
+ "@vitejs/plugin-react": "^4.3.1",
11
+ "bootstrap-icons": "^1.11.3",
12
+ "jwt-decode": "^4.0.0",
13
+ "react-date-picker": "^11.0.0",
14
+ "styled-components": "^6.1.13",
15
+ "vite": "^5.4.6",
16
+ "vite-plugin-dts": "^4.2.2",
17
+ "vite-plugin-eslint": "^1.8.1",
18
+ "web-vitals": "^2.1.4",
19
+ "zustand": "^5.0.5"
20
+ },
21
+ "peerDependencies": {
22
+ "react": "^18.3.1",
23
+ "react-dom": "^18.3.1",
24
+ "react-router-dom": "^6.26.2"
25
+ },
26
+ "scripts": {
27
+ "dev": "vite",
28
+ "build": "tsc -b && vite build",
29
+ "lint": "eslint .",
30
+ "preview": "vite preview"
31
+ },
32
+ "eslintConfig": {
33
+ "extends": [
34
+ "react-app",
35
+ "react-app/jest"
36
+ ]
37
+ },
38
+ "browserslist": {
39
+ "production": [
40
+ ">0.2%",
41
+ "not dead",
42
+ "not op_mini all"
43
+ ],
44
+ "development": [
45
+ "last 1 chrome version",
46
+ "last 1 firefox version",
47
+ "last 1 safari version"
48
+ ]
49
+ },
50
+ "devDependencies": {
51
+ "@types/react-dom": "^18.3.0",
52
+ "@types/react-router-dom": "^5.3.3",
53
+ "typescript": "^4.9.5",
54
+ "vite-plugin-checker": "^0.8.0"
55
+ }
56
+ }
@@ -0,0 +1,208 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import ReactDOM from "react-dom";
3
+ import { Icon } from "../icon/Icon";
4
+ import "./sidebar.css";
5
+
6
+ export interface SidebarProps {
7
+ id?: string;
8
+ open?: boolean;
9
+ title?: string;
10
+ children?: React.ReactNode;
11
+ className?: string;
12
+ width?: string;
13
+ displayOverlay?: boolean;
14
+ closeOnClickOutside?: boolean;
15
+ onClose?: (close: boolean) => void;
16
+ }
17
+
18
+ const SWIPE_CLOSE_THRESHOLD = 60; // px à parcourir pour fermer
19
+ const SWIPE_AXIS_LOCK_THRESHOLD = 10; // px pour déterminer l'axe du geste
20
+
21
+ export const Sidebar = ({
22
+ open,
23
+ children,
24
+ title,
25
+ onClose,
26
+ className,
27
+ id,
28
+ width,
29
+ closeOnClickOutside = true,
30
+ displayOverlay = true,
31
+ }: SidebarProps): JSX.Element => {
32
+ const [isOpen, setIsOpen] = useState(open || false);
33
+ const [dragX, setDragX] = useState(0);
34
+ const [isDragging, setIsDragging] = useState(false);
35
+ const sidebarRef = useRef<HTMLDivElement | null>(null);
36
+ const rootRef = useRef<HTMLDivElement | null>(null);
37
+ const touchStartX = useRef(0);
38
+ const touchStartY = useRef(0);
39
+ const axisLocked = useRef<"x" | "y" | null>(null);
40
+
41
+ // Créer le conteneur une seule fois
42
+ useEffect(() => {
43
+ if (!rootRef.current) {
44
+ rootRef.current = document.createElement("div");
45
+ rootRef.current.id = `sidebar-root-${id || crypto.randomUUID()}`;
46
+ document.body.appendChild(rootRef.current);
47
+ }
48
+
49
+ return () => {
50
+ // Nettoyage lors du démontage
51
+ if (rootRef.current && rootRef.current.parentNode) {
52
+ document.body.removeChild(rootRef.current);
53
+ rootRef.current = null;
54
+ }
55
+ };
56
+ }, [id]);
57
+
58
+ // Synchroniser l'état `isOpen` avec la prop `open`
59
+ useEffect(() => {
60
+ setIsOpen(open || false);
61
+ }, [open]);
62
+
63
+ const toggleSidebar = useCallback(() => {
64
+ setIsOpen(false);
65
+ if (onClose) {
66
+ onClose(false);
67
+ }
68
+ }, [onClose]);
69
+
70
+ const handleClickOutside = useCallback(
71
+ (event: MouseEvent | TouchEvent) => {
72
+ if (!closeOnClickOutside) return;
73
+ if (
74
+ sidebarRef.current &&
75
+ !sidebarRef.current.contains(event.target as Node)
76
+ ) {
77
+ toggleSidebar();
78
+ }
79
+ },
80
+ [toggleSidebar, closeOnClickOutside],
81
+ );
82
+
83
+ const handleTouchStart = useCallback((event: React.TouchEvent) => {
84
+ const touch = event.touches[0];
85
+ touchStartX.current = touch.clientX;
86
+ touchStartY.current = touch.clientY;
87
+ axisLocked.current = null;
88
+ setIsDragging(false);
89
+ setDragX(0);
90
+ }, []);
91
+
92
+ const handleTouchMove = useCallback(
93
+ (event: React.TouchEvent) => {
94
+ if (!isOpen) return;
95
+
96
+ const touch = event.touches[0];
97
+ const deltaX = touch.clientX - touchStartX.current;
98
+ const deltaY = touch.clientY - touchStartY.current;
99
+
100
+ // Détermine l'axe du geste une seule fois, dès qu'on a un déplacement suffisant
101
+ if (!axisLocked.current) {
102
+ if (
103
+ Math.abs(deltaX) < SWIPE_AXIS_LOCK_THRESHOLD &&
104
+ Math.abs(deltaY) < SWIPE_AXIS_LOCK_THRESHOLD
105
+ ) {
106
+ return; // pas encore assez de mouvement pour trancher
107
+ }
108
+ axisLocked.current = Math.abs(deltaX) > Math.abs(deltaY) ? "x" : "y";
109
+ }
110
+
111
+ if (axisLocked.current !== "x") return; // c'est un scroll vertical, on laisse faire
112
+
113
+ // On gère le swipe horizontal nous-mêmes : on empêche le scroll natif
114
+ // et on bloque le bounce/scroll de la page pendant le drag
115
+ event.preventDefault();
116
+
117
+ setIsDragging(true);
118
+ // On ne permet que le swipe vers la droite (fermeture), pas de drag négatif
119
+ setDragX(Math.max(0, deltaX));
120
+ },
121
+ [isOpen],
122
+ );
123
+
124
+ const handleTouchEnd = useCallback(
125
+ (event: React.TouchEvent) => {
126
+ if (!isOpen) {
127
+ return;
128
+ }
129
+
130
+ if (axisLocked.current === "x") {
131
+ const touch = event.changedTouches[0];
132
+ const deltaX = touch.clientX - touchStartX.current;
133
+
134
+ if (deltaX > SWIPE_CLOSE_THRESHOLD) {
135
+ toggleSidebar();
136
+ }
137
+ }
138
+
139
+ setIsDragging(false);
140
+ setDragX(0);
141
+ axisLocked.current = null;
142
+ },
143
+ [isOpen, toggleSidebar],
144
+ );
145
+
146
+ const handleOverlayTouchEnd = useCallback(
147
+ (event: React.TouchEvent) => {
148
+ event.preventDefault();
149
+ toggleSidebar();
150
+ },
151
+ [toggleSidebar],
152
+ );
153
+
154
+ useEffect(() => {
155
+ if (isOpen) {
156
+ document.addEventListener("mousedown", handleClickOutside);
157
+ document.addEventListener("touchstart", handleClickOutside, {
158
+ passive: true,
159
+ });
160
+ } else {
161
+ document.removeEventListener("mousedown", handleClickOutside);
162
+ document.removeEventListener("touchstart", handleClickOutside);
163
+ }
164
+
165
+ return () => {
166
+ document.removeEventListener("mousedown", handleClickOutside);
167
+ document.removeEventListener("touchstart", handleClickOutside);
168
+ };
169
+ }, [isOpen, handleClickOutside]);
170
+
171
+ if (!rootRef.current) {
172
+ return <></>; // Ne pas tenter de rendre si le conteneur n'existe pas
173
+ }
174
+
175
+ return ReactDOM.createPortal(
176
+ <>
177
+ {isOpen && displayOverlay && (
178
+ <div
179
+ className="overlay"
180
+ onClick={toggleSidebar}
181
+ onTouchEnd={handleOverlayTouchEnd}
182
+ ></div>
183
+ )}
184
+ <div
185
+ ref={sidebarRef}
186
+ style={{
187
+ ...(width ? { width } : {}),
188
+ transform: dragX ? `translateX(${dragX}px)` : undefined,
189
+ transition: isDragging ? "none" : undefined,
190
+ }}
191
+ className={`sidebar ${isOpen ? "open" : "closed"} ${className ?? ""}`}
192
+ onTouchStart={handleTouchStart}
193
+ onTouchMove={handleTouchMove}
194
+ onTouchEnd={handleTouchEnd}
195
+ >
196
+ <div className="sidebar-header">
197
+ {title && <h2 className="flex-1">{title}</h2>}
198
+ <button className="toggle-btn" onClick={toggleSidebar}>
199
+ <Icon classIcon="bi-x-lg" />
200
+ </button>
201
+ </div>
202
+
203
+ {children && children}
204
+ </div>
205
+ </>,
206
+ rootRef.current,
207
+ );
208
+ };
@@ -0,0 +1,104 @@
1
+ .sidebar {
2
+ touch-action: pan-y;
3
+ /* laisse le scroll vertical natif, gère le X nous-même */
4
+ will-change: transform;
5
+ }
6
+
7
+ .overlay {
8
+ touch-action: none;
9
+ }
10
+
11
+ .toggle-btn {
12
+ -webkit-tap-highlight-color: transparent;
13
+ touch-action: manipulation;
14
+ }
15
+
16
+ .sidebar {
17
+ width: 200px;
18
+ height: 100vh;
19
+ background-color: var(--primary-color);
20
+ color: white;
21
+ transition: width 0.3s;
22
+ overflow: hidden;
23
+ position: fixed;
24
+ transition: transform 0.3s ease-in-out;
25
+ transform: translateX(0);
26
+ z-index: 2;
27
+
28
+
29
+
30
+ &:not(.full) {
31
+ inset: 0;
32
+ }
33
+
34
+ &.full {
35
+ width: 100%;
36
+ right: 0px;
37
+ top: 0;
38
+ }
39
+
40
+ .sidebar-header {
41
+ display: flex;
42
+ align-items: center;
43
+ padding: 1rem;
44
+ }
45
+
46
+ &.closed {
47
+ transform: translateX(-100vw);
48
+ }
49
+
50
+ .sidebar-items {
51
+ list-style-type: none;
52
+ padding: 0;
53
+
54
+ .sidebar-item {
55
+ padding: 10px;
56
+ cursor: pointer;
57
+ display: flex;
58
+ align-items: center;
59
+
60
+ .item-icon {
61
+ margin-right: 10px;
62
+ }
63
+
64
+ &:hover {
65
+ background-color: #34495e;
66
+ }
67
+ }
68
+ }
69
+
70
+ .toggle-btn {
71
+ display: flex;
72
+ width: 100%;
73
+ position: absolute;
74
+ right: 10px;
75
+ top: 10px;
76
+ justify-content: flex-end;
77
+ background-color: transparent;
78
+ border: none;
79
+ color: white;
80
+ cursor: pointer;
81
+ font-size: 18px;
82
+ margin: 0;
83
+ min-width: 10px;
84
+ width: auto;
85
+ padding: 0px;
86
+ }
87
+ }
88
+
89
+ .overlay {
90
+ background-color: #0006;
91
+ opacity: 30%;
92
+ width: 100%;
93
+ position: fixed;
94
+ inset: 0;
95
+ z-index: 1;
96
+ }
97
+
98
+ @media screen and (min-width: 992px) {
99
+ .sidebar {
100
+ &.full {
101
+ width: 40vw;
102
+ }
103
+ }
104
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kelt-ui-kit-react",
3
3
  "type": "module",
4
- "version": "2.0.2",
4
+ "version": "2.0.3",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
package/src/App.menu.tsx CHANGED
@@ -1,6 +1,5 @@
1
1
  import { NavLink } from "react-router-dom";
2
2
  import { ActionView } from "./action/Action.view";
3
- import { AddressSearchView } from "./addressSearch/AddressSearch.view";
4
3
  import { BadgeView } from "./badge/Badge.view";
5
4
  import { ButtonView } from "./button/Button.view";
6
5
  import { ButtonFileView } from "./button/buttonFile/ButtonFile.view";
@@ -243,13 +242,6 @@ export const MenuList: MenuProps[] = [
243
242
  children: <NavLink to="/button-file">Button File</NavLink>,
244
243
  element: <ButtonFileView />,
245
244
  },
246
- {
247
- id: 30,
248
- name: "Address search",
249
- link: "/address-search",
250
- children: <NavLink to="/address-search">Address search</NavLink>,
251
- element: <AddressSearchView />,
252
- },
253
245
  ];
254
246
 
255
247
  export const AppMenu = (): JSX.Element => {
@@ -0,0 +1,4 @@
1
+ export interface EnumerableType {
2
+ label: string;
3
+ value: string;
4
+ }
@@ -6,13 +6,17 @@ export type BadgeInterface = {
6
6
  className?: string;
7
7
  onClick?: (e: React.MouseEvent) => void;
8
8
  title?: string;
9
+ color?: string;
10
+ onRemove?: (e: React.MouseEvent) => void;
9
11
  sizeIcon?: IconSizeEnum;
10
12
  classIcon?: string;
11
13
  };
12
14
  export const Badge = ({
13
15
  className,
14
16
  onClick,
17
+ color,
15
18
  title,
19
+ onRemove,
16
20
  sizeIcon,
17
21
  classIcon,
18
22
  }: BadgeInterface) => {
@@ -25,10 +29,14 @@ export const Badge = ({
25
29
  return (
26
30
  <div
27
31
  onClick={handleClick}
28
- className={`badge ${className ? className : ""}`}
32
+ style={{
33
+ ...(color ? { backgroundColor: color } : {}),
34
+ }}
35
+ className={`badge ${className ? className : ""} ${onRemove && "cursor-pointer"}`}
29
36
  >
30
37
  {classIcon && <Icon size={sizeIcon} classIcon={classIcon}></Icon>}
31
38
  <span>{title}</span>
39
+ {onRemove && <Icon classIcon="bi-x" onClick={onRemove} />}
32
40
  </div>
33
41
  );
34
42
  };
@@ -15,6 +15,10 @@
15
15
  font-size: 0.8rem;
16
16
  margin-right: 0.25rem;
17
17
  }
18
+ .bi-x {
19
+ font-size: 1rem;
20
+ margin-right: 0;
21
+ }
18
22
  &.badge-primary {
19
23
  background-color: var(--primary-color);
20
24
  border-color: var(--primary-color);
@@ -13,9 +13,8 @@ export const Button = ({
13
13
  classIcon,
14
14
  positionicon = 1,
15
15
  disabled = false,
16
- style,
17
16
  }: ButtonInterface) => {
18
- const handleClick = (e: React.MouseEvent) => {
17
+ const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {
19
18
  e.stopPropagation();
20
19
  if (onClick) {
21
20
  onClick(e);
@@ -29,7 +28,6 @@ export const Button = ({
29
28
  type="submit"
30
29
  onClick={(e) => handleClick(e)}
31
30
  className={className}
32
- style={style}
33
31
  >
34
32
  {badge && <Badge {...badge} />}
35
33
  {classIcon && positionicon == 1 && (
@@ -5,7 +5,7 @@ button {
5
5
  padding: 10px;
6
6
  border-radius: 5px;
7
7
  cursor: pointer;
8
- font-size: 18px;
8
+ font-size: 16px;
9
9
  font-weight: 500;
10
10
  transition: background-color 0.3s;
11
11
  display: flex;
@@ -14,7 +14,7 @@ button {
14
14
  position: relative;
15
15
  align-items: center;
16
16
  justify-content: center;
17
- font-family: "Lexend", sans-serif;
17
+ font-family: "Raleway", sans-serif !important;
18
18
  .badge {
19
19
  position: absolute;
20
20
  right: 10px;
@@ -5,13 +5,12 @@ export interface ButtonInterface {
5
5
  className?: string;
6
6
  badge?: BadgeInterface;
7
7
  id?: string;
8
- onClick?: (e: React.MouseEvent) => void;
8
+ onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
9
9
  title: string;
10
10
  classIcon?: string;
11
11
  positionicon?: number;
12
12
  disabled?: boolean;
13
13
  sizeIcon?: IconSizeEnum;
14
- style?: React.CSSProperties;
15
14
  }
16
15
  export interface buttonActionInterface {
17
16
  icon?: string;
package/src/card/card.css CHANGED
@@ -19,9 +19,12 @@
19
19
  bottom: 0;
20
20
  pointer-events: none;
21
21
  }
22
- .bi-three-dots-vertical {
22
+
23
+ .bi-three-dots-vertical,
24
+ .bi-filter {
23
25
  display: none;
24
26
  }
27
+
25
28
  .card-custom-action {
26
29
  display: flex;
27
30
  flex: 1;
@@ -32,21 +35,25 @@
32
35
  .bi-trash3 {
33
36
  font-size: 1rem;
34
37
  }
38
+
35
39
  .card-text {
36
40
  width: 100%;
37
41
  }
42
+
38
43
  .card-footer {
39
44
  display: flex;
40
45
  flex: 1;
41
46
  align-items: center;
42
47
  justify-content: space-between;
43
48
  }
49
+
44
50
  &.card--horizontal {
45
51
  display: flex;
46
52
  flex-direction: row;
47
53
  align-items: center;
48
54
  min-height: 56px;
49
55
  max-width: initial;
56
+
50
57
  .card-img {
51
58
  margin-right: 0.5rem;
52
59
  }
@@ -60,11 +67,13 @@
60
67
  width: calc(100% - 20px);
61
68
  margin-bottom: 1rem;
62
69
  }
70
+
63
71
  .card-action {
64
72
  position: absolute;
65
73
  right: 10px;
66
74
  top: 10px;
67
75
  }
76
+
68
77
  .card-prix {
69
78
  flex: 1;
70
79
  display: flex;
@@ -87,54 +96,65 @@
87
96
  }
88
97
 
89
98
  .card-title {
90
- font-size: 16px;
99
+ font-size: 14px;
91
100
  font-weight: 600;
92
101
  }
93
102
 
94
103
  .card-content {
95
- font-size: 16px;
104
+ font-size: 14px;
96
105
  font-weight: 400;
97
106
  display: none;
98
107
  }
99
108
  }
109
+
100
110
  @container (min-width: 992px) {
101
111
  .card {
102
112
  .card-custom-action {
103
113
  justify-content: end;
104
114
  }
105
- .bi-three-dots-vertical {
115
+
116
+ .bi-three-dots-vertical,
117
+ .bi-filter {
106
118
  display: block;
107
119
  }
120
+
108
121
  .bi-three-dots {
109
122
  display: none;
110
123
  }
124
+
111
125
  &.card--horizontal {
112
126
  .card-actions {
113
127
  margin-left: 0.5rem;
114
128
  }
129
+
115
130
  .card-footer {
116
131
  display: flex;
117
132
  flex: 1;
118
133
  justify-content: space-between;
119
134
  }
135
+
120
136
  .card-text {
121
137
  width: 300px;
122
138
  display: flex;
123
139
  align-items: center;
124
140
  }
141
+
125
142
  .card-content {
126
143
  display: flex;
127
144
  }
145
+
128
146
  .card-title {
129
147
  min-width: auto;
130
148
  width: auto;
131
149
  margin-right: 1rem;
132
150
  margin-bottom: 0;
133
151
  }
152
+
134
153
  .card-prix {
135
154
  flex: inherit;
136
155
  min-width: auto;
137
156
  }
157
+
138
158
  .card-action {
139
159
  position: relative;
140
160
  right: initial;
@@ -142,4 +162,4 @@
142
162
  }
143
163
  }
144
164
  }
145
- }
165
+ }
@@ -36,7 +36,7 @@ export const CardAction = ({
36
36
  setCoords?: (coords: { top: number; left: number }) => void;
37
37
  }>(null);
38
38
  const [position, setPosition] = useState<PositionOverlay | undefined>(
39
- positionOverlay
39
+ positionOverlay,
40
40
  );
41
41
  const refButton = useRef<HTMLDivElement>(null);
42
42
  const [openOverlay, setOpenOverlay] = useState(openActions ?? false);
@@ -56,7 +56,7 @@ export const CardAction = ({
56
56
  setOpenActions(openOverlay);
57
57
  }
58
58
  },
59
- [setPosition, setOpenActions]
59
+ [setPosition, setOpenActions],
60
60
  );
61
61
 
62
62
  const closeOverlay = useCallback(() => {
@@ -107,11 +107,11 @@ export const CardAction = ({
107
107
  >
108
108
  <Icon
109
109
  size={IconSizeEnum.MEDIUM}
110
- classIcon={"bi-three-dots-vertical cursor-pointer"}
110
+ classIcon={"bi-filter cursor-pointer"}
111
111
  />
112
112
  <Icon
113
113
  size={IconSizeEnum.MEDIUM}
114
- classIcon={"bi-three-dots cursor-pointer"}
114
+ classIcon={"bi-filter cursor-pointer"}
115
115
  />
116
116
  </div>
117
117