doodleui-react 0.3.0 → 0.5.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/dist/index.cjs CHANGED
@@ -16,6 +16,21 @@ var ToastPrimitive = require('@radix-ui/react-toast');
16
16
  var AccordionPrimitive = require('@radix-ui/react-accordion');
17
17
  var AvatarPrimitive = require('@radix-ui/react-avatar');
18
18
  var SliderPrimitive = require('@radix-ui/react-slider');
19
+ var LabelPrimitive = require('@radix-ui/react-label');
20
+ var CollapsiblePrimitive = require('@radix-ui/react-collapsible');
21
+ var PopoverPrimitive = require('@radix-ui/react-popover');
22
+ var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
23
+ var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
24
+ var cmdk = require('cmdk');
25
+ var TogglePrimitive = require('@radix-ui/react-toggle');
26
+ var ToggleGroupPrimitive = require('@radix-ui/react-toggle-group');
27
+ var inputOtp = require('input-otp');
28
+ var ScrollAreaPrimitive = require('@radix-ui/react-scroll-area');
29
+ var ResizablePrimitive = require('react-resizable-panels');
30
+ var HoverCardPrimitive = require('@radix-ui/react-hover-card');
31
+ var ContextMenuPrimitive = require('@radix-ui/react-context-menu');
32
+ var NavigationMenuPrimitive = require('@radix-ui/react-navigation-menu');
33
+ var MenubarPrimitive = require('@radix-ui/react-menubar');
19
34
 
20
35
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
21
36
 
@@ -49,6 +64,19 @@ var ToastPrimitive__namespace = /*#__PURE__*/_interopNamespace(ToastPrimitive);
49
64
  var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
50
65
  var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
51
66
  var SliderPrimitive__namespace = /*#__PURE__*/_interopNamespace(SliderPrimitive);
67
+ var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
68
+ var CollapsiblePrimitive__namespace = /*#__PURE__*/_interopNamespace(CollapsiblePrimitive);
69
+ var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
70
+ var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
71
+ var AlertDialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(AlertDialogPrimitive);
72
+ var TogglePrimitive__namespace = /*#__PURE__*/_interopNamespace(TogglePrimitive);
73
+ var ToggleGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(ToggleGroupPrimitive);
74
+ var ScrollAreaPrimitive__namespace = /*#__PURE__*/_interopNamespace(ScrollAreaPrimitive);
75
+ var ResizablePrimitive__namespace = /*#__PURE__*/_interopNamespace(ResizablePrimitive);
76
+ var HoverCardPrimitive__namespace = /*#__PURE__*/_interopNamespace(HoverCardPrimitive);
77
+ var ContextMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(ContextMenuPrimitive);
78
+ var NavigationMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(NavigationMenuPrimitive);
79
+ var MenubarPrimitive__namespace = /*#__PURE__*/_interopNamespace(MenubarPrimitive);
52
80
 
53
81
  // src/types.ts
54
82
  function toRoughOptions(props) {
@@ -3732,12 +3760,3494 @@ var Stepper = react.forwardRef(
3732
3760
  );
3733
3761
  }
3734
3762
  );
3763
+ var Label2 = react.forwardRef(function Label3({
3764
+ className,
3765
+ style,
3766
+ children,
3767
+ required,
3768
+ roughness,
3769
+ seed,
3770
+ sketchColor,
3771
+ bowing,
3772
+ strokeWidth,
3773
+ animate,
3774
+ ...rest
3775
+ }, ref) {
3776
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
3777
+ const resolvedSeed = useResolvedSeed(seed);
3778
+ const shouldAnimate = useAnimate(animate);
3779
+ const markRef = react.useRef(null);
3780
+ useDrawIn(markRef, DRAW_IN_MARK_MS, shouldAnimate);
3781
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3782
+ LabelPrimitive__namespace.Root,
3783
+ {
3784
+ ref,
3785
+ className: cn(className),
3786
+ style: {
3787
+ display: "inline-flex",
3788
+ alignItems: "center",
3789
+ gap: 4,
3790
+ fontFamily: doodleUiFontFamily,
3791
+ fontSize: 13,
3792
+ fontWeight: doodleUiFontWeight(600),
3793
+ color: ink,
3794
+ cursor: "default",
3795
+ ...style
3796
+ },
3797
+ ...rest,
3798
+ children: [
3799
+ children,
3800
+ required ? /* @__PURE__ */ jsxRuntime.jsx(
3801
+ "span",
3802
+ {
3803
+ ref: markRef,
3804
+ "aria-hidden": "true",
3805
+ style: { position: "relative", width: 10, height: 10, flexShrink: 0 },
3806
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3807
+ RoughSvg,
3808
+ {
3809
+ shape: "ellipse",
3810
+ roughness: (roughness ?? 1.5) * 0.9,
3811
+ seed: resolvedSeed,
3812
+ sketchColor: SKETCH_COLORS.accent,
3813
+ bowing,
3814
+ fillStyle: "solid",
3815
+ fill: SKETCH_COLORS.accent,
3816
+ strokeWidth: strokeWidth ?? 1.2,
3817
+ inset: 1
3818
+ }
3819
+ )
3820
+ }
3821
+ ) : null
3822
+ ]
3823
+ }
3824
+ );
3825
+ });
3826
+ var CHEVRON_PATH4 = "M 6 4 L 12 10 L 6 16";
3827
+ var CollapsibleSketchContext = react.createContext(null);
3828
+ function useCollapsibleSketch() {
3829
+ const ctx = react.useContext(CollapsibleSketchContext);
3830
+ if (!ctx) {
3831
+ throw new Error(
3832
+ "Collapsible parts must be used inside <Collapsible>."
3833
+ );
3834
+ }
3835
+ return ctx;
3836
+ }
3837
+ var Collapsible = react.forwardRef(
3838
+ function Collapsible2({
3839
+ className,
3840
+ style,
3841
+ children,
3842
+ open,
3843
+ defaultOpen,
3844
+ onOpenChange,
3845
+ disabled,
3846
+ roughness,
3847
+ seed,
3848
+ sketchColor,
3849
+ bowing,
3850
+ fillStyle,
3851
+ strokeWidth,
3852
+ ...rest
3853
+ }, ref) {
3854
+ const resolvedSeed = useResolvedSeed(seed);
3855
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
3856
+ const [uncontrolled, setUncontrolled] = react.useState(defaultOpen ?? false);
3857
+ const isOpen = open ?? uncontrolled;
3858
+ return /* @__PURE__ */ jsxRuntime.jsx(
3859
+ CollapsibleSketchContext.Provider,
3860
+ {
3861
+ value: {
3862
+ roughness,
3863
+ seed: resolvedSeed,
3864
+ sketchColor,
3865
+ bowing,
3866
+ fillStyle,
3867
+ strokeWidth,
3868
+ resolvedSeed,
3869
+ ink,
3870
+ open: isOpen
3871
+ },
3872
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3873
+ CollapsiblePrimitive__namespace.Root,
3874
+ {
3875
+ ref,
3876
+ open: isOpen,
3877
+ disabled,
3878
+ className: cn(className),
3879
+ style,
3880
+ onOpenChange: (next) => {
3881
+ setUncontrolled(next);
3882
+ onOpenChange?.(next);
3883
+ },
3884
+ ...rest,
3885
+ children
3886
+ }
3887
+ )
3888
+ }
3889
+ );
3890
+ }
3891
+ );
3892
+ var CollapsibleTrigger = react.forwardRef(function CollapsibleTrigger2({ className, style, children, ...rest }, ref) {
3893
+ const sketch = useCollapsibleSketch();
3894
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3895
+ CollapsiblePrimitive__namespace.Trigger,
3896
+ {
3897
+ ref,
3898
+ className: cn(className),
3899
+ style: {
3900
+ display: "flex",
3901
+ width: "100%",
3902
+ alignItems: "center",
3903
+ justifyContent: "space-between",
3904
+ gap: 12,
3905
+ padding: "10px 4px",
3906
+ border: "none",
3907
+ background: "transparent",
3908
+ cursor: "pointer",
3909
+ fontFamily: doodleUiFontFamily,
3910
+ fontSize: 15,
3911
+ fontWeight: doodleUiFontWeight(600),
3912
+ color: sketch.ink,
3913
+ textAlign: "left",
3914
+ outline: "none",
3915
+ ...style
3916
+ },
3917
+ ...rest,
3918
+ children: [
3919
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children }),
3920
+ /* @__PURE__ */ jsxRuntime.jsx(
3921
+ "span",
3922
+ {
3923
+ style: {
3924
+ position: "relative",
3925
+ width: 18,
3926
+ height: 18,
3927
+ flexShrink: 0,
3928
+ transform: sketch.open ? "rotate(90deg)" : "rotate(0deg)",
3929
+ transition: "transform 180ms ease"
3930
+ },
3931
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3932
+ RoughSvg,
3933
+ {
3934
+ shape: "path",
3935
+ path: CHEVRON_PATH4,
3936
+ roughness: (sketch.roughness ?? 1.5) * 0.7,
3937
+ seed: sketch.resolvedSeed,
3938
+ sketchColor: sketch.ink,
3939
+ bowing: sketch.bowing,
3940
+ strokeWidth: (sketch.strokeWidth ?? 1.6) + 0.2,
3941
+ inset: 0
3942
+ }
3943
+ )
3944
+ }
3945
+ )
3946
+ ]
3947
+ }
3948
+ );
3949
+ });
3950
+ var CollapsibleContent = react.forwardRef(function CollapsibleContent2({ className, style, children, ...rest }, ref) {
3951
+ const sketch = useCollapsibleSketch();
3952
+ return /* @__PURE__ */ jsxRuntime.jsx(
3953
+ CollapsiblePrimitive__namespace.Content,
3954
+ {
3955
+ ref,
3956
+ className: cn(className),
3957
+ style: {
3958
+ padding: "0 4px 12px",
3959
+ fontFamily: doodleUiFontFamily,
3960
+ fontSize: 14,
3961
+ lineHeight: 1.5,
3962
+ color: sketch.ink,
3963
+ ...style
3964
+ },
3965
+ ...rest,
3966
+ children
3967
+ }
3968
+ );
3969
+ });
3970
+ var PopoverSketchContext = react.createContext(
3971
+ null
3972
+ );
3973
+ function usePopoverSketch() {
3974
+ const ctx = react.useContext(PopoverSketchContext);
3975
+ if (!ctx) {
3976
+ throw new Error("Popover parts must be used inside <Popover>.");
3977
+ }
3978
+ return ctx;
3979
+ }
3980
+ function Popover({
3981
+ children,
3982
+ roughness,
3983
+ seed,
3984
+ sketchColor,
3985
+ bowing,
3986
+ fillStyle,
3987
+ strokeWidth,
3988
+ animate,
3989
+ ...rest
3990
+ }) {
3991
+ const resolvedSeed = useResolvedSeed(seed);
3992
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
3993
+ return /* @__PURE__ */ jsxRuntime.jsx(
3994
+ PopoverSketchContext.Provider,
3995
+ {
3996
+ value: {
3997
+ roughness,
3998
+ seed: resolvedSeed,
3999
+ sketchColor,
4000
+ bowing,
4001
+ fillStyle,
4002
+ strokeWidth,
4003
+ resolvedSeed,
4004
+ ink,
4005
+ animate
4006
+ },
4007
+ children: /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Root, { ...rest, children })
4008
+ }
4009
+ );
4010
+ }
4011
+ var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
4012
+ var PopoverAnchor = PopoverPrimitive__namespace.Anchor;
4013
+ var PopoverClose = PopoverPrimitive__namespace.Close;
4014
+ var PopoverContent = react.forwardRef(
4015
+ function PopoverContent2({ className, style, children, sideOffset = 8, ...rest }, ref) {
4016
+ const sketch = usePopoverSketch();
4017
+ return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
4018
+ PopoverPrimitive__namespace.Content,
4019
+ {
4020
+ ref,
4021
+ sideOffset,
4022
+ className: cn(className),
4023
+ style: { zIndex: 80, outline: "none", ...style },
4024
+ ...rest,
4025
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4026
+ SketchBox,
4027
+ {
4028
+ roughness: sketch.roughness,
4029
+ seed: sketch.resolvedSeed,
4030
+ sketchColor: sketch.ink,
4031
+ bowing: sketch.bowing,
4032
+ fillStyle: sketch.fillStyle ?? "solid",
4033
+ fill: "#f7f6f2",
4034
+ strokeWidth: sketch.strokeWidth ?? 1.5,
4035
+ shadow: true,
4036
+ animate: sketch.animate,
4037
+ contentStyle: { padding: "14px 16px", minWidth: 200 },
4038
+ children
4039
+ }
4040
+ )
4041
+ }
4042
+ ) });
4043
+ }
4044
+ );
4045
+ var PopoverArrow = react.forwardRef(
4046
+ function PopoverArrow2(props, ref) {
4047
+ const sketch = usePopoverSketch();
4048
+ return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Arrow, { ref, fill: sketch.ink, ...props });
4049
+ }
4050
+ );
4051
+ var DropdownMenuSketchContext = react.createContext(null);
4052
+ function useDropdownMenuSketch() {
4053
+ const ctx = react.useContext(DropdownMenuSketchContext);
4054
+ if (!ctx) {
4055
+ throw new Error(
4056
+ "DropdownMenu parts must be used inside <DropdownMenu>."
4057
+ );
4058
+ }
4059
+ return ctx;
4060
+ }
4061
+ function DropdownMenu({
4062
+ children,
4063
+ roughness,
4064
+ seed,
4065
+ sketchColor,
4066
+ bowing,
4067
+ fillStyle,
4068
+ strokeWidth,
4069
+ animate,
4070
+ ...rest
4071
+ }) {
4072
+ const resolvedSeed = useResolvedSeed(seed);
4073
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
4074
+ return /* @__PURE__ */ jsxRuntime.jsx(
4075
+ DropdownMenuSketchContext.Provider,
4076
+ {
4077
+ value: {
4078
+ roughness,
4079
+ seed: resolvedSeed,
4080
+ sketchColor,
4081
+ bowing,
4082
+ fillStyle,
4083
+ strokeWidth,
4084
+ resolvedSeed,
4085
+ ink,
4086
+ animate
4087
+ },
4088
+ children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Root, { ...rest, children })
4089
+ }
4090
+ );
4091
+ }
4092
+ var DropdownMenuTrigger = DropdownMenuPrimitive__namespace.Trigger;
4093
+ var DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
4094
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
4095
+ var DropdownMenuSub = DropdownMenuPrimitive__namespace.Sub;
4096
+ var DropdownMenuContent = react.forwardRef(function DropdownMenuContent2({ className, style, children, sideOffset = 6, align = "start", ...rest }, ref) {
4097
+ const sketch = useDropdownMenuSketch();
4098
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
4099
+ DropdownMenuPrimitive__namespace.Content,
4100
+ {
4101
+ ref,
4102
+ sideOffset,
4103
+ align,
4104
+ className: cn(className),
4105
+ style: { zIndex: 80, outline: "none", minWidth: 180, ...style },
4106
+ ...rest,
4107
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4108
+ SketchBox,
4109
+ {
4110
+ roughness: sketch.roughness,
4111
+ seed: sketch.resolvedSeed,
4112
+ sketchColor: sketch.ink,
4113
+ bowing: sketch.bowing,
4114
+ fillStyle: sketch.fillStyle ?? "solid",
4115
+ fill: "#f7f6f2",
4116
+ strokeWidth: sketch.strokeWidth ?? 1.5,
4117
+ shadow: true,
4118
+ animate: sketch.animate,
4119
+ contentStyle: { padding: "6px 4px" },
4120
+ children
4121
+ }
4122
+ )
4123
+ }
4124
+ ) });
4125
+ });
4126
+ function useMark(highlighted) {
4127
+ const sketch = useDropdownMenuSketch();
4128
+ return { sketch, mark: highlighted };
4129
+ }
4130
+ var DropdownMenuItem = react.forwardRef(function DropdownMenuItem2({ className, style, children, inset, ...rest }, ref) {
4131
+ const [highlighted, setHighlighted] = react.useState(false);
4132
+ const { sketch, mark } = useMark(highlighted);
4133
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4134
+ DropdownMenuPrimitive__namespace.Item,
4135
+ {
4136
+ ref,
4137
+ className: cn(className),
4138
+ onPointerMove: () => setHighlighted(true),
4139
+ onPointerLeave: () => setHighlighted(false),
4140
+ onFocus: () => setHighlighted(true),
4141
+ onBlur: () => setHighlighted(false),
4142
+ style: {
4143
+ position: "relative",
4144
+ display: "flex",
4145
+ alignItems: "center",
4146
+ gap: 8,
4147
+ padding: inset ? "7px 12px 7px 26px" : "7px 12px",
4148
+ fontFamily: doodleUiFontFamily,
4149
+ fontSize: 14,
4150
+ color: sketch.ink,
4151
+ outline: "none",
4152
+ cursor: "pointer",
4153
+ userSelect: "none",
4154
+ ...style
4155
+ },
4156
+ ...rest,
4157
+ children: [
4158
+ mark ? /* @__PURE__ */ jsxRuntime.jsx(
4159
+ RoughSvg,
4160
+ {
4161
+ shape: "line",
4162
+ roughness: (sketch.roughness ?? 1.5) + 0.4,
4163
+ seed: sketch.resolvedSeed,
4164
+ sketchColor: sketch.ink,
4165
+ bowing: sketch.bowing ?? 1.6,
4166
+ strokeWidth: 1.3,
4167
+ inset: 4,
4168
+ style: { opacity: 0.4 }
4169
+ }
4170
+ ) : null,
4171
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
4172
+ ]
4173
+ }
4174
+ );
4175
+ });
4176
+ var CHECK_PATH2 = "M 2 6 L 5 9 L 10 3";
4177
+ var DropdownMenuCheckboxItem = react.forwardRef(function DropdownMenuCheckboxItem2({ className, style, children, checked, ...rest }, ref) {
4178
+ const [highlighted, setHighlighted] = react.useState(false);
4179
+ const { sketch, mark } = useMark(highlighted);
4180
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4181
+ DropdownMenuPrimitive__namespace.CheckboxItem,
4182
+ {
4183
+ ref,
4184
+ checked,
4185
+ className: cn(className),
4186
+ onPointerMove: () => setHighlighted(true),
4187
+ onPointerLeave: () => setHighlighted(false),
4188
+ style: {
4189
+ position: "relative",
4190
+ display: "flex",
4191
+ alignItems: "center",
4192
+ gap: 8,
4193
+ padding: "7px 12px 7px 26px",
4194
+ fontFamily: doodleUiFontFamily,
4195
+ fontSize: 14,
4196
+ color: sketch.ink,
4197
+ outline: "none",
4198
+ cursor: "pointer",
4199
+ userSelect: "none",
4200
+ ...style
4201
+ },
4202
+ ...rest,
4203
+ children: [
4204
+ mark ? /* @__PURE__ */ jsxRuntime.jsx(
4205
+ RoughSvg,
4206
+ {
4207
+ shape: "line",
4208
+ roughness: (sketch.roughness ?? 1.5) + 0.4,
4209
+ seed: sketch.resolvedSeed,
4210
+ sketchColor: sketch.ink,
4211
+ bowing: sketch.bowing ?? 1.6,
4212
+ strokeWidth: 1.3,
4213
+ inset: 4,
4214
+ style: { opacity: 0.4 }
4215
+ }
4216
+ ) : null,
4217
+ /* @__PURE__ */ jsxRuntime.jsx(
4218
+ "span",
4219
+ {
4220
+ style: {
4221
+ position: "relative",
4222
+ width: 12,
4223
+ height: 12,
4224
+ flexShrink: 0,
4225
+ marginLeft: -18
4226
+ },
4227
+ children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(
4228
+ RoughSvg,
4229
+ {
4230
+ shape: "path",
4231
+ path: CHECK_PATH2,
4232
+ roughness: (sketch.roughness ?? 1.5) * 0.7,
4233
+ seed: deriveSeed(sketch.resolvedSeed, "checkbox-mark"),
4234
+ sketchColor: SKETCH_COLORS.accent,
4235
+ bowing: sketch.bowing,
4236
+ strokeWidth: 1.6,
4237
+ inset: 0
4238
+ }
4239
+ ) })
4240
+ }
4241
+ ),
4242
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
4243
+ ]
4244
+ }
4245
+ );
4246
+ });
4247
+ var DropdownMenuRadioItem = react.forwardRef(function DropdownMenuRadioItem2({ className, style, children, ...rest }, ref) {
4248
+ const [highlighted, setHighlighted] = react.useState(false);
4249
+ const { sketch, mark } = useMark(highlighted);
4250
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4251
+ DropdownMenuPrimitive__namespace.RadioItem,
4252
+ {
4253
+ ref,
4254
+ className: cn(className),
4255
+ onPointerMove: () => setHighlighted(true),
4256
+ onPointerLeave: () => setHighlighted(false),
4257
+ style: {
4258
+ position: "relative",
4259
+ display: "flex",
4260
+ alignItems: "center",
4261
+ gap: 8,
4262
+ padding: "7px 12px 7px 26px",
4263
+ fontFamily: doodleUiFontFamily,
4264
+ fontSize: 14,
4265
+ color: sketch.ink,
4266
+ outline: "none",
4267
+ cursor: "pointer",
4268
+ userSelect: "none",
4269
+ ...style
4270
+ },
4271
+ ...rest,
4272
+ children: [
4273
+ mark ? /* @__PURE__ */ jsxRuntime.jsx(
4274
+ RoughSvg,
4275
+ {
4276
+ shape: "line",
4277
+ roughness: (sketch.roughness ?? 1.5) + 0.4,
4278
+ seed: sketch.resolvedSeed,
4279
+ sketchColor: sketch.ink,
4280
+ bowing: sketch.bowing ?? 1.6,
4281
+ strokeWidth: 1.3,
4282
+ inset: 4,
4283
+ style: { opacity: 0.4 }
4284
+ }
4285
+ ) : null,
4286
+ /* @__PURE__ */ jsxRuntime.jsx(
4287
+ "span",
4288
+ {
4289
+ style: {
4290
+ position: "relative",
4291
+ width: 8,
4292
+ height: 8,
4293
+ flexShrink: 0,
4294
+ marginLeft: -18
4295
+ },
4296
+ children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(
4297
+ RoughSvg,
4298
+ {
4299
+ shape: "ellipse",
4300
+ roughness: (sketch.roughness ?? 1.5) * 0.8,
4301
+ seed: deriveSeed(sketch.resolvedSeed, "radio-mark"),
4302
+ sketchColor: SKETCH_COLORS.accent,
4303
+ bowing: sketch.bowing,
4304
+ fillStyle: "solid",
4305
+ fill: SKETCH_COLORS.accent,
4306
+ strokeWidth: 1.2,
4307
+ inset: 0
4308
+ }
4309
+ ) })
4310
+ }
4311
+ ),
4312
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
4313
+ ]
4314
+ }
4315
+ );
4316
+ });
4317
+ var DropdownMenuLabel = react.forwardRef(function DropdownMenuLabel2({ className, style, children, ...rest }, ref) {
4318
+ const sketch = useDropdownMenuSketch();
4319
+ return /* @__PURE__ */ jsxRuntime.jsx(
4320
+ DropdownMenuPrimitive__namespace.Label,
4321
+ {
4322
+ ref,
4323
+ className: cn(className),
4324
+ style: {
4325
+ padding: "6px 12px",
4326
+ fontFamily: doodleUiFontFamily,
4327
+ fontSize: 12,
4328
+ fontWeight: 700,
4329
+ color: sketch.ink,
4330
+ opacity: 0.6,
4331
+ textTransform: "uppercase",
4332
+ letterSpacing: 0.4,
4333
+ ...style
4334
+ },
4335
+ ...rest,
4336
+ children
4337
+ }
4338
+ );
4339
+ });
4340
+ var DropdownMenuSeparator = react.forwardRef(function DropdownMenuSeparator2({ className, style, ...rest }, ref) {
4341
+ const sketch = useDropdownMenuSketch();
4342
+ return /* @__PURE__ */ jsxRuntime.jsx(
4343
+ DropdownMenuPrimitive__namespace.Separator,
4344
+ {
4345
+ ref,
4346
+ className: cn(className),
4347
+ style: { position: "relative", height: 10, margin: "2px 0", ...style },
4348
+ ...rest,
4349
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4350
+ RoughSvg,
4351
+ {
4352
+ shape: "line",
4353
+ roughness: (sketch.roughness ?? 1.5) + 0.2,
4354
+ seed: deriveSeed(sketch.resolvedSeed, "separator"),
4355
+ sketchColor: sketch.ink,
4356
+ bowing: sketch.bowing ?? 1.8,
4357
+ strokeWidth: 1.2,
4358
+ inset: 6,
4359
+ style: { opacity: 0.5 }
4360
+ }
4361
+ )
4362
+ }
4363
+ );
4364
+ });
4365
+ var DialogSketchContext = react.createContext(
4366
+ null
4367
+ );
4368
+ function useDialogSketch() {
4369
+ const ctx = react.useContext(DialogSketchContext);
4370
+ if (!ctx) {
4371
+ throw new Error("Dialog parts must be used inside <Dialog>.");
4372
+ }
4373
+ return ctx;
4374
+ }
4375
+ function Dialog2({
4376
+ children,
4377
+ open,
4378
+ defaultOpen,
4379
+ onOpenChange,
4380
+ roughness,
4381
+ seed,
4382
+ sketchColor,
4383
+ bowing,
4384
+ fillStyle,
4385
+ strokeWidth,
4386
+ animate,
4387
+ ...rest
4388
+ }) {
4389
+ const resolvedSeed = useResolvedSeed(seed);
4390
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
4391
+ const [uncontrolled, setUncontrolled] = react.useState(defaultOpen === true);
4392
+ const isOpen = open ?? uncontrolled;
4393
+ return /* @__PURE__ */ jsxRuntime.jsx(
4394
+ DialogSketchContext.Provider,
4395
+ {
4396
+ value: {
4397
+ roughness,
4398
+ seed: resolvedSeed,
4399
+ sketchColor,
4400
+ bowing,
4401
+ fillStyle,
4402
+ strokeWidth,
4403
+ resolvedSeed,
4404
+ ink,
4405
+ animate,
4406
+ open: isOpen
4407
+ },
4408
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4409
+ Dialog__namespace.Root,
4410
+ {
4411
+ open: isOpen,
4412
+ onOpenChange: (next) => {
4413
+ setUncontrolled(next);
4414
+ onOpenChange?.(next);
4415
+ },
4416
+ ...rest,
4417
+ children
4418
+ }
4419
+ )
4420
+ }
4421
+ );
4422
+ }
4423
+ var DialogTrigger = Dialog__namespace.Trigger;
4424
+ var DialogPortal = Dialog__namespace.Portal;
4425
+ var DialogClose = Dialog__namespace.Close;
4426
+ var DialogOverlay = react.forwardRef(
4427
+ function DialogOverlay2({ style, ...rest }, ref) {
4428
+ const sketch = useDialogSketch();
4429
+ const shouldAnimate = useAnimate(sketch.animate);
4430
+ return /* @__PURE__ */ jsxRuntime.jsx(Dialog__namespace.Overlay, { ref, asChild: true, forceMount: true, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(
4431
+ framerMotion.motion.div,
4432
+ {
4433
+ initial: shouldAnimate ? { opacity: 0 } : false,
4434
+ animate: { opacity: 1 },
4435
+ exit: shouldAnimate ? { opacity: 0 } : void 0,
4436
+ transition: shouldAnimate ? { duration: 0.2, ease: "easeOut" } : { duration: 0 },
4437
+ style: {
4438
+ position: "fixed",
4439
+ inset: 0,
4440
+ background: "rgba(31, 29, 26, 0.38)",
4441
+ zIndex: 70,
4442
+ ...style
4443
+ }
4444
+ }
4445
+ ) });
4446
+ }
4447
+ );
4448
+ var DialogContent = react.forwardRef(
4449
+ function DialogContent2({ className, style, contentStyle, children, ...rest }, ref) {
4450
+ const sketch = useDialogSketch();
4451
+ const shouldAnimate = useAnimate(sketch.animate);
4452
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: sketch.open ? /* @__PURE__ */ jsxRuntime.jsxs(Dialog__namespace.Portal, { forceMount: true, children: [
4453
+ /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
4454
+ /* @__PURE__ */ jsxRuntime.jsx(
4455
+ "div",
4456
+ {
4457
+ style: {
4458
+ position: "fixed",
4459
+ inset: 0,
4460
+ zIndex: 80,
4461
+ display: "flex",
4462
+ alignItems: "center",
4463
+ justifyContent: "center",
4464
+ pointerEvents: "none",
4465
+ padding: 16
4466
+ },
4467
+ children: /* @__PURE__ */ jsxRuntime.jsx(Dialog__namespace.Content, { ref, asChild: true, forceMount: true, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(
4468
+ framerMotion.motion.div,
4469
+ {
4470
+ className: cn(className),
4471
+ initial: shouldAnimate ? { opacity: 0, scale: 0.96, y: 10 } : false,
4472
+ animate: { opacity: 1, scale: 1, y: 0 },
4473
+ exit: shouldAnimate ? { opacity: 0, scale: 0.96, y: 8 } : void 0,
4474
+ transition: shouldAnimate ? { duration: 0.22, ease: "easeOut" } : { duration: 0 },
4475
+ style: {
4476
+ width: "min(420px, calc(100vw - 32px))",
4477
+ outline: "none",
4478
+ pointerEvents: "auto",
4479
+ ...style
4480
+ },
4481
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4482
+ SketchBox,
4483
+ {
4484
+ roughness: sketch.roughness,
4485
+ seed: sketch.resolvedSeed,
4486
+ sketchColor: sketch.ink,
4487
+ bowing: sketch.bowing,
4488
+ fillStyle: sketch.fillStyle ?? "solid",
4489
+ fill: "#f7f6f2",
4490
+ strokeWidth: sketch.strokeWidth ?? 2,
4491
+ animate: sketch.animate,
4492
+ contentStyle: { padding: 20, ...contentStyle },
4493
+ children
4494
+ }
4495
+ )
4496
+ }
4497
+ ) })
4498
+ }
4499
+ )
4500
+ ] }) : null });
4501
+ }
4502
+ );
4503
+ function DialogHeader({ children, className, style }) {
4504
+ return /* @__PURE__ */ jsxRuntime.jsx(
4505
+ "div",
4506
+ {
4507
+ className: cn(className),
4508
+ style: {
4509
+ display: "flex",
4510
+ flexDirection: "column",
4511
+ gap: 6,
4512
+ marginBottom: 12,
4513
+ ...style
4514
+ },
4515
+ children
4516
+ }
4517
+ );
4518
+ }
4519
+ function DialogFooter({ children, className, style }) {
4520
+ return /* @__PURE__ */ jsxRuntime.jsx(
4521
+ "div",
4522
+ {
4523
+ className: cn(className),
4524
+ style: {
4525
+ display: "flex",
4526
+ justifyContent: "flex-end",
4527
+ gap: 8,
4528
+ marginTop: 16,
4529
+ ...style
4530
+ },
4531
+ children
4532
+ }
4533
+ );
4534
+ }
4535
+ var DialogTitle = react.forwardRef(
4536
+ function DialogTitle2({ style, ...rest }, ref) {
4537
+ const sketch = useDialogSketch();
4538
+ return /* @__PURE__ */ jsxRuntime.jsx(
4539
+ Dialog__namespace.Title,
4540
+ {
4541
+ ref,
4542
+ style: {
4543
+ margin: 0,
4544
+ fontSize: 18,
4545
+ fontWeight: doodleUiFontWeight(700),
4546
+ fontFamily: doodleUiFontFamily,
4547
+ color: sketch.ink,
4548
+ ...style
4549
+ },
4550
+ ...rest
4551
+ }
4552
+ );
4553
+ }
4554
+ );
4555
+ var DialogDescription = react.forwardRef(function DialogDescription2({ style, ...rest }, ref) {
4556
+ const sketch = useDialogSketch();
4557
+ return /* @__PURE__ */ jsxRuntime.jsx(
4558
+ Dialog__namespace.Description,
4559
+ {
4560
+ ref,
4561
+ style: {
4562
+ margin: 0,
4563
+ fontSize: 14,
4564
+ lineHeight: 1.5,
4565
+ fontFamily: doodleUiFontFamily,
4566
+ color: sketch.ink,
4567
+ opacity: 0.8,
4568
+ ...style
4569
+ },
4570
+ ...rest
4571
+ }
4572
+ );
4573
+ });
4574
+ var AlertDialogSketchContext = react.createContext(null);
4575
+ function useAlertDialogSketch() {
4576
+ const ctx = react.useContext(AlertDialogSketchContext);
4577
+ if (!ctx) {
4578
+ throw new Error(
4579
+ "AlertDialog parts must be used inside <AlertDialog>."
4580
+ );
4581
+ }
4582
+ return ctx;
4583
+ }
4584
+ function AlertDialog({
4585
+ children,
4586
+ open,
4587
+ defaultOpen,
4588
+ onOpenChange,
4589
+ roughness,
4590
+ seed,
4591
+ sketchColor,
4592
+ bowing,
4593
+ fillStyle,
4594
+ strokeWidth,
4595
+ animate,
4596
+ ...rest
4597
+ }) {
4598
+ const resolvedSeed = useResolvedSeed(seed);
4599
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
4600
+ const [uncontrolled, setUncontrolled] = react.useState(defaultOpen === true);
4601
+ const isOpen = open ?? uncontrolled;
4602
+ return /* @__PURE__ */ jsxRuntime.jsx(
4603
+ AlertDialogSketchContext.Provider,
4604
+ {
4605
+ value: {
4606
+ roughness,
4607
+ seed: resolvedSeed,
4608
+ sketchColor,
4609
+ bowing,
4610
+ fillStyle,
4611
+ strokeWidth,
4612
+ resolvedSeed,
4613
+ ink,
4614
+ animate,
4615
+ open: isOpen
4616
+ },
4617
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4618
+ AlertDialogPrimitive__namespace.Root,
4619
+ {
4620
+ open: isOpen,
4621
+ onOpenChange: (next) => {
4622
+ setUncontrolled(next);
4623
+ onOpenChange?.(next);
4624
+ },
4625
+ ...rest,
4626
+ children
4627
+ }
4628
+ )
4629
+ }
4630
+ );
4631
+ }
4632
+ var AlertDialogTrigger = AlertDialogPrimitive__namespace.Trigger;
4633
+ var AlertDialogPortal = AlertDialogPrimitive__namespace.Portal;
4634
+ var AlertDialogOverlay = react.forwardRef(function AlertDialogOverlay2({ style, ...rest }, ref) {
4635
+ const sketch = useAlertDialogSketch();
4636
+ const shouldAnimate = useAnimate(sketch.animate);
4637
+ return /* @__PURE__ */ jsxRuntime.jsx(AlertDialogPrimitive__namespace.Overlay, { ref, asChild: true, forceMount: true, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(
4638
+ framerMotion.motion.div,
4639
+ {
4640
+ initial: shouldAnimate ? { opacity: 0 } : false,
4641
+ animate: { opacity: 1 },
4642
+ exit: shouldAnimate ? { opacity: 0 } : void 0,
4643
+ transition: shouldAnimate ? { duration: 0.2, ease: "easeOut" } : { duration: 0 },
4644
+ style: {
4645
+ position: "fixed",
4646
+ inset: 0,
4647
+ background: "rgba(31, 29, 26, 0.38)",
4648
+ zIndex: 70,
4649
+ ...style
4650
+ }
4651
+ }
4652
+ ) });
4653
+ });
4654
+ var AlertDialogContent = react.forwardRef(function AlertDialogContent2({ className, style, contentStyle, children, ...rest }, ref) {
4655
+ const sketch = useAlertDialogSketch();
4656
+ const shouldAnimate = useAnimate(sketch.animate);
4657
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: sketch.open ? /* @__PURE__ */ jsxRuntime.jsxs(AlertDialogPrimitive__namespace.Portal, { forceMount: true, children: [
4658
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDialogOverlay, {}),
4659
+ /* @__PURE__ */ jsxRuntime.jsx(
4660
+ "div",
4661
+ {
4662
+ style: {
4663
+ position: "fixed",
4664
+ inset: 0,
4665
+ zIndex: 80,
4666
+ display: "flex",
4667
+ alignItems: "center",
4668
+ justifyContent: "center",
4669
+ pointerEvents: "none",
4670
+ padding: 16
4671
+ },
4672
+ children: /* @__PURE__ */ jsxRuntime.jsx(AlertDialogPrimitive__namespace.Content, { ref, asChild: true, forceMount: true, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(
4673
+ framerMotion.motion.div,
4674
+ {
4675
+ className: cn(className),
4676
+ initial: shouldAnimate ? { opacity: 0, scale: 0.96, y: 10 } : false,
4677
+ animate: { opacity: 1, scale: 1, y: 0 },
4678
+ exit: shouldAnimate ? { opacity: 0, scale: 0.96, y: 8 } : void 0,
4679
+ transition: shouldAnimate ? { duration: 0.22, ease: "easeOut" } : { duration: 0 },
4680
+ style: {
4681
+ width: "min(420px, calc(100vw - 32px))",
4682
+ outline: "none",
4683
+ pointerEvents: "auto",
4684
+ ...style
4685
+ },
4686
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4687
+ SketchBox,
4688
+ {
4689
+ roughness: sketch.roughness,
4690
+ seed: sketch.resolvedSeed,
4691
+ sketchColor: sketch.ink,
4692
+ bowing: sketch.bowing,
4693
+ fillStyle: sketch.fillStyle ?? "solid",
4694
+ fill: "#f7f6f2",
4695
+ strokeWidth: sketch.strokeWidth ?? 2,
4696
+ animate: sketch.animate,
4697
+ contentStyle: { padding: 20, ...contentStyle },
4698
+ children
4699
+ }
4700
+ )
4701
+ }
4702
+ ) })
4703
+ }
4704
+ )
4705
+ ] }) : null });
4706
+ });
4707
+ function AlertDialogHeader({
4708
+ children,
4709
+ className,
4710
+ style
4711
+ }) {
4712
+ return /* @__PURE__ */ jsxRuntime.jsx(
4713
+ "div",
4714
+ {
4715
+ className: cn(className),
4716
+ style: {
4717
+ display: "flex",
4718
+ flexDirection: "column",
4719
+ gap: 6,
4720
+ marginBottom: 12,
4721
+ ...style
4722
+ },
4723
+ children
4724
+ }
4725
+ );
4726
+ }
4727
+ function AlertDialogFooter({
4728
+ children,
4729
+ className,
4730
+ style
4731
+ }) {
4732
+ return /* @__PURE__ */ jsxRuntime.jsx(
4733
+ "div",
4734
+ {
4735
+ className: cn(className),
4736
+ style: {
4737
+ display: "flex",
4738
+ justifyContent: "flex-end",
4739
+ gap: 8,
4740
+ marginTop: 16,
4741
+ ...style
4742
+ },
4743
+ children
4744
+ }
4745
+ );
4746
+ }
4747
+ var AlertDialogTitle = react.forwardRef(function AlertDialogTitle2({ style, ...rest }, ref) {
4748
+ const sketch = useAlertDialogSketch();
4749
+ return /* @__PURE__ */ jsxRuntime.jsx(
4750
+ AlertDialogPrimitive__namespace.Title,
4751
+ {
4752
+ ref,
4753
+ style: {
4754
+ margin: 0,
4755
+ fontSize: 18,
4756
+ fontWeight: doodleUiFontWeight(700),
4757
+ fontFamily: doodleUiFontFamily,
4758
+ color: sketch.ink,
4759
+ ...style
4760
+ },
4761
+ ...rest
4762
+ }
4763
+ );
4764
+ });
4765
+ var AlertDialogDescription = react.forwardRef(function AlertDialogDescription2({ style, ...rest }, ref) {
4766
+ const sketch = useAlertDialogSketch();
4767
+ return /* @__PURE__ */ jsxRuntime.jsx(
4768
+ AlertDialogPrimitive__namespace.Description,
4769
+ {
4770
+ ref,
4771
+ style: {
4772
+ margin: 0,
4773
+ fontSize: 14,
4774
+ lineHeight: 1.5,
4775
+ fontFamily: doodleUiFontFamily,
4776
+ color: sketch.ink,
4777
+ opacity: 0.8,
4778
+ ...style
4779
+ },
4780
+ ...rest
4781
+ }
4782
+ );
4783
+ });
4784
+ var AlertDialogAction = react.forwardRef(function AlertDialogAction2({ children, ...rest }, ref) {
4785
+ const sketch = useAlertDialogSketch();
4786
+ return /* @__PURE__ */ jsxRuntime.jsx(AlertDialogPrimitive__namespace.Action, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4787
+ Button,
4788
+ {
4789
+ ref,
4790
+ variant: "primary",
4791
+ sketchColor: sketch.sketchColor,
4792
+ roughness: sketch.roughness,
4793
+ seed: sketch.resolvedSeed,
4794
+ bowing: sketch.bowing,
4795
+ animate: sketch.animate,
4796
+ ...rest,
4797
+ children
4798
+ }
4799
+ ) });
4800
+ });
4801
+ var AlertDialogCancel = react.forwardRef(function AlertDialogCancel2({ children, ...rest }, ref) {
4802
+ const sketch = useAlertDialogSketch();
4803
+ return /* @__PURE__ */ jsxRuntime.jsx(AlertDialogPrimitive__namespace.Cancel, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4804
+ Button,
4805
+ {
4806
+ ref,
4807
+ variant: "outline",
4808
+ sketchColor: sketch.sketchColor,
4809
+ roughness: sketch.roughness,
4810
+ seed: sketch.resolvedSeed,
4811
+ bowing: sketch.bowing,
4812
+ animate: sketch.animate,
4813
+ ...rest,
4814
+ children
4815
+ }
4816
+ ) });
4817
+ });
4818
+ var CommandSketchContext = react.createContext(
4819
+ null
4820
+ );
4821
+ function useCommandSketch() {
4822
+ const ctx = react.useContext(CommandSketchContext);
4823
+ if (!ctx) {
4824
+ throw new Error("Command parts must be used inside <Command>.");
4825
+ }
4826
+ return ctx;
4827
+ }
4828
+ var Command = react.forwardRef(
4829
+ function Command2({
4830
+ className,
4831
+ style,
4832
+ children,
4833
+ roughness,
4834
+ seed,
4835
+ sketchColor,
4836
+ bowing,
4837
+ fillStyle,
4838
+ strokeWidth,
4839
+ animate,
4840
+ ...rest
4841
+ }, ref) {
4842
+ const resolvedSeed = useResolvedSeed(seed);
4843
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
4844
+ return /* @__PURE__ */ jsxRuntime.jsx(
4845
+ CommandSketchContext.Provider,
4846
+ {
4847
+ value: {
4848
+ roughness,
4849
+ seed: resolvedSeed,
4850
+ sketchColor,
4851
+ bowing,
4852
+ fillStyle,
4853
+ strokeWidth,
4854
+ resolvedSeed,
4855
+ ink,
4856
+ animate
4857
+ },
4858
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4859
+ SketchBox,
4860
+ {
4861
+ className: cn(className),
4862
+ style,
4863
+ roughness,
4864
+ seed: resolvedSeed,
4865
+ sketchColor: ink,
4866
+ bowing,
4867
+ fillStyle: fillStyle ?? "solid",
4868
+ fill: "#f7f6f2",
4869
+ strokeWidth: strokeWidth ?? 1.5,
4870
+ animate,
4871
+ contentStyle: { padding: 0, display: "flex", flexDirection: "column" },
4872
+ children: /* @__PURE__ */ jsxRuntime.jsx(cmdk.Command, { ref, ...rest, children })
4873
+ }
4874
+ )
4875
+ }
4876
+ );
4877
+ }
4878
+ );
4879
+ var CommandInput = react.forwardRef(
4880
+ function CommandInput2({ className, style, ...rest }, ref) {
4881
+ const sketch = useCommandSketch();
4882
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "relative", padding: "10px 12px 12px" }, children: [
4883
+ /* @__PURE__ */ jsxRuntime.jsx(
4884
+ cmdk.CommandInput,
4885
+ {
4886
+ ref,
4887
+ className: cn(className),
4888
+ style: {
4889
+ width: "100%",
4890
+ boxSizing: "border-box",
4891
+ border: "none",
4892
+ outline: "none",
4893
+ background: "transparent",
4894
+ color: sketch.ink,
4895
+ fontFamily: doodleUiFontFamily,
4896
+ fontSize: 15,
4897
+ padding: "2px 2px 8px",
4898
+ ...style
4899
+ },
4900
+ ...rest
4901
+ }
4902
+ ),
4903
+ /* @__PURE__ */ jsxRuntime.jsx(
4904
+ RoughSvg,
4905
+ {
4906
+ shape: "line",
4907
+ roughness: (sketch.roughness ?? 1.5) + 0.2,
4908
+ seed: deriveSeed(sketch.resolvedSeed, "command-divider"),
4909
+ sketchColor: sketch.ink,
4910
+ bowing: sketch.bowing ?? 1.6,
4911
+ strokeWidth: 1.2,
4912
+ inset: 4,
4913
+ style: { position: "absolute", bottom: 0, left: 0, right: 0, height: 8, opacity: 0.4 }
4914
+ }
4915
+ )
4916
+ ] });
4917
+ }
4918
+ );
4919
+ var CommandList = react.forwardRef(
4920
+ function CommandList2({ className, style, ...rest }, ref) {
4921
+ return /* @__PURE__ */ jsxRuntime.jsx(
4922
+ cmdk.CommandList,
4923
+ {
4924
+ ref,
4925
+ className: cn(className),
4926
+ style: {
4927
+ maxHeight: 280,
4928
+ overflowY: "auto",
4929
+ padding: "4px 4px 8px",
4930
+ ...style
4931
+ },
4932
+ ...rest
4933
+ }
4934
+ );
4935
+ }
4936
+ );
4937
+ var CommandEmpty = react.forwardRef(
4938
+ function CommandEmpty2({ className, style, ...rest }, ref) {
4939
+ const sketch = useCommandSketch();
4940
+ return /* @__PURE__ */ jsxRuntime.jsx(
4941
+ cmdk.CommandEmpty,
4942
+ {
4943
+ ref,
4944
+ className: cn(className),
4945
+ style: {
4946
+ padding: "16px 12px",
4947
+ textAlign: "center",
4948
+ fontFamily: doodleUiFontFamily,
4949
+ fontSize: 14,
4950
+ color: sketch.ink,
4951
+ opacity: 0.6,
4952
+ ...style
4953
+ },
4954
+ ...rest
4955
+ }
4956
+ );
4957
+ }
4958
+ );
4959
+ var CommandGroup = react.forwardRef(
4960
+ function CommandGroup2({ className, style, ...rest }, ref) {
4961
+ const sketch = useCommandSketch();
4962
+ return /* @__PURE__ */ jsxRuntime.jsx(
4963
+ cmdk.CommandGroup,
4964
+ {
4965
+ ref,
4966
+ className: cn(className),
4967
+ style: { padding: "4px 2px", color: sketch.ink, ...style },
4968
+ ...rest
4969
+ }
4970
+ );
4971
+ }
4972
+ );
4973
+ var CommandItem = react.forwardRef(
4974
+ function CommandItem2({ className, style, children, onMouseEnter, onMouseLeave, ...rest }, ref) {
4975
+ const sketch = useCommandSketch();
4976
+ const [highlighted, setHighlighted] = react.useState(false);
4977
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4978
+ cmdk.CommandItem,
4979
+ {
4980
+ ref,
4981
+ className: cn(className),
4982
+ onMouseEnter: (event) => {
4983
+ setHighlighted(true);
4984
+ onMouseEnter?.(event);
4985
+ },
4986
+ onMouseLeave: (event) => {
4987
+ setHighlighted(false);
4988
+ onMouseLeave?.(event);
4989
+ },
4990
+ style: {
4991
+ position: "relative",
4992
+ display: "flex",
4993
+ alignItems: "center",
4994
+ gap: 8,
4995
+ padding: "7px 10px",
4996
+ borderRadius: 4,
4997
+ fontFamily: doodleUiFontFamily,
4998
+ fontSize: 14,
4999
+ color: sketch.ink,
5000
+ cursor: "pointer",
5001
+ userSelect: "none",
5002
+ outline: "none",
5003
+ ...style
5004
+ },
5005
+ ...rest,
5006
+ children: [
5007
+ highlighted ? /* @__PURE__ */ jsxRuntime.jsx(
5008
+ RoughSvg,
5009
+ {
5010
+ shape: "line",
5011
+ roughness: (sketch.roughness ?? 1.5) + 0.4,
5012
+ seed: sketch.resolvedSeed,
5013
+ sketchColor: sketch.ink,
5014
+ bowing: sketch.bowing ?? 1.6,
5015
+ strokeWidth: 1.3,
5016
+ inset: 3,
5017
+ style: { opacity: 0.4 }
5018
+ }
5019
+ ) : null,
5020
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1, flex: 1 }, children })
5021
+ ]
5022
+ }
5023
+ );
5024
+ }
5025
+ );
5026
+ var CommandSeparator = react.forwardRef(function CommandSeparator2({ className, style, ...rest }, ref) {
5027
+ const sketch = useCommandSketch();
5028
+ return /* @__PURE__ */ jsxRuntime.jsx(
5029
+ cmdk.CommandSeparator,
5030
+ {
5031
+ ref,
5032
+ className: cn(className),
5033
+ style: { position: "relative", height: 10, margin: "2px 4px", ...style },
5034
+ ...rest,
5035
+ children: /* @__PURE__ */ jsxRuntime.jsx(
5036
+ RoughSvg,
5037
+ {
5038
+ shape: "line",
5039
+ roughness: (sketch.roughness ?? 1.5) + 0.2,
5040
+ seed: deriveSeed(sketch.resolvedSeed, "command-separator"),
5041
+ sketchColor: sketch.ink,
5042
+ bowing: sketch.bowing ?? 1.8,
5043
+ strokeWidth: 1.2,
5044
+ inset: 4,
5045
+ style: { opacity: 0.4 }
5046
+ }
5047
+ )
5048
+ }
5049
+ );
5050
+ });
5051
+ function CommandShortcut({
5052
+ children,
5053
+ className,
5054
+ style
5055
+ }) {
5056
+ const sketch = useCommandSketch();
5057
+ return /* @__PURE__ */ jsxRuntime.jsx(
5058
+ "span",
5059
+ {
5060
+ className: cn(className),
5061
+ style: {
5062
+ marginLeft: "auto",
5063
+ fontFamily: doodleUiFontFamily,
5064
+ fontSize: 12,
5065
+ color: sketch.ink,
5066
+ opacity: 0.5,
5067
+ letterSpacing: 0.4,
5068
+ ...style
5069
+ },
5070
+ children
5071
+ }
5072
+ );
5073
+ }
5074
+ var CHEVRON_PATH5 = "M 4 6 L 10 12 L 16 6";
5075
+ function Combobox({
5076
+ options,
5077
+ placeholder = "Select\u2026",
5078
+ searchPlaceholder = "Search\u2026",
5079
+ emptyMessage = "No results.",
5080
+ value,
5081
+ defaultValue,
5082
+ onValueChange,
5083
+ disabled,
5084
+ className,
5085
+ style,
5086
+ roughness,
5087
+ seed,
5088
+ sketchColor,
5089
+ bowing,
5090
+ fillStyle,
5091
+ strokeWidth,
5092
+ animate,
5093
+ "aria-label": ariaLabel
5094
+ }) {
5095
+ const [open, setOpen] = react.useState(false);
5096
+ const [uncontrolled, setUncontrolled] = react.useState(defaultValue);
5097
+ const selectedValue = value ?? uncontrolled;
5098
+ const selectedOption = options.find(
5099
+ (option) => option.value === selectedValue
5100
+ );
5101
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
5102
+ const resolvedSeed = useResolvedSeed(seed);
5103
+ const shouldAnimate = useAnimate(animate);
5104
+ const triggerRef = react.useRef(null);
5105
+ useDrawIn(triggerRef, DRAW_IN_DURATION_MS, shouldAnimate);
5106
+ function handleSelect(nextValue) {
5107
+ setUncontrolled(nextValue);
5108
+ onValueChange?.(nextValue);
5109
+ setOpen(false);
5110
+ }
5111
+ return /* @__PURE__ */ jsxRuntime.jsxs(PopoverPrimitive__namespace.Root, { open, onOpenChange: setOpen, children: [
5112
+ /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
5113
+ "button",
5114
+ {
5115
+ ref: (node) => assignRef(triggerRef, node),
5116
+ type: "button",
5117
+ role: "combobox",
5118
+ "aria-expanded": open,
5119
+ "aria-label": ariaLabel,
5120
+ disabled,
5121
+ className: cn(className),
5122
+ style: {
5123
+ position: "relative",
5124
+ display: "inline-flex",
5125
+ alignItems: "center",
5126
+ justifyContent: "space-between",
5127
+ gap: 12,
5128
+ width: "100%",
5129
+ minWidth: 200,
5130
+ minHeight: 38,
5131
+ padding: "8px 12px",
5132
+ border: "none",
5133
+ background: "transparent",
5134
+ cursor: disabled ? "not-allowed" : "pointer",
5135
+ opacity: disabled ? 0.5 : 1,
5136
+ color: ink,
5137
+ fontFamily: doodleUiFontFamily,
5138
+ fontSize: 15,
5139
+ lineHeight: 1.2,
5140
+ outline: "none",
5141
+ textAlign: "left",
5142
+ ...style
5143
+ },
5144
+ children: [
5145
+ /* @__PURE__ */ jsxRuntime.jsx(
5146
+ RoughSvg,
5147
+ {
5148
+ shape: "rectangle",
5149
+ roughness,
5150
+ seed: resolvedSeed,
5151
+ sketchColor: open ? SKETCH_COLORS.accent : ink,
5152
+ bowing,
5153
+ fillStyle,
5154
+ strokeWidth: open ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth
5155
+ }
5156
+ ),
5157
+ /* @__PURE__ */ jsxRuntime.jsx(
5158
+ "span",
5159
+ {
5160
+ style: {
5161
+ position: "relative",
5162
+ zIndex: 1,
5163
+ flex: 1,
5164
+ overflow: "hidden",
5165
+ textOverflow: "ellipsis",
5166
+ whiteSpace: "nowrap"
5167
+ },
5168
+ children: selectedOption?.label ?? placeholder
5169
+ }
5170
+ ),
5171
+ /* @__PURE__ */ jsxRuntime.jsx(
5172
+ "span",
5173
+ {
5174
+ style: { position: "relative", zIndex: 1, width: 18, height: 18, flexShrink: 0 },
5175
+ children: /* @__PURE__ */ jsxRuntime.jsx(
5176
+ RoughSvg,
5177
+ {
5178
+ shape: "path",
5179
+ path: CHEVRON_PATH5,
5180
+ roughness: roughness ? roughness * 0.7 : 1.05,
5181
+ seed: resolvedSeed,
5182
+ sketchColor: ink,
5183
+ bowing,
5184
+ strokeWidth: (strokeWidth ?? 1.6) + 0.2,
5185
+ inset: 0
5186
+ }
5187
+ )
5188
+ }
5189
+ )
5190
+ ]
5191
+ }
5192
+ ) }),
5193
+ /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
5194
+ PopoverPrimitive__namespace.Content,
5195
+ {
5196
+ align: "start",
5197
+ sideOffset: 8,
5198
+ style: {
5199
+ zIndex: 80,
5200
+ outline: "none",
5201
+ width: "var(--radix-popover-trigger-width)"
5202
+ },
5203
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
5204
+ Command,
5205
+ {
5206
+ roughness,
5207
+ seed: resolvedSeed,
5208
+ sketchColor: ink,
5209
+ bowing,
5210
+ fillStyle,
5211
+ strokeWidth,
5212
+ animate,
5213
+ children: [
5214
+ /* @__PURE__ */ jsxRuntime.jsx(CommandInput, { placeholder: searchPlaceholder }),
5215
+ /* @__PURE__ */ jsxRuntime.jsxs(CommandList, { children: [
5216
+ /* @__PURE__ */ jsxRuntime.jsx(CommandEmpty, { children: emptyMessage }),
5217
+ /* @__PURE__ */ jsxRuntime.jsx(CommandGroup, { children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
5218
+ CommandItem,
5219
+ {
5220
+ value: option.value,
5221
+ disabled: option.disabled,
5222
+ onSelect: handleSelect,
5223
+ children: option.label
5224
+ },
5225
+ option.value
5226
+ )) })
5227
+ ] })
5228
+ ]
5229
+ }
5230
+ )
5231
+ }
5232
+ ) })
5233
+ ] });
5234
+ }
5235
+ var Kbd = react.forwardRef(function Kbd2({
5236
+ children,
5237
+ className,
5238
+ style,
5239
+ roughness,
5240
+ seed,
5241
+ sketchColor,
5242
+ bowing,
5243
+ fillStyle,
5244
+ strokeWidth,
5245
+ animate,
5246
+ ...rest
5247
+ }, ref) {
5248
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
5249
+ return /* @__PURE__ */ jsxRuntime.jsx(
5250
+ SketchBox,
5251
+ {
5252
+ className: cn(className),
5253
+ style: {
5254
+ display: "inline-flex",
5255
+ verticalAlign: "middle",
5256
+ ...style
5257
+ },
5258
+ contentStyle: {
5259
+ padding: "2px 7px",
5260
+ fontSize: 11,
5261
+ fontFamily: doodleUiFontFamily,
5262
+ lineHeight: 1.35,
5263
+ letterSpacing: "0.04em"
5264
+ },
5265
+ fill: SKETCH_COLORS.secondaryFill,
5266
+ fillStyle: fillStyle ?? "hachure",
5267
+ roughness,
5268
+ seed,
5269
+ sketchColor: ink,
5270
+ bowing,
5271
+ strokeWidth: strokeWidth ?? 1.3,
5272
+ animate,
5273
+ ...rest,
5274
+ children: /* @__PURE__ */ jsxRuntime.jsx(
5275
+ "kbd",
5276
+ {
5277
+ ref,
5278
+ style: {
5279
+ border: "none",
5280
+ background: "transparent",
5281
+ padding: 0,
5282
+ font: "inherit",
5283
+ color: "inherit"
5284
+ },
5285
+ children
5286
+ }
5287
+ )
5288
+ }
5289
+ );
5290
+ });
5291
+ var SPINNER_ARC = "M 12 3 A 9 9 0 1 1 11.5 3";
5292
+ var SIZE_PX = {
5293
+ sm: 18,
5294
+ md: 24,
5295
+ lg: 32
5296
+ };
5297
+ var Spinner = react.forwardRef(
5298
+ function Spinner2({
5299
+ className,
5300
+ style,
5301
+ size = "md",
5302
+ roughness,
5303
+ seed,
5304
+ sketchColor,
5305
+ bowing,
5306
+ fillStyle,
5307
+ strokeWidth,
5308
+ animate,
5309
+ ...rest
5310
+ }, ref) {
5311
+ const px = SIZE_PX[size];
5312
+ const resolvedSeed = useResolvedSeed(seed);
5313
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
5314
+ const shouldSpin = useAnimate(animate);
5315
+ const boxStyle = {
5316
+ position: "relative",
5317
+ width: px,
5318
+ height: px,
5319
+ flexShrink: 0,
5320
+ display: "inline-block",
5321
+ ...style
5322
+ };
5323
+ const arc = /* @__PURE__ */ jsxRuntime.jsx(
5324
+ RoughSvg,
5325
+ {
5326
+ shape: "path",
5327
+ path: SPINNER_ARC,
5328
+ width: px,
5329
+ height: px,
5330
+ roughness: roughness ?? 1.6,
5331
+ seed: resolvedSeed,
5332
+ sketchColor: ink,
5333
+ bowing: bowing ?? 1.2,
5334
+ fillStyle,
5335
+ strokeWidth: strokeWidth ?? 2,
5336
+ inset: 2
5337
+ }
5338
+ );
5339
+ return /* @__PURE__ */ jsxRuntime.jsx(
5340
+ "div",
5341
+ {
5342
+ ref,
5343
+ role: "status",
5344
+ "aria-label": "Loading",
5345
+ className: cn(className),
5346
+ style: boxStyle,
5347
+ ...rest,
5348
+ children: shouldSpin ? /* @__PURE__ */ jsxRuntime.jsx(
5349
+ framerMotion.motion.div,
5350
+ {
5351
+ style: { position: "absolute", inset: 0 },
5352
+ animate: { rotate: 360 },
5353
+ transition: {
5354
+ duration: 0.9,
5355
+ ease: "linear",
5356
+ repeat: Infinity
5357
+ },
5358
+ children: arc
5359
+ }
5360
+ ) : arc
5361
+ }
5362
+ );
5363
+ }
5364
+ );
5365
+ var SIZE_STYLES2 = {
5366
+ sm: { fontSize: 13, padding: "4px 10px", minHeight: 30 },
5367
+ md: { fontSize: 15, padding: "7px 14px", minHeight: 38 },
5368
+ lg: { fontSize: 17, padding: "10px 18px", minHeight: 46 }
5369
+ };
5370
+ var Toggle = react.forwardRef(
5371
+ function Toggle2({
5372
+ className,
5373
+ style,
5374
+ size = "md",
5375
+ roughness,
5376
+ seed,
5377
+ sketchColor,
5378
+ bowing,
5379
+ fillStyle,
5380
+ strokeWidth,
5381
+ pressed,
5382
+ defaultPressed,
5383
+ onPressedChange,
5384
+ disabled,
5385
+ animate,
5386
+ children,
5387
+ ...rest
5388
+ }, ref) {
5389
+ const rootRef = react.useRef(null);
5390
+ const [uncontrolled, setUncontrolled] = react.useState(defaultPressed === true);
5391
+ const isPressed = pressed ?? uncontrolled;
5392
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
5393
+ const resolvedSeed = useResolvedSeed(seed);
5394
+ const shouldAnimate = useAnimate(animate);
5395
+ const pressSeed = deriveSeed(resolvedSeed, isPressed ? "on" : "off");
5396
+ const sketchSeed = shouldAnimate ? pressSeed : resolvedSeed;
5397
+ useDrawIn(rootRef, DRAW_IN_DURATION_MS, shouldAnimate, sketchSeed);
5398
+ return /* @__PURE__ */ jsxRuntime.jsxs(
5399
+ TogglePrimitive__namespace.Root,
5400
+ {
5401
+ ref: (node) => {
5402
+ rootRef.current = node;
5403
+ assignRef(ref, node);
5404
+ },
5405
+ pressed,
5406
+ defaultPressed,
5407
+ onPressedChange: (next) => {
5408
+ setUncontrolled(next);
5409
+ onPressedChange?.(next);
5410
+ },
5411
+ disabled,
5412
+ className: cn(className),
5413
+ style: {
5414
+ position: "relative",
5415
+ display: "inline-flex",
5416
+ alignItems: "center",
5417
+ justifyContent: "center",
5418
+ border: "none",
5419
+ background: "transparent",
5420
+ cursor: disabled ? "not-allowed" : "pointer",
5421
+ color: ink,
5422
+ fontFamily: doodleUiFontFamily,
5423
+ fontWeight: doodleUiFontWeight(600),
5424
+ opacity: disabled ? 0.45 : 1,
5425
+ outline: "none",
5426
+ ...SIZE_STYLES2[size],
5427
+ ...style
5428
+ },
5429
+ ...rest,
5430
+ children: [
5431
+ /* @__PURE__ */ jsxRuntime.jsx(
5432
+ RoughSvg,
5433
+ {
5434
+ shape: "rectangle",
5435
+ roughness,
5436
+ seed: sketchSeed,
5437
+ sketchColor: isPressed ? SKETCH_COLORS.accent : ink,
5438
+ bowing,
5439
+ fillStyle: fillStyle ?? "hachure",
5440
+ fill: isPressed ? SKETCH_COLORS.accentFill : void 0,
5441
+ strokeWidth: strokeWidth ?? 1.6
5442
+ }
5443
+ ),
5444
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
5445
+ ]
5446
+ }
5447
+ );
5448
+ }
5449
+ );
5450
+ var ToggleGroupSketchContext = react.createContext(null);
5451
+ function useToggleGroupSketch() {
5452
+ const ctx = react.useContext(ToggleGroupSketchContext);
5453
+ if (!ctx) {
5454
+ throw new Error("ToggleGroupItem must be used inside <ToggleGroup>.");
5455
+ }
5456
+ return ctx;
5457
+ }
5458
+ function ToggleGroup(props) {
5459
+ const {
5460
+ children,
5461
+ roughness,
5462
+ seed,
5463
+ sketchColor,
5464
+ bowing,
5465
+ fillStyle,
5466
+ strokeWidth,
5467
+ size = "md",
5468
+ animate,
5469
+ type = "single",
5470
+ ...rest
5471
+ } = props;
5472
+ const resolvedSeed = useResolvedSeed(seed);
5473
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
5474
+ const rootStyle = { display: "inline-flex", gap: 6, flexWrap: "wrap" };
5475
+ return /* @__PURE__ */ jsxRuntime.jsx(
5476
+ ToggleGroupSketchContext.Provider,
5477
+ {
5478
+ value: {
5479
+ roughness,
5480
+ seed: resolvedSeed,
5481
+ sketchColor,
5482
+ bowing,
5483
+ fillStyle,
5484
+ strokeWidth,
5485
+ resolvedSeed,
5486
+ ink,
5487
+ animate,
5488
+ size
5489
+ },
5490
+ children: type === "multiple" ? /* @__PURE__ */ jsxRuntime.jsx(
5491
+ ToggleGroupPrimitive__namespace.Root,
5492
+ {
5493
+ type: "multiple",
5494
+ style: rootStyle,
5495
+ ...rest,
5496
+ children
5497
+ }
5498
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
5499
+ ToggleGroupPrimitive__namespace.Root,
5500
+ {
5501
+ type: "single",
5502
+ style: rootStyle,
5503
+ ...rest,
5504
+ children
5505
+ }
5506
+ )
5507
+ }
5508
+ );
5509
+ }
5510
+ var ITEM_SIZE = {
5511
+ sm: { fontSize: 13, padding: "4px 10px", minHeight: 30 },
5512
+ md: { fontSize: 15, padding: "7px 14px", minHeight: 38 },
5513
+ lg: { fontSize: 17, padding: "10px 18px", minHeight: 46 }
5514
+ };
5515
+ var ToggleGroupItem = react.forwardRef(function ToggleGroupItem2({ className, style, children, value, disabled, ...rest }, ref) {
5516
+ const sketch = useToggleGroupSketch();
5517
+ const rootRef = react.useRef(null);
5518
+ const [pressed, setPressed] = react.useState(false);
5519
+ const shouldAnimate = useAnimate(sketch.animate);
5520
+ const pressSeed = deriveSeed(
5521
+ sketch.resolvedSeed,
5522
+ `${value}-${pressed ? "on" : "off"}`
5523
+ );
5524
+ const sketchSeed = shouldAnimate ? pressSeed : sketch.resolvedSeed;
5525
+ react.useLayoutEffect(() => {
5526
+ const el = rootRef.current;
5527
+ if (!el) return;
5528
+ const sync = () => setPressed(el.getAttribute("data-state") === "on");
5529
+ sync();
5530
+ const obs = new MutationObserver(sync);
5531
+ obs.observe(el, { attributes: true, attributeFilter: ["data-state"] });
5532
+ return () => obs.disconnect();
5533
+ }, [value]);
5534
+ useDrawIn(rootRef, DRAW_IN_DURATION_MS, shouldAnimate, sketchSeed);
5535
+ return /* @__PURE__ */ jsxRuntime.jsxs(
5536
+ ToggleGroupPrimitive__namespace.Item,
5537
+ {
5538
+ ref: (node) => {
5539
+ rootRef.current = node;
5540
+ assignRef(ref, node);
5541
+ },
5542
+ value,
5543
+ disabled,
5544
+ className: cn(className),
5545
+ style: {
5546
+ position: "relative",
5547
+ display: "inline-flex",
5548
+ alignItems: "center",
5549
+ justifyContent: "center",
5550
+ border: "none",
5551
+ background: "transparent",
5552
+ cursor: disabled ? "not-allowed" : "pointer",
5553
+ color: sketch.ink,
5554
+ fontFamily: doodleUiFontFamily,
5555
+ fontWeight: doodleUiFontWeight(600),
5556
+ opacity: disabled ? 0.45 : 1,
5557
+ outline: "none",
5558
+ ...ITEM_SIZE[sketch.size],
5559
+ ...style
5560
+ },
5561
+ ...rest,
5562
+ children: [
5563
+ /* @__PURE__ */ jsxRuntime.jsx(
5564
+ RoughSvg,
5565
+ {
5566
+ shape: "rectangle",
5567
+ roughness: sketch.roughness,
5568
+ seed: sketchSeed,
5569
+ sketchColor: pressed ? SKETCH_COLORS.accent : sketch.ink,
5570
+ bowing: sketch.bowing,
5571
+ fillStyle: sketch.fillStyle ?? "hachure",
5572
+ fill: pressed ? SKETCH_COLORS.accentFill : void 0,
5573
+ strokeWidth: sketch.strokeWidth ?? 1.6
5574
+ }
5575
+ ),
5576
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
5577
+ ]
5578
+ }
5579
+ );
5580
+ });
5581
+ var InputGroupSketchContext = react.createContext(null);
5582
+ function useInputGroupSketch() {
5583
+ const ctx = react.useContext(InputGroupSketchContext);
5584
+ if (!ctx) {
5585
+ throw new Error("InputGroup parts must be used inside <InputGroup>.");
5586
+ }
5587
+ return ctx;
5588
+ }
5589
+ function InputGroup({
5590
+ children,
5591
+ className,
5592
+ style,
5593
+ roughness,
5594
+ seed,
5595
+ sketchColor,
5596
+ bowing,
5597
+ fillStyle,
5598
+ strokeWidth,
5599
+ animate,
5600
+ onFocus,
5601
+ onBlur,
5602
+ ...rest
5603
+ }) {
5604
+ const resolvedSeed = useResolvedSeed(seed);
5605
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
5606
+ const [focused, setFocused] = react.useState(false);
5607
+ const shouldAnimate = useAnimate(animate);
5608
+ const focusSeed = deriveSeed(resolvedSeed, "focus");
5609
+ const sketchSeed = shouldAnimate && focused ? focusSeed : resolvedSeed;
5610
+ return /* @__PURE__ */ jsxRuntime.jsx(
5611
+ InputGroupSketchContext.Provider,
5612
+ {
5613
+ value: {
5614
+ roughness,
5615
+ seed: resolvedSeed,
5616
+ sketchColor,
5617
+ bowing,
5618
+ fillStyle,
5619
+ strokeWidth,
5620
+ resolvedSeed,
5621
+ ink,
5622
+ animate,
5623
+ focused,
5624
+ setFocused
5625
+ },
5626
+ children: /* @__PURE__ */ jsxRuntime.jsx(
5627
+ "div",
5628
+ {
5629
+ className: cn(className),
5630
+ style: { position: "relative", width: "100%", ...style },
5631
+ onFocus: (event) => {
5632
+ setFocused(true);
5633
+ onFocus?.(event);
5634
+ },
5635
+ onBlur: (event) => {
5636
+ if (!event.currentTarget.contains(event.relatedTarget)) {
5637
+ setFocused(false);
5638
+ }
5639
+ onBlur?.(event);
5640
+ },
5641
+ ...rest,
5642
+ children: /* @__PURE__ */ jsxRuntime.jsx(
5643
+ SketchBox,
5644
+ {
5645
+ roughness,
5646
+ seed: sketchSeed,
5647
+ sketchColor: focused ? SKETCH_COLORS.accent : ink,
5648
+ bowing,
5649
+ fillStyle,
5650
+ strokeWidth: focused && !shouldAnimate ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth,
5651
+ animate,
5652
+ drawInKey: sketchSeed,
5653
+ contentStyle: {
5654
+ display: "flex",
5655
+ alignItems: "stretch",
5656
+ minHeight: 38
5657
+ },
5658
+ children
5659
+ }
5660
+ )
5661
+ }
5662
+ )
5663
+ }
5664
+ );
5665
+ }
5666
+ var InputGroupAddon = react.forwardRef(
5667
+ function InputGroupAddon2({ className, style, align = "inline-start", children, ...rest }, ref) {
5668
+ const sketch = useInputGroupSketch();
5669
+ return /* @__PURE__ */ jsxRuntime.jsx(
5670
+ "span",
5671
+ {
5672
+ ref,
5673
+ className: cn(className),
5674
+ style: {
5675
+ display: "inline-flex",
5676
+ alignItems: "center",
5677
+ padding: align === "inline-start" ? "0 0 0 10px" : "0 10px 0 0",
5678
+ fontFamily: doodleUiFontFamily,
5679
+ fontSize: 14,
5680
+ color: sketch.ink,
5681
+ flexShrink: 0,
5682
+ ...style
5683
+ },
5684
+ ...rest,
5685
+ children
5686
+ }
5687
+ );
5688
+ }
5689
+ );
5690
+ var InputGroupInput = react.forwardRef(function InputGroupInput2({ className, style, ...rest }, ref) {
5691
+ const sketch = useInputGroupSketch();
5692
+ return /* @__PURE__ */ jsxRuntime.jsx(
5693
+ "input",
5694
+ {
5695
+ ref,
5696
+ className: cn(className),
5697
+ style: {
5698
+ flex: 1,
5699
+ minWidth: 0,
5700
+ border: "none",
5701
+ outline: "none",
5702
+ background: "transparent",
5703
+ color: sketch.ink,
5704
+ fontFamily: doodleUiFontFamily,
5705
+ fontSize: 15,
5706
+ padding: "8px 10px",
5707
+ ...style
5708
+ },
5709
+ ...rest
5710
+ }
5711
+ );
5712
+ });
5713
+ var InputGroupButton = react.forwardRef(function InputGroupButton2({ className, style, children, ...rest }, ref) {
5714
+ return /* @__PURE__ */ jsxRuntime.jsx(
5715
+ "span",
5716
+ {
5717
+ ref,
5718
+ className: cn(className),
5719
+ style: {
5720
+ display: "inline-flex",
5721
+ alignItems: "center",
5722
+ padding: "0 6px 0 0",
5723
+ ...style
5724
+ },
5725
+ ...rest,
5726
+ children
5727
+ }
5728
+ );
5729
+ });
5730
+ var InputOTPSketchContext = react.createContext(
5731
+ null
5732
+ );
5733
+ function useInputOTPSketch() {
5734
+ const ctx = react.useContext(InputOTPSketchContext);
5735
+ if (!ctx) {
5736
+ throw new Error("InputOTP parts must be used inside <InputOTP>.");
5737
+ }
5738
+ return ctx;
5739
+ }
5740
+ var InputOTP = react.forwardRef(
5741
+ function InputOTP2({
5742
+ className,
5743
+ containerClassName,
5744
+ roughness,
5745
+ seed,
5746
+ sketchColor,
5747
+ bowing,
5748
+ fillStyle,
5749
+ strokeWidth,
5750
+ animate,
5751
+ children,
5752
+ ...rest
5753
+ }, ref) {
5754
+ const resolvedSeed = useResolvedSeed(seed);
5755
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
5756
+ return /* @__PURE__ */ jsxRuntime.jsx(
5757
+ InputOTPSketchContext.Provider,
5758
+ {
5759
+ value: {
5760
+ roughness,
5761
+ seed: resolvedSeed,
5762
+ sketchColor,
5763
+ bowing,
5764
+ fillStyle,
5765
+ strokeWidth,
5766
+ resolvedSeed,
5767
+ ink,
5768
+ animate
5769
+ },
5770
+ children: /* @__PURE__ */ jsxRuntime.jsx(
5771
+ inputOtp.OTPInput,
5772
+ {
5773
+ ref,
5774
+ containerClassName: cn(className, containerClassName),
5775
+ ...rest,
5776
+ children
5777
+ }
5778
+ )
5779
+ }
5780
+ );
5781
+ }
5782
+ );
5783
+ var InputOTPGroup = react.forwardRef(
5784
+ function InputOTPGroup2({ className, style, children, ...rest }, ref) {
5785
+ return /* @__PURE__ */ jsxRuntime.jsx(
5786
+ "div",
5787
+ {
5788
+ ref,
5789
+ className: cn(className),
5790
+ style: { display: "flex", alignItems: "center", gap: 8, ...style },
5791
+ ...rest,
5792
+ children
5793
+ }
5794
+ );
5795
+ }
5796
+ );
5797
+ var InputOTPSlot = react.forwardRef(
5798
+ function InputOTPSlot2({ index, className, style, ...rest }, ref) {
5799
+ const inputContext = react.useContext(inputOtp.OTPInputContext);
5800
+ const sketch = useInputOTPSketch();
5801
+ const slotRef = react.useRef(null);
5802
+ const shouldAnimate = useAnimate(sketch.animate);
5803
+ const { char, isActive, hasFakeCaret } = inputContext?.slots[index] ?? {
5804
+ char: null,
5805
+ isActive: false,
5806
+ hasFakeCaret: false
5807
+ };
5808
+ const slotSeed = deriveSeed(
5809
+ sketch.resolvedSeed,
5810
+ `slot-${index}-${isActive ? "active" : "idle"}`
5811
+ );
5812
+ useDrawIn(slotRef, DRAW_IN_DURATION_MS, shouldAnimate, slotSeed);
5813
+ if (!inputContext) {
5814
+ throw new Error("InputOTPSlot must be used inside <InputOTP>.");
5815
+ }
5816
+ return /* @__PURE__ */ jsxRuntime.jsxs(
5817
+ "div",
5818
+ {
5819
+ ref: (node) => {
5820
+ slotRef.current = node;
5821
+ assignRef(ref, node);
5822
+ },
5823
+ className: cn(className),
5824
+ style: {
5825
+ position: "relative",
5826
+ width: 40,
5827
+ height: 44,
5828
+ display: "flex",
5829
+ alignItems: "center",
5830
+ justifyContent: "center",
5831
+ fontFamily: doodleUiFontFamily,
5832
+ fontSize: 18,
5833
+ color: sketch.ink,
5834
+ ...style
5835
+ },
5836
+ ...rest,
5837
+ children: [
5838
+ /* @__PURE__ */ jsxRuntime.jsx(
5839
+ RoughSvg,
5840
+ {
5841
+ shape: "rectangle",
5842
+ roughness: sketch.roughness,
5843
+ seed: slotSeed,
5844
+ sketchColor: isActive ? SKETCH_COLORS.accent : sketch.ink,
5845
+ bowing: sketch.bowing,
5846
+ fillStyle: sketch.fillStyle,
5847
+ strokeWidth: isActive ? (sketch.strokeWidth ?? 1.75) + 0.15 : sketch.strokeWidth
5848
+ }
5849
+ ),
5850
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { position: "relative", zIndex: 1 }, children: [
5851
+ char,
5852
+ hasFakeCaret ? /* @__PURE__ */ jsxRuntime.jsx(
5853
+ framerMotion.motion.span,
5854
+ {
5855
+ "aria-hidden": true,
5856
+ style: {
5857
+ display: "inline-block",
5858
+ width: 2,
5859
+ height: "0.85em",
5860
+ marginLeft: 2,
5861
+ background: sketch.ink,
5862
+ verticalAlign: "middle"
5863
+ },
5864
+ animate: shouldAnimate ? { opacity: [1, 0, 1] } : { opacity: 1 },
5865
+ transition: shouldAnimate ? { duration: 1, repeat: Infinity, ease: "linear" } : void 0
5866
+ }
5867
+ ) : null
5868
+ ] })
5869
+ ]
5870
+ }
5871
+ );
5872
+ }
5873
+ );
5874
+ var InputOTPSeparator = react.forwardRef(function InputOTPSeparator2({ children = "\u2013", className, style, ...rest }, ref) {
5875
+ const sketch = useInputOTPSketch();
5876
+ return /* @__PURE__ */ jsxRuntime.jsx(
5877
+ "span",
5878
+ {
5879
+ ref,
5880
+ role: "separator",
5881
+ className: cn(className),
5882
+ style: {
5883
+ fontFamily: doodleUiFontFamily,
5884
+ color: sketch.ink,
5885
+ opacity: 0.5,
5886
+ userSelect: "none",
5887
+ ...style
5888
+ },
5889
+ ...rest,
5890
+ children
5891
+ }
5892
+ );
5893
+ });
5894
+ var ScrollAreaSketchContext = react.createContext(null);
5895
+ function useScrollAreaSketch() {
5896
+ const ctx = react.useContext(ScrollAreaSketchContext);
5897
+ if (!ctx) {
5898
+ throw new Error("ScrollArea parts must be used inside <ScrollArea>.");
5899
+ }
5900
+ return ctx;
5901
+ }
5902
+ var ScrollArea = react.forwardRef(function ScrollArea2({
5903
+ className,
5904
+ style,
5905
+ children,
5906
+ roughness,
5907
+ seed,
5908
+ sketchColor,
5909
+ bowing,
5910
+ fillStyle,
5911
+ strokeWidth,
5912
+ animate,
5913
+ ...rest
5914
+ }, ref) {
5915
+ const resolvedSeed = useResolvedSeed(seed);
5916
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
5917
+ return /* @__PURE__ */ jsxRuntime.jsx(
5918
+ ScrollAreaSketchContext.Provider,
5919
+ {
5920
+ value: {
5921
+ roughness,
5922
+ seed: resolvedSeed,
5923
+ sketchColor,
5924
+ bowing,
5925
+ fillStyle,
5926
+ strokeWidth,
5927
+ resolvedSeed,
5928
+ ink,
5929
+ animate
5930
+ },
5931
+ children: /* @__PURE__ */ jsxRuntime.jsx(
5932
+ ScrollAreaPrimitive__namespace.Root,
5933
+ {
5934
+ ref,
5935
+ className: cn(className),
5936
+ style: { position: "relative", overflow: "hidden", ...style },
5937
+ ...rest,
5938
+ children: /* @__PURE__ */ jsxRuntime.jsx(
5939
+ SketchBox,
5940
+ {
5941
+ roughness,
5942
+ seed: resolvedSeed,
5943
+ sketchColor: ink,
5944
+ bowing,
5945
+ fillStyle: fillStyle ?? "solid",
5946
+ fill: "#f7f6f2",
5947
+ strokeWidth: strokeWidth ?? 1.5,
5948
+ animate,
5949
+ contentStyle: { padding: 0, height: "100%" },
5950
+ style: { height: "100%" },
5951
+ children
5952
+ }
5953
+ )
5954
+ }
5955
+ )
5956
+ }
5957
+ );
5958
+ });
5959
+ var ScrollAreaViewport = react.forwardRef(function ScrollAreaViewport2({ className, style, children, ...rest }, ref) {
5960
+ return /* @__PURE__ */ jsxRuntime.jsx(
5961
+ ScrollAreaPrimitive__namespace.Viewport,
5962
+ {
5963
+ ref,
5964
+ className: cn(className),
5965
+ style: {
5966
+ width: "100%",
5967
+ height: "100%",
5968
+ borderRadius: 0,
5969
+ ...style
5970
+ },
5971
+ ...rest,
5972
+ children
5973
+ }
5974
+ );
5975
+ });
5976
+ var ScrollBar = react.forwardRef(
5977
+ function ScrollBar2({ className, style, orientation = "vertical", ...rest }, ref) {
5978
+ const sketch = useScrollAreaSketch();
5979
+ return /* @__PURE__ */ jsxRuntime.jsx(
5980
+ ScrollAreaPrimitive__namespace.ScrollAreaScrollbar,
5981
+ {
5982
+ ref,
5983
+ orientation,
5984
+ className: cn(className),
5985
+ style: {
5986
+ display: "flex",
5987
+ touchAction: "none",
5988
+ userSelect: "none",
5989
+ padding: 2,
5990
+ ...orientation === "vertical" ? { width: 12, flexDirection: "column" } : { height: 12, flexDirection: "row" },
5991
+ ...style
5992
+ },
5993
+ ...rest,
5994
+ children: /* @__PURE__ */ jsxRuntime.jsx(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { position: "relative", flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(
5995
+ RoughSvg,
5996
+ {
5997
+ shape: orientation === "vertical" ? "line-vertical" : "line",
5998
+ roughness: (sketch.roughness ?? 1.5) + 0.3,
5999
+ seed: sketch.resolvedSeed,
6000
+ sketchColor: sketch.ink,
6001
+ bowing: sketch.bowing,
6002
+ strokeWidth: sketch.strokeWidth ?? 2.2,
6003
+ inset: 1
6004
+ }
6005
+ ) }) })
6006
+ }
6007
+ );
6008
+ }
6009
+ );
6010
+ var ScrollAreaCorner = ScrollAreaPrimitive__namespace.Corner;
6011
+ function ResizablePanelGroup({
6012
+ className,
6013
+ style,
6014
+ ...rest
6015
+ }) {
6016
+ return /* @__PURE__ */ jsxRuntime.jsx(
6017
+ ResizablePrimitive__namespace.PanelGroup,
6018
+ {
6019
+ className: cn(className),
6020
+ style: { display: "flex", width: "100%", height: "100%", ...style },
6021
+ ...rest
6022
+ }
6023
+ );
6024
+ }
6025
+ var ResizablePanel = ResizablePrimitive__namespace.Panel;
6026
+ function ResizableHandle({
6027
+ className,
6028
+ style,
6029
+ withHandle = true,
6030
+ roughness,
6031
+ seed,
6032
+ sketchColor,
6033
+ bowing,
6034
+ strokeWidth,
6035
+ ...rest
6036
+ }) {
6037
+ const resolvedSeed = useResolvedSeed(seed);
6038
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
6039
+ const handleSeed = deriveSeed(resolvedSeed, "handle");
6040
+ const base = {
6041
+ position: "relative",
6042
+ flexShrink: 0,
6043
+ display: "flex",
6044
+ alignItems: "center",
6045
+ justifyContent: "center",
6046
+ background: "transparent",
6047
+ touchAction: "none",
6048
+ ...style
6049
+ };
6050
+ return /* @__PURE__ */ jsxRuntime.jsx(
6051
+ ResizablePrimitive__namespace.PanelResizeHandle,
6052
+ {
6053
+ className: cn(className),
6054
+ style: base,
6055
+ ...rest,
6056
+ children: withHandle ? /* @__PURE__ */ jsxRuntime.jsxs(
6057
+ "div",
6058
+ {
6059
+ style: {
6060
+ position: "relative",
6061
+ width: 14,
6062
+ height: 28,
6063
+ zIndex: 1
6064
+ },
6065
+ children: [
6066
+ /* @__PURE__ */ jsxRuntime.jsx(
6067
+ RoughSvg,
6068
+ {
6069
+ shape: "line-vertical",
6070
+ roughness: roughness ?? 1.8,
6071
+ seed: handleSeed,
6072
+ sketchColor: ink,
6073
+ bowing: bowing ?? 1.5,
6074
+ strokeWidth: strokeWidth ?? 2.4,
6075
+ width: 14,
6076
+ height: 28,
6077
+ inset: 2
6078
+ }
6079
+ ),
6080
+ /* @__PURE__ */ jsxRuntime.jsx(
6081
+ RoughSvg,
6082
+ {
6083
+ shape: "ellipse",
6084
+ roughness: (roughness ?? 1.5) + 0.2,
6085
+ seed: deriveSeed(handleSeed, "dot-a"),
6086
+ sketchColor: ink,
6087
+ width: 14,
6088
+ height: 28,
6089
+ strokeWidth: 1.2,
6090
+ inset: 5,
6091
+ style: { opacity: 0.55 }
6092
+ }
6093
+ )
6094
+ ]
6095
+ }
6096
+ ) : null
6097
+ }
6098
+ );
6099
+ }
6100
+ var HoverCardSketchContext = react.createContext(
6101
+ null
6102
+ );
6103
+ function useHoverCardSketch() {
6104
+ const ctx = react.useContext(HoverCardSketchContext);
6105
+ if (!ctx) {
6106
+ throw new Error("HoverCard parts must be used inside <HoverCard>.");
6107
+ }
6108
+ return ctx;
6109
+ }
6110
+ function HoverCard({
6111
+ children,
6112
+ roughness,
6113
+ seed,
6114
+ sketchColor,
6115
+ bowing,
6116
+ fillStyle,
6117
+ strokeWidth,
6118
+ animate,
6119
+ ...rest
6120
+ }) {
6121
+ const resolvedSeed = useResolvedSeed(seed);
6122
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
6123
+ return /* @__PURE__ */ jsxRuntime.jsx(
6124
+ HoverCardSketchContext.Provider,
6125
+ {
6126
+ value: {
6127
+ roughness,
6128
+ seed: resolvedSeed,
6129
+ sketchColor,
6130
+ bowing,
6131
+ fillStyle,
6132
+ strokeWidth,
6133
+ resolvedSeed,
6134
+ ink,
6135
+ animate
6136
+ },
6137
+ children: /* @__PURE__ */ jsxRuntime.jsx(HoverCardPrimitive__namespace.Root, { ...rest, children })
6138
+ }
6139
+ );
6140
+ }
6141
+ var HoverCardTrigger = HoverCardPrimitive__namespace.Trigger;
6142
+ var HoverCardContent = react.forwardRef(function HoverCardContent2({ className, style, children, sideOffset = 6, align = "center", ...rest }, ref) {
6143
+ const sketch = useHoverCardSketch();
6144
+ return /* @__PURE__ */ jsxRuntime.jsx(HoverCardPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
6145
+ HoverCardPrimitive__namespace.Content,
6146
+ {
6147
+ ref,
6148
+ sideOffset,
6149
+ align,
6150
+ className: cn(className),
6151
+ style: { zIndex: 75, outline: "none", ...style },
6152
+ ...rest,
6153
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6154
+ SketchBox,
6155
+ {
6156
+ roughness: sketch.roughness,
6157
+ seed: sketch.resolvedSeed,
6158
+ sketchColor: sketch.ink,
6159
+ bowing: sketch.bowing,
6160
+ fillStyle: sketch.fillStyle ?? "solid",
6161
+ fill: "#f7f6f2",
6162
+ strokeWidth: sketch.strokeWidth ?? 1.5,
6163
+ shadow: true,
6164
+ animate: sketch.animate,
6165
+ contentStyle: { padding: 14, maxWidth: 320, fontSize: 14 },
6166
+ children
6167
+ }
6168
+ )
6169
+ }
6170
+ ) });
6171
+ });
6172
+ var HoverCardArrow = HoverCardPrimitive__namespace.Arrow;
6173
+ var ContextMenuSketchContext = react.createContext(null);
6174
+ function useContextMenuSketch() {
6175
+ const ctx = react.useContext(ContextMenuSketchContext);
6176
+ if (!ctx) {
6177
+ throw new Error(
6178
+ "ContextMenu parts must be used inside <ContextMenu>."
6179
+ );
6180
+ }
6181
+ return ctx;
6182
+ }
6183
+ function ContextMenu({
6184
+ children,
6185
+ roughness,
6186
+ seed,
6187
+ sketchColor,
6188
+ bowing,
6189
+ fillStyle,
6190
+ strokeWidth,
6191
+ animate,
6192
+ ...rest
6193
+ }) {
6194
+ const resolvedSeed = useResolvedSeed(seed);
6195
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
6196
+ return /* @__PURE__ */ jsxRuntime.jsx(
6197
+ ContextMenuSketchContext.Provider,
6198
+ {
6199
+ value: {
6200
+ roughness,
6201
+ seed: resolvedSeed,
6202
+ sketchColor,
6203
+ bowing,
6204
+ fillStyle,
6205
+ strokeWidth,
6206
+ resolvedSeed,
6207
+ ink,
6208
+ animate
6209
+ },
6210
+ children: /* @__PURE__ */ jsxRuntime.jsx(ContextMenuPrimitive__namespace.Root, { ...rest, children })
6211
+ }
6212
+ );
6213
+ }
6214
+ var ContextMenuTrigger = ContextMenuPrimitive__namespace.Trigger;
6215
+ var ContextMenuGroup = ContextMenuPrimitive__namespace.Group;
6216
+ var ContextMenuRadioGroup = ContextMenuPrimitive__namespace.RadioGroup;
6217
+ var ContextMenuSub = ContextMenuPrimitive__namespace.Sub;
6218
+ var ContextMenuContent = react.forwardRef(function ContextMenuContent2({ className, style, children, ...rest }, ref) {
6219
+ const sketch = useContextMenuSketch();
6220
+ return /* @__PURE__ */ jsxRuntime.jsx(ContextMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
6221
+ ContextMenuPrimitive__namespace.Content,
6222
+ {
6223
+ ref,
6224
+ className: cn(className),
6225
+ style: { zIndex: 80, outline: "none", minWidth: 180, ...style },
6226
+ ...rest,
6227
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6228
+ SketchBox,
6229
+ {
6230
+ roughness: sketch.roughness,
6231
+ seed: sketch.resolvedSeed,
6232
+ sketchColor: sketch.ink,
6233
+ bowing: sketch.bowing,
6234
+ fillStyle: sketch.fillStyle ?? "solid",
6235
+ fill: "#f7f6f2",
6236
+ strokeWidth: sketch.strokeWidth ?? 1.5,
6237
+ shadow: true,
6238
+ animate: sketch.animate,
6239
+ contentStyle: { padding: "6px 4px" },
6240
+ children
6241
+ }
6242
+ )
6243
+ }
6244
+ ) });
6245
+ });
6246
+ function useMark2(highlighted) {
6247
+ const sketch = useContextMenuSketch();
6248
+ return { sketch, mark: highlighted };
6249
+ }
6250
+ var ContextMenuItem = react.forwardRef(function ContextMenuItem2({ className, style, children, inset, ...rest }, ref) {
6251
+ const [highlighted, setHighlighted] = react.useState(false);
6252
+ const { sketch, mark } = useMark2(highlighted);
6253
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6254
+ ContextMenuPrimitive__namespace.Item,
6255
+ {
6256
+ ref,
6257
+ className: cn(className),
6258
+ onPointerMove: () => setHighlighted(true),
6259
+ onPointerLeave: () => setHighlighted(false),
6260
+ onFocus: () => setHighlighted(true),
6261
+ onBlur: () => setHighlighted(false),
6262
+ style: {
6263
+ position: "relative",
6264
+ display: "flex",
6265
+ alignItems: "center",
6266
+ gap: 8,
6267
+ padding: inset ? "7px 12px 7px 26px" : "7px 12px",
6268
+ fontFamily: doodleUiFontFamily,
6269
+ fontSize: 14,
6270
+ color: sketch.ink,
6271
+ outline: "none",
6272
+ cursor: "pointer",
6273
+ userSelect: "none",
6274
+ ...style
6275
+ },
6276
+ ...rest,
6277
+ children: [
6278
+ mark ? /* @__PURE__ */ jsxRuntime.jsx(
6279
+ RoughSvg,
6280
+ {
6281
+ shape: "line",
6282
+ roughness: (sketch.roughness ?? 1.5) + 0.4,
6283
+ seed: sketch.resolvedSeed,
6284
+ sketchColor: sketch.ink,
6285
+ bowing: sketch.bowing ?? 1.6,
6286
+ strokeWidth: 1.3,
6287
+ inset: 4,
6288
+ style: { opacity: 0.4 }
6289
+ }
6290
+ ) : null,
6291
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
6292
+ ]
6293
+ }
6294
+ );
6295
+ });
6296
+ var CHECK_PATH3 = "M 2 6 L 5 9 L 10 3";
6297
+ var ContextMenuCheckboxItem = react.forwardRef(function ContextMenuCheckboxItem2({ className, style, children, checked, ...rest }, ref) {
6298
+ const [highlighted, setHighlighted] = react.useState(false);
6299
+ const { sketch, mark } = useMark2(highlighted);
6300
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6301
+ ContextMenuPrimitive__namespace.CheckboxItem,
6302
+ {
6303
+ ref,
6304
+ checked,
6305
+ className: cn(className),
6306
+ onPointerMove: () => setHighlighted(true),
6307
+ onPointerLeave: () => setHighlighted(false),
6308
+ style: {
6309
+ position: "relative",
6310
+ display: "flex",
6311
+ alignItems: "center",
6312
+ gap: 8,
6313
+ padding: "7px 12px 7px 26px",
6314
+ fontFamily: doodleUiFontFamily,
6315
+ fontSize: 14,
6316
+ color: sketch.ink,
6317
+ outline: "none",
6318
+ cursor: "pointer",
6319
+ userSelect: "none",
6320
+ ...style
6321
+ },
6322
+ ...rest,
6323
+ children: [
6324
+ mark ? /* @__PURE__ */ jsxRuntime.jsx(
6325
+ RoughSvg,
6326
+ {
6327
+ shape: "line",
6328
+ roughness: (sketch.roughness ?? 1.5) + 0.4,
6329
+ seed: sketch.resolvedSeed,
6330
+ sketchColor: sketch.ink,
6331
+ bowing: sketch.bowing ?? 1.6,
6332
+ strokeWidth: 1.3,
6333
+ inset: 4,
6334
+ style: { opacity: 0.4 }
6335
+ }
6336
+ ) : null,
6337
+ /* @__PURE__ */ jsxRuntime.jsx(
6338
+ "span",
6339
+ {
6340
+ style: {
6341
+ position: "relative",
6342
+ width: 12,
6343
+ height: 12,
6344
+ flexShrink: 0,
6345
+ marginLeft: -18
6346
+ },
6347
+ children: /* @__PURE__ */ jsxRuntime.jsx(ContextMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(
6348
+ RoughSvg,
6349
+ {
6350
+ shape: "path",
6351
+ path: CHECK_PATH3,
6352
+ roughness: (sketch.roughness ?? 1.5) * 0.7,
6353
+ seed: deriveSeed(sketch.resolvedSeed, "checkbox-mark"),
6354
+ sketchColor: SKETCH_COLORS.accent,
6355
+ bowing: sketch.bowing,
6356
+ strokeWidth: 1.6,
6357
+ inset: 0
6358
+ }
6359
+ ) })
6360
+ }
6361
+ ),
6362
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
6363
+ ]
6364
+ }
6365
+ );
6366
+ });
6367
+ var ContextMenuRadioItem = react.forwardRef(function ContextMenuRadioItem2({ className, style, children, ...rest }, ref) {
6368
+ const [highlighted, setHighlighted] = react.useState(false);
6369
+ const { sketch, mark } = useMark2(highlighted);
6370
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6371
+ ContextMenuPrimitive__namespace.RadioItem,
6372
+ {
6373
+ ref,
6374
+ className: cn(className),
6375
+ onPointerMove: () => setHighlighted(true),
6376
+ onPointerLeave: () => setHighlighted(false),
6377
+ style: {
6378
+ position: "relative",
6379
+ display: "flex",
6380
+ alignItems: "center",
6381
+ gap: 8,
6382
+ padding: "7px 12px 7px 26px",
6383
+ fontFamily: doodleUiFontFamily,
6384
+ fontSize: 14,
6385
+ color: sketch.ink,
6386
+ outline: "none",
6387
+ cursor: "pointer",
6388
+ userSelect: "none",
6389
+ ...style
6390
+ },
6391
+ ...rest,
6392
+ children: [
6393
+ mark ? /* @__PURE__ */ jsxRuntime.jsx(
6394
+ RoughSvg,
6395
+ {
6396
+ shape: "line",
6397
+ roughness: (sketch.roughness ?? 1.5) + 0.4,
6398
+ seed: sketch.resolvedSeed,
6399
+ sketchColor: sketch.ink,
6400
+ bowing: sketch.bowing ?? 1.6,
6401
+ strokeWidth: 1.3,
6402
+ inset: 4,
6403
+ style: { opacity: 0.4 }
6404
+ }
6405
+ ) : null,
6406
+ /* @__PURE__ */ jsxRuntime.jsx(
6407
+ "span",
6408
+ {
6409
+ style: {
6410
+ position: "relative",
6411
+ width: 8,
6412
+ height: 8,
6413
+ flexShrink: 0,
6414
+ marginLeft: -18
6415
+ },
6416
+ children: /* @__PURE__ */ jsxRuntime.jsx(ContextMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(
6417
+ RoughSvg,
6418
+ {
6419
+ shape: "ellipse",
6420
+ roughness: (sketch.roughness ?? 1.5) * 0.8,
6421
+ seed: deriveSeed(sketch.resolvedSeed, "radio-mark"),
6422
+ sketchColor: SKETCH_COLORS.accent,
6423
+ bowing: sketch.bowing,
6424
+ fillStyle: "solid",
6425
+ fill: SKETCH_COLORS.accent,
6426
+ strokeWidth: 1.2,
6427
+ inset: 0
6428
+ }
6429
+ ) })
6430
+ }
6431
+ ),
6432
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
6433
+ ]
6434
+ }
6435
+ );
6436
+ });
6437
+ var ContextMenuLabel = react.forwardRef(function ContextMenuLabel2({ className, style, children, ...rest }, ref) {
6438
+ const sketch = useContextMenuSketch();
6439
+ return /* @__PURE__ */ jsxRuntime.jsx(
6440
+ ContextMenuPrimitive__namespace.Label,
6441
+ {
6442
+ ref,
6443
+ className: cn(className),
6444
+ style: {
6445
+ padding: "6px 12px",
6446
+ fontFamily: doodleUiFontFamily,
6447
+ fontSize: 12,
6448
+ fontWeight: 700,
6449
+ color: sketch.ink,
6450
+ opacity: 0.6,
6451
+ textTransform: "uppercase",
6452
+ letterSpacing: 0.4,
6453
+ ...style
6454
+ },
6455
+ ...rest,
6456
+ children
6457
+ }
6458
+ );
6459
+ });
6460
+ var ContextMenuSeparator = react.forwardRef(function ContextMenuSeparator2({ className, style, ...rest }, ref) {
6461
+ const sketch = useContextMenuSketch();
6462
+ return /* @__PURE__ */ jsxRuntime.jsx(
6463
+ ContextMenuPrimitive__namespace.Separator,
6464
+ {
6465
+ ref,
6466
+ className: cn(className),
6467
+ style: { position: "relative", height: 10, margin: "2px 0", ...style },
6468
+ ...rest,
6469
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6470
+ RoughSvg,
6471
+ {
6472
+ shape: "line",
6473
+ roughness: (sketch.roughness ?? 1.5) + 0.2,
6474
+ seed: deriveSeed(sketch.resolvedSeed, "separator"),
6475
+ sketchColor: sketch.ink,
6476
+ bowing: sketch.bowing ?? 1.8,
6477
+ strokeWidth: 1.2,
6478
+ inset: 6,
6479
+ style: { opacity: 0.5 }
6480
+ }
6481
+ )
6482
+ }
6483
+ );
6484
+ });
6485
+ var NavigationMenuSketchContext = react.createContext(null);
6486
+ function useNavigationMenuSketch() {
6487
+ const ctx = react.useContext(NavigationMenuSketchContext);
6488
+ if (!ctx) {
6489
+ throw new Error("NavigationMenu parts must be used inside <NavigationMenu>.");
6490
+ }
6491
+ return ctx;
6492
+ }
6493
+ function NavigationMenu({
6494
+ children,
6495
+ roughness,
6496
+ seed,
6497
+ sketchColor,
6498
+ bowing,
6499
+ fillStyle,
6500
+ strokeWidth,
6501
+ animate,
6502
+ ...rest
6503
+ }) {
6504
+ const resolvedSeed = useResolvedSeed(seed);
6505
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
6506
+ return /* @__PURE__ */ jsxRuntime.jsx(
6507
+ NavigationMenuSketchContext.Provider,
6508
+ {
6509
+ value: {
6510
+ roughness,
6511
+ seed: resolvedSeed,
6512
+ sketchColor,
6513
+ bowing,
6514
+ fillStyle,
6515
+ strokeWidth,
6516
+ resolvedSeed,
6517
+ ink,
6518
+ animate
6519
+ },
6520
+ children: /* @__PURE__ */ jsxRuntime.jsxs(NavigationMenuPrimitive__namespace.Root, { ...rest, children: [
6521
+ children,
6522
+ /* @__PURE__ */ jsxRuntime.jsx(NavigationMenuViewport, {})
6523
+ ] })
6524
+ }
6525
+ );
6526
+ }
6527
+ var NavigationMenuList = react.forwardRef(function NavigationMenuList2({ className, style, ...rest }, ref) {
6528
+ return /* @__PURE__ */ jsxRuntime.jsx(
6529
+ NavigationMenuPrimitive__namespace.List,
6530
+ {
6531
+ ref,
6532
+ className: cn(className),
6533
+ style: {
6534
+ display: "flex",
6535
+ alignItems: "center",
6536
+ gap: 4,
6537
+ listStyle: "none",
6538
+ margin: 0,
6539
+ padding: 0,
6540
+ ...style
6541
+ },
6542
+ ...rest
6543
+ }
6544
+ );
6545
+ });
6546
+ var NavigationMenuItem = NavigationMenuPrimitive__namespace.Item;
6547
+ var NavigationMenuTrigger = react.forwardRef(function NavigationMenuTrigger2({ className, style, children, ...rest }, ref) {
6548
+ const sketch = useNavigationMenuSketch();
6549
+ return /* @__PURE__ */ jsxRuntime.jsx(
6550
+ NavigationMenuPrimitive__namespace.Trigger,
6551
+ {
6552
+ ref,
6553
+ className: cn(className),
6554
+ style: {
6555
+ position: "relative",
6556
+ border: "none",
6557
+ background: "transparent",
6558
+ fontFamily: doodleUiFontFamily,
6559
+ fontWeight: doodleUiFontWeight(600),
6560
+ fontSize: 14,
6561
+ color: sketch.ink,
6562
+ padding: "8px 12px",
6563
+ cursor: "pointer",
6564
+ outline: "none",
6565
+ ...style
6566
+ },
6567
+ ...rest,
6568
+ children
6569
+ }
6570
+ );
6571
+ });
6572
+ var NavigationMenuContent = react.forwardRef(function NavigationMenuContent2({ className, style, children, ...rest }, ref) {
6573
+ const sketch = useNavigationMenuSketch();
6574
+ return /* @__PURE__ */ jsxRuntime.jsx(
6575
+ NavigationMenuPrimitive__namespace.Content,
6576
+ {
6577
+ ref,
6578
+ className: cn(className),
6579
+ style: { outline: "none", ...style },
6580
+ ...rest,
6581
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6582
+ SketchBox,
6583
+ {
6584
+ roughness: sketch.roughness,
6585
+ seed: sketch.resolvedSeed,
6586
+ sketchColor: sketch.ink,
6587
+ bowing: sketch.bowing,
6588
+ fillStyle: sketch.fillStyle ?? "solid",
6589
+ fill: "#f7f6f2",
6590
+ strokeWidth: sketch.strokeWidth ?? 1.5,
6591
+ shadow: true,
6592
+ animate: sketch.animate,
6593
+ contentStyle: { padding: 12, minWidth: 200 },
6594
+ children
6595
+ }
6596
+ )
6597
+ }
6598
+ );
6599
+ });
6600
+ var NavigationMenuLink = NavigationMenuPrimitive__namespace.Link;
6601
+ var NavigationMenuViewport = react.forwardRef(function NavigationMenuViewport2({ className, style, ...rest }, ref) {
6602
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { position: "absolute", top: "100%", left: 0, perspective: 2e3 }, children: /* @__PURE__ */ jsxRuntime.jsx(
6603
+ NavigationMenuPrimitive__namespace.Viewport,
6604
+ {
6605
+ ref,
6606
+ className: cn(className),
6607
+ style: {
6608
+ position: "relative",
6609
+ marginTop: 6,
6610
+ overflow: "hidden",
6611
+ ...style
6612
+ },
6613
+ ...rest
6614
+ }
6615
+ ) });
6616
+ });
6617
+ var NavigationMenuIndicator = react.forwardRef(function NavigationMenuIndicator2({ className, style, ...rest }, ref) {
6618
+ const sketch = useNavigationMenuSketch();
6619
+ return /* @__PURE__ */ jsxRuntime.jsx(
6620
+ NavigationMenuPrimitive__namespace.Indicator,
6621
+ {
6622
+ ref,
6623
+ className: cn(className),
6624
+ style: { position: "relative", height: 6, ...style },
6625
+ ...rest,
6626
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6627
+ RoughSvg,
6628
+ {
6629
+ shape: "line",
6630
+ roughness: (sketch.roughness ?? 1.5) + 0.2,
6631
+ seed: deriveSeed(sketch.resolvedSeed, "nav-indicator"),
6632
+ sketchColor: sketch.ink,
6633
+ strokeWidth: 2,
6634
+ inset: 2
6635
+ }
6636
+ )
6637
+ }
6638
+ );
6639
+ });
6640
+ var NavigationMenuItemLink = react.forwardRef(function NavigationMenuItemLink2({ className, style, active, children, ...rest }, ref) {
6641
+ const sketch = useNavigationMenuSketch();
6642
+ const [hovered, setHovered] = react.useState(false);
6643
+ const showMark = active || hovered;
6644
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6645
+ NavigationMenuPrimitive__namespace.Link,
6646
+ {
6647
+ ref,
6648
+ className: cn(className),
6649
+ onPointerEnter: () => setHovered(true),
6650
+ onPointerLeave: () => setHovered(false),
6651
+ style: {
6652
+ position: "relative",
6653
+ display: "inline-flex",
6654
+ padding: "8px 12px",
6655
+ fontFamily: doodleUiFontFamily,
6656
+ fontSize: 14,
6657
+ color: sketch.ink,
6658
+ textDecoration: "none",
6659
+ outline: "none",
6660
+ ...style
6661
+ },
6662
+ ...rest,
6663
+ children: [
6664
+ showMark ? /* @__PURE__ */ jsxRuntime.jsx(
6665
+ RoughSvg,
6666
+ {
6667
+ shape: "line",
6668
+ roughness: (sketch.roughness ?? 1.5) + 0.3,
6669
+ seed: deriveSeed(sketch.resolvedSeed, "nav-link"),
6670
+ sketchColor: sketch.ink,
6671
+ strokeWidth: 1.4,
6672
+ inset: 4,
6673
+ style: { opacity: 0.35 }
6674
+ }
6675
+ ) : null,
6676
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
6677
+ ]
6678
+ }
6679
+ );
6680
+ });
6681
+ var MenubarSketchContext = react.createContext(
6682
+ null
6683
+ );
6684
+ function useMenubarSketch() {
6685
+ const ctx = react.useContext(MenubarSketchContext);
6686
+ if (!ctx) {
6687
+ throw new Error("Menubar parts must be used inside <Menubar>.");
6688
+ }
6689
+ return ctx;
6690
+ }
6691
+ function Menubar({
6692
+ children,
6693
+ className,
6694
+ style,
6695
+ roughness,
6696
+ seed,
6697
+ sketchColor,
6698
+ bowing,
6699
+ fillStyle,
6700
+ strokeWidth,
6701
+ animate,
6702
+ ...rest
6703
+ }) {
6704
+ const resolvedSeed = useResolvedSeed(seed);
6705
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
6706
+ return /* @__PURE__ */ jsxRuntime.jsx(
6707
+ MenubarSketchContext.Provider,
6708
+ {
6709
+ value: {
6710
+ roughness,
6711
+ seed: resolvedSeed,
6712
+ sketchColor,
6713
+ bowing,
6714
+ fillStyle,
6715
+ strokeWidth,
6716
+ resolvedSeed,
6717
+ ink,
6718
+ animate
6719
+ },
6720
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6721
+ MenubarPrimitive__namespace.Root,
6722
+ {
6723
+ className: cn(className),
6724
+ style: {
6725
+ display: "inline-flex",
6726
+ alignItems: "center",
6727
+ gap: 4,
6728
+ padding: 4,
6729
+ ...style
6730
+ },
6731
+ ...rest,
6732
+ children
6733
+ }
6734
+ )
6735
+ }
6736
+ );
6737
+ }
6738
+ var MenubarMenu = MenubarPrimitive__namespace.Menu;
6739
+ var MenubarTrigger = react.forwardRef(function MenubarTrigger2({ className, style, children, ...rest }, ref) {
6740
+ const sketch = useMenubarSketch();
6741
+ return /* @__PURE__ */ jsxRuntime.jsx(
6742
+ MenubarPrimitive__namespace.Trigger,
6743
+ {
6744
+ ref,
6745
+ className: cn(className),
6746
+ style: {
6747
+ border: "none",
6748
+ background: "transparent",
6749
+ fontFamily: doodleUiFontFamily,
6750
+ fontSize: 14,
6751
+ padding: "6px 10px",
6752
+ cursor: "pointer",
6753
+ color: sketch.ink,
6754
+ outline: "none",
6755
+ ...style
6756
+ },
6757
+ ...rest,
6758
+ children
6759
+ }
6760
+ );
6761
+ });
6762
+ var MenubarContent = react.forwardRef(function MenubarContent2({ className, style, children, align = "start", sideOffset = 6, ...rest }, ref) {
6763
+ const sketch = useMenubarSketch();
6764
+ return /* @__PURE__ */ jsxRuntime.jsx(MenubarPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
6765
+ MenubarPrimitive__namespace.Content,
6766
+ {
6767
+ ref,
6768
+ align,
6769
+ sideOffset,
6770
+ className: cn(className),
6771
+ style: { zIndex: 80, outline: "none", minWidth: 180, ...style },
6772
+ ...rest,
6773
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6774
+ SketchBox,
6775
+ {
6776
+ roughness: sketch.roughness,
6777
+ seed: sketch.resolvedSeed,
6778
+ sketchColor: sketch.ink,
6779
+ bowing: sketch.bowing,
6780
+ fillStyle: sketch.fillStyle ?? "solid",
6781
+ fill: "#f7f6f2",
6782
+ strokeWidth: sketch.strokeWidth ?? 1.5,
6783
+ shadow: true,
6784
+ animate: sketch.animate,
6785
+ contentStyle: { padding: "6px 4px" },
6786
+ children
6787
+ }
6788
+ )
6789
+ }
6790
+ ) });
6791
+ });
6792
+ function useMark3(highlighted) {
6793
+ const sketch = useMenubarSketch();
6794
+ return { sketch, mark: highlighted };
6795
+ }
6796
+ var MenubarItem = react.forwardRef(function MenubarItem2({ className, style, children, ...rest }, ref) {
6797
+ const [highlighted, setHighlighted] = react.useState(false);
6798
+ const { sketch, mark } = useMark3(highlighted);
6799
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6800
+ MenubarPrimitive__namespace.Item,
6801
+ {
6802
+ ref,
6803
+ className: cn(className),
6804
+ onPointerMove: () => setHighlighted(true),
6805
+ onPointerLeave: () => setHighlighted(false),
6806
+ style: {
6807
+ position: "relative",
6808
+ display: "flex",
6809
+ alignItems: "center",
6810
+ gap: 8,
6811
+ padding: "7px 12px",
6812
+ fontFamily: doodleUiFontFamily,
6813
+ fontSize: 14,
6814
+ color: sketch.ink,
6815
+ outline: "none",
6816
+ cursor: "pointer",
6817
+ userSelect: "none",
6818
+ ...style
6819
+ },
6820
+ ...rest,
6821
+ children: [
6822
+ mark ? /* @__PURE__ */ jsxRuntime.jsx(
6823
+ RoughSvg,
6824
+ {
6825
+ shape: "line",
6826
+ roughness: (sketch.roughness ?? 1.5) + 0.4,
6827
+ seed: sketch.resolvedSeed,
6828
+ sketchColor: sketch.ink,
6829
+ bowing: sketch.bowing ?? 1.6,
6830
+ strokeWidth: 1.3,
6831
+ inset: 4,
6832
+ style: { opacity: 0.4 }
6833
+ }
6834
+ ) : null,
6835
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { position: "relative", zIndex: 1 }, children })
6836
+ ]
6837
+ }
6838
+ );
6839
+ });
6840
+ var MenubarSeparator = react.forwardRef(function MenubarSeparator2({ className, style, ...rest }, ref) {
6841
+ const sketch = useMenubarSketch();
6842
+ return /* @__PURE__ */ jsxRuntime.jsx(
6843
+ MenubarPrimitive__namespace.Separator,
6844
+ {
6845
+ ref,
6846
+ className: cn(className),
6847
+ style: { position: "relative", height: 10, margin: "2px 0", ...style },
6848
+ ...rest,
6849
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6850
+ RoughSvg,
6851
+ {
6852
+ shape: "line",
6853
+ roughness: (sketch.roughness ?? 1.5) + 0.2,
6854
+ seed: deriveSeed(sketch.resolvedSeed, "separator"),
6855
+ sketchColor: sketch.ink,
6856
+ bowing: sketch.bowing ?? 1.8,
6857
+ strokeWidth: 1.2,
6858
+ inset: 6,
6859
+ style: { opacity: 0.5 }
6860
+ }
6861
+ )
6862
+ }
6863
+ );
6864
+ });
6865
+ var MenubarLabel = react.forwardRef(function MenubarLabel2({ className, style, children, ...rest }, ref) {
6866
+ const sketch = useMenubarSketch();
6867
+ return /* @__PURE__ */ jsxRuntime.jsx(
6868
+ MenubarPrimitive__namespace.Label,
6869
+ {
6870
+ ref,
6871
+ className: cn(className),
6872
+ style: {
6873
+ padding: "6px 12px",
6874
+ fontFamily: doodleUiFontFamily,
6875
+ fontSize: 12,
6876
+ fontWeight: 700,
6877
+ color: sketch.ink,
6878
+ opacity: 0.6,
6879
+ ...style
6880
+ },
6881
+ ...rest,
6882
+ children
6883
+ }
6884
+ );
6885
+ });
6886
+ var MenubarShortcut = react.forwardRef(function MenubarShortcut2({ className, style, children, ...rest }, ref) {
6887
+ return /* @__PURE__ */ jsxRuntime.jsx(
6888
+ "span",
6889
+ {
6890
+ ref,
6891
+ className: cn(className),
6892
+ style: {
6893
+ marginLeft: "auto",
6894
+ fontSize: 12,
6895
+ opacity: 0.55,
6896
+ letterSpacing: 0.04,
6897
+ ...style
6898
+ },
6899
+ ...rest,
6900
+ children
6901
+ }
6902
+ );
6903
+ });
6904
+ var MenubarSub = MenubarPrimitive__namespace.Sub;
6905
+ var MenubarSubTrigger = MenubarPrimitive__namespace.SubTrigger;
6906
+ var MenubarSubContent = MenubarPrimitive__namespace.SubContent;
6907
+ var MenubarCheckboxItem = MenubarPrimitive__namespace.CheckboxItem;
6908
+ var MenubarRadioGroup = MenubarPrimitive__namespace.RadioGroup;
6909
+ var MenubarRadioItem = MenubarPrimitive__namespace.RadioItem;
6910
+ var SlidingPanelSketchContext = react.createContext(null);
6911
+ function useSlidingPanelSketch() {
6912
+ const ctx = react.useContext(SlidingPanelSketchContext);
6913
+ if (!ctx) {
6914
+ throw new Error("Sliding panel parts must be used inside the panel root.");
6915
+ }
6916
+ return ctx;
6917
+ }
6918
+ function SlidingPanelRoot({
6919
+ children,
6920
+ open,
6921
+ defaultOpen,
6922
+ onOpenChange,
6923
+ side = "right",
6924
+ roughness,
6925
+ seed,
6926
+ sketchColor,
6927
+ bowing,
6928
+ fillStyle,
6929
+ strokeWidth,
6930
+ animate,
6931
+ ...rest
6932
+ }) {
6933
+ const resolvedSeed = useResolvedSeed(seed);
6934
+ const ink = sketchColor ?? SKETCH_COLORS.ink;
6935
+ const [uncontrolled, setUncontrolled] = react.useState(defaultOpen === true);
6936
+ const isOpen = open ?? uncontrolled;
6937
+ return /* @__PURE__ */ jsxRuntime.jsx(
6938
+ SlidingPanelSketchContext.Provider,
6939
+ {
6940
+ value: {
6941
+ roughness,
6942
+ seed: resolvedSeed,
6943
+ sketchColor,
6944
+ bowing,
6945
+ fillStyle,
6946
+ strokeWidth,
6947
+ resolvedSeed,
6948
+ ink,
6949
+ animate,
6950
+ open: isOpen,
6951
+ side
6952
+ },
6953
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6954
+ Dialog__namespace.Root,
6955
+ {
6956
+ open: isOpen,
6957
+ onOpenChange: (next) => {
6958
+ setUncontrolled(next);
6959
+ onOpenChange?.(next);
6960
+ },
6961
+ ...rest,
6962
+ children
6963
+ }
6964
+ )
6965
+ }
6966
+ );
6967
+ }
6968
+ var SlidingPanelTrigger = Dialog__namespace.Trigger;
6969
+ var SlidingPanelClose = Dialog__namespace.Close;
6970
+ function slideVariants(side, shouldAnimate) {
6971
+ if (!shouldAnimate) {
6972
+ return { hidden: {}, visible: {} };
6973
+ }
6974
+ const offset = 420;
6975
+ const hidden = side === "left" ? { x: -offset } : side === "right" ? { x: offset } : side === "top" ? { y: -offset } : { y: offset };
6976
+ return {
6977
+ hidden: { ...hidden, opacity: 0.85 },
6978
+ visible: { x: 0, y: 0, opacity: 1 }
6979
+ };
6980
+ }
6981
+ function panelPosition(side) {
6982
+ switch (side) {
6983
+ case "left":
6984
+ return {
6985
+ top: 0,
6986
+ bottom: 0,
6987
+ left: 0,
6988
+ width: "min(420px, 100vw)"
6989
+ };
6990
+ case "right":
6991
+ return {
6992
+ top: 0,
6993
+ bottom: 0,
6994
+ right: 0,
6995
+ width: "min(420px, 100vw)"
6996
+ };
6997
+ case "top":
6998
+ return {
6999
+ top: 0,
7000
+ left: 0,
7001
+ right: 0,
7002
+ height: "min(420px, 90vh)"
7003
+ };
7004
+ default:
7005
+ return {
7006
+ bottom: 0,
7007
+ left: 0,
7008
+ right: 0,
7009
+ height: "min(420px, 90vh)"
7010
+ };
7011
+ }
7012
+ }
7013
+ var SlidingPanelOverlay = react.forwardRef(function SlidingPanelOverlay2({ style, ...rest }, ref) {
7014
+ const sketch = useSlidingPanelSketch();
7015
+ const shouldAnimate = useAnimate(sketch.animate);
7016
+ return /* @__PURE__ */ jsxRuntime.jsx(Dialog__namespace.Overlay, { ref, asChild: true, forceMount: true, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(
7017
+ framerMotion.motion.div,
7018
+ {
7019
+ initial: shouldAnimate ? { opacity: 0 } : false,
7020
+ animate: { opacity: 1 },
7021
+ exit: shouldAnimate ? { opacity: 0 } : void 0,
7022
+ transition: shouldAnimate ? { duration: 0.22, ease: "easeOut" } : { duration: 0 },
7023
+ style: {
7024
+ position: "fixed",
7025
+ inset: 0,
7026
+ background: "rgba(31, 29, 26, 0.38)",
7027
+ zIndex: 70,
7028
+ ...style
7029
+ }
7030
+ }
7031
+ ) });
7032
+ });
7033
+ var SlidingPanelContent = react.forwardRef(function SlidingPanelContent2({ className, style, contentStyle, children, chrome, ...rest }, ref) {
7034
+ const sketch = useSlidingPanelSketch();
7035
+ const shouldAnimate = useAnimate(sketch.animate);
7036
+ const variants = slideVariants(sketch.side, shouldAnimate);
7037
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: sketch.open ? /* @__PURE__ */ jsxRuntime.jsxs(Dialog__namespace.Portal, { forceMount: true, children: [
7038
+ /* @__PURE__ */ jsxRuntime.jsx(SlidingPanelOverlay, {}),
7039
+ /* @__PURE__ */ jsxRuntime.jsx(Dialog__namespace.Content, { ref, asChild: true, forceMount: true, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(
7040
+ framerMotion.motion.div,
7041
+ {
7042
+ className: cn(className),
7043
+ initial: shouldAnimate ? "hidden" : false,
7044
+ animate: "visible",
7045
+ exit: shouldAnimate ? "hidden" : void 0,
7046
+ variants,
7047
+ transition: shouldAnimate ? { duration: 0.28, ease: "easeOut" } : { duration: 0 },
7048
+ style: {
7049
+ position: "fixed",
7050
+ zIndex: 80,
7051
+ outline: "none",
7052
+ pointerEvents: "auto",
7053
+ ...panelPosition(sketch.side),
7054
+ ...style
7055
+ },
7056
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
7057
+ SketchBox,
7058
+ {
7059
+ roughness: sketch.roughness,
7060
+ seed: sketch.resolvedSeed,
7061
+ sketchColor: sketch.ink,
7062
+ bowing: sketch.bowing,
7063
+ fillStyle: sketch.fillStyle ?? "solid",
7064
+ fill: "#f7f6f2",
7065
+ strokeWidth: sketch.strokeWidth ?? 2,
7066
+ animate: sketch.animate,
7067
+ contentStyle: {
7068
+ padding: 20,
7069
+ height: "100%",
7070
+ boxSizing: "border-box",
7071
+ display: "flex",
7072
+ flexDirection: "column",
7073
+ ...contentStyle
7074
+ },
7075
+ style: { height: "100%" },
7076
+ children: [
7077
+ chrome,
7078
+ children
7079
+ ]
7080
+ }
7081
+ )
7082
+ }
7083
+ ) })
7084
+ ] }) : null });
7085
+ });
7086
+ function SlidingPanelHeader({
7087
+ children,
7088
+ className,
7089
+ style
7090
+ }) {
7091
+ return /* @__PURE__ */ jsxRuntime.jsx(
7092
+ "div",
7093
+ {
7094
+ className: cn(className),
7095
+ style: {
7096
+ display: "flex",
7097
+ flexDirection: "column",
7098
+ gap: 6,
7099
+ marginBottom: 12,
7100
+ ...style
7101
+ },
7102
+ children
7103
+ }
7104
+ );
7105
+ }
7106
+ function SlidingPanelFooter({
7107
+ children,
7108
+ className,
7109
+ style
7110
+ }) {
7111
+ return /* @__PURE__ */ jsxRuntime.jsx(
7112
+ "div",
7113
+ {
7114
+ className: cn(className),
7115
+ style: {
7116
+ display: "flex",
7117
+ gap: 8,
7118
+ marginTop: "auto",
7119
+ paddingTop: 12,
7120
+ ...style
7121
+ },
7122
+ children
7123
+ }
7124
+ );
7125
+ }
7126
+ var SlidingPanelTitle = react.forwardRef(function SlidingPanelTitle2({ className, style, ...rest }, ref) {
7127
+ const sketch = useSlidingPanelSketch();
7128
+ return /* @__PURE__ */ jsxRuntime.jsx(
7129
+ Dialog__namespace.Title,
7130
+ {
7131
+ ref,
7132
+ className: cn(className),
7133
+ style: {
7134
+ margin: 0,
7135
+ fontFamily: doodleUiFontFamily,
7136
+ fontWeight: doodleUiFontWeight(700),
7137
+ fontSize: 20,
7138
+ color: sketch.ink,
7139
+ ...style
7140
+ },
7141
+ ...rest
7142
+ }
7143
+ );
7144
+ });
7145
+ var SlidingPanelDescription = react.forwardRef(function SlidingPanelDescription2({ className, style, ...rest }, ref) {
7146
+ const sketch = useSlidingPanelSketch();
7147
+ return /* @__PURE__ */ jsxRuntime.jsx(
7148
+ Dialog__namespace.Description,
7149
+ {
7150
+ ref,
7151
+ className: cn(className),
7152
+ style: {
7153
+ margin: 0,
7154
+ fontFamily: doodleUiFontFamily,
7155
+ fontSize: 14,
7156
+ color: sketch.ink,
7157
+ opacity: 0.75,
7158
+ ...style
7159
+ },
7160
+ ...rest
7161
+ }
7162
+ );
7163
+ });
7164
+ function Sheet({ side = "right", ...rest }) {
7165
+ return /* @__PURE__ */ jsxRuntime.jsx(SlidingPanelRoot, { side, ...rest });
7166
+ }
7167
+ var SheetTrigger = SlidingPanelTrigger;
7168
+ var SheetClose = SlidingPanelClose;
7169
+ var SheetContent = react.forwardRef(
7170
+ function SheetContent2(props, ref) {
7171
+ return /* @__PURE__ */ jsxRuntime.jsx(SlidingPanelContent, { ref, ...props });
7172
+ }
7173
+ );
7174
+ var SheetHeader = SlidingPanelHeader;
7175
+ var SheetFooter = SlidingPanelFooter;
7176
+ var SheetTitle = SlidingPanelTitle;
7177
+ var SheetDescription = SlidingPanelDescription;
7178
+ function Drawer(props) {
7179
+ return /* @__PURE__ */ jsxRuntime.jsx(SlidingPanelRoot, { side: "bottom", ...props });
7180
+ }
7181
+ var DrawerTrigger = SlidingPanelTrigger;
7182
+ var DrawerClose = SlidingPanelClose;
7183
+ var DrawerHandle = react.forwardRef(
7184
+ function DrawerHandle2({ className }, ref) {
7185
+ const sketch = useSlidingPanelSketch();
7186
+ return /* @__PURE__ */ jsxRuntime.jsx(
7187
+ "div",
7188
+ {
7189
+ ref,
7190
+ className,
7191
+ style: {
7192
+ position: "relative",
7193
+ width: 48,
7194
+ height: 10,
7195
+ margin: "0 auto 12px"
7196
+ },
7197
+ "aria-hidden": true,
7198
+ children: /* @__PURE__ */ jsxRuntime.jsx(
7199
+ RoughSvg,
7200
+ {
7201
+ shape: "line",
7202
+ roughness: (sketch.roughness ?? 1.5) + 0.3,
7203
+ seed: deriveSeed(sketch.resolvedSeed, "drawer-handle"),
7204
+ sketchColor: sketch.sketchColor ?? SKETCH_COLORS.ink,
7205
+ bowing: sketch.bowing ?? 1.6,
7206
+ strokeWidth: 2.4,
7207
+ width: 48,
7208
+ height: 10,
7209
+ inset: 2
7210
+ }
7211
+ )
7212
+ }
7213
+ );
7214
+ }
7215
+ );
7216
+ var DrawerContent = react.forwardRef(
7217
+ function DrawerContent2({ children, ...rest }, ref) {
7218
+ return /* @__PURE__ */ jsxRuntime.jsx(
7219
+ SlidingPanelContent,
7220
+ {
7221
+ ref,
7222
+ chrome: /* @__PURE__ */ jsxRuntime.jsx(DrawerHandle, {}),
7223
+ contentStyle: { paddingTop: 8 },
7224
+ ...rest,
7225
+ children
7226
+ }
7227
+ );
7228
+ }
7229
+ );
7230
+ var DrawerHeader = SlidingPanelHeader;
7231
+ var DrawerFooter = SlidingPanelFooter;
7232
+ var DrawerTitle = SlidingPanelTitle;
7233
+ var DrawerDescription = SlidingPanelDescription;
3735
7234
 
3736
7235
  exports.Accordion = Accordion;
3737
7236
  exports.AccordionContent = AccordionContent;
3738
7237
  exports.AccordionItem = AccordionItem;
3739
7238
  exports.AccordionTrigger = AccordionTrigger;
3740
7239
  exports.Alert = Alert;
7240
+ exports.AlertDialog = AlertDialog;
7241
+ exports.AlertDialogAction = AlertDialogAction;
7242
+ exports.AlertDialogCancel = AlertDialogCancel;
7243
+ exports.AlertDialogContent = AlertDialogContent;
7244
+ exports.AlertDialogDescription = AlertDialogDescription;
7245
+ exports.AlertDialogFooter = AlertDialogFooter;
7246
+ exports.AlertDialogHeader = AlertDialogHeader;
7247
+ exports.AlertDialogOverlay = AlertDialogOverlay;
7248
+ exports.AlertDialogPortal = AlertDialogPortal;
7249
+ exports.AlertDialogTitle = AlertDialogTitle;
7250
+ exports.AlertDialogTrigger = AlertDialogTrigger;
3741
7251
  exports.Avatar = Avatar;
3742
7252
  exports.Badge = Badge;
3743
7253
  exports.Breadcrumb = Breadcrumb;
@@ -3745,6 +7255,29 @@ exports.BreadcrumbItem = BreadcrumbItem;
3745
7255
  exports.Button = Button;
3746
7256
  exports.Card = Card;
3747
7257
  exports.Checkbox = Checkbox;
7258
+ exports.Collapsible = Collapsible;
7259
+ exports.CollapsibleContent = CollapsibleContent;
7260
+ exports.CollapsibleTrigger = CollapsibleTrigger;
7261
+ exports.Combobox = Combobox;
7262
+ exports.Command = Command;
7263
+ exports.CommandEmpty = CommandEmpty;
7264
+ exports.CommandGroup = CommandGroup;
7265
+ exports.CommandInput = CommandInput;
7266
+ exports.CommandItem = CommandItem;
7267
+ exports.CommandList = CommandList;
7268
+ exports.CommandSeparator = CommandSeparator;
7269
+ exports.CommandShortcut = CommandShortcut;
7270
+ exports.ContextMenu = ContextMenu;
7271
+ exports.ContextMenuCheckboxItem = ContextMenuCheckboxItem;
7272
+ exports.ContextMenuContent = ContextMenuContent;
7273
+ exports.ContextMenuGroup = ContextMenuGroup;
7274
+ exports.ContextMenuItem = ContextMenuItem;
7275
+ exports.ContextMenuLabel = ContextMenuLabel;
7276
+ exports.ContextMenuRadioGroup = ContextMenuRadioGroup;
7277
+ exports.ContextMenuRadioItem = ContextMenuRadioItem;
7278
+ exports.ContextMenuSeparator = ContextMenuSeparator;
7279
+ exports.ContextMenuSub = ContextMenuSub;
7280
+ exports.ContextMenuTrigger = ContextMenuTrigger;
3748
7281
  exports.DEFAULT_BOWING = DEFAULT_BOWING;
3749
7282
  exports.DEFAULT_INK = DEFAULT_INK;
3750
7283
  exports.DEFAULT_ROUGHNESS = DEFAULT_ROUGHNESS;
@@ -3753,21 +7286,101 @@ exports.DRAW_IN_ALERT_MS = DRAW_IN_ALERT_MS;
3753
7286
  exports.DRAW_IN_DURATION_MS = DRAW_IN_DURATION_MS;
3754
7287
  exports.DRAW_IN_MARK_MS = DRAW_IN_MARK_MS;
3755
7288
  exports.DRAW_IN_TOOLTIP_MS = DRAW_IN_TOOLTIP_MS;
7289
+ exports.Dialog = Dialog2;
7290
+ exports.DialogClose = DialogClose;
7291
+ exports.DialogContent = DialogContent;
7292
+ exports.DialogDescription = DialogDescription;
7293
+ exports.DialogFooter = DialogFooter;
7294
+ exports.DialogHeader = DialogHeader;
7295
+ exports.DialogOverlay = DialogOverlay;
7296
+ exports.DialogPortal = DialogPortal;
7297
+ exports.DialogTitle = DialogTitle;
7298
+ exports.DialogTrigger = DialogTrigger;
3756
7299
  exports.Divider = Divider;
3757
7300
  exports.DoodleUIProvider = DoodleUIProvider;
7301
+ exports.Drawer = Drawer;
7302
+ exports.DrawerClose = DrawerClose;
7303
+ exports.DrawerContent = DrawerContent;
7304
+ exports.DrawerDescription = DrawerDescription;
7305
+ exports.DrawerFooter = DrawerFooter;
7306
+ exports.DrawerHandle = DrawerHandle;
7307
+ exports.DrawerHeader = DrawerHeader;
7308
+ exports.DrawerTitle = DrawerTitle;
7309
+ exports.DrawerTrigger = DrawerTrigger;
7310
+ exports.DropdownMenu = DropdownMenu;
7311
+ exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
7312
+ exports.DropdownMenuContent = DropdownMenuContent;
7313
+ exports.DropdownMenuGroup = DropdownMenuGroup;
7314
+ exports.DropdownMenuItem = DropdownMenuItem;
7315
+ exports.DropdownMenuLabel = DropdownMenuLabel;
7316
+ exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
7317
+ exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
7318
+ exports.DropdownMenuSeparator = DropdownMenuSeparator;
7319
+ exports.DropdownMenuSub = DropdownMenuSub;
7320
+ exports.DropdownMenuTrigger = DropdownMenuTrigger;
7321
+ exports.HoverCard = HoverCard;
7322
+ exports.HoverCardArrow = HoverCardArrow;
7323
+ exports.HoverCardContent = HoverCardContent;
7324
+ exports.HoverCardTrigger = HoverCardTrigger;
3758
7325
  exports.Input = Input;
7326
+ exports.InputGroup = InputGroup;
7327
+ exports.InputGroupAddon = InputGroupAddon;
7328
+ exports.InputGroupButton = InputGroupButton;
7329
+ exports.InputGroupInput = InputGroupInput;
7330
+ exports.InputOTP = InputOTP;
7331
+ exports.InputOTPGroup = InputOTPGroup;
7332
+ exports.InputOTPSeparator = InputOTPSeparator;
7333
+ exports.InputOTPSlot = InputOTPSlot;
7334
+ exports.Kbd = Kbd;
7335
+ exports.Label = Label2;
7336
+ exports.Menubar = Menubar;
7337
+ exports.MenubarCheckboxItem = MenubarCheckboxItem;
7338
+ exports.MenubarContent = MenubarContent;
7339
+ exports.MenubarItem = MenubarItem;
7340
+ exports.MenubarLabel = MenubarLabel;
7341
+ exports.MenubarMenu = MenubarMenu;
7342
+ exports.MenubarRadioGroup = MenubarRadioGroup;
7343
+ exports.MenubarRadioItem = MenubarRadioItem;
7344
+ exports.MenubarSeparator = MenubarSeparator;
7345
+ exports.MenubarShortcut = MenubarShortcut;
7346
+ exports.MenubarSub = MenubarSub;
7347
+ exports.MenubarSubContent = MenubarSubContent;
7348
+ exports.MenubarSubTrigger = MenubarSubTrigger;
7349
+ exports.MenubarTrigger = MenubarTrigger;
3759
7350
  exports.Modal = Modal;
3760
7351
  exports.ModalClose = ModalClose;
3761
7352
  exports.ModalDescription = ModalDescription;
3762
7353
  exports.ModalRoot = ModalRoot;
3763
7354
  exports.ModalTitle = ModalTitle;
3764
7355
  exports.ModalTrigger = ModalTrigger;
7356
+ exports.NavigationMenu = NavigationMenu;
7357
+ exports.NavigationMenuContent = NavigationMenuContent;
7358
+ exports.NavigationMenuIndicator = NavigationMenuIndicator;
7359
+ exports.NavigationMenuItem = NavigationMenuItem;
7360
+ exports.NavigationMenuItemLink = NavigationMenuItemLink;
7361
+ exports.NavigationMenuLink = NavigationMenuLink;
7362
+ exports.NavigationMenuList = NavigationMenuList;
7363
+ exports.NavigationMenuTrigger = NavigationMenuTrigger;
7364
+ exports.NavigationMenuViewport = NavigationMenuViewport;
3765
7365
  exports.Pagination = Pagination;
7366
+ exports.Popover = Popover;
7367
+ exports.PopoverAnchor = PopoverAnchor;
7368
+ exports.PopoverArrow = PopoverArrow;
7369
+ exports.PopoverClose = PopoverClose;
7370
+ exports.PopoverContent = PopoverContent;
7371
+ exports.PopoverTrigger = PopoverTrigger;
3766
7372
  exports.Progress = Progress;
3767
7373
  exports.Radio = Radio;
3768
7374
  exports.RadioGroup = RadioGroup;
7375
+ exports.ResizableHandle = ResizableHandle;
7376
+ exports.ResizablePanel = ResizablePanel;
7377
+ exports.ResizablePanelGroup = ResizablePanelGroup;
3769
7378
  exports.RoughSvg = RoughSvg;
3770
7379
  exports.SKETCH_COLORS = SKETCH_COLORS;
7380
+ exports.ScrollArea = ScrollArea;
7381
+ exports.ScrollAreaCorner = ScrollAreaCorner;
7382
+ exports.ScrollAreaViewport = ScrollAreaViewport;
7383
+ exports.ScrollBar = ScrollBar;
3771
7384
  exports.Select = Select;
3772
7385
  exports.SelectContent = SelectContent;
3773
7386
  exports.SelectGroup = SelectGroup;
@@ -3777,10 +7390,19 @@ exports.SelectRoot = SelectRoot;
3777
7390
  exports.SelectSeparator = SelectSeparator;
3778
7391
  exports.SelectTrigger = SelectTrigger;
3779
7392
  exports.SelectValue = SelectValue;
7393
+ exports.Sheet = Sheet;
7394
+ exports.SheetClose = SheetClose;
7395
+ exports.SheetContent = SheetContent;
7396
+ exports.SheetDescription = SheetDescription;
7397
+ exports.SheetFooter = SheetFooter;
7398
+ exports.SheetHeader = SheetHeader;
7399
+ exports.SheetTitle = SheetTitle;
7400
+ exports.SheetTrigger = SheetTrigger;
3780
7401
  exports.Skeleton = Skeleton;
3781
7402
  exports.SketchBox = SketchBox;
3782
7403
  exports.SketchSeedProvider = SketchSeedProvider;
3783
7404
  exports.Slider = Slider;
7405
+ exports.Spinner = Spinner;
3784
7406
  exports.Stepper = Stepper;
3785
7407
  exports.Switch = Switch;
3786
7408
  exports.TABLE_STAGGER_MS = TABLE_STAGGER_MS;
@@ -3803,6 +7425,9 @@ exports.ToastProvider = ToastProvider;
3803
7425
  exports.ToastRoot = ToastRoot;
3804
7426
  exports.ToastTitle = ToastTitle;
3805
7427
  exports.ToastViewport = ToastViewport;
7428
+ exports.Toggle = Toggle;
7429
+ exports.ToggleGroup = ToggleGroup;
7430
+ exports.ToggleGroupItem = ToggleGroupItem;
3806
7431
  exports.Tooltip = Tooltip;
3807
7432
  exports.TooltipProvider = TooltipProvider;
3808
7433
  exports.deriveSeed = deriveSeed;