xiod-ui 1.0.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/LICENSE +73 -0
- package/README.md +167 -0
- package/dist/components/accordion.d.ts +9 -0
- package/dist/components/accordion.js +46 -0
- package/dist/components/agent-steps.d.ts +47 -0
- package/dist/components/agent-steps.js +223 -0
- package/dist/components/alert-dialog.d.ts +21 -0
- package/dist/components/alert-dialog.js +74 -0
- package/dist/components/alert.d.ts +12 -0
- package/dist/components/alert.js +45 -0
- package/dist/components/aspect-ratio.d.ts +9 -0
- package/dist/components/aspect-ratio.js +22 -0
- package/dist/components/autocomplete.d.ts +35 -0
- package/dist/components/autocomplete.js +160 -0
- package/dist/components/avatar.d.ts +17 -0
- package/dist/components/avatar.js +65 -0
- package/dist/components/badge.d.ts +15 -0
- package/dist/components/badge.js +46 -0
- package/dist/components/breadcrumb.d.ts +12 -0
- package/dist/components/breadcrumb.js +75 -0
- package/dist/components/button-group.d.ts +14 -0
- package/dist/components/button-group.js +45 -0
- package/dist/components/button-split.d.ts +19 -0
- package/dist/components/button-split.js +73 -0
- package/dist/components/button.d.ts +15 -0
- package/dist/components/button.js +54 -0
- package/dist/components/calendar.d.ts +63 -0
- package/dist/components/calendar.js +425 -0
- package/dist/components/card.d.ts +17 -0
- package/dist/components/card.js +139 -0
- package/dist/components/carousel.d.ts +59 -0
- package/dist/components/carousel.js +503 -0
- package/dist/components/checkbox.d.ts +16 -0
- package/dist/components/checkbox.js +86 -0
- package/dist/components/circular-progress.d.ts +28 -0
- package/dist/components/circular-progress.js +127 -0
- package/dist/components/collapsible.d.ts +8 -0
- package/dist/components/collapsible.js +27 -0
- package/dist/components/color-picker.d.ts +159 -0
- package/dist/components/color-picker.js +1589 -0
- package/dist/components/combobox.d.ts +46 -0
- package/dist/components/combobox.js +237 -0
- package/dist/components/command.d.ts +22 -0
- package/dist/components/command.js +129 -0
- package/dist/components/context-menu.d.ts +38 -0
- package/dist/components/context-menu.js +164 -0
- package/dist/components/copy-to-clipboard.d.ts +32 -0
- package/dist/components/copy-to-clipboard.js +83 -0
- package/dist/components/corner-badge.d.ts +22 -0
- package/dist/components/corner-badge.js +84 -0
- package/dist/components/dashboard-grid.d.ts +83 -0
- package/dist/components/dashboard-grid.js +486 -0
- package/dist/components/date-picker.d.ts +29 -0
- package/dist/components/date-picker.js +261 -0
- package/dist/components/dialog.d.ts +26 -0
- package/dist/components/dialog.js +97 -0
- package/dist/components/dot-matrix.d.ts +32 -0
- package/dist/components/dot-matrix.js +707 -0
- package/dist/components/draggable.d.ts +42 -0
- package/dist/components/draggable.js +346 -0
- package/dist/components/drawer.d.ts +66 -0
- package/dist/components/drawer.js +304 -0
- package/dist/components/empty.d.ts +14 -0
- package/dist/components/empty.js +75 -0
- package/dist/components/field.d.ts +12 -0
- package/dist/components/field.js +44 -0
- package/dist/components/fieldset.d.ts +7 -0
- package/dist/components/fieldset.js +21 -0
- package/dist/components/file-upload.d.ts +61 -0
- package/dist/components/file-upload.js +482 -0
- package/dist/components/form.d.ts +6 -0
- package/dist/components/form.js +14 -0
- package/dist/components/frame.d.ts +10 -0
- package/dist/components/frame.js +47 -0
- package/dist/components/gauge.d.ts +27 -0
- package/dist/components/gauge.js +74 -0
- package/dist/components/grid.d.ts +26 -0
- package/dist/components/grid.js +204 -0
- package/dist/components/group.d.ts +19 -0
- package/dist/components/group.js +45 -0
- package/dist/components/input-group.d.ts +15 -0
- package/dist/components/input-group.js +61 -0
- package/dist/components/input-otp.d.ts +24 -0
- package/dist/components/input-otp.js +50 -0
- package/dist/components/input-payment.d.ts +131 -0
- package/dist/components/input-payment.js +1140 -0
- package/dist/components/input-phone.d.ts +70 -0
- package/dist/components/input-phone.js +657 -0
- package/dist/components/input-sensitive.d.ts +12 -0
- package/dist/components/input-sensitive.js +169 -0
- package/dist/components/input.d.ts +13 -0
- package/dist/components/input.js +26 -0
- package/dist/components/kbd.d.ts +6 -0
- package/dist/components/kbd.js +19 -0
- package/dist/components/kinetic-click.d.ts +48 -0
- package/dist/components/kinetic-click.js +1184 -0
- package/dist/components/label.d.ts +6 -0
- package/dist/components/label.js +18 -0
- package/dist/components/list-box.d.ts +20 -0
- package/dist/components/list-box.js +148 -0
- package/dist/components/loader.d.ts +13 -0
- package/dist/components/loader.js +430 -0
- package/dist/components/marker.d.ts +15 -0
- package/dist/components/marker.js +59 -0
- package/dist/components/menu.d.ts +42 -0
- package/dist/components/menu.js +186 -0
- package/dist/components/menubar.d.ts +40 -0
- package/dist/components/menubar.js +107 -0
- package/dist/components/message.d.ts +33 -0
- package/dist/components/message.js +112 -0
- package/dist/components/meter.d.ts +10 -0
- package/dist/components/meter.js +42 -0
- package/dist/components/morphic-toast.d.ts +61 -0
- package/dist/components/morphic-toast.js +916 -0
- package/dist/components/navigation-menu.d.ts +26 -0
- package/dist/components/navigation-menu.js +116 -0
- package/dist/components/number-field.d.ts +15 -0
- package/dist/components/number-field.js +86 -0
- package/dist/components/option-picker.d.ts +18 -0
- package/dist/components/option-picker.js +89 -0
- package/dist/components/orb.d.ts +38 -0
- package/dist/components/orb.js +1413 -0
- package/dist/components/pagination.d.ts +25 -0
- package/dist/components/pagination.js +147 -0
- package/dist/components/popover.d.ts +22 -0
- package/dist/components/popover.js +79 -0
- package/dist/components/preview-card.d.ts +16 -0
- package/dist/components/preview-card.js +60 -0
- package/dist/components/progress.d.ts +21 -0
- package/dist/components/progress.js +139 -0
- package/dist/components/radio.d.ts +16 -0
- package/dist/components/radio.js +68 -0
- package/dist/components/resizable.d.ts +58 -0
- package/dist/components/resizable.js +964 -0
- package/dist/components/ruler-picker.d.ts +27 -0
- package/dist/components/ruler-picker.js +253 -0
- package/dist/components/scroll-area.d.ts +13 -0
- package/dist/components/scroll-area.js +34 -0
- package/dist/components/scroll-bar.d.ts +13 -0
- package/dist/components/scroll-bar.js +47 -0
- package/dist/components/select.d.ts +29 -0
- package/dist/components/select.js +140 -0
- package/dist/components/separator.d.ts +6 -0
- package/dist/components/separator.js +15 -0
- package/dist/components/sidebar.d.ts +65 -0
- package/dist/components/sidebar.js +408 -0
- package/dist/components/skeleton.d.ts +5 -0
- package/dist/components/skeleton.js +12 -0
- package/dist/components/slider.d.ts +12 -0
- package/dist/components/slider.js +96 -0
- package/dist/components/sortable.d.ts +44 -0
- package/dist/components/sortable.js +327 -0
- package/dist/components/switch.d.ts +15 -0
- package/dist/components/switch.js +63 -0
- package/dist/components/table.d.ts +12 -0
- package/dist/components/table.js +65 -0
- package/dist/components/tabs.d.ts +12 -0
- package/dist/components/tabs.js +39 -0
- package/dist/components/text.d.ts +14 -0
- package/dist/components/text.js +69 -0
- package/dist/components/textarea.d.ts +9 -0
- package/dist/components/textarea.js +20 -0
- package/dist/components/theme-provider.d.ts +52 -0
- package/dist/components/theme-provider.js +148 -0
- package/dist/components/timeline.d.ts +34 -0
- package/dist/components/timeline.js +147 -0
- package/dist/components/toast.d.ts +17 -0
- package/dist/components/toast.js +161 -0
- package/dist/components/toggle-group.d.ts +14 -0
- package/dist/components/toggle-group.js +53 -0
- package/dist/components/toggle.d.ts +11 -0
- package/dist/components/toggle.js +36 -0
- package/dist/components/toolbar.d.ts +11 -0
- package/dist/components/toolbar.js +49 -0
- package/dist/components/tooltip.d.ts +17 -0
- package/dist/components/tooltip.js +56 -0
- package/dist/components/waveform.d.ts +61 -0
- package/dist/components/waveform.js +500 -0
- package/dist/components/wheel-picker.d.ts +44 -0
- package/dist/components/wheel-picker.js +771 -0
- package/dist/hooks/use-copy-to-clipboard.d.ts +9 -0
- package/dist/hooks/use-copy-to-clipboard.js +36 -0
- package/dist/hooks/use-media-query.d.ts +21 -0
- package/dist/hooks/use-media-query.js +58 -0
- package/dist/styles.css +202 -0
- package/dist/themes/afterglow.css +89 -0
- package/dist/themes/afterglow.scoped.css +90 -0
- package/dist/themes/blacklight.css +89 -0
- package/dist/themes/blacklight.scoped.css +90 -0
- package/dist/themes/cathode.css +89 -0
- package/dist/themes/cathode.scoped.css +90 -0
- package/dist/themes/cel.css +89 -0
- package/dist/themes/cel.scoped.css +90 -0
- package/dist/themes/cinder.css +89 -0
- package/dist/themes/cinder.scoped.css +90 -0
- package/dist/themes/clay.css +89 -0
- package/dist/themes/clay.scoped.css +90 -0
- package/dist/themes/cobalt.css +89 -0
- package/dist/themes/cobalt.scoped.css +90 -0
- package/dist/themes/crimson.css +89 -0
- package/dist/themes/crimson.scoped.css +90 -0
- package/dist/themes/ion.css +89 -0
- package/dist/themes/ion.scoped.css +90 -0
- package/dist/themes/iris.css +89 -0
- package/dist/themes/iris.scoped.css +90 -0
- package/dist/themes/lagoon.css +89 -0
- package/dist/themes/lagoon.scoped.css +90 -0
- package/dist/themes/mochi.css +89 -0
- package/dist/themes/mochi.scoped.css +90 -0
- package/dist/themes/riso.css +89 -0
- package/dist/themes/riso.scoped.css +90 -0
- package/dist/themes/roast.css +89 -0
- package/dist/themes/roast.scoped.css +90 -0
- package/dist/themes/sage.css +89 -0
- package/dist/themes/sage.scoped.css +90 -0
- package/dist/themes/sepia.css +89 -0
- package/dist/themes/sepia.scoped.css +90 -0
- package/dist/themes/sorbet.css +89 -0
- package/dist/themes/sorbet.scoped.css +90 -0
- package/dist/themes/taffy.css +89 -0
- package/dist/themes/taffy.scoped.css +90 -0
- package/dist/themes/toxin.css +89 -0
- package/dist/themes/toxin.scoped.css +90 -0
- package/package.json +140 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { VariantProps } from "class-variance-authority";
|
|
2
|
+
import * as React$1 from "react";
|
|
3
|
+
import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
|
|
4
|
+
import { CheckboxGroup as CheckboxGroup$1 } from "@base-ui/react/checkbox-group";
|
|
5
|
+
//#region src/components/checkbox.d.ts
|
|
6
|
+
declare function CheckboxGroup({ className, ...props }: CheckboxGroup$1.Props): React$1.JSX.Element;
|
|
7
|
+
declare const checkboxItemVariants: (props?: ({
|
|
8
|
+
variant?: "default" | "diamond" | "expressive" | "sharp" | null | undefined;
|
|
9
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
10
|
+
declare const checkboxIndicatorVariants: (props?: ({
|
|
11
|
+
variant?: "default" | "diamond" | "expressive" | "sharp" | null | undefined;
|
|
12
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
13
|
+
export interface CheckboxProps extends Checkbox$1.Root.Props, VariantProps<typeof checkboxItemVariants> {}
|
|
14
|
+
declare function Checkbox({ className, variant, ...props }: CheckboxProps): React$1.JSX.Element;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { Checkbox, Checkbox as CheckboxGroupItem, CheckboxGroup, checkboxIndicatorVariants, checkboxItemVariants };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "cn";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
|
|
6
|
+
import { CheckboxGroup as CheckboxGroup$1 } from "@base-ui/react/checkbox-group";
|
|
7
|
+
//#region src/components/checkbox.tsx
|
|
8
|
+
function CheckboxGroup({ className, ...props }) {
|
|
9
|
+
return /* @__PURE__ */ jsx(CheckboxGroup$1, {
|
|
10
|
+
className: cn("flex flex-col items-start gap-3", className),
|
|
11
|
+
"data-slot": "checkbox-group",
|
|
12
|
+
...props
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
const checkboxItemVariants = cva("relative inline-flex size-4.5 shrink-0 items-center justify-center border border-input bg-background not-dark:bg-clip-padding shadow-xs/5 outline-none ring-ring transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[inherit] before:shadow-[0_1px_var(--border)] not-data-checked:not-data-disabled:inset-shadow-[0_1.5px_3px_var(--input)] pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-offset-background aria-invalid:border-destructive/36 focus-visible:aria-invalid:border-destructive/64 focus-visible:aria-invalid:ring-destructive/48 data-disabled:opacity-64 sm:size-4 dark:not-data-checked:bg-input/32 dark:aria-invalid:ring-destructive/24 [[data-disabled],[data-checked],[aria-invalid]]:shadow-none", {
|
|
16
|
+
variants: { variant: {
|
|
17
|
+
default: "rounded-[.25rem] before:rounded-[3px]",
|
|
18
|
+
diamond: "rotate-45 rounded-[.35rem] before:rounded-[5px]",
|
|
19
|
+
expressive: "rounded-full before:rounded-full",
|
|
20
|
+
sharp: "rounded-none before:rounded-none"
|
|
21
|
+
} },
|
|
22
|
+
defaultVariants: { variant: "default" }
|
|
23
|
+
});
|
|
24
|
+
const checkboxIndicatorVariants = cva("-inset-px absolute flex items-center justify-center pointer-events-none transition-[transform,opacity,background-color] duration-200 ease-out data-unchecked:scale-50 data-unchecked:opacity-0 data-checked:scale-100 data-checked:opacity-100 data-checked:bg-primary data-checked:text-primary-foreground data-checked:inset-shadow-[0_1px_--alpha(var(--primary-foreground)/16%)] data-checked:shadow-primary/24 data-checked:shadow-xs data-indeterminate:scale-100 data-indeterminate:opacity-100 data-indeterminate:bg-primary data-indeterminate:text-primary-foreground data-indeterminate:inset-shadow-[0_1px_--alpha(var(--primary-foreground)/16%)] data-indeterminate:shadow-primary/24 data-indeterminate:shadow-xs", {
|
|
25
|
+
variants: { variant: {
|
|
26
|
+
default: "rounded-[.25rem]",
|
|
27
|
+
diamond: "rounded-[.35rem]",
|
|
28
|
+
expressive: "rounded-full",
|
|
29
|
+
sharp: "rounded-none"
|
|
30
|
+
} },
|
|
31
|
+
defaultVariants: { variant: "default" }
|
|
32
|
+
});
|
|
33
|
+
function Checkbox({ className, variant, ...props }) {
|
|
34
|
+
return /* @__PURE__ */ jsx(Checkbox$1.Root, {
|
|
35
|
+
className: cn(checkboxItemVariants({ variant }), className),
|
|
36
|
+
"data-slot": "checkbox",
|
|
37
|
+
...props,
|
|
38
|
+
children: /* @__PURE__ */ jsx(Checkbox$1.Indicator, {
|
|
39
|
+
className: cn(checkboxIndicatorVariants({ variant })),
|
|
40
|
+
"data-slot": "checkbox-indicator",
|
|
41
|
+
keepMounted: true,
|
|
42
|
+
render: (indicatorProps, state) => /* @__PURE__ */ jsx("span", {
|
|
43
|
+
...indicatorProps,
|
|
44
|
+
children: state.indeterminate ? /* @__PURE__ */ jsx("svg", {
|
|
45
|
+
className: cn("size-3.5 sm:size-3", variant === "diamond" && "-rotate-45"),
|
|
46
|
+
fill: "none",
|
|
47
|
+
height: "24",
|
|
48
|
+
stroke: "currentColor",
|
|
49
|
+
strokeLinecap: "round",
|
|
50
|
+
strokeLinejoin: "round",
|
|
51
|
+
strokeWidth: "3",
|
|
52
|
+
viewBox: "0 0 24 24",
|
|
53
|
+
width: "24",
|
|
54
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
55
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
56
|
+
className: "transition-[stroke-dashoffset] duration-200 ease-out",
|
|
57
|
+
d: "M5.252 12h13.496",
|
|
58
|
+
strokeDasharray: "14",
|
|
59
|
+
strokeDashoffset: state.indeterminate ? 0 : 14,
|
|
60
|
+
style: { transitionDelay: state.indeterminate ? "50ms" : "0ms" }
|
|
61
|
+
})
|
|
62
|
+
}) : /* @__PURE__ */ jsx("svg", {
|
|
63
|
+
className: cn("size-3.5 sm:size-3", variant === "diamond" && "-rotate-45"),
|
|
64
|
+
fill: "none",
|
|
65
|
+
height: "24",
|
|
66
|
+
stroke: "currentColor",
|
|
67
|
+
strokeLinecap: "round",
|
|
68
|
+
strokeLinejoin: "round",
|
|
69
|
+
strokeWidth: "3",
|
|
70
|
+
viewBox: "0 0 24 24",
|
|
71
|
+
width: "24",
|
|
72
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
73
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
74
|
+
className: "transition-[stroke-dashoffset] duration-200 ease-out",
|
|
75
|
+
d: "M5.252 12.7 10.2 18.63 18.748 5.37",
|
|
76
|
+
strokeDasharray: "24",
|
|
77
|
+
strokeDashoffset: state.checked ? 0 : 24,
|
|
78
|
+
style: { transitionDelay: state.checked ? "50ms" : "0ms" }
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
export { Checkbox, Checkbox as CheckboxGroupItem, CheckboxGroup, checkboxIndicatorVariants, checkboxItemVariants };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
3
|
+
//#region src/components/circular-progress.d.ts
|
|
4
|
+
export interface CircularProgressProps extends useRender.ComponentProps<"div"> {
|
|
5
|
+
/**
|
|
6
|
+
* The progress value (0 to max). If undefined, the indicator will be indeterminate.
|
|
7
|
+
*/
|
|
8
|
+
value?: number | null;
|
|
9
|
+
/**
|
|
10
|
+
* The maximum progress value. Defaults to 100.
|
|
11
|
+
*/
|
|
12
|
+
max?: number;
|
|
13
|
+
/**
|
|
14
|
+
* The size of the circular progress indicator.
|
|
15
|
+
* Can be a string identifier ("sm" to "2xl") or explicit pixel dimensions.
|
|
16
|
+
*/
|
|
17
|
+
size?: number | "sm" | "default" | "lg" | "xl" | "2xl";
|
|
18
|
+
/**
|
|
19
|
+
* Defines standard rendering or wavy geometries wrapping the progress stroke.
|
|
20
|
+
*/
|
|
21
|
+
variant?: "default" | "expressive";
|
|
22
|
+
/**
|
|
23
|
+
* The stroke width of the SVG circle.
|
|
24
|
+
*/
|
|
25
|
+
strokeWidth?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function CircularProgress({ render, value, max, size: sizeProp, variant, strokeWidth: strokeWidthProp, ...props }: CircularProgressProps): React$1.ReactElement;
|
|
28
|
+
//#endregion
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "cn";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
5
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
6
|
+
//#region src/components/circular-progress.tsx
|
|
7
|
+
function getSizeConfig(sizeProp, strokeProp) {
|
|
8
|
+
if (typeof sizeProp === "number") return {
|
|
9
|
+
size: sizeProp,
|
|
10
|
+
stroke: strokeProp ?? Math.max(2, Math.floor(sizeProp / 12)),
|
|
11
|
+
amplitude: sizeProp / 24,
|
|
12
|
+
waves: 8 + Math.floor(sizeProp / 16)
|
|
13
|
+
};
|
|
14
|
+
const map = {
|
|
15
|
+
sm: {
|
|
16
|
+
size: 32,
|
|
17
|
+
stroke: 3,
|
|
18
|
+
amplitude: 1.5,
|
|
19
|
+
waves: 8
|
|
20
|
+
},
|
|
21
|
+
default: {
|
|
22
|
+
size: 40,
|
|
23
|
+
stroke: 4,
|
|
24
|
+
amplitude: 2,
|
|
25
|
+
waves: 10
|
|
26
|
+
},
|
|
27
|
+
lg: {
|
|
28
|
+
size: 64,
|
|
29
|
+
stroke: 5,
|
|
30
|
+
amplitude: 3,
|
|
31
|
+
waves: 12
|
|
32
|
+
},
|
|
33
|
+
xl: {
|
|
34
|
+
size: 96,
|
|
35
|
+
stroke: 6,
|
|
36
|
+
amplitude: 4,
|
|
37
|
+
waves: 14
|
|
38
|
+
},
|
|
39
|
+
"2xl": {
|
|
40
|
+
size: 128,
|
|
41
|
+
stroke: 8,
|
|
42
|
+
amplitude: 5,
|
|
43
|
+
waves: 16
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const config = map[sizeProp] || map.default;
|
|
47
|
+
if (strokeProp !== void 0) config.stroke = strokeProp;
|
|
48
|
+
return config;
|
|
49
|
+
}
|
|
50
|
+
function generateWavyCirclePath(size, strokeWidth, amplitude, numWaves) {
|
|
51
|
+
const center = size / 2;
|
|
52
|
+
const baseRadius = center - strokeWidth / 2 - amplitude;
|
|
53
|
+
const points = [];
|
|
54
|
+
for (let i = 0; i <= 360; i++) {
|
|
55
|
+
const angle = i * Math.PI / 180;
|
|
56
|
+
const currentRadius = baseRadius + amplitude * Math.sin(numWaves * angle);
|
|
57
|
+
const x = center + currentRadius * Math.cos(angle);
|
|
58
|
+
const y = center + currentRadius * Math.sin(angle);
|
|
59
|
+
points.push(`${i === 0 ? "M" : "L"} ${x.toFixed(2)} ${y.toFixed(2)}`);
|
|
60
|
+
}
|
|
61
|
+
return `${points.join(" ")} Z`;
|
|
62
|
+
}
|
|
63
|
+
function CircularProgress({ render, value, max = 100, size: sizeProp = "default", variant = "default", strokeWidth: strokeWidthProp, ...props }) {
|
|
64
|
+
const { size, stroke: strokeWidth, amplitude, waves } = getSizeConfig(sizeProp, strokeWidthProp);
|
|
65
|
+
const isIndeterminate = value === void 0 || value === null;
|
|
66
|
+
const safeValue = isIndeterminate ? 0 : Math.min(Math.max(value, 0), max);
|
|
67
|
+
const percentage = isIndeterminate ? 25 : safeValue / max * 100;
|
|
68
|
+
const center = size / 2;
|
|
69
|
+
const radius = center - strokeWidth / 2;
|
|
70
|
+
const circumference = 2 * Math.PI * radius;
|
|
71
|
+
const strokeDashoffsetDefault = circumference - percentage / 100 * circumference;
|
|
72
|
+
const wavyPath = variant === "expressive" ? generateWavyCirclePath(size, strokeWidth, amplitude, waves) : "";
|
|
73
|
+
const defaultProps = {
|
|
74
|
+
className: cn("relative inline-flex items-center justify-center shrink-0", isIndeterminate && "animate-spin"),
|
|
75
|
+
role: "progressbar",
|
|
76
|
+
"aria-valuemin": 0,
|
|
77
|
+
"aria-valuemax": max,
|
|
78
|
+
...isIndeterminate ? {} : { "aria-valuenow": safeValue },
|
|
79
|
+
"data-state": isIndeterminate ? "indeterminate" : "determinate",
|
|
80
|
+
"data-slot": "circular-progress",
|
|
81
|
+
style: {
|
|
82
|
+
width: size,
|
|
83
|
+
height: size
|
|
84
|
+
},
|
|
85
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
86
|
+
className: "h-full w-full -rotate-90 pointer-events-none",
|
|
87
|
+
viewBox: `0 0 ${size} ${size}`,
|
|
88
|
+
children: variant === "expressive" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", {
|
|
89
|
+
d: wavyPath,
|
|
90
|
+
className: "fill-transparent stroke-muted transition-colors duration-200",
|
|
91
|
+
strokeWidth,
|
|
92
|
+
strokeLinejoin: "round"
|
|
93
|
+
}), /* @__PURE__ */ jsx("path", {
|
|
94
|
+
d: wavyPath,
|
|
95
|
+
className: cn("fill-transparent stroke-primary", !isIndeterminate && "transition-[stroke-dashoffset] duration-300 ease-in-out"),
|
|
96
|
+
strokeWidth,
|
|
97
|
+
strokeLinejoin: "round",
|
|
98
|
+
strokeLinecap: "round",
|
|
99
|
+
pathLength: "100",
|
|
100
|
+
strokeDasharray: "100",
|
|
101
|
+
strokeDashoffset: 100 - percentage
|
|
102
|
+
})] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("circle", {
|
|
103
|
+
className: "fill-transparent stroke-muted transition-colors duration-200",
|
|
104
|
+
cx: center,
|
|
105
|
+
cy: center,
|
|
106
|
+
r: radius,
|
|
107
|
+
strokeWidth
|
|
108
|
+
}), /* @__PURE__ */ jsx("circle", {
|
|
109
|
+
className: cn("fill-transparent stroke-primary", !isIndeterminate && "transition-[stroke-dashoffset] duration-300 ease-in-out"),
|
|
110
|
+
cx: center,
|
|
111
|
+
cy: center,
|
|
112
|
+
r: radius,
|
|
113
|
+
strokeWidth,
|
|
114
|
+
strokeDasharray: circumference,
|
|
115
|
+
strokeDashoffset: strokeDashoffsetDefault,
|
|
116
|
+
strokeLinecap: "round"
|
|
117
|
+
})] })
|
|
118
|
+
})
|
|
119
|
+
};
|
|
120
|
+
return useRender({
|
|
121
|
+
defaultTagName: "div",
|
|
122
|
+
render,
|
|
123
|
+
props: mergeProps(defaultProps, props)
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
export { CircularProgress };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
|
|
3
|
+
//#region src/components/collapsible.d.ts
|
|
4
|
+
declare function Collapsible({ ...props }: Collapsible$1.Root.Props): React$1.JSX.Element;
|
|
5
|
+
declare function CollapsibleTrigger({ className, ...props }: Collapsible$1.Trigger.Props): React$1.JSX.Element;
|
|
6
|
+
declare function CollapsiblePanel({ className, ...props }: Collapsible$1.Panel.Props): React$1.JSX.Element;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { Collapsible, CollapsiblePanel as CollapsibleContent, CollapsiblePanel, CollapsibleTrigger };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "cn";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
|
|
5
|
+
//#region src/components/collapsible.tsx
|
|
6
|
+
function Collapsible({ ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Root, {
|
|
8
|
+
"data-slot": "collapsible",
|
|
9
|
+
...props
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function CollapsibleTrigger({ className, ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Trigger, {
|
|
14
|
+
className: cn("relative cursor-pointer pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11", className),
|
|
15
|
+
"data-slot": "collapsible-trigger",
|
|
16
|
+
...props
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function CollapsiblePanel({ className, ...props }) {
|
|
20
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Panel, {
|
|
21
|
+
className: cn("h-(--collapsible-panel-height) overflow-hidden transition-[height] duration-200 data-ending-style:h-0 data-starting-style:h-0", className),
|
|
22
|
+
"data-slot": "collapsible-panel",
|
|
23
|
+
...props
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { Collapsible, CollapsiblePanel as CollapsibleContent, CollapsiblePanel, CollapsibleTrigger };
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
//#region src/components/color-picker.d.ts
|
|
3
|
+
export interface BlossomColorPickerValue {
|
|
4
|
+
hue: number;
|
|
5
|
+
saturation: number;
|
|
6
|
+
lightness?: number;
|
|
7
|
+
originalSaturation?: number;
|
|
8
|
+
alpha: number;
|
|
9
|
+
layer: "inner" | "outer";
|
|
10
|
+
}
|
|
11
|
+
export interface BlossomColorPickerColor extends BlossomColorPickerValue {
|
|
12
|
+
hex: string;
|
|
13
|
+
hsl: string;
|
|
14
|
+
hsla: string;
|
|
15
|
+
rgb: string;
|
|
16
|
+
rgba: string;
|
|
17
|
+
r: number;
|
|
18
|
+
g: number;
|
|
19
|
+
b: number;
|
|
20
|
+
}
|
|
21
|
+
export type ColorInput = string | {
|
|
22
|
+
h: number;
|
|
23
|
+
s: number;
|
|
24
|
+
l: number;
|
|
25
|
+
};
|
|
26
|
+
export type SliderPosition = "top" | "bottom" | "left" | "right";
|
|
27
|
+
export declare const OUTER_COLORS: {
|
|
28
|
+
h: number;
|
|
29
|
+
s: number;
|
|
30
|
+
l: number;
|
|
31
|
+
}[];
|
|
32
|
+
export declare const INNER_COLORS: {
|
|
33
|
+
h: number;
|
|
34
|
+
s: number;
|
|
35
|
+
l: number;
|
|
36
|
+
}[];
|
|
37
|
+
export declare const DEFAULT_COLORS: {
|
|
38
|
+
h: number;
|
|
39
|
+
s: number;
|
|
40
|
+
l: number;
|
|
41
|
+
}[];
|
|
42
|
+
export declare function lightnessToSliderValue(l: number): number;
|
|
43
|
+
export declare function sliderValueToLightness(sliderValue: number): number;
|
|
44
|
+
export declare function hexToHsl(hex: string): {
|
|
45
|
+
h: number;
|
|
46
|
+
s: number;
|
|
47
|
+
l: number;
|
|
48
|
+
};
|
|
49
|
+
export declare function rgbToHsl(r: number, g: number, b: number): {
|
|
50
|
+
h: number;
|
|
51
|
+
s: number;
|
|
52
|
+
l: number;
|
|
53
|
+
};
|
|
54
|
+
export declare function parseColor(input: ColorInput): {
|
|
55
|
+
h: number;
|
|
56
|
+
s: number;
|
|
57
|
+
l: number;
|
|
58
|
+
};
|
|
59
|
+
export declare function hslToHex(h: number, s: number, l: number): string;
|
|
60
|
+
export declare function getVisualSaturation(sliderValue: number, baseSaturation: number): number;
|
|
61
|
+
export declare function hslToString(h: number, s: number, l: number): string;
|
|
62
|
+
export declare function hslaToString(h: number, s: number, l: number, a: number): string;
|
|
63
|
+
export declare function hslToRgb(h: number, s: number, l: number): {
|
|
64
|
+
r: number;
|
|
65
|
+
g: number;
|
|
66
|
+
b: number;
|
|
67
|
+
};
|
|
68
|
+
export declare function rgbaToString(r: number, g: number, b: number, a: number): string;
|
|
69
|
+
export declare function createColorOutput(hue: number, sliderValue: number, visualSaturation: number, baseSaturation: number, lightness: number, alpha: number, layer: "inner" | "outer"): BlossomColorPickerColor;
|
|
70
|
+
export declare function organizeColorsIntoLayers(colors: {
|
|
71
|
+
h: number;
|
|
72
|
+
s: number;
|
|
73
|
+
l: number;
|
|
74
|
+
}[]): {
|
|
75
|
+
h: number;
|
|
76
|
+
s: number;
|
|
77
|
+
l: number;
|
|
78
|
+
}[][];
|
|
79
|
+
export declare function calculateLayerRadii(layers: {
|
|
80
|
+
h: number;
|
|
81
|
+
s: number;
|
|
82
|
+
l: number;
|
|
83
|
+
}[][] | {
|
|
84
|
+
h: number;
|
|
85
|
+
s: number;
|
|
86
|
+
l: number;
|
|
87
|
+
}[][], coreSize: number, petalSize: number): number[];
|
|
88
|
+
export declare function calculateLayerRotations(layers: {
|
|
89
|
+
h: number;
|
|
90
|
+
s: number;
|
|
91
|
+
l: number;
|
|
92
|
+
}[][]): number[];
|
|
93
|
+
export declare function calculateBarRadius(layerRadii: number[], petalSize: number, coreSize: number, barGap: number): number;
|
|
94
|
+
export declare function calculateContainerSize(barRadius: number, circularBarWidth: number, showAlphaSlider: boolean, showOpacitySlider: boolean, sliderOffset: number, sliderWidth: number): number;
|
|
95
|
+
export declare function getPetalZIndex(index: number, bottomIndex: number, totalPetals: number, layerIdx: number, totalLayers: number, isBottomLeft?: boolean, isBottomRight?: boolean): number;
|
|
96
|
+
export declare function polarToCartesian(cx: number, cy: number, r: number, angleInDegrees: number): {
|
|
97
|
+
x: number;
|
|
98
|
+
y: number;
|
|
99
|
+
};
|
|
100
|
+
export declare function describeArc(cx: number, cy: number, r: number, startAng: number, endAng: number): string;
|
|
101
|
+
export declare function getCenterAngle(position: SliderPosition): number;
|
|
102
|
+
export declare function getOppositePosition(position: SliderPosition): SliderPosition;
|
|
103
|
+
export declare function calculateSliderValueFromPoint(dx: number, dy: number, centerAngle: number, halfSweep: number, position: SliderPosition): number;
|
|
104
|
+
export declare function calculateArcGradientColors(hue: number, baseSaturation: number, steps: number): string[];
|
|
105
|
+
export interface ComputeAdaptivePositionInput {
|
|
106
|
+
elementRect: DOMRect;
|
|
107
|
+
containerSize: number;
|
|
108
|
+
currentShiftOffset: {
|
|
109
|
+
x: number;
|
|
110
|
+
y: number;
|
|
111
|
+
};
|
|
112
|
+
windowWidth: number;
|
|
113
|
+
windowHeight: number;
|
|
114
|
+
sliderPosition?: SliderPosition;
|
|
115
|
+
adaptivePositioning: boolean;
|
|
116
|
+
circularBarWidth: number;
|
|
117
|
+
sliderOffset: number;
|
|
118
|
+
}
|
|
119
|
+
export interface ComputeAdaptivePositionResult {
|
|
120
|
+
effectivePosition: SliderPosition;
|
|
121
|
+
shiftOffset: {
|
|
122
|
+
x: number;
|
|
123
|
+
y: number;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export declare function computeAdaptivePosition({ elementRect, containerSize, currentShiftOffset, windowWidth, windowHeight, sliderPosition, adaptivePositioning, circularBarWidth, sliderOffset }: ComputeAdaptivePositionInput): ComputeAdaptivePositionResult;
|
|
127
|
+
export interface BlossomColorPickerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "value" | "defaultValue" | "onChange"> {
|
|
128
|
+
value?: BlossomColorPickerValue;
|
|
129
|
+
defaultValue?: BlossomColorPickerValue;
|
|
130
|
+
colors?: ColorInput[];
|
|
131
|
+
onChange?: (color: BlossomColorPickerColor) => void;
|
|
132
|
+
onCollapse?: (color: BlossomColorPickerColor) => void;
|
|
133
|
+
disabled?: boolean;
|
|
134
|
+
openOnHover?: boolean;
|
|
135
|
+
initialExpanded?: boolean;
|
|
136
|
+
animationDuration?: number;
|
|
137
|
+
showAlphaSlider?: boolean;
|
|
138
|
+
showOpacitySlider?: boolean;
|
|
139
|
+
coreSize?: number;
|
|
140
|
+
petalSize?: number;
|
|
141
|
+
showCoreColor?: boolean;
|
|
142
|
+
sliderPosition?: SliderPosition;
|
|
143
|
+
adaptivePositioning?: boolean;
|
|
144
|
+
circularBarWidth?: number;
|
|
145
|
+
sliderWidth?: number;
|
|
146
|
+
sliderOffset?: number;
|
|
147
|
+
collapsible?: boolean;
|
|
148
|
+
}
|
|
149
|
+
export declare function BlossomColorPicker({ value, defaultValue, colors, onChange, onCollapse, disabled, openOnHover, initialExpanded, animationDuration, showAlphaSlider, showOpacitySlider, coreSize, petalSize, showCoreColor, sliderPosition, adaptivePositioning, circularBarWidth, sliderWidth, sliderOffset, collapsible, className, ref, ...props }: BlossomColorPickerProps & {
|
|
150
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
151
|
+
}): React$1.JSX.Element;
|
|
152
|
+
export interface ColorPickerProps extends Omit<BlossomColorPickerProps, "className"> {
|
|
153
|
+
darkMode?: boolean;
|
|
154
|
+
className?: string;
|
|
155
|
+
}
|
|
156
|
+
export declare function ColorPicker({ value, defaultValue, colors, onChange, onCollapse, disabled, openOnHover, initialExpanded, animationDuration, showAlphaSlider, coreSize, petalSize, showCoreColor, sliderPosition, adaptivePositioning, circularBarWidth, sliderWidth, sliderOffset, collapsible, darkMode, className, ref, ...props }: ColorPickerProps & {
|
|
157
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
158
|
+
}): React$1.JSX.Element;
|
|
159
|
+
//#endregion
|