lily-lark-ui 0.2.0 → 0.3.0
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/CHANGELOG.md +29 -0
- package/dist/components/alert-dialog.d.ts +2 -1
- package/dist/components/alert-dialog.js +7 -2
- package/dist/components/checkbox.d.ts +4 -2
- package/dist/components/checkbox.js +6 -2
- package/dist/components/dialog.d.ts +7 -13
- package/dist/components/dialog.js +6 -6
- package/dist/components/dropdown-menu.d.ts +16 -8
- package/dist/components/dropdown-menu.js +5 -5
- package/dist/components/empty-state.d.ts +2 -3
- package/dist/components/empty-state.js +2 -2
- package/dist/components/pagination.d.ts +1 -1
- package/dist/components/pagination.js +2 -2
- package/dist/components/radio-group.d.ts +7 -3
- package/dist/components/radio-group.js +6 -4
- package/dist/components/select.d.ts +5 -1
- package/dist/components/select.js +3 -2
- package/dist/components/spinner.d.ts +3 -2
- package/dist/components/spinner.js +2 -2
- package/dist/components/switch.d.ts +3 -1
- package/dist/components/switch.js +4 -3
- package/dist/components/table.d.ts +15 -13
- package/dist/components/table.js +10 -10
- package/dist/components/tabs.d.ts +14 -18
- package/dist/components/tabs.js +6 -6
- package/dist/components/toast.d.ts +7 -3
- package/dist/components/toast.js +3 -3
- package/dist/components/tooltip.d.ts +6 -6
- package/dist/components/tooltip.js +3 -3
- package/lark-ui-components.html +1 -1
- package/package.json +1 -1
- package/src/components/alert-dialog.tsx +19 -2
- package/src/components/checkbox.tsx +37 -20
- package/src/components/dialog.tsx +15 -21
- package/src/components/dropdown-menu.tsx +31 -17
- package/src/components/empty-state.tsx +7 -4
- package/src/components/pagination.tsx +4 -2
- package/src/components/radio-group.tsx +37 -15
- package/src/components/select.tsx +32 -6
- package/src/components/spinner.tsx +6 -2
- package/src/components/switch.tsx +18 -5
- package/src/components/table.tsx +54 -20
- package/src/components/tabs.tsx +24 -43
- package/src/components/toast.tsx +24 -6
- package/src/components/tooltip.tsx +19 -11
package/dist/components/tabs.js
CHANGED
|
@@ -3,8 +3,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
5
5
|
import { cn } from '../lib/utils.js';
|
|
6
|
-
function LarkTabsRootBase({
|
|
7
|
-
return
|
|
6
|
+
function LarkTabsRootBase({ className, ...props }, ref) {
|
|
7
|
+
return _jsx(TabsPrimitive.Root, { ref: ref, className: className, ...props });
|
|
8
8
|
}
|
|
9
9
|
const LarkTabsRoot = React.forwardRef(LarkTabsRootBase);
|
|
10
10
|
LarkTabsRoot.displayName = 'LarkTabs';
|
|
@@ -13,13 +13,13 @@ function LarkTabsListBase({ children, className, ...props }, ref) {
|
|
|
13
13
|
}
|
|
14
14
|
const LarkTabsList = React.forwardRef(LarkTabsListBase);
|
|
15
15
|
LarkTabsList.displayName = 'LarkTabs.List';
|
|
16
|
-
function LarkTabBase({ value, disabled, children, className }, ref) {
|
|
17
|
-
return (_jsx(TabsPrimitive.Trigger, { ref: ref, value: value, disabled: disabled, className: cn('relative flex h-[34px] items-center gap-2 whitespace-nowrap rounded-lg px-3 text-sm font-medium text-lark-n700 focus-visible:focus-ring data-[state=active]:bg-lark-accent-soft data-[state=active]:font-semibold data-[state=active]:text-brand-link after:absolute after:inset-x-2 after:bottom-0 after:h-[3px] after:rounded-full after:bg-brand-secondary data-[state=inactive]:after:hidden disabled:cursor-not-allowed disabled:text-lark-n400', className), children: children }));
|
|
16
|
+
function LarkTabBase({ value, disabled, children, className, ...props }, ref) {
|
|
17
|
+
return (_jsx(TabsPrimitive.Trigger, { ref: ref, value: value, disabled: disabled, className: cn('relative flex h-[34px] items-center gap-2 whitespace-nowrap rounded-lg px-3 text-sm font-medium text-lark-n700 focus-visible:focus-ring data-[state=active]:bg-lark-accent-soft data-[state=active]:font-semibold data-[state=active]:text-brand-link after:absolute after:inset-x-2 after:bottom-0 after:h-[3px] after:rounded-full after:bg-brand-secondary data-[state=inactive]:after:hidden disabled:cursor-not-allowed disabled:text-lark-n400', className), ...props, children: children }));
|
|
18
18
|
}
|
|
19
19
|
const LarkTab = React.forwardRef(LarkTabBase);
|
|
20
20
|
LarkTab.displayName = 'LarkTabs.Tab';
|
|
21
|
-
function LarkPanelBase({ value, children, className }, ref) {
|
|
22
|
-
return (_jsx(TabsPrimitive.Content, { ref: ref, value: value, className: cn('mt-3 text-sm text-lark-n900 outline-none', className), children: children }));
|
|
21
|
+
function LarkPanelBase({ value, children, className, ...props }, ref) {
|
|
22
|
+
return (_jsx(TabsPrimitive.Content, { ref: ref, value: value, className: cn('mt-3 text-sm text-lark-n900 outline-none', className), ...props, children: children }));
|
|
23
23
|
}
|
|
24
24
|
const LarkPanel = React.forwardRef(LarkPanelBase);
|
|
25
25
|
LarkPanel.displayName = 'LarkTabs.Panel';
|
|
@@ -8,10 +8,14 @@ export interface LarkToastOptions {
|
|
|
8
8
|
export declare function useLarkToast(): {
|
|
9
9
|
toast: (opts: LarkToastOptions) => void;
|
|
10
10
|
};
|
|
11
|
-
export interface LarkToastViewportProps extends React.ComponentPropsWithoutRef<typeof ToastPrimitive.Viewport> {
|
|
11
|
+
export interface LarkToastViewportProps extends Omit<React.ComponentPropsWithoutRef<typeof ToastPrimitive.Viewport>, 'className'> {
|
|
12
|
+
className?: string;
|
|
12
13
|
}
|
|
13
14
|
declare const LarkToastViewportInner: React.ForwardRefExoticComponent<LarkToastViewportProps & React.RefAttributes<HTMLOListElement>>;
|
|
14
15
|
export { LarkToastViewportInner as LarkToastViewport };
|
|
15
|
-
export
|
|
16
|
+
export interface LarkToastProviderProps extends Omit<React.ComponentPropsWithoutRef<typeof ToastPrimitive.Provider>, 'children'> {
|
|
16
17
|
children: React.ReactNode;
|
|
17
|
-
|
|
18
|
+
toastClassName?: string;
|
|
19
|
+
viewportClassName?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const LarkToastProvider: React.FC<LarkToastProviderProps>;
|
package/dist/components/toast.js
CHANGED
|
@@ -17,7 +17,7 @@ function LarkToastViewportBase({ className, ...props }, ref) {
|
|
|
17
17
|
const LarkToastViewportInner = React.forwardRef(LarkToastViewportBase);
|
|
18
18
|
LarkToastViewportInner.displayName = 'LarkToastViewport';
|
|
19
19
|
export { LarkToastViewportInner as LarkToastViewport };
|
|
20
|
-
export const LarkToastProvider = ({ children }) => {
|
|
20
|
+
export const LarkToastProvider = ({ children, toastClassName, viewportClassName, duration = 4000, ...props }) => {
|
|
21
21
|
const [items, setItems] = React.useState([]);
|
|
22
22
|
const idRef = React.useRef(0);
|
|
23
23
|
const toast = React.useCallback((opts) => {
|
|
@@ -34,9 +34,9 @@ export const LarkToastProvider = ({ children }) => {
|
|
|
34
34
|
setItems((prev) => prev.filter((t) => t.id !== id));
|
|
35
35
|
}, []);
|
|
36
36
|
const value = React.useMemo(() => ({ toast }), [toast]);
|
|
37
|
-
return (_jsx(LarkToastContext.Provider, { value: value, children: _jsxs(ToastPrimitive.Provider, { duration:
|
|
37
|
+
return (_jsx(LarkToastContext.Provider, { value: value, children: _jsxs(ToastPrimitive.Provider, { duration: duration, swipeDirection: "right", ...props, children: [children, items.map((item) => (_jsxs(ToastPrimitive.Root, { onOpenChange: (open) => {
|
|
38
38
|
if (!open)
|
|
39
39
|
remove(item.id);
|
|
40
|
-
}, className: cn('flex items-center gap-2 rounded-lg bg-lark-n900 px-4 py-2.5 text-sm text-white shadow-[var(--shadow-overlay)] data-[state=open]:anim-slide-up max-sm:rounded-full'), children: [item.variant === 'success' && (_jsx(CheckCircle, { className: "size-4 shrink-0 text-lark-success", "aria-hidden": "true" })), item.variant === 'danger' && (_jsx(XCircle, { className: "size-4 shrink-0 text-lark-danger", "aria-hidden": "true" })), _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx(ToastPrimitive.Title, { className: "truncate font-medium", children: item.title }), item.description && (_jsx(ToastPrimitive.Description, { className: "text-white/80", children: item.description }))] }), _jsx(ToastPrimitive.Close, { "aria-label": "Dong thong bao", className: "ms-auto shrink-0 rounded text-white/70 hover:text-white", children: _jsx(X, { className: "size-4", "aria-hidden": "true" }) })] }, item.id))), _jsx(LarkToastViewportInner, {})] }) }));
|
|
40
|
+
}, className: cn('flex items-center gap-2 rounded-lg bg-lark-n900 px-4 py-2.5 text-sm text-white shadow-[var(--shadow-overlay)] data-[state=open]:anim-slide-up max-sm:rounded-full', toastClassName), children: [item.variant === 'success' && (_jsx(CheckCircle, { className: "size-4 shrink-0 text-lark-success", "aria-hidden": "true" })), item.variant === 'danger' && (_jsx(XCircle, { className: "size-4 shrink-0 text-lark-danger", "aria-hidden": "true" })), _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx(ToastPrimitive.Title, { className: "truncate font-medium", children: item.title }), item.description && (_jsx(ToastPrimitive.Description, { className: "text-white/80", children: item.description }))] }), _jsx(ToastPrimitive.Close, { "aria-label": "Dong thong bao", className: "ms-auto shrink-0 rounded text-white/70 hover:text-white", children: _jsx(X, { className: "size-4", "aria-hidden": "true" }) })] }, item.id))), _jsx(LarkToastViewportInner, { className: viewportClassName })] }) }));
|
|
41
41
|
};
|
|
42
42
|
LarkToastProvider.displayName = 'LarkToastProvider';
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
3
|
+
export interface LarkTooltipProps extends Omit<React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>, 'content' | 'children'> {
|
|
4
|
+
content: React.ReactNode;
|
|
4
5
|
children: React.ReactNode;
|
|
5
6
|
side?: 'top' | 'right' | 'bottom' | 'left';
|
|
6
7
|
delayDuration?: number;
|
|
7
8
|
className?: string;
|
|
9
|
+
/** Class cho trigger bọc children. */
|
|
10
|
+
triggerClassName?: string;
|
|
8
11
|
}
|
|
9
|
-
export interface LarkTooltipProviderProps {
|
|
10
|
-
children: React.ReactNode;
|
|
11
|
-
delayDuration?: number;
|
|
12
|
-
skipDelayDuration?: number;
|
|
12
|
+
export interface LarkTooltipProviderProps extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider> {
|
|
13
13
|
}
|
|
14
14
|
export declare const LarkTooltipProvider: React.FC<LarkTooltipProviderProps>;
|
|
15
15
|
export declare const LarkTooltip: React.ForwardRefExoticComponent<LarkTooltipProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -9,13 +9,13 @@ import { cn } from '../lib/utils.js';
|
|
|
9
9
|
const LarkTooltipProviderMarker = React.createContext(false);
|
|
10
10
|
// Provider đặt ở root app khi muốn chỉnh delay toàn cục; LarkTooltip nằm trong
|
|
11
11
|
// đó dùng chung Provider, không dựng thêm Provider riêng.
|
|
12
|
-
export const LarkTooltipProvider = ({ children, delayDuration = 300,
|
|
13
|
-
export const LarkTooltip = React.forwardRef(function LarkTooltip({ content, children, side = 'top', delayDuration, className }, ref) {
|
|
12
|
+
export const LarkTooltipProvider = ({ children, delayDuration = 300, ...props }) => (_jsx(LarkTooltipProviderMarker.Provider, { value: true, children: _jsx(TooltipPrimitive.Provider, { delayDuration: delayDuration, ...props, children: children }) }));
|
|
13
|
+
export const LarkTooltip = React.forwardRef(function LarkTooltip({ content, children, side = 'top', delayDuration, className, triggerClassName, ...props }, ref) {
|
|
14
14
|
// Radix không có Provider mặc định (Root ngoài Provider sẽ throw), nên khi
|
|
15
15
|
// render độc lập tự bọc một Provider fallback delay 300ms. delayDuration
|
|
16
16
|
// undefined → Radix Root lấy từ Provider context (không đè delay toàn cục).
|
|
17
17
|
const inProvider = React.useContext(LarkTooltipProviderMarker);
|
|
18
|
-
const root = (_jsxs(TooltipPrimitive.Root, { delayDuration: delayDuration, children: [_jsx(TooltipPrimitive.Trigger, { asChild: true, children: children }), _jsx(TooltipPrimitive.Portal, { children: _jsxs(TooltipPrimitive.Content, { ref: ref, side: side, sideOffset: 6, className: cn('rounded-xl bg-lark-n900 px-2 py-1 text-xs text-white data-[state=delayed-open]:anim-overlay-in', className), children: [content, _jsx(TooltipPrimitive.Arrow, { className: "fill-lark-n900" })] }) })] }));
|
|
18
|
+
const root = (_jsxs(TooltipPrimitive.Root, { delayDuration: delayDuration, children: [_jsx(TooltipPrimitive.Trigger, { asChild: true, className: triggerClassName, children: children }), _jsx(TooltipPrimitive.Portal, { children: _jsxs(TooltipPrimitive.Content, { ref: ref, side: side, sideOffset: 6, className: cn('rounded-xl bg-lark-n900 px-2 py-1 text-xs text-white data-[state=delayed-open]:anim-overlay-in', className), ...props, children: [content, _jsx(TooltipPrimitive.Arrow, { className: "fill-lark-n900" })] }) })] }));
|
|
19
19
|
if (inProvider)
|
|
20
20
|
return root;
|
|
21
21
|
return _jsx(TooltipPrimitive.Provider, { delayDuration: 300, children: root });
|