@schemavaults/ui 0.87.1 → 0.89.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.
@@ -200,6 +200,8 @@ export * from "./countdown";
200
200
  export type * from "./countdown";
201
201
  export * from "./floating-action-button";
202
202
  export type * from "./floating-action-button";
203
+ export * from "./scroll-to-top";
204
+ export type * from "./scroll-to-top";
203
205
  export * from "./notification-bell";
204
206
  export type * from "./notification-bell";
205
207
  export * from "./calendar";
@@ -224,3 +226,5 @@ export * from "./split-button";
224
226
  export type * from "./split-button";
225
227
  export * from "./ribbon";
226
228
  export type * from "./ribbon";
229
+ export * from "./toolbar";
230
+ export type * from "./toolbar";
@@ -99,6 +99,7 @@ export * from "./tree-view";
99
99
  export * from "./carousel";
100
100
  export * from "./countdown";
101
101
  export * from "./floating-action-button";
102
+ export * from "./scroll-to-top";
102
103
  export * from "./notification-bell";
103
104
  export * from "./calendar";
104
105
  export * from "./date-picker";
@@ -111,4 +112,5 @@ export * from "./terminal-frame";
111
112
  export * from "./inline-edit";
112
113
  export * from "./split-button";
113
114
  export * from "./ribbon";
115
+ export * from "./toolbar";
114
116
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./scroll-to-top";
2
+ export type * from "./scroll-to-top";
3
+ export { default } from "./scroll-to-top";
@@ -0,0 +1,3 @@
1
+ export * from "./scroll-to-top";
2
+ export { default } from "./scroll-to-top";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/scroll-to-top/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { type ButtonHTMLAttributes, type ReactElement, type ReactNode, type Ref, type RefObject } from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ export declare const scrollToTopVariantIds: ["primary", "secondary", "outline", "ghost", "brand"];
4
+ export type ScrollToTopVariantId = (typeof scrollToTopVariantIds)[number];
5
+ export declare const scrollToTopSizeIds: ["sm", "default", "lg"];
6
+ export type ScrollToTopSizeId = (typeof scrollToTopSizeIds)[number];
7
+ export declare const scrollToTopPositionIds: ["bottom-right", "bottom-left", "bottom-center", "static"];
8
+ export type ScrollToTopPositionId = (typeof scrollToTopPositionIds)[number];
9
+ declare const scrollToTopVariants: (props?: ({
10
+ variant?: "primary" | "outline" | "ghost" | "secondary" | "brand" | null | undefined;
11
+ size?: "sm" | "default" | "lg" | null | undefined;
12
+ position?: "static" | "bottom-right" | "bottom-left" | "bottom-center" | null | undefined;
13
+ extended?: boolean | null | undefined;
14
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
15
+ export interface ScrollToTopProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children">, VariantProps<typeof scrollToTopVariants> {
16
+ ref?: Ref<HTMLButtonElement>;
17
+ /**
18
+ * Pixel scroll offset at which the button becomes visible. Defaults to
19
+ * `320` — roughly a viewport of scroll on a laptop.
20
+ */
21
+ threshold?: number;
22
+ /**
23
+ * Ref to a scroll container to observe and scroll. When omitted, the
24
+ * component tracks and scrolls `window`. Useful for embedded scroll
25
+ * areas such as dialogs, sheets, and split panes.
26
+ */
27
+ containerRef?: RefObject<HTMLElement | null>;
28
+ /**
29
+ * Custom icon rendered inside the button. Defaults to lucide's `ArrowUp`.
30
+ */
31
+ icon?: ReactNode;
32
+ /**
33
+ * Optional visible label. When provided, the button switches to its
34
+ * extended (pill) layout unless `extended` is explicitly overridden.
35
+ */
36
+ label?: ReactNode;
37
+ /**
38
+ * Accessible label. Falls back to `label` (if string) or "Scroll to top".
39
+ */
40
+ "aria-label"?: string;
41
+ /**
42
+ * Scroll behaviour used when the button is clicked. Defaults to `"smooth"`
43
+ * and is automatically downgraded to `"auto"` when the user has
44
+ * `prefers-reduced-motion: reduce`.
45
+ */
46
+ behavior?: ScrollBehavior;
47
+ /**
48
+ * When `true`, the button is always rendered regardless of scroll position.
49
+ * Useful for testing/showcasing in Storybook.
50
+ */
51
+ alwaysVisible?: boolean;
52
+ /**
53
+ * Called after the scroll-to-top action is invoked.
54
+ */
55
+ onScrolledToTop?: () => void;
56
+ }
57
+ /**
58
+ * A floating "back to top" button that appears once the user scrolls past a
59
+ * configurable threshold and smoothly scrolls the page (or an embedded
60
+ * container) back to the top when clicked.
61
+ *
62
+ * Respects `prefers-reduced-motion` by falling back to an instant scroll.
63
+ */
64
+ declare function ScrollToTop({ className, variant, size, position, extended, threshold, containerRef, icon, label, behavior, alwaysVisible, onScrolledToTop, onClick, type, ref, ...props }: ScrollToTopProps): ReactElement | null;
65
+ declare namespace ScrollToTop {
66
+ var displayName: string;
67
+ }
68
+ export { ScrollToTop, scrollToTopVariants };
69
+ export default ScrollToTop;
@@ -0,0 +1,129 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useState, } from "react";
4
+ import { cva } from "class-variance-authority";
5
+ import { ArrowUp } from "lucide-react";
6
+ import { cn } from "../../../lib/utils";
7
+ export const scrollToTopVariantIds = [
8
+ "primary",
9
+ "secondary",
10
+ "outline",
11
+ "ghost",
12
+ "brand",
13
+ ];
14
+ export const scrollToTopSizeIds = [
15
+ "sm",
16
+ "default",
17
+ "lg",
18
+ ];
19
+ export const scrollToTopPositionIds = [
20
+ "bottom-right",
21
+ "bottom-left",
22
+ "bottom-center",
23
+ "static",
24
+ ];
25
+ const scrollToTopVariants = cva("group/scroll-to-top inline-flex items-center justify-center gap-2 rounded-full font-medium shadow-lg ring-offset-background transition-[background-color,border-color,color,box-shadow,opacity,transform] hover:shadow-xl active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none z-40", {
26
+ variants: {
27
+ variant: {
28
+ primary: "bg-primary text-primary-foreground hover:bg-primary/90 shadow-primary/25",
29
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 shadow-secondary/25",
30
+ outline: "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
31
+ ghost: "bg-background/70 text-foreground backdrop-blur-md border border-border/50 hover:bg-accent hover:text-accent-foreground",
32
+ brand: "bg-schemavaults-brand-blue text-primary-foreground hover:bg-schemavaults-brand-blue/90 shadow-schemavaults-brand-blue/30",
33
+ },
34
+ size: {
35
+ sm: "h-10 w-10 text-sm [&_svg]:size-4",
36
+ default: "h-12 w-12 text-base [&_svg]:size-5",
37
+ lg: "h-14 w-14 text-base [&_svg]:size-6",
38
+ },
39
+ position: {
40
+ "bottom-right": "fixed bottom-6 right-6",
41
+ "bottom-left": "fixed bottom-6 left-6",
42
+ "bottom-center": "fixed bottom-6 left-1/2 -translate-x-1/2",
43
+ static: "",
44
+ },
45
+ extended: {
46
+ true: "w-auto px-5",
47
+ false: "",
48
+ },
49
+ },
50
+ compoundVariants: [
51
+ { extended: true, size: "sm", class: "h-10" },
52
+ { extended: true, size: "default", class: "h-12" },
53
+ { extended: true, size: "lg", class: "h-14" },
54
+ ],
55
+ defaultVariants: {
56
+ variant: "primary",
57
+ size: "default",
58
+ position: "bottom-right",
59
+ extended: false,
60
+ },
61
+ });
62
+ function readScrollTop(container) {
63
+ if (container)
64
+ return container.scrollTop;
65
+ if (typeof window === "undefined")
66
+ return 0;
67
+ return window.scrollY ?? window.pageYOffset ?? 0;
68
+ }
69
+ function prefersReducedMotion() {
70
+ if (typeof window === "undefined" || !window.matchMedia)
71
+ return false;
72
+ return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
73
+ }
74
+ /**
75
+ * A floating "back to top" button that appears once the user scrolls past a
76
+ * configurable threshold and smoothly scrolls the page (or an embedded
77
+ * container) back to the top when clicked.
78
+ *
79
+ * Respects `prefers-reduced-motion` by falling back to an instant scroll.
80
+ */
81
+ function ScrollToTop({ className, variant, size, position, extended, threshold = 320, containerRef, icon, label, behavior = "smooth", alwaysVisible = false, onScrolledToTop, onClick, type = "button", ref, ...props }) {
82
+ const [visible, setVisible] = useState(alwaysVisible);
83
+ useEffect(() => {
84
+ if (alwaysVisible) {
85
+ setVisible(true);
86
+ return;
87
+ }
88
+ const container = containerRef?.current ?? null;
89
+ const target = container ?? (typeof window !== "undefined" ? window : null);
90
+ if (!target)
91
+ return;
92
+ function update() {
93
+ setVisible(readScrollTop(container) > threshold);
94
+ }
95
+ update();
96
+ target.addEventListener("scroll", update, { passive: true });
97
+ return () => {
98
+ target.removeEventListener("scroll", update);
99
+ };
100
+ }, [alwaysVisible, containerRef, threshold]);
101
+ const handleClick = useCallback((event) => {
102
+ onClick?.(event);
103
+ if (event.defaultPrevented)
104
+ return;
105
+ const resolvedBehavior = prefersReducedMotion()
106
+ ? "auto"
107
+ : behavior;
108
+ const container = containerRef?.current ?? null;
109
+ if (container) {
110
+ container.scrollTo({ top: 0, left: 0, behavior: resolvedBehavior });
111
+ }
112
+ else if (typeof window !== "undefined") {
113
+ window.scrollTo({ top: 0, left: 0, behavior: resolvedBehavior });
114
+ }
115
+ onScrolledToTop?.();
116
+ }, [behavior, containerRef, onClick, onScrolledToTop]);
117
+ const isExtended = extended ?? Boolean(label);
118
+ const accessibleLabel = props["aria-label"] ??
119
+ (typeof label === "string" ? label : "Scroll to top");
120
+ const resolvedIcon = icon ?? _jsx(ArrowUp, { "aria-hidden": "true" });
121
+ if (!visible && position !== "static") {
122
+ return null;
123
+ }
124
+ return (_jsxs("button", { ref: ref, type: type, "data-slot": "scroll-to-top", "data-visible": visible ? "true" : "false", "data-extended": isExtended || undefined, "aria-label": accessibleLabel, onClick: handleClick, className: cn(scrollToTopVariants({ variant, size, position, extended: isExtended }), !visible && "pointer-events-none opacity-0", visible && "opacity-100", className), ...props, children: [_jsx("span", { "aria-hidden": "true", "data-slot": "scroll-to-top-icon", className: "inline-flex shrink-0 items-center justify-center transition-transform group-hover/scroll-to-top:-translate-y-0.5", children: resolvedIcon }), isExtended && label != null ? (_jsx("span", { "data-slot": "scroll-to-top-label", className: "truncate", children: label })) : null] }));
125
+ }
126
+ ScrollToTop.displayName = "ScrollToTop";
127
+ export { ScrollToTop, scrollToTopVariants };
128
+ export default ScrollToTop;
129
+ //# sourceMappingURL=scroll-to-top.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-to-top.js","sourceRoot":"","sources":["../../../../src/components/ui/scroll-to-top/scroll-to-top.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { Toolbar, Toolbar as default, ToolbarButton, ToolbarToggle, ToolbarLink, ToolbarSeparator, ToolbarGroup, ToolbarSpacer, toolbarVariants, toolbarItemVariants, toolbarOrientationIds, toolbarVariantIds, toolbarSizeIds, toolbarItemVariantIds, } from "./toolbar";
2
+ export type * from "./toolbar";
@@ -0,0 +1,2 @@
1
+ export { Toolbar, Toolbar as default, ToolbarButton, ToolbarToggle, ToolbarLink, ToolbarSeparator, ToolbarGroup, ToolbarSpacer, toolbarVariants, toolbarItemVariants, toolbarOrientationIds, toolbarVariantIds, toolbarSizeIds, toolbarItemVariantIds, } from "./toolbar";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/toolbar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,OAAO,IAAI,OAAO,EAClB,aAAa,EACb,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,GACtB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ import { type AnchorHTMLAttributes, type ButtonHTMLAttributes, type HTMLAttributes, type Ref, type ReactElement } from "react";
3
+ export declare const toolbarOrientationIds: readonly ["horizontal", "vertical"];
4
+ export type ToolbarOrientation = (typeof toolbarOrientationIds)[number];
5
+ export declare const toolbarVariantIds: readonly ["default", "muted", "floating", "ghost"];
6
+ export type ToolbarVariant = (typeof toolbarVariantIds)[number];
7
+ export declare const toolbarSizeIds: readonly ["sm", "default", "lg"];
8
+ export type ToolbarSize = (typeof toolbarSizeIds)[number];
9
+ declare const toolbarVariants: (props?: ({
10
+ variant?: "default" | "ghost" | "muted" | "floating" | null | undefined;
11
+ size?: "sm" | "default" | "lg" | null | undefined;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
+ export interface ToolbarProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof toolbarVariants> {
14
+ orientation?: ToolbarOrientation;
15
+ /**
16
+ * Accessible label for the toolbar. Required by WAI-ARIA when the
17
+ * toolbar contains more than a single meaningful action. Prefer this
18
+ * over `aria-labelledby` when the label isn't already rendered on
19
+ * screen.
20
+ */
21
+ "aria-label"?: string;
22
+ ref?: Ref<HTMLDivElement>;
23
+ }
24
+ declare function Toolbar({ className, variant, size, orientation, onKeyDown, ref, children, ...props }: ToolbarProps): ReactElement;
25
+ declare namespace Toolbar {
26
+ var displayName: string;
27
+ }
28
+ export declare const toolbarItemVariantIds: readonly ["default", "primary", "destructive"];
29
+ export type ToolbarItemVariant = (typeof toolbarItemVariantIds)[number];
30
+ declare const toolbarItemVariants: (props?: ({
31
+ variant?: "default" | "destructive" | "primary" | null | undefined;
32
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
33
+ export interface ToolbarButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof toolbarItemVariants> {
34
+ /**
35
+ * Optional visual/logical "active" state (e.g. the currently-selected
36
+ * tool in an editor). Semantically distinct from a toggle: use
37
+ * `ToolbarToggle` when you need `aria-pressed`.
38
+ */
39
+ active?: boolean;
40
+ /**
41
+ * When true, render the button as the child element (via Radix `Slot`).
42
+ * This is what you use to graft external triggers such as
43
+ * `DropdownMenuTrigger asChild`, `PopoverTrigger asChild`, or
44
+ * `TooltipTrigger asChild` onto a `ToolbarButton` while keeping its
45
+ * roving-tabindex wiring (`data-toolbar-item`) and item styles.
46
+ */
47
+ asChild?: boolean;
48
+ ref?: Ref<HTMLButtonElement>;
49
+ }
50
+ declare function ToolbarButton({ className, variant, active, disabled, type, asChild, ref, ...props }: ToolbarButtonProps): ReactElement;
51
+ declare namespace ToolbarButton {
52
+ var displayName: string;
53
+ }
54
+ export interface ToolbarToggleProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange">, VariantProps<typeof toolbarItemVariants> {
55
+ pressed?: boolean;
56
+ onPressedChange?: (pressed: boolean) => void;
57
+ /**
58
+ * When true, render the toggle as the child element (via Radix `Slot`).
59
+ * Useful for hanging a `PopoverTrigger asChild` or similar off a
60
+ * pressed-state toolbar item while keeping the toolbar's roving-tabindex
61
+ * wiring intact.
62
+ */
63
+ asChild?: boolean;
64
+ ref?: Ref<HTMLButtonElement>;
65
+ }
66
+ declare function ToolbarToggle({ className, variant, pressed, onPressedChange, onClick, disabled, type, asChild, ref, ...props }: ToolbarToggleProps): ReactElement;
67
+ declare namespace ToolbarToggle {
68
+ var displayName: string;
69
+ }
70
+ export interface ToolbarLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement>, VariantProps<typeof toolbarItemVariants> {
71
+ ref?: Ref<HTMLAnchorElement>;
72
+ }
73
+ declare function ToolbarLink({ className, variant, children, ref, ...props }: ToolbarLinkProps): ReactElement;
74
+ declare namespace ToolbarLink {
75
+ var displayName: string;
76
+ }
77
+ export interface ToolbarSeparatorProps extends HTMLAttributes<HTMLDivElement> {
78
+ ref?: Ref<HTMLDivElement>;
79
+ }
80
+ declare function ToolbarSeparator({ className, ref, ...props }: ToolbarSeparatorProps): ReactElement;
81
+ declare namespace ToolbarSeparator {
82
+ var displayName: string;
83
+ }
84
+ export interface ToolbarGroupProps extends HTMLAttributes<HTMLDivElement> {
85
+ ref?: Ref<HTMLDivElement>;
86
+ }
87
+ declare function ToolbarGroup({ className, ref, ...props }: ToolbarGroupProps): ReactElement;
88
+ declare namespace ToolbarGroup {
89
+ var displayName: string;
90
+ }
91
+ export interface ToolbarSpacerProps extends HTMLAttributes<HTMLDivElement> {
92
+ ref?: Ref<HTMLDivElement>;
93
+ }
94
+ declare function ToolbarSpacer({ className, ref, ...props }: ToolbarSpacerProps): ReactElement;
95
+ declare namespace ToolbarSpacer {
96
+ var displayName: string;
97
+ }
98
+ export { Toolbar, ToolbarButton, ToolbarToggle, ToolbarLink, ToolbarSeparator, ToolbarGroup, ToolbarSpacer, toolbarVariants, toolbarItemVariants, };
@@ -0,0 +1,187 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Slot } from "@radix-ui/react-slot";
4
+ import { cva } from "class-variance-authority";
5
+ import { createContext, useCallback, useContext, useEffect, useRef, } from "react";
6
+ import { cn } from "../../../lib/utils";
7
+ export const toolbarOrientationIds = [
8
+ "horizontal",
9
+ "vertical",
10
+ ];
11
+ export const toolbarVariantIds = [
12
+ "default",
13
+ "muted",
14
+ "floating",
15
+ "ghost",
16
+ ];
17
+ export const toolbarSizeIds = [
18
+ "sm",
19
+ "default",
20
+ "lg",
21
+ ];
22
+ const toolbarVariants = cva("flex items-center text-foreground data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch", {
23
+ variants: {
24
+ variant: {
25
+ default: "bg-card border border-border rounded-md shadow-sm",
26
+ muted: "bg-muted/60 border border-border/60 rounded-md",
27
+ floating: "bg-card border border-border rounded-lg shadow-lg backdrop-blur",
28
+ ghost: "bg-transparent",
29
+ },
30
+ size: {
31
+ sm: "gap-0.5 p-1",
32
+ default: "gap-1 p-1.5",
33
+ lg: "gap-1.5 p-2",
34
+ },
35
+ },
36
+ defaultVariants: {
37
+ variant: "default",
38
+ size: "default",
39
+ },
40
+ });
41
+ const TOOLBAR_ITEM_SELECTOR = '[data-toolbar-item]:not([data-disabled="true"]):not([data-disabled=""])';
42
+ const ToolbarContext = createContext(null);
43
+ function useToolbarContext(component) {
44
+ const ctx = useContext(ToolbarContext);
45
+ if (!ctx) {
46
+ throw new Error(`${component} must be rendered inside a <Toolbar>`);
47
+ }
48
+ return ctx;
49
+ }
50
+ function Toolbar({ className, variant, size, orientation = "horizontal", onKeyDown, ref, children, ...props }) {
51
+ const localRef = useRef(null);
52
+ const setRef = useCallback((node) => {
53
+ localRef.current = node;
54
+ if (typeof ref === "function") {
55
+ ref(node);
56
+ }
57
+ else if (ref && typeof ref === "object") {
58
+ ref.current = node;
59
+ }
60
+ }, [ref]);
61
+ const getItems = useCallback(() => {
62
+ const root = localRef.current;
63
+ if (!root)
64
+ return [];
65
+ return Array.from(root.querySelectorAll(TOOLBAR_ITEM_SELECTOR));
66
+ }, []);
67
+ useEffect(() => {
68
+ const items = getItems();
69
+ if (items.length === 0)
70
+ return;
71
+ const alreadyFocusable = items.some((item) => item.tabIndex === 0);
72
+ if (alreadyFocusable)
73
+ return;
74
+ items.forEach((item, index) => {
75
+ item.tabIndex = index === 0 ? 0 : -1;
76
+ });
77
+ });
78
+ const handleKeyDown = (event) => {
79
+ onKeyDown?.(event);
80
+ if (event.defaultPrevented)
81
+ return;
82
+ const items = getItems();
83
+ if (items.length === 0)
84
+ return;
85
+ const isHorizontal = (props["aria-orientation"] ?? orientation) === "horizontal";
86
+ const nextKey = isHorizontal ? "ArrowRight" : "ArrowDown";
87
+ const prevKey = isHorizontal ? "ArrowLeft" : "ArrowUp";
88
+ const currentIndex = items.indexOf(document.activeElement);
89
+ let targetIndex = -1;
90
+ if (event.key === nextKey) {
91
+ targetIndex =
92
+ currentIndex === -1 ? 0 : (currentIndex + 1) % items.length;
93
+ }
94
+ else if (event.key === prevKey) {
95
+ targetIndex =
96
+ currentIndex === -1
97
+ ? items.length - 1
98
+ : (currentIndex - 1 + items.length) % items.length;
99
+ }
100
+ else if (event.key === "Home") {
101
+ targetIndex = 0;
102
+ }
103
+ else if (event.key === "End") {
104
+ targetIndex = items.length - 1;
105
+ }
106
+ if (targetIndex >= 0) {
107
+ event.preventDefault();
108
+ items[targetIndex]?.focus();
109
+ }
110
+ };
111
+ const handleFocus = (event) => {
112
+ const target = event.target;
113
+ if (!target || !target.hasAttribute("data-toolbar-item"))
114
+ return;
115
+ const items = getItems();
116
+ if (items.length === 0)
117
+ return;
118
+ items.forEach((item) => {
119
+ item.tabIndex = item === target ? 0 : -1;
120
+ });
121
+ };
122
+ return (_jsx(ToolbarContext.Provider, { value: { orientation, size: size ?? "default" }, children: _jsx("div", { ref: setRef, role: "toolbar", "aria-orientation": orientation, "data-slot": "toolbar", "data-orientation": orientation, "data-variant": variant ?? "default", "data-size": size ?? "default", onKeyDown: handleKeyDown, onFocusCapture: handleFocus, className: cn(toolbarVariants({ variant, size }), className), ...props, children: children }) }));
123
+ }
124
+ Toolbar.displayName = "Toolbar";
125
+ export const toolbarItemVariantIds = [
126
+ "default",
127
+ "primary",
128
+ "destructive",
129
+ ];
130
+ const toolbarItemSizes = {
131
+ sm: "h-7 min-w-7 px-2 text-xs [&_svg]:size-3.5",
132
+ default: "h-8 min-w-8 px-2.5 text-sm [&_svg]:size-4",
133
+ lg: "h-9 min-w-9 px-3 text-sm [&_svg]:size-4",
134
+ };
135
+ const toolbarItemVariants = cva("inline-flex select-none items-center justify-center gap-1.5 rounded-sm font-medium leading-none whitespace-nowrap outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50", {
136
+ variants: {
137
+ variant: {
138
+ default: "text-foreground hover:bg-accent hover:text-accent-foreground data-[pressed=true]:bg-accent data-[pressed=true]:text-accent-foreground data-[active=true]:bg-accent data-[active=true]:text-accent-foreground",
139
+ primary: "text-primary hover:bg-primary/10 data-[pressed=true]:bg-primary data-[pressed=true]:text-primary-foreground data-[active=true]:bg-primary data-[active=true]:text-primary-foreground",
140
+ destructive: "text-destructive hover:bg-destructive/10 data-[pressed=true]:bg-destructive data-[pressed=true]:text-destructive-foreground data-[active=true]:bg-destructive data-[active=true]:text-destructive-foreground",
141
+ },
142
+ },
143
+ defaultVariants: {
144
+ variant: "default",
145
+ },
146
+ });
147
+ function ToolbarButton({ className, variant, active, disabled, type = "button", asChild = false, ref, ...props }) {
148
+ const ctx = useToolbarContext("ToolbarButton");
149
+ const Comp = asChild ? Slot : "button";
150
+ return (_jsx(Comp, { ref: ref, type: type, disabled: disabled, "data-toolbar-item": "", "data-slot": "toolbar-button", "data-active": active ? "true" : undefined, "data-disabled": disabled ? "true" : undefined, tabIndex: -1, className: cn(toolbarItemVariants({ variant }), toolbarItemSizes[ctx.size], className), ...props }));
151
+ }
152
+ ToolbarButton.displayName = "ToolbarButton";
153
+ function ToolbarToggle({ className, variant, pressed = false, onPressedChange, onClick, disabled, type = "button", asChild = false, ref, ...props }) {
154
+ const ctx = useToolbarContext("ToolbarToggle");
155
+ const Comp = asChild ? Slot : "button";
156
+ return (_jsx(Comp, { ref: ref, type: type, disabled: disabled, "aria-pressed": pressed, "data-toolbar-item": "", "data-slot": "toolbar-toggle", "data-state": pressed ? "on" : "off", "data-pressed": pressed ? "true" : "false", "data-disabled": disabled ? "true" : undefined, tabIndex: -1, onClick: (event) => {
157
+ onClick?.(event);
158
+ if (event.defaultPrevented)
159
+ return;
160
+ onPressedChange?.(!pressed);
161
+ }, className: cn(toolbarItemVariants({ variant }), toolbarItemSizes[ctx.size], className), ...props }));
162
+ }
163
+ ToolbarToggle.displayName = "ToolbarToggle";
164
+ function ToolbarLink({ className, variant, children, ref, ...props }) {
165
+ const ctx = useToolbarContext("ToolbarLink");
166
+ return (_jsx("a", { ref: ref, "data-toolbar-item": "", "data-slot": "toolbar-link", tabIndex: -1, className: cn(toolbarItemVariants({ variant }), toolbarItemSizes[ctx.size], "underline-offset-2 hover:underline", className), ...props, children: children }));
167
+ }
168
+ ToolbarLink.displayName = "ToolbarLink";
169
+ function ToolbarSeparator({ className, ref, ...props }) {
170
+ const ctx = useToolbarContext("ToolbarSeparator");
171
+ const separatorOrientation = ctx.orientation === "horizontal" ? "vertical" : "horizontal";
172
+ return (_jsx("div", { ref: ref, role: "separator", "aria-orientation": separatorOrientation, "data-slot": "toolbar-separator", "data-orientation": separatorOrientation, className: cn("shrink-0 bg-border", separatorOrientation === "vertical"
173
+ ? "mx-0.5 h-5 w-px"
174
+ : "my-0.5 h-px w-full", className), ...props }));
175
+ }
176
+ ToolbarSeparator.displayName = "ToolbarSeparator";
177
+ function ToolbarGroup({ className, ref, ...props }) {
178
+ const ctx = useToolbarContext("ToolbarGroup");
179
+ return (_jsx("div", { ref: ref, role: "group", "data-slot": "toolbar-group", "data-orientation": ctx.orientation, className: cn("flex items-center gap-0.5", ctx.orientation === "vertical" && "flex-col items-stretch", className), ...props }));
180
+ }
181
+ ToolbarGroup.displayName = "ToolbarGroup";
182
+ function ToolbarSpacer({ className, ref, ...props }) {
183
+ return (_jsx("div", { ref: ref, "aria-hidden": "true", "data-slot": "toolbar-spacer", className: cn("flex-1", className), ...props }));
184
+ }
185
+ ToolbarSpacer.displayName = "ToolbarSpacer";
186
+ export { Toolbar, ToolbarButton, ToolbarToggle, ToolbarLink, ToolbarSeparator, ToolbarGroup, ToolbarSpacer, toolbarVariants, toolbarItemVariants, };
187
+ //# sourceMappingURL=toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../../../src/components/ui/toolbar/toolbar.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schemavaults/ui",
3
- "version": "0.87.1",
3
+ "version": "0.89.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "React.js UI components for SchemaVaults frontend applications",