pixel-react 1.4.7 → 1.4.9

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 (42) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/lib/components/Form/Forms.d.ts +3 -1
  3. package/lib/components/Input/Input.d.ts +1 -1
  4. package/lib/components/Input/types.d.ts +4 -0
  5. package/lib/components/TableTree/TableTree.d.ts +2 -1
  6. package/lib/index.d.ts +10 -3
  7. package/lib/index.esm.js +121 -83
  8. package/lib/index.esm.js.map +1 -1
  9. package/lib/index.js +121 -83
  10. package/lib/index.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/assets/Themes/BaseTheme.scss +3 -0
  13. package/src/assets/Themes/DarkTheme.scss +1 -0
  14. package/src/assets/fonts/Poppins-Bold.woff2 +0 -0
  15. package/src/assets/fonts/Poppins-Medium.woff2 +0 -0
  16. package/src/assets/fonts/Poppins-Regular.woff2 +0 -0
  17. package/src/assets/fonts/Poppins-SemiBold.woff2 +0 -0
  18. package/src/assets/icons/Header_preset.svg +13 -0
  19. package/src/assets/icons/add_file.svg +16 -4
  20. package/src/assets/icons/eye_open_icon.svg +2 -9
  21. package/src/assets/icons/replace_icon.svg +6 -0
  22. package/src/assets/styles/_fonts.scss +7 -4
  23. package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +6 -1
  24. package/src/components/AppHeader/AppHeader.scss +6 -1
  25. package/src/components/AppHeader/AppHeader.stories.tsx +0 -4
  26. package/src/components/AppHeader/AppHeader.tsx +1 -0
  27. package/src/components/AttachmentButton/AttachmentButton.tsx +10 -5
  28. package/src/components/Form/Form.stories.tsx +4 -8
  29. package/src/components/Form/Forms.tsx +11 -4
  30. package/src/components/Icon/iconList.ts +7 -1
  31. package/src/components/Input/Input.scss +5 -0
  32. package/src/components/Input/Input.stories.tsx +44 -0
  33. package/src/components/Input/Input.tsx +24 -19
  34. package/src/components/Input/types.ts +4 -0
  35. package/src/components/MenuOption/MenuOption.tsx +5 -5
  36. package/src/components/Modal/Modal.stories.tsx +1 -1
  37. package/src/components/Modal/Modal.tsx +1 -1
  38. package/src/components/Modal/modal.scss +7 -7
  39. package/src/components/TableTree/TableTree.scss +22 -7
  40. package/src/components/TableTree/TableTree.stories.tsx +41 -0
  41. package/src/components/TableTree/TableTree.tsx +55 -18
  42. package/src/components/Typography/Typography.scss +4 -4
@@ -1,15 +1,18 @@
1
1
  @use '../../assets/styles/fonts';
2
+
2
3
  .ff-tree-container {
3
4
  width: 100%;
4
5
  font-size: 12px;
5
6
  color: var(--brand-color);
6
7
  transition: all 0.3s ease;
7
8
  @extend .fontSm;
9
+
8
10
  table {
9
11
  border-collapse: collapse;
10
12
  width: 100%;
11
13
  text-align: left;
12
14
  }
15
+
13
16
  .ff-toggle-arrow-icon {
14
17
  height: 12px;
15
18
  width: 12px;
@@ -40,6 +43,7 @@
40
43
  overflow: hidden;
41
44
  text-overflow: ellipsis;
42
45
  }
46
+
43
47
  th {
44
48
  vertical-align: middle;
45
49
  height: 32px;
@@ -53,8 +57,10 @@
53
57
  .ff-action-section {
54
58
  display: none;
55
59
  }
60
+
56
61
  &:hover {
57
62
  background-color: var(--hover-color);
63
+
58
64
  .ff-title-action-container {
59
65
  display: flex;
60
66
  }
@@ -70,6 +76,7 @@
70
76
  display: flex;
71
77
  cursor: pointer;
72
78
  }
79
+
73
80
  &.ff-folder {
74
81
  font-weight: 600;
75
82
  }
@@ -77,6 +84,7 @@
77
84
  &.ff-file {
78
85
  font-weight: 400;
79
86
  }
87
+
80
88
  .ff-title {
81
89
  display: flex;
82
90
  gap: 4px;
@@ -96,12 +104,6 @@
96
104
  position: absolute;
97
105
  right: 10px;
98
106
  }
99
-
100
- // &:hover {
101
- // > .ff-title-action-container {
102
- // display: flex;
103
- // }
104
- // }
105
107
  }
106
108
  }
107
109
 
@@ -144,12 +146,25 @@
144
146
  height: calc(var(--node-height) / 2);
145
147
  }
146
148
 
147
- // Remove the lines for root level
149
+ // Remove the lines for root level
148
150
  &[style*='--level: 0']::before,
149
151
  &[style*='--level: 0']::after {
150
152
  content: none;
151
153
  }
152
154
  }
155
+
156
+ th:first-child {
157
+ position: sticky;
158
+ left: 0;
159
+ z-index: 999;
160
+ background-color: var(--slider-table-color);
161
+ }
162
+ td:first-child {
163
+ position: sticky;
164
+ left: 0;
165
+ z-index: 99;
166
+ background-color: var(--ff-status-card-text-color);
167
+ }
153
168
  }
154
169
 
155
170
  .ff-title-action-container {
@@ -4,6 +4,7 @@ import Button from '../Button';
4
4
  import treeData from './data';
5
5
  import Icon from '../Icon/Icon';
6
6
  import './TableTreeStories.scss';
7
+ import React from 'react';
7
8
 
8
9
  const meta: Meta<typeof TableTree> = {
9
10
  title: 'Components/Table tree',
@@ -19,6 +20,9 @@ type Story = StoryObj<typeof TableTree>;
19
20
 
20
21
  export const Default: Story = {
21
22
  args: {
23
+ onPagination: (node) => {
24
+ console.log(node);
25
+ },
22
26
  select: 'radio',
23
27
  onChange: (e: any, node: any) => {
24
28
  e.preventDefault();
@@ -45,6 +49,43 @@ export const Default: Story = {
45
49
  },
46
50
  },
47
51
 
52
+ {
53
+ name: 'Module Path',
54
+ accessor: 'path',
55
+ width: '200px',
56
+ isClickable: true,
57
+ },
58
+
59
+ {
60
+ name: 'Module Path',
61
+ accessor: 'path',
62
+ width: '200px',
63
+ isClickable: true,
64
+ },
65
+ {
66
+ name: 'Module Path',
67
+ accessor: 'path',
68
+ width: '200px',
69
+ isClickable: true,
70
+ },
71
+ {
72
+ name: 'Module Path',
73
+ accessor: 'path',
74
+ width: '200px',
75
+ isClickable: true,
76
+ },
77
+ {
78
+ name: 'Module Path',
79
+ accessor: 'path',
80
+ width: '200px',
81
+ isClickable: true,
82
+ },
83
+ {
84
+ name: 'Module Path',
85
+ accessor: 'path',
86
+ width: '200px',
87
+ isClickable: true,
88
+ },
48
89
  {
49
90
  name: 'Module Path',
50
91
  accessor: 'path',
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable */
2
2
  // @ts-nocheck
3
- import React, { ReactNode, useLayoutEffect, useRef, useState } from 'react';
3
+ import React, { ReactNode, useEffect, useLayoutEffect, useRef, useState } from 'react';
4
4
  import { prepareData } from '../../utils/TableCell/TableCell';
5
5
  import Icon from '../Icon';
6
6
  import { checkEmpty } from '../../utils/checkEmpty/checkEmpty';
@@ -36,6 +36,7 @@ interface TableTreeProps {
36
36
  ) => void;
37
37
  onChange?: (e: any, node: any) => void;
38
38
  selected: Array<string>;
39
+ onPagination?: (node: ObjectProps) => void; // New prop for pagination
39
40
  }
40
41
 
41
42
  const TableTree = ({
@@ -45,10 +46,12 @@ const TableTree = ({
45
46
  onClick = () => {},
46
47
  onChange,
47
48
  selected,
49
+ onPagination,
48
50
  }: TableTreeProps) => {
49
51
  const [expandedNodes, setExpandedNodes] = useState<Set<ObjectProps>>(
50
52
  new Set()
51
53
  );
54
+ const triggeredPaginationNodes = useRef(new Set()); // Tracks nodes for which pagination is triggered
52
55
 
53
56
  useLayoutEffect(() => {
54
57
  const defaultExpanded: Set<ObjectProps> = new Set();
@@ -56,10 +59,8 @@ const TableTree = ({
56
59
  // Recursive function to add nodes and their children to the expanded set
57
60
  const expandNodeRecursively = (node: ObjectProps) => {
58
61
  if (node.expanded) {
59
- // Add the node to the expanded set
60
62
  defaultExpanded.add(node);
61
63
 
62
- // If the node has children, recursively expand them as well
63
64
  if (node.children) {
64
65
  node.children.forEach((child: ObjectProps) =>
65
66
  expandNodeRecursively(child)
@@ -68,20 +69,18 @@ const TableTree = ({
68
69
  }
69
70
  };
70
71
 
71
- // Iterate over the treeData to check which nodes should be expanded
72
72
  treeData.forEach((node) => {
73
73
  expandNodeRecursively(node);
74
74
  });
75
75
 
76
- // Set the expanded nodes state
77
76
  setExpandedNodes(defaultExpanded);
78
77
  }, [treeData]);
78
+
79
79
  // Function to calculate total children height
80
80
  const calculateTotalChildrenHeight = (node: any): number => {
81
81
  if (!node.children || node.children.length === 0) {
82
82
  return 1;
83
83
  }
84
- // Start with 1 for the current node and node itself is included in the height calculation before considering its children.
85
84
  let totalHeight = 1;
86
85
  if (expandedNodes.has(node)) {
87
86
  node.children.forEach((child: any) => {
@@ -93,30 +92,22 @@ const TableTree = ({
93
92
 
94
93
  const TreeNode = ({ node, level, isLast }: any) => {
95
94
  const nodeRef = useRef<HTMLTableRowElement | null>(null);
95
+ const lastChildRef = useRef<HTMLTableRowElement | null>(null); // Ref for pagination
96
96
  const [nodeHeight, setNodeHeight] = useState<number>(0);
97
97
  const [totalChildrenHeight, setTotalChildrenHeight] = useState<number>(0);
98
98
 
99
99
  const isExpanded = expandedNodes.has(node);
100
100
 
101
- const handleCheckBoxChange = (e, node) => {
102
- if (onChange) {
103
- onChange(e, node);
104
- }
105
- };
106
-
107
101
  useLayoutEffect(() => {
108
102
  if (nodeRef.current) {
109
103
  const observer = new ResizeObserver(() => {
110
- // Update nodeHeight when the size of the element changes
111
104
  const currentHeight = nodeRef.current?.offsetHeight || 0;
112
105
  setNodeHeight(currentHeight);
113
106
 
114
- // Calculate total children height
115
107
  const childrenHeight = calculateTotalChildrenHeight(node);
116
108
  setTotalChildrenHeight(childrenHeight);
117
109
  });
118
110
 
119
- // Start observing the current node
120
111
  observer.observe(nodeRef.current);
121
112
 
122
113
  return () => {
@@ -125,6 +116,30 @@ const TableTree = ({
125
116
  }
126
117
  }, [isExpanded, node]);
127
118
 
119
+ useEffect(() => {
120
+ if (!isExpanded || !lastChildRef.current || !onPagination) return;
121
+
122
+ const observer = new IntersectionObserver(
123
+ (entries) => {
124
+ if (
125
+ entries[0].isIntersecting &&
126
+ !triggeredPaginationNodes.current.has(node.key)
127
+ ) {
128
+ triggeredPaginationNodes.current.add(node.key); // Mark node as paginated
129
+ onPagination(node); // Trigger the pagination callback
130
+ }
131
+ },
132
+ {
133
+ root: null, // Use the viewport as the root
134
+ threshold: 1.0, // Trigger when fully visible
135
+ }
136
+ );
137
+
138
+ observer.observe(lastChildRef.current);
139
+
140
+ return () => observer.disconnect();
141
+ }, [isExpanded, onPagination, node]);
142
+
128
143
  const handleToggleExpand = () => {
129
144
  setExpandedNodes((prev) => {
130
145
  const newExpandedNodes = new Set(prev);
@@ -136,6 +151,13 @@ const TableTree = ({
136
151
  return newExpandedNodes;
137
152
  });
138
153
  };
154
+
155
+ const handleCheckBoxChange = (e, node) => {
156
+ if (onChange) {
157
+ onChange(e, node);
158
+ }
159
+ };
160
+
139
161
  const renderRowData = (columnsData: any) => {
140
162
  return columnsData.map((column: any) => {
141
163
  if (column.accessor === 'title') {
@@ -166,7 +188,6 @@ const TableTree = ({
166
188
  )}
167
189
  {select === 'radio' && (
168
190
  <RadioButton
169
- // checked={selected.includes(node.key)}
170
191
  name={node.title}
171
192
  value={node.key}
172
193
  onChange={(e) => handleCheckBoxChange(e, node)}
@@ -194,6 +215,23 @@ const TableTree = ({
194
215
  }
195
216
  });
196
217
  };
218
+
219
+ const renderTree = (nodes: any, level = 0) => {
220
+ return nodes.map((childNode: any, index: number) => {
221
+ const isChildLast = index === nodes.length - 1;
222
+ const ref = isChildLast ? lastChildRef : null;
223
+ return (
224
+ <TreeNode
225
+ key={childNode.key || index}
226
+ node={childNode}
227
+ level={level}
228
+ isLast={isChildLast}
229
+ ref={ref}
230
+ />
231
+ );
232
+ });
233
+ };
234
+
197
235
  return (
198
236
  <>
199
237
  <tr
@@ -214,7 +252,6 @@ const TableTree = ({
214
252
  {renderRowData(columnsData)}
215
253
  </tr>
216
254
 
217
- {/* Render children only if the node is expanded */}
218
255
  {isExpanded &&
219
256
  !checkEmpty(node?.children) &&
220
257
  renderTree(node.children, level + 1)}
@@ -225,7 +262,7 @@ const TableTree = ({
225
262
  const renderTree = (nodes: any, level = 0) => {
226
263
  return nodes.map((node: any, index: number) => {
227
264
  const isLast = index === nodes.length - 1;
228
- return <TreeNode key={index} node={node} level={level} isLast={isLast} />;
265
+ return <TreeNode key={node.key || index} node={node} level={level} isLast={isLast} />;
229
266
  });
230
267
  };
231
268
 
@@ -8,7 +8,7 @@
8
8
  font-weight: 400;
9
9
  src:
10
10
  local('Poppins-Regular'),
11
- url(../../fonts/Poppins/Poppins-Regular.ttf) format('truetype');
11
+ url(../../fonts/Poppins/Poppins-Regular.woff2) format('woff2');
12
12
  }
13
13
 
14
14
  @font-face {
@@ -16,7 +16,7 @@
16
16
  font-weight: 500;
17
17
  src:
18
18
  local('Poppins-Medium'),
19
- url(../../fonts/Poppins/Poppins-Medium.ttf) format('truetype');
19
+ url(../../fonts/Poppins/Poppins-Medium.woff2) format('woff2');
20
20
  }
21
21
 
22
22
  @font-face {
@@ -24,7 +24,7 @@
24
24
  font-weight: 600;
25
25
  src:
26
26
  local('Poppins-SemiBold'),
27
- url(../../fonts/Poppins/Poppins-SemiBold.ttf) format('truetype');
27
+ url(../../fonts/Poppins/Poppins-SemiBold.woff2) format('woff2');
28
28
  }
29
29
 
30
30
  @font-face {
@@ -32,7 +32,7 @@
32
32
  font-weight: 700;
33
33
  src:
34
34
  local('Poppins-Bold'),
35
- url(../../fonts/Poppins/Poppins-Bold.ttf) format('truetype');
35
+ url(../../fonts/Poppins/Poppins-Bold.woff2) format('woff2');
36
36
  }
37
37
 
38
38
  .ff-text {