@rovula/ui 0.1.20 → 0.1.22
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.
- package/dist/cjs/bundle.css +316 -43
- package/dist/cjs/bundle.js +675 -675
- package/dist/cjs/bundle.js.map +1 -1
- package/dist/cjs/types/components/Badge/Badge.d.ts +40 -0
- package/dist/cjs/types/components/Badge/Badge.stories.d.ts +295 -0
- package/dist/cjs/types/components/Badge/Badge.styles.d.ts +7 -0
- package/dist/cjs/types/components/Badge/index.d.ts +2 -0
- package/dist/cjs/types/components/Dropdown/Dropdown.d.ts +4 -8
- package/dist/cjs/types/components/Dropdown/Dropdown.stories.d.ts +1 -6
- package/dist/cjs/types/components/DropdownMenu/DropdownMenu.d.ts +5 -1
- package/dist/cjs/types/components/DropdownMenu/DropdownMenu.stories.d.ts +45 -30
- package/dist/cjs/types/components/Form/Form.d.ts +2 -1
- package/dist/cjs/types/components/Form/Form.stories.d.ts +4 -0
- package/dist/cjs/types/components/ScrollArea/ScrollArea.d.ts +38 -0
- package/dist/cjs/types/components/ScrollArea/ScrollArea.stories.d.ts +301 -0
- package/dist/cjs/types/index.d.ts +4 -1
- package/dist/cjs/types/patterns/menu/Menu.d.ts +70 -0
- package/dist/cjs/types/{components/Menu → patterns/menu}/Menu.stories.d.ts +17 -10
- package/dist/cjs/types/utils/mergeRefs.d.ts +20 -0
- package/dist/components/Avatar/Avatar.styles.js +2 -2
- package/dist/components/Badge/Badge.js +36 -0
- package/dist/components/Badge/Badge.stories.js +51 -0
- package/dist/components/Badge/Badge.styles.js +62 -0
- package/dist/components/Badge/index.js +2 -0
- package/dist/components/Dropdown/Dropdown.js +54 -163
- package/dist/components/Dropdown/Dropdown.stories.js +29 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +24 -13
- package/dist/components/DropdownMenu/DropdownMenu.stories.js +120 -88
- package/dist/components/Form/Form.js +11 -4
- package/dist/components/Form/Form.stories.js +27 -0
- package/dist/components/ScrollArea/ScrollArea.js +50 -0
- package/dist/components/ScrollArea/ScrollArea.stories.js +56 -0
- package/dist/components/TextInput/TextInput.js +6 -3
- package/dist/esm/bundle.css +316 -43
- package/dist/esm/bundle.js +1545 -1545
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/types/components/Badge/Badge.d.ts +40 -0
- package/dist/esm/types/components/Badge/Badge.stories.d.ts +295 -0
- package/dist/esm/types/components/Badge/Badge.styles.d.ts +7 -0
- package/dist/esm/types/components/Badge/index.d.ts +2 -0
- package/dist/esm/types/components/Dropdown/Dropdown.d.ts +4 -8
- package/dist/esm/types/components/Dropdown/Dropdown.stories.d.ts +1 -6
- package/dist/esm/types/components/DropdownMenu/DropdownMenu.d.ts +5 -1
- package/dist/esm/types/components/DropdownMenu/DropdownMenu.stories.d.ts +45 -30
- package/dist/esm/types/components/Form/Form.d.ts +2 -1
- package/dist/esm/types/components/Form/Form.stories.d.ts +4 -0
- package/dist/esm/types/components/ScrollArea/ScrollArea.d.ts +38 -0
- package/dist/esm/types/components/ScrollArea/ScrollArea.stories.d.ts +301 -0
- package/dist/esm/types/index.d.ts +4 -1
- package/dist/esm/types/patterns/menu/Menu.d.ts +70 -0
- package/dist/esm/types/{components/Menu → patterns/menu}/Menu.stories.d.ts +17 -10
- package/dist/esm/types/utils/mergeRefs.d.ts +20 -0
- package/dist/index.d.ts +156 -74
- package/dist/index.js +3 -1
- package/dist/patterns/menu/Menu.js +95 -0
- package/dist/patterns/menu/Menu.stories.js +611 -0
- package/dist/src/theme/global.css +485 -57
- package/dist/utils/mergeRefs.js +42 -0
- package/package.json +1 -1
- package/src/components/Avatar/Avatar.styles.ts +2 -2
- package/src/components/Badge/Badge.stories.tsx +128 -0
- package/src/components/Badge/Badge.styles.ts +70 -0
- package/src/components/Badge/Badge.tsx +103 -0
- package/src/components/Badge/index.ts +3 -0
- package/src/components/Dropdown/Dropdown.stories.tsx +170 -1
- package/src/components/Dropdown/Dropdown.tsx +186 -276
- package/src/components/DropdownMenu/DropdownMenu.stories.tsx +1375 -253
- package/src/components/DropdownMenu/DropdownMenu.tsx +118 -55
- package/src/components/Form/Form.stories.tsx +70 -0
- package/src/components/Form/Form.tsx +23 -0
- package/src/components/ScrollArea/ScrollArea.stories.tsx +229 -0
- package/src/components/ScrollArea/ScrollArea.tsx +72 -0
- package/src/components/TextInput/TextInput.tsx +6 -3
- package/src/index.ts +4 -1
- package/src/patterns/menu/Menu.stories.tsx +1100 -0
- package/src/patterns/menu/Menu.tsx +282 -0
- package/src/theme/global.css +84 -11
- package/src/theme/themes/xspector/baseline.css +1 -1
- package/src/theme/themes/xspector/components/scrollbar.css +12 -0
- package/src/theme/tokens/baseline.css +3 -1
- package/src/theme/tokens/components/badge.css +54 -0
- package/src/theme/tokens/components/dropdown-menu.css +16 -5
- package/src/theme/tokens/components/scrollbar.css +18 -0
- package/src/utils/mergeRefs.ts +46 -0
- package/dist/cjs/types/components/Menu/Menu.d.ts +0 -65
- package/dist/cjs/types/components/Menu/helpers.d.ts +0 -19
- package/dist/cjs/types/components/Menu/index.d.ts +0 -4
- package/dist/components/Menu/Menu.js +0 -64
- package/dist/components/Menu/Menu.stories.js +0 -406
- package/dist/components/Menu/helpers.js +0 -28
- package/dist/components/Menu/index.js +0 -3
- package/dist/esm/types/components/Menu/Menu.d.ts +0 -65
- package/dist/esm/types/components/Menu/helpers.d.ts +0 -19
- package/dist/esm/types/components/Menu/index.d.ts +0 -4
- package/src/components/Menu/Menu.stories.tsx +0 -586
- package/src/components/Menu/Menu.tsx +0 -235
- package/src/components/Menu/helpers.ts +0 -45
- package/src/components/Menu/index.ts +0 -7
- package/src/theme/themes/xspector/components/dropdown-menu.css +0 -28
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { cn } from "@/utils/cn";
|
|
3
|
+
|
|
4
|
+
export type ScrollbarSize = "m" | "s" | "xs";
|
|
5
|
+
|
|
6
|
+
export interface ScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
/**
|
|
8
|
+
* Scrollbar thickness.
|
|
9
|
+
* - `m` — 12 px (shows track border)
|
|
10
|
+
* - `s` — 6 px (default, shows no track border)
|
|
11
|
+
* - `xs` — 2 px (shows no track border)
|
|
12
|
+
*/
|
|
13
|
+
scrollbarSize?: ScrollbarSize;
|
|
14
|
+
/**
|
|
15
|
+
* Direction(s) the area can scroll.
|
|
16
|
+
* Defaults to `"vertical"`.
|
|
17
|
+
*/
|
|
18
|
+
direction?: "vertical" | "horizontal" | "both";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const sizeClass: Record<ScrollbarSize, string> = {
|
|
22
|
+
m: "ui-scrollbar ui-scrollbar-m",
|
|
23
|
+
s: "ui-scrollbar ui-scrollbar-s",
|
|
24
|
+
xs: "ui-scrollbar ui-scrollbar-xs",
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const directionClass: Record<NonNullable<ScrollAreaProps["direction"]>, string> = {
|
|
28
|
+
vertical: "overflow-y-auto overflow-x-hidden",
|
|
29
|
+
horizontal: "overflow-x-auto overflow-y-hidden",
|
|
30
|
+
both: "overflow-auto",
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* ScrollArea
|
|
35
|
+
*
|
|
36
|
+
* A thin wrapper that applies the design-system scrollbar style to any
|
|
37
|
+
* scrollable container. Use `scrollbarSize` to pick the Figma size variant
|
|
38
|
+
* and `direction` to control which axis scrolls.
|
|
39
|
+
*
|
|
40
|
+
* **Client usage:**
|
|
41
|
+
* ```tsx
|
|
42
|
+
* <ScrollArea className="max-h-[270px]">
|
|
43
|
+
* {items.map(item => <div key={item.id}>{item.label}</div>)}
|
|
44
|
+
* </ScrollArea>
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* For a double-scroll layout (two independent sections inside one dropdown),
|
|
48
|
+
* wrap each section individually:
|
|
49
|
+
* ```tsx
|
|
50
|
+
* <ScrollArea className="max-h-[160px]">...section A items...</ScrollArea>
|
|
51
|
+
* <ScrollArea className="max-h-[160px]">...section B items...</ScrollArea>
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(
|
|
55
|
+
(
|
|
56
|
+
{ className, scrollbarSize = "s", direction = "vertical", children, ...props },
|
|
57
|
+
ref
|
|
58
|
+
) => (
|
|
59
|
+
<div
|
|
60
|
+
ref={ref}
|
|
61
|
+
className={cn(
|
|
62
|
+
directionClass[direction],
|
|
63
|
+
sizeClass[scrollbarSize],
|
|
64
|
+
className
|
|
65
|
+
)}
|
|
66
|
+
{...props}
|
|
67
|
+
>
|
|
68
|
+
{children}
|
|
69
|
+
</div>
|
|
70
|
+
)
|
|
71
|
+
);
|
|
72
|
+
ScrollArea.displayName = "ScrollArea";
|
|
@@ -2,13 +2,13 @@ import React, {
|
|
|
2
2
|
ReactNode,
|
|
3
3
|
forwardRef,
|
|
4
4
|
useCallback,
|
|
5
|
-
useImperativeHandle,
|
|
6
5
|
useMemo,
|
|
7
6
|
useRef,
|
|
8
7
|
FocusEvent,
|
|
9
8
|
KeyboardEvent,
|
|
10
9
|
ChangeEvent,
|
|
11
10
|
} from "react";
|
|
11
|
+
import { useStableMergedRef } from "@/utils/mergeRefs";
|
|
12
12
|
import {
|
|
13
13
|
helperTextVariant,
|
|
14
14
|
iconActionVariant,
|
|
@@ -111,6 +111,10 @@ export const TextInput = forwardRef<HTMLInputElement, InputProps>(
|
|
|
111
111
|
) => {
|
|
112
112
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
113
113
|
const _id = id || `${type}-${label}-input`;
|
|
114
|
+
|
|
115
|
+
// Stable merged ref — identity never changes so Headless UI (or any library
|
|
116
|
+
// that watches refs) won't trigger detach/re-attach loops.
|
|
117
|
+
const stableRef = useStableMergedRef(ref, inputRef);
|
|
114
118
|
const hasLeftSectionIcon = !!startIcon || !!renderStartIcon;
|
|
115
119
|
const hasRightSectionIcon = !!endIcon || !!renderEndIcon;
|
|
116
120
|
const feedbackStatus =
|
|
@@ -183,7 +187,6 @@ export const TextInput = forwardRef<HTMLInputElement, InputProps>(
|
|
|
183
187
|
position: "end",
|
|
184
188
|
});
|
|
185
189
|
|
|
186
|
-
useImperativeHandle(ref, () => inputRef?.current as HTMLInputElement);
|
|
187
190
|
|
|
188
191
|
const handleChange = useCallback(
|
|
189
192
|
(e: ChangeEvent<HTMLInputElement>) => {
|
|
@@ -382,7 +385,7 @@ export const TextInput = forwardRef<HTMLInputElement, InputProps>(
|
|
|
382
385
|
<input
|
|
383
386
|
{...props}
|
|
384
387
|
placeholder=" "
|
|
385
|
-
ref={
|
|
388
|
+
ref={stableRef}
|
|
386
389
|
type={type}
|
|
387
390
|
id={_id}
|
|
388
391
|
disabled={disabled}
|
package/src/index.ts
CHANGED
|
@@ -19,6 +19,7 @@ export { Navbar } from "./components/Navbar";
|
|
|
19
19
|
export { Footer } from "./components/Footer";
|
|
20
20
|
export { default as ActionButton } from "./components/ActionButton/ActionButton";
|
|
21
21
|
export { Avatar, AvatarGroup } from "./components/Avatar";
|
|
22
|
+
export { Badge, SeverityBadge } from "./components/Badge";
|
|
22
23
|
export { Collapsible } from "./components/Collapsible";
|
|
23
24
|
export { Calendar } from "./components/Calendar";
|
|
24
25
|
export { default as DatePicker } from "./components/DatePicker/DatePicker";
|
|
@@ -41,7 +42,6 @@ export * from "./components/InputFilter/InputFilter";
|
|
|
41
42
|
export * from "./components/Slider/Slider";
|
|
42
43
|
export * from "./components/Switch/Switch";
|
|
43
44
|
export * from "./components/DropdownMenu/DropdownMenu";
|
|
44
|
-
export * from "./components/Menu/Menu";
|
|
45
45
|
export * from "./components/Tooltip/Tooltip";
|
|
46
46
|
export * from "./components/Tooltip/TooltipSimple";
|
|
47
47
|
export * from "./components/Toast/Toast";
|
|
@@ -49,12 +49,14 @@ export * from "./components/Toast/Toaster";
|
|
|
49
49
|
export * from "./components/Toast/useToast";
|
|
50
50
|
export * from "./components/Tree";
|
|
51
51
|
export * from "./components/FocusedScrollView/FocusedScrollView";
|
|
52
|
+
export * from "./components/ScrollArea/ScrollArea";
|
|
52
53
|
export * from "./components/RadioGroup/RadioGroup";
|
|
53
54
|
export * from "./components/Form";
|
|
54
55
|
|
|
55
56
|
// Patterns
|
|
56
57
|
export * from "./patterns/confirm-dialog/ConfirmDialog";
|
|
57
58
|
export * from "./patterns/form-dialog/FormDialog";
|
|
59
|
+
export * from "./patterns/menu/Menu";
|
|
58
60
|
|
|
59
61
|
// Export component types
|
|
60
62
|
export type { ButtonProps } from "./components/Button/Button";
|
|
@@ -73,6 +75,7 @@ export type { NavbarProps, NavbarVariant } from "./components/Navbar/Navbar";
|
|
|
73
75
|
export type { FooterProps, FooterVariant } from "./components/Footer/Footer";
|
|
74
76
|
export type { AvatarProps } from "./components/Avatar/Avatar";
|
|
75
77
|
export type { AvatarGroupProps } from "./components/Avatar/AvatarGroup";
|
|
78
|
+
export type { BadgeProps, BadgeColor, SeverityBadgeProps, SeverityLevel } from "./components/Badge/Badge";
|
|
76
79
|
|
|
77
80
|
// UTILS
|
|
78
81
|
export {
|