@rovula/ui 0.0.52 → 0.0.54

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 (33) hide show
  1. package/dist/cjs/bundle.css +50 -10
  2. package/dist/cjs/bundle.js +2 -2
  3. package/dist/cjs/bundle.js.map +1 -1
  4. package/dist/cjs/types/components/Tabs/Tabs.d.ts +14 -1
  5. package/dist/cjs/types/components/Tabs/Tabs.stories.d.ts +81 -2
  6. package/dist/cjs/types/components/Tree/Tree.stories.d.ts +3 -0
  7. package/dist/cjs/types/components/Tree/example-data.d.ts +5 -0
  8. package/dist/cjs/types/components/Tree/type.d.ts +13 -4
  9. package/dist/components/Tabs/Tabs.js +35 -18
  10. package/dist/components/Tabs/Tabs.stories.js +70 -3
  11. package/dist/components/Tree/Tree.js +5 -5
  12. package/dist/components/Tree/Tree.stories.js +35 -2091
  13. package/dist/components/Tree/TreeItem.js +16 -8
  14. package/dist/components/Tree/example-data.js +2125 -0
  15. package/dist/esm/bundle.css +50 -10
  16. package/dist/esm/bundle.js +2 -2
  17. package/dist/esm/bundle.js.map +1 -1
  18. package/dist/esm/types/components/Tabs/Tabs.d.ts +14 -1
  19. package/dist/esm/types/components/Tabs/Tabs.stories.d.ts +81 -2
  20. package/dist/esm/types/components/Tree/Tree.stories.d.ts +3 -0
  21. package/dist/esm/types/components/Tree/example-data.d.ts +5 -0
  22. package/dist/esm/types/components/Tree/type.d.ts +13 -4
  23. package/dist/index.d.ts +26 -5
  24. package/dist/src/theme/global.css +36 -13
  25. package/package.json +6 -1
  26. package/src/components/Tabs/Tabs.css +21 -0
  27. package/src/components/Tabs/Tabs.stories.tsx +140 -4
  28. package/src/components/Tabs/Tabs.tsx +134 -50
  29. package/src/components/Tree/Tree.stories.tsx +61 -2133
  30. package/src/components/Tree/Tree.tsx +11 -3
  31. package/src/components/Tree/TreeItem.tsx +47 -17
  32. package/src/components/Tree/example-data.ts +2162 -0
  33. package/src/components/Tree/type.ts +13 -4
@@ -20,12 +20,16 @@ const Tree: FC<TreeProps> = ({
20
20
  renderTitle,
21
21
  onExpandChange,
22
22
  onCheckedChange,
23
+ onClickItem,
24
+ onCheckedItem,
23
25
  defaultExpandAll = false,
24
26
  defaultCheckAll = false,
25
27
  hierarchicalCheck = false,
26
28
  showIcon = true,
27
29
  disabled,
28
30
  enableSeparatorLine = true,
31
+ checkable = true,
32
+ maxLevel,
29
33
  }) => {
30
34
  const [checkedState, setCheckedState] = useState<Record<string, boolean>>({});
31
35
  const [expandedState, setExpandedState] = useState<Record<string, boolean>>(
@@ -89,6 +93,7 @@ const Tree: FC<TreeProps> = ({
89
93
 
90
94
  const handleCheckedChange = useCallback(
91
95
  (id: string, checked: boolean) => {
96
+ onCheckedItem?.(id, checked);
92
97
  let newState = { ...checkedState, [id]: checked };
93
98
 
94
99
  if (hierarchicalCheck) {
@@ -139,11 +144,10 @@ const Tree: FC<TreeProps> = ({
139
144
  setCheckedState(newState);
140
145
 
141
146
  if (onCheckedChange) {
142
- const checkedIds = Object.keys(newState).filter((key) => newState[key]);
143
- onCheckedChange(checkedIds);
147
+ onCheckedChange?.(newState);
144
148
  }
145
149
  },
146
- [checkedState, data, onCheckedChange, hierarchicalCheck]
150
+ [checkedState, data, onCheckedChange, hierarchicalCheck, onCheckedItem]
147
151
  );
148
152
 
149
153
  const checkIsExpanded = useCallback(
@@ -194,6 +198,10 @@ const Tree: FC<TreeProps> = ({
194
198
  horizontalLineWidth={horizontalLineWidth}
195
199
  expandButtonSize={expandButtonSize}
196
200
  spacing={spacing}
201
+ notifyClickItem={onClickItem}
202
+ maxLevel={maxLevel}
203
+ currentLevel={1}
204
+ checkable={checkable}
197
205
  {...item}
198
206
  />
199
207
  ))}
@@ -10,12 +10,14 @@ const TreeItem: FC<TreeItemProps> = ({
10
10
  classes,
11
11
  children,
12
12
  isFirstLevel = false,
13
+ isLeaf = false,
13
14
  disabled,
14
15
  icon,
15
16
  showIcon,
16
17
  showExpandButton,
17
18
  enableSeparatorLine = true,
18
19
  isLastItem,
20
+ checkable,
19
21
  checkIsExpanded,
20
22
  checkIsChecked,
21
23
  checkIsLoading,
@@ -30,19 +32,26 @@ const TreeItem: FC<TreeItemProps> = ({
30
32
  horizontalLineWidth = 4,
31
33
  expandButtonSize = 30,
32
34
  spacing = 2,
35
+ currentLevel = 1,
36
+ maxLevel = 10,
37
+ notifyClickItem,
33
38
  }) => {
34
39
  const isLoading = useMemo(() => checkIsLoading?.(id), [checkIsLoading, id]);
35
40
  const isChecked = useMemo(() => checkIsChecked(id), [checkIsChecked, id]);
36
41
  const isExpanded = useMemo(() => checkIsExpanded(id), [checkIsExpanded, id]);
37
42
  const hasChildren = useMemo(() => !!children?.length, [children]);
38
43
  const shouldExpandButton = useMemo(
39
- () => (showExpandButton !== undefined ? showExpandButton : hasChildren),
40
- [hasChildren, showExpandButton]
44
+ () =>
45
+ (showExpandButton !== undefined ? showExpandButton : hasChildren) &&
46
+ currentLevel < (maxLevel || Infinity),
47
+ [hasChildren, showExpandButton, maxLevel, currentLevel]
48
+ );
49
+ const shouldShowCheckbox = useMemo(
50
+ () => (!checkable ? false : !isLeaf),
51
+ [checkable, isLeaf]
41
52
  );
42
53
 
43
- const handleExpandToggle = useCallback(() => {
44
- onExpandChange?.(id, !isExpanded);
45
- }, [id, isExpanded, onExpandChange]);
54
+ const checkboxSpace = isLeaf ? 21.328 : 0;
46
55
 
47
56
  const styles = useMemo(
48
57
  () => ({
@@ -55,7 +64,8 @@ const TreeItem: FC<TreeItemProps> = ({
55
64
  width:
56
65
  lineSize +
57
66
  horizontalLineWidth +
58
- (shouldExpandButton ? 0 : expandButtonSize + spacing),
67
+ (shouldExpandButton ? 0 : expandButtonSize + spacing) +
68
+ checkboxSpace,
59
69
  marginLeft: -lineSize,
60
70
  borderBottomLeftRadius: lineSize / 2,
61
71
  },
@@ -77,9 +87,14 @@ const TreeItem: FC<TreeItemProps> = ({
77
87
  isFirstLevel,
78
88
  isLastItem,
79
89
  shouldExpandButton,
90
+ checkboxSpace,
80
91
  ]
81
92
  );
82
93
 
94
+ const handleExpandToggle = useCallback(() => {
95
+ onExpandChange?.(id, !isExpanded);
96
+ }, [id, isExpanded, onExpandChange]);
97
+
83
98
  useEffect(() => {
84
99
  if (isExpanded && !isLoading && !hasChildren) {
85
100
  handleExpandToggle();
@@ -88,7 +103,8 @@ const TreeItem: FC<TreeItemProps> = ({
88
103
 
89
104
  const handleOnClickItem = useCallback(() => {
90
105
  onClickItem?.(id);
91
- }, [onClickItem, id]);
106
+ notifyClickItem?.(id);
107
+ }, [onClickItem, notifyClickItem, id]);
92
108
 
93
109
  const defaultIcon = (
94
110
  <Icon
@@ -194,15 +210,25 @@ const TreeItem: FC<TreeItemProps> = ({
194
210
  </ActionButton>
195
211
  </div>
196
212
  )}
197
- <Checkbox
198
- id={id}
199
- className={cn("size-[16pt]", classes?.checkbox)}
200
- checked={isChecked}
201
- disabled={disabled}
202
- onCheckedChange={(newChecked) =>
203
- onCheckedChange?.(id, newChecked as boolean)
204
- }
205
- />
213
+ {shouldShowCheckbox ? (
214
+ <Checkbox
215
+ id={id}
216
+ className={cn("size-[16pt]", classes?.checkbox)}
217
+ checked={isChecked}
218
+ disabled={disabled}
219
+ onCheckedChange={(newChecked) =>
220
+ onCheckedChange?.(id, newChecked as boolean)
221
+ }
222
+ />
223
+ ) : (
224
+ <div
225
+ className={
226
+ isFirstLevel && checkable
227
+ ? cn("size-[16pt]", classes?.checkbox)
228
+ : ""
229
+ }
230
+ />
231
+ )}
206
232
  <div
207
233
  className={cn(
208
234
  "ml-2 gap-1 flex flex-1 items-center text-foreground",
@@ -224,7 +250,7 @@ const TreeItem: FC<TreeItemProps> = ({
224
250
  </div>
225
251
  </div>
226
252
 
227
- {isExpanded && hasChildren && (
253
+ {isExpanded && hasChildren && currentLevel < (maxLevel || Infinity) && (
228
254
  <div
229
255
  className={cn(
230
256
  "flex flex-row overflow-hidden max-h-screen",
@@ -266,6 +292,10 @@ const TreeItem: FC<TreeItemProps> = ({
266
292
  horizontalLineWidth={horizontalLineWidth}
267
293
  expandButtonSize={expandButtonSize}
268
294
  spacing={spacing}
295
+ notifyClickItem={notifyClickItem}
296
+ maxLevel={maxLevel}
297
+ currentLevel={currentLevel + 1}
298
+ checkable={checkable}
269
299
  {...child}
270
300
  />
271
301
  ))}