doodleui-react 0.6.0 → 0.6.1

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.js CHANGED
@@ -45,6 +45,9 @@ function toRoughOptions(props) {
45
45
  if (props.fill) {
46
46
  options.fill = props.fill;
47
47
  options.fillStyle = props.fillStyle ?? "hachure";
48
+ if (props.hachureGap !== void 0) options.hachureGap = props.hachureGap;
49
+ if (props.hachureAngle !== void 0) options.hachureAngle = props.hachureAngle;
50
+ if (props.fillWeight !== void 0) options.fillWeight = props.fillWeight;
48
51
  }
49
52
  return options;
50
53
  }
@@ -52,6 +55,10 @@ var DEFAULT_ROUGHNESS = 1.5;
52
55
  var DEFAULT_BOWING = 1;
53
56
  var DEFAULT_STROKE_WIDTH = 1.75;
54
57
  var DEFAULT_INK = "#1f1d1a";
58
+ var DEFAULT_DARK_INK = "#f3f4f6";
59
+ var DEFAULT_PAPER = "#f7f6f2";
60
+ var DEFAULT_DARK_PAPER = "#131923";
61
+ var DEFAULT_DARK_CARD_BG = "#131923";
55
62
  var DEFAULT_INSET = 3;
56
63
  var SKETCH_COLORS = {
57
64
  ink: DEFAULT_INK,
@@ -64,6 +71,19 @@ var SKETCH_COLORS = {
64
71
  error: "#c0392b",
65
72
  success: "#2d6a4f"
66
73
  };
74
+ var DARK_SKETCH_COLORS = {
75
+ ink: DEFAULT_DARK_INK,
76
+ accent: "#f87171",
77
+ accentFill: "rgba(248, 113, 113, 0.22)",
78
+ secondaryFill: "rgba(255, 255, 255, 0.08)",
79
+ paper: DEFAULT_DARK_PAPER,
80
+ cardBg: DEFAULT_DARK_CARD_BG,
81
+ shadow: "#000000",
82
+ info: "#60a5fa",
83
+ warning: "#fbbf24",
84
+ error: "#f87171",
85
+ success: "#34d399"
86
+ };
67
87
 
68
88
  // src/utils.ts
69
89
  function assignRef(ref, value) {
@@ -179,6 +199,9 @@ function RoughSvg({
179
199
  fillStyle,
180
200
  strokeWidth,
181
201
  fill,
202
+ hachureGap,
203
+ hachureAngle,
204
+ fillWeight,
182
205
  inset = DEFAULT_INSET,
183
206
  path,
184
207
  className,
@@ -202,7 +225,10 @@ function RoughSvg({
202
225
  bowing,
203
226
  fillStyle,
204
227
  strokeWidth,
205
- fill
228
+ fill,
229
+ hachureGap,
230
+ hachureAngle,
231
+ fillWeight
206
232
  });
207
233
  const x = inset;
208
234
  const y = inset;
@@ -238,6 +264,9 @@ function RoughSvg({
238
264
  fillStyle,
239
265
  strokeWidth,
240
266
  fill,
267
+ hachureGap,
268
+ hachureAngle,
269
+ fillWeight,
241
270
  inset,
242
271
  path
243
272
  ]);
@@ -275,16 +304,17 @@ var DoodleUIContext = createContext(null);
275
304
  function DoodleUIProvider({
276
305
  children,
277
306
  animate = true,
278
- forceAnimate = false
307
+ forceAnimate = false,
308
+ theme = "system"
279
309
  }) {
280
310
  const value = useMemo(
281
- () => ({ animate, forceAnimate }),
282
- [animate, forceAnimate]
311
+ () => ({ animate, forceAnimate, theme }),
312
+ [animate, forceAnimate, theme]
283
313
  );
284
314
  return /* @__PURE__ */ jsx(DoodleUIContext.Provider, { value, children });
285
315
  }
286
316
  function useDoodleUI() {
287
- return useContext(DoodleUIContext) ?? { animate: true, forceAnimate: false };
317
+ return useContext(DoodleUIContext) ?? { animate: true, forceAnimate: false, theme: "system" };
288
318
  }
289
319
 
290
320
  // src/animations/resolveAnimate.ts
@@ -442,6 +472,93 @@ function useDrawIn(pathRef, duration = DRAW_IN_DURATION_MS, enabled = true, repl
442
472
  };
443
473
  }, [pathRef, duration, enabled, replayKey, delay]);
444
474
  }
475
+ function checkIsDark() {
476
+ if (typeof window === "undefined" || typeof document === "undefined") {
477
+ return false;
478
+ }
479
+ const root = document.documentElement;
480
+ if (root.classList.contains("dark")) return true;
481
+ const dataTheme = root.getAttribute("data-theme");
482
+ if (dataTheme === "dark") return true;
483
+ if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) {
484
+ return true;
485
+ }
486
+ return false;
487
+ }
488
+ function useSketchTheme(sketchColorOverride) {
489
+ const doodleContext = useDoodleUI();
490
+ const contextTheme = doodleContext?.theme;
491
+ const [isClientDark, setIsClientDark] = useState(() => {
492
+ if (contextTheme === "dark") return true;
493
+ if (contextTheme === "light") return false;
494
+ return checkIsDark();
495
+ });
496
+ useEffect(() => {
497
+ if (contextTheme === "dark") {
498
+ setIsClientDark(true);
499
+ return;
500
+ }
501
+ if (contextTheme === "light") {
502
+ setIsClientDark(false);
503
+ return;
504
+ }
505
+ const update = () => {
506
+ setIsClientDark(checkIsDark());
507
+ };
508
+ update();
509
+ const mediaQuery = window.matchMedia?.("(prefers-color-scheme: dark)");
510
+ mediaQuery?.addEventListener?.("change", update);
511
+ const observer = new MutationObserver((mutations) => {
512
+ for (const m of mutations) {
513
+ if (m.attributeName === "class" || m.attributeName === "data-theme") {
514
+ update();
515
+ break;
516
+ }
517
+ }
518
+ });
519
+ observer.observe(document.documentElement, {
520
+ attributes: true,
521
+ attributeFilter: ["class", "data-theme"]
522
+ });
523
+ return () => {
524
+ mediaQuery?.removeEventListener?.("change", update);
525
+ observer.disconnect();
526
+ };
527
+ }, [contextTheme]);
528
+ const isDark = contextTheme === "dark" ? true : contextTheme === "light" ? false : isClientDark;
529
+ const baseInk = isDark ? DEFAULT_DARK_INK : DEFAULT_INK;
530
+ const ink = sketchColorOverride ?? baseInk;
531
+ if (isDark) {
532
+ return {
533
+ isDark: true,
534
+ ink,
535
+ paper: DEFAULT_DARK_PAPER,
536
+ cardBg: DEFAULT_DARK_CARD_BG,
537
+ shadow: "rgba(0, 0, 0, 0.45)",
538
+ accent: DARK_SKETCH_COLORS.accent,
539
+ accentFill: DARK_SKETCH_COLORS.accentFill,
540
+ secondaryFill: DARK_SKETCH_COLORS.secondaryFill,
541
+ info: DARK_SKETCH_COLORS.info,
542
+ warning: DARK_SKETCH_COLORS.warning,
543
+ error: DARK_SKETCH_COLORS.error,
544
+ success: DARK_SKETCH_COLORS.success
545
+ };
546
+ }
547
+ return {
548
+ isDark: false,
549
+ ink,
550
+ paper: DEFAULT_PAPER,
551
+ cardBg: DEFAULT_PAPER,
552
+ shadow: sketchColorOverride ?? DEFAULT_INK,
553
+ accent: SKETCH_COLORS.accent,
554
+ accentFill: SKETCH_COLORS.accentFill,
555
+ secondaryFill: SKETCH_COLORS.secondaryFill,
556
+ info: SKETCH_COLORS.info,
557
+ warning: SKETCH_COLORS.warning,
558
+ error: SKETCH_COLORS.error,
559
+ success: SKETCH_COLORS.success
560
+ };
561
+ }
445
562
  var SketchBox = forwardRef(
446
563
  function SketchBox2({
447
564
  children,
@@ -458,6 +575,9 @@ var SketchBox = forwardRef(
458
575
  sketchColor,
459
576
  bowing,
460
577
  strokeWidth,
578
+ hachureGap,
579
+ hachureAngle,
580
+ fillWeight,
461
581
  inset,
462
582
  path,
463
583
  animate,
@@ -466,8 +586,14 @@ var SketchBox = forwardRef(
466
586
  ...rest
467
587
  }, ref) {
468
588
  const rootRef = useRef(null);
589
+ const theme = useSketchTheme(sketchColor);
590
+ const resolvedInk = sketchColor ?? theme.ink;
469
591
  const shouldAnimate = useAnimate(animate);
470
592
  useDrawIn(rootRef, drawInDuration, shouldAnimate, drawInKey);
593
+ const hasExplicitFill = fill !== void 0;
594
+ const resolvedFill = hasExplicitFill ? fill : shadow ? theme.cardBg : void 0;
595
+ const resolvedFillStyle = fillStyle ?? (resolvedFill ? "solid" : "solid");
596
+ const isPatternedFill = Boolean(resolvedFill && resolvedFillStyle !== "solid");
471
597
  return /* @__PURE__ */ jsxs(
472
598
  "div",
473
599
  {
@@ -485,13 +611,31 @@ var SketchBox = forwardRef(
485
611
  shape,
486
612
  roughness: (roughness ?? 1.5) + 0.35,
487
613
  seed,
488
- sketchColor,
614
+ sketchColor: theme.isDark ? "rgba(0, 0, 0, 0.45)" : resolvedInk,
489
615
  bowing,
490
616
  fillStyle: "hachure",
491
- fill: sketchColor ?? "#1f1d1a",
617
+ fill: theme.isDark ? theme.shadow : resolvedInk ?? theme.ink,
492
618
  strokeWidth: 1,
619
+ hachureGap: 8,
493
620
  inset,
494
- style: { transform: "translate(5px, 6px)", opacity: 0.16 }
621
+ style: {
622
+ transform: "translate(5px, 6px)",
623
+ opacity: theme.isDark ? 0.35 : 0.16
624
+ }
625
+ }
626
+ ) : null,
627
+ isPatternedFill ? /* @__PURE__ */ jsx(
628
+ RoughSvg,
629
+ {
630
+ shape,
631
+ roughness,
632
+ seed,
633
+ sketchColor: "transparent",
634
+ bowing,
635
+ fillStyle: "solid",
636
+ fill: theme.cardBg,
637
+ strokeWidth: 0,
638
+ inset
495
639
  }
496
640
  ) : null,
497
641
  /* @__PURE__ */ jsx(
@@ -500,11 +644,14 @@ var SketchBox = forwardRef(
500
644
  shape,
501
645
  roughness,
502
646
  seed,
503
- sketchColor,
647
+ sketchColor: resolvedInk,
504
648
  bowing,
505
- fillStyle: fill ? fillStyle : shadow ? "solid" : fillStyle,
506
- fill: fill ?? (shadow ? "#f7f6f2" : void 0),
649
+ fillStyle: resolvedFill ? resolvedFillStyle : void 0,
650
+ fill: resolvedFill,
507
651
  strokeWidth,
652
+ hachureGap: hachureGap ?? (isPatternedFill ? 10 : void 0),
653
+ hachureAngle,
654
+ fillWeight: fillWeight ?? (isPatternedFill ? 0.9 : void 0),
508
655
  inset,
509
656
  path
510
657
  }
@@ -517,6 +664,7 @@ var SketchBox = forwardRef(
517
664
  position: "relative",
518
665
  zIndex: 1,
519
666
  fontFamily: doodleUiFontFamily,
667
+ color: resolvedInk,
520
668
  ...contentStyle
521
669
  },
522
670
  children
@@ -549,6 +697,9 @@ var Button = forwardRef(
549
697
  bowing,
550
698
  fillStyle,
551
699
  strokeWidth,
700
+ hachureGap,
701
+ hachureAngle,
702
+ fillWeight,
552
703
  disabled,
553
704
  animate,
554
705
  onMouseEnter,
@@ -557,13 +708,15 @@ var Button = forwardRef(
557
708
  }, ref) {
558
709
  const rootRef = useRef(null);
559
710
  const [hovered, setHovered] = useState(false);
711
+ const theme = useSketchTheme(sketchColor);
560
712
  const shouldAnimate = useAnimate(animate);
561
713
  const resolvedSeed = useResolvedSeed(seed);
562
714
  const hoverSeed = deriveSeed(resolvedSeed, "hover");
563
715
  const sketchSeed = shouldAnimate && hovered && !disabled ? hoverSeed : resolvedSeed;
564
- const ink = sketchColor ?? SKETCH_COLORS.ink;
565
- const fill = variant === "primary" ? SKETCH_COLORS.accentFill : variant === "secondary" ? SKETCH_COLORS.secondaryFill : void 0;
566
- const stroke = variant === "ghost" && !hovered ? "transparent" : variant === "primary" ? sketchColor ?? SKETCH_COLORS.accent : ink;
716
+ const ink = sketchColor ?? theme.ink;
717
+ const fill = variant === "primary" ? theme.isDark ? sketchColor ? `${sketchColor}28` : theme.accentFill : theme.accentFill : variant === "secondary" ? theme.secondaryFill : hovered && variant === "ghost" ? theme.isDark ? "rgba(255,255,255,0.06)" : "rgba(31,29,26,0.05)" : void 0;
718
+ const stroke = variant === "ghost" && !hovered ? "transparent" : variant === "primary" ? sketchColor ?? theme.accent : ink;
719
+ const textColor = variant === "primary" ? sketchColor ?? (theme.isDark ? "#ffffff" : ink) : ink;
567
720
  useDrawIn(rootRef, DRAW_IN_DURATION_MS, shouldAnimate, sketchSeed);
568
721
  return /* @__PURE__ */ jsxs(
569
722
  "button",
@@ -592,7 +745,7 @@ var Button = forwardRef(
592
745
  border: "none",
593
746
  background: "transparent",
594
747
  cursor: disabled ? "not-allowed" : "pointer",
595
- color: ink,
748
+ color: textColor,
596
749
  fontFamily: doodleUiFontFamily,
597
750
  fontWeight: doodleUiFontWeight(600),
598
751
  lineHeight: 1.2,
@@ -610,8 +763,11 @@ var Button = forwardRef(
610
763
  seed: sketchSeed,
611
764
  sketchColor: stroke,
612
765
  bowing,
613
- fillStyle: fillStyle ?? "hachure",
766
+ fillStyle: fillStyle ?? (fill ? "hachure" : void 0),
614
767
  fill,
768
+ hachureGap: hachureGap ?? 7,
769
+ hachureAngle,
770
+ fillWeight: fillWeight ?? 1,
615
771
  strokeWidth: !shouldAnimate && hovered ? (strokeWidth ?? 1.75) + 0.4 : strokeWidth
616
772
  }
617
773
  ),
@@ -631,6 +787,9 @@ var Input = forwardRef(function Input2({
631
787
  bowing,
632
788
  fillStyle,
633
789
  strokeWidth,
790
+ hachureGap,
791
+ hachureAngle,
792
+ fillWeight,
634
793
  id,
635
794
  onFocus,
636
795
  onBlur,
@@ -639,11 +798,12 @@ var Input = forwardRef(function Input2({
639
798
  }, ref) {
640
799
  const [focused, setFocused] = useState(false);
641
800
  const fieldRef = useRef(null);
801
+ const theme = useSketchTheme(sketchColor);
642
802
  const shouldAnimate = useAnimate(animate);
643
803
  const resolvedSeed = useResolvedSeed(seed);
644
804
  const focusSeed = deriveSeed(resolvedSeed, "focus");
645
805
  const sketchSeed = shouldAnimate && focused ? focusSeed : resolvedSeed;
646
- const ink = sketchColor ?? SKETCH_COLORS.ink;
806
+ const ink = sketchColor ?? theme.ink;
647
807
  const inputId = id;
648
808
  useDrawIn(fieldRef, DRAW_IN_DURATION_MS, shouldAnimate, sketchSeed);
649
809
  return /* @__PURE__ */ jsxs(
@@ -676,9 +836,12 @@ var Input = forwardRef(function Input2({
676
836
  shape: "rectangle",
677
837
  roughness,
678
838
  seed: sketchSeed,
679
- sketchColor: focused ? SKETCH_COLORS.accent : ink,
839
+ sketchColor: focused ? sketchColor ?? theme.accent : ink,
680
840
  bowing,
681
841
  fillStyle,
842
+ hachureGap,
843
+ hachureAngle,
844
+ fillWeight,
682
845
  strokeWidth: focused && !shouldAnimate ? (strokeWidth ?? 1.75) + 0.35 : focused ? (strokeWidth ?? 1.75) + 0.2 : strokeWidth
683
846
  }
684
847
  ),
@@ -729,6 +892,9 @@ var Textarea = forwardRef(
729
892
  bowing,
730
893
  fillStyle,
731
894
  strokeWidth,
895
+ hachureGap,
896
+ hachureAngle,
897
+ fillWeight,
732
898
  id,
733
899
  rows = 4,
734
900
  onFocus,
@@ -738,11 +904,12 @@ var Textarea = forwardRef(
738
904
  }, ref) {
739
905
  const [focused, setFocused] = useState(false);
740
906
  const fieldRef = useRef(null);
907
+ const theme = useSketchTheme(sketchColor);
741
908
  const shouldAnimate = useAnimate(animate);
742
909
  const resolvedSeed = useResolvedSeed(seed);
743
910
  const focusSeed = deriveSeed(resolvedSeed, "focus");
744
911
  const sketchSeed = shouldAnimate && focused ? focusSeed : resolvedSeed;
745
- const ink = sketchColor ?? SKETCH_COLORS.ink;
912
+ const ink = sketchColor ?? theme.ink;
746
913
  useDrawIn(fieldRef, DRAW_IN_DURATION_MS, shouldAnimate, sketchSeed);
747
914
  return /* @__PURE__ */ jsxs(
748
915
  "label",
@@ -774,9 +941,12 @@ var Textarea = forwardRef(
774
941
  shape: "rectangle",
775
942
  roughness,
776
943
  seed: sketchSeed,
777
- sketchColor: focused ? SKETCH_COLORS.accent : ink,
944
+ sketchColor: focused ? sketchColor ?? theme.accent : ink,
778
945
  bowing,
779
946
  fillStyle,
947
+ hachureGap,
948
+ hachureAngle,
949
+ fillWeight,
780
950
  strokeWidth: focused && !shouldAnimate ? (strokeWidth ?? 1.75) + 0.35 : focused ? (strokeWidth ?? 1.75) + 0.2 : strokeWidth
781
951
  }
782
952
  ),
@@ -806,8 +976,7 @@ var Textarea = forwardRef(
806
976
  color: ink,
807
977
  fontFamily: doodleUiFontFamily,
808
978
  fontSize: 15,
809
- lineHeight: 1.5,
810
- padding: "10px 12px",
979
+ padding: "8px 12px",
811
980
  resize: "vertical",
812
981
  ...style
813
982
  },
@@ -825,6 +994,7 @@ var CHECK_PATH = "M 4.5 10.5 L 8.5 14.5 L 15.5 5.5";
825
994
  function CheckMark({
826
995
  roughness,
827
996
  seed,
997
+ sketchColor,
828
998
  bowing,
829
999
  strokeWidth,
830
1000
  shouldAnimate
@@ -843,7 +1013,7 @@ function CheckMark({
843
1013
  path: CHECK_PATH,
844
1014
  roughness: (roughness ?? 1.5) * 0.7,
845
1015
  seed,
846
- sketchColor: SKETCH_COLORS.accent,
1016
+ sketchColor,
847
1017
  bowing,
848
1018
  strokeWidth: (strokeWidth ?? 1.6) + 0.4,
849
1019
  inset: 0
@@ -857,12 +1027,16 @@ var Checkbox = forwardRef(
857
1027
  className,
858
1028
  style,
859
1029
  label,
1030
+ fill,
860
1031
  roughness,
861
1032
  seed,
862
1033
  sketchColor,
863
1034
  bowing,
864
1035
  fillStyle,
865
1036
  strokeWidth,
1037
+ hachureGap,
1038
+ hachureAngle,
1039
+ fillWeight,
866
1040
  checked,
867
1041
  defaultChecked,
868
1042
  onCheckedChange,
@@ -870,7 +1044,9 @@ var Checkbox = forwardRef(
870
1044
  animate,
871
1045
  ...rest
872
1046
  }, ref) {
873
- const ink = sketchColor ?? SKETCH_COLORS.ink;
1047
+ const theme = useSketchTheme(sketchColor);
1048
+ const ink = sketchColor ?? theme.ink;
1049
+ const accent = sketchColor ?? theme.accent;
874
1050
  const generatedId = useId();
875
1051
  const inputId = id ?? generatedId;
876
1052
  const boxRef = useRef(null);
@@ -886,6 +1062,7 @@ var Checkbox = forwardRef(
886
1062
  gap: 8,
887
1063
  cursor: "pointer",
888
1064
  userSelect: "none",
1065
+ color: ink,
889
1066
  ...style
890
1067
  },
891
1068
  children: [
@@ -922,8 +1099,12 @@ var Checkbox = forwardRef(
922
1099
  seed,
923
1100
  sketchColor: ink,
924
1101
  bowing,
925
- fillStyle,
1102
+ fillStyle: fillStyle ?? (fill ? "solid" : void 0),
1103
+ fill,
926
1104
  strokeWidth: strokeWidth ?? 1.6,
1105
+ hachureGap,
1106
+ hachureAngle,
1107
+ fillWeight,
927
1108
  inset: 1.5
928
1109
  }
929
1110
  )
@@ -942,6 +1123,7 @@ var Checkbox = forwardRef(
942
1123
  {
943
1124
  roughness,
944
1125
  seed,
1126
+ sketchColor: accent,
945
1127
  bowing,
946
1128
  strokeWidth,
947
1129
  shouldAnimate
@@ -956,7 +1138,7 @@ var Checkbox = forwardRef(
956
1138
  "label",
957
1139
  {
958
1140
  htmlFor: inputId,
959
- style: { fontSize: 15, cursor: "pointer", fontFamily: doodleUiFontFamily },
1141
+ style: { fontSize: 15, cursor: "pointer", fontFamily: doodleUiFontFamily, color: ink },
960
1142
  children: label
961
1143
  }
962
1144
  ) : null
@@ -988,6 +1170,7 @@ var SIZE = 20;
988
1170
  function RadioDot({
989
1171
  roughness,
990
1172
  seed,
1173
+ sketchColor,
991
1174
  bowing,
992
1175
  shouldAnimate
993
1176
  }) {
@@ -1021,8 +1204,8 @@ function RadioDot({
1021
1204
  shape: "ellipse",
1022
1205
  roughness: (roughness ?? 1.5) + 0.2,
1023
1206
  seed,
1024
- sketchColor: SKETCH_COLORS.accent,
1025
- fill: SKETCH_COLORS.accent,
1207
+ sketchColor,
1208
+ fill: sketchColor,
1026
1209
  fillStyle: "solid",
1027
1210
  bowing,
1028
1211
  strokeWidth: 1,
@@ -1036,17 +1219,23 @@ var Radio = forwardRef(function Radio2({
1036
1219
  className,
1037
1220
  style,
1038
1221
  label,
1222
+ fill,
1039
1223
  roughness,
1040
1224
  seed,
1041
1225
  sketchColor,
1042
1226
  bowing,
1043
1227
  fillStyle,
1044
1228
  strokeWidth,
1229
+ hachureGap,
1230
+ hachureAngle,
1231
+ fillWeight,
1045
1232
  id,
1046
1233
  animate,
1047
1234
  ...rest
1048
1235
  }, ref) {
1049
- const ink = sketchColor ?? SKETCH_COLORS.ink;
1236
+ const theme = useSketchTheme(sketchColor);
1237
+ const ink = sketchColor ?? theme.ink;
1238
+ const accent = sketchColor ?? theme.accent;
1050
1239
  const generatedId = useId();
1051
1240
  const inputId = id ?? generatedId;
1052
1241
  const ringRef = useRef(null);
@@ -1062,6 +1251,7 @@ var Radio = forwardRef(function Radio2({
1062
1251
  gap: 8,
1063
1252
  cursor: "pointer",
1064
1253
  userSelect: "none",
1254
+ color: ink,
1065
1255
  ...style
1066
1256
  },
1067
1257
  children: [
@@ -1096,8 +1286,12 @@ var Radio = forwardRef(function Radio2({
1096
1286
  seed,
1097
1287
  sketchColor: ink,
1098
1288
  bowing,
1099
- fillStyle,
1289
+ fillStyle: fillStyle ?? (fill ? "solid" : void 0),
1290
+ fill,
1100
1291
  strokeWidth: strokeWidth ?? 1.6,
1292
+ hachureGap,
1293
+ hachureAngle,
1294
+ fillWeight,
1101
1295
  inset: 1.5
1102
1296
  }
1103
1297
  )
@@ -1116,6 +1310,7 @@ var Radio = forwardRef(function Radio2({
1116
1310
  {
1117
1311
  roughness,
1118
1312
  seed,
1313
+ sketchColor: accent,
1119
1314
  bowing,
1120
1315
  shouldAnimate
1121
1316
  }
@@ -1129,7 +1324,7 @@ var Radio = forwardRef(function Radio2({
1129
1324
  "label",
1130
1325
  {
1131
1326
  htmlFor: inputId,
1132
- style: { fontSize: 15, cursor: "pointer", fontFamily: doodleUiFontFamily },
1327
+ style: { fontSize: 15, cursor: "pointer", fontFamily: doodleUiFontFamily, color: ink },
1133
1328
  children: label
1134
1329
  }
1135
1330
  ) : null
@@ -1151,18 +1346,26 @@ var Card = forwardRef(function Card2({
1151
1346
  bowing,
1152
1347
  fillStyle,
1153
1348
  strokeWidth,
1349
+ hachureGap,
1350
+ hachureAngle,
1351
+ fillWeight,
1154
1352
  animate,
1155
1353
  ...rest
1156
1354
  }, ref) {
1355
+ const theme = useSketchTheme(sketchColor);
1356
+ const ink = sketchColor ?? theme.ink;
1157
1357
  const boxProps = {
1158
1358
  shadow,
1159
1359
  fill,
1160
1360
  roughness,
1161
1361
  seed,
1162
- sketchColor: sketchColor ?? SKETCH_COLORS.ink,
1362
+ sketchColor: ink,
1163
1363
  bowing,
1164
1364
  fillStyle,
1165
1365
  strokeWidth,
1366
+ hachureGap,
1367
+ hachureAngle,
1368
+ fillWeight,
1166
1369
  animate
1167
1370
  };
1168
1371
  return /* @__PURE__ */ jsxs(
@@ -1170,7 +1373,10 @@ var Card = forwardRef(function Card2({
1170
1373
  {
1171
1374
  ref,
1172
1375
  className: cn(className),
1173
- style,
1376
+ style: {
1377
+ color: ink,
1378
+ ...style
1379
+ },
1174
1380
  contentStyle: { padding: "16px 18px" },
1175
1381
  ...boxProps,
1176
1382
  ...rest,
@@ -1181,13 +1387,14 @@ var Card = forwardRef(function Card2({
1181
1387
  style: {
1182
1388
  fontWeight: doodleUiFontWeight(700),
1183
1389
  fontSize: 16,
1184
- marginBottom: 10
1390
+ marginBottom: 10,
1391
+ color: ink
1185
1392
  },
1186
1393
  children: title
1187
1394
  }
1188
1395
  ) : null,
1189
1396
  children,
1190
- footer ? /* @__PURE__ */ jsx("div", { style: { marginTop: 14, fontSize: 13, opacity: 0.8 }, children: footer }) : null
1397
+ footer ? /* @__PURE__ */ jsx("div", { style: { marginTop: 14, fontSize: 13, opacity: 0.8, color: ink }, children: footer }) : null
1191
1398
  ]
1192
1399
  }
1193
1400
  );
@@ -1203,11 +1410,15 @@ var Badge = forwardRef(function Badge2({
1203
1410
  bowing,
1204
1411
  fillStyle,
1205
1412
  strokeWidth,
1413
+ hachureGap,
1414
+ hachureAngle,
1415
+ fillWeight,
1206
1416
  animate,
1207
1417
  ...rest
1208
1418
  }, ref) {
1209
- const ink = variant === "accent" ? sketchColor ?? SKETCH_COLORS.accent : sketchColor ?? SKETCH_COLORS.ink;
1210
- const fill = variant === "accent" ? SKETCH_COLORS.accentFill : variant === "outline" ? void 0 : SKETCH_COLORS.secondaryFill;
1419
+ const theme = useSketchTheme(sketchColor);
1420
+ const ink = variant === "accent" ? sketchColor ?? theme.accent : sketchColor ?? theme.ink;
1421
+ const fill = variant === "accent" ? theme.isDark ? sketchColor ? `${sketchColor}25` : theme.accentFill : theme.accentFill : variant === "outline" ? void 0 : theme.secondaryFill;
1211
1422
  return /* @__PURE__ */ jsx(
1212
1423
  SketchBox,
1213
1424
  {
@@ -1222,10 +1433,14 @@ var Badge = forwardRef(function Badge2({
1222
1433
  fontSize: 12,
1223
1434
  fontWeight: doodleUiFontWeight(650),
1224
1435
  lineHeight: 1.4,
1225
- letterSpacing: "0.01em"
1436
+ letterSpacing: "0.01em",
1437
+ color: ink
1226
1438
  },
1227
1439
  fill,
1228
- fillStyle: fillStyle ?? "hachure",
1440
+ fillStyle: fillStyle ?? (fill ? "hachure" : void 0),
1441
+ hachureGap: hachureGap ?? 6,
1442
+ hachureAngle,
1443
+ fillWeight: fillWeight ?? 0.9,
1229
1444
  roughness,
1230
1445
  seed,
1231
1446
  sketchColor: ink,
@@ -1237,35 +1452,42 @@ var Badge = forwardRef(function Badge2({
1237
1452
  }
1238
1453
  );
1239
1454
  });
1240
- var VARIANT_COLOR = {
1241
- info: SKETCH_COLORS.info,
1242
- warning: SKETCH_COLORS.warning,
1243
- error: SKETCH_COLORS.error,
1244
- success: SKETCH_COLORS.success
1245
- };
1246
- var VARIANT_FILL = {
1455
+ var LIGHT_VARIANT_FILL = {
1247
1456
  info: "#d2deec",
1248
1457
  warning: "#f3e2c0",
1249
1458
  error: "#f3d0cc",
1250
1459
  success: "#d3e8dc"
1251
1460
  };
1461
+ var DARK_VARIANT_FILL = {
1462
+ info: "rgba(96, 165, 250, 0.16)",
1463
+ warning: "rgba(251, 191, 36, 0.16)",
1464
+ error: "rgba(248, 113, 113, 0.16)",
1465
+ success: "rgba(52, 211, 153, 0.16)"
1466
+ };
1252
1467
  var Alert = forwardRef(function Alert2({
1253
1468
  children,
1254
1469
  className,
1255
1470
  style,
1256
1471
  variant = "info",
1257
1472
  title,
1473
+ fill,
1258
1474
  roughness,
1259
1475
  seed,
1260
1476
  sketchColor,
1261
1477
  bowing,
1262
1478
  fillStyle,
1263
1479
  strokeWidth,
1480
+ hachureGap,
1481
+ hachureAngle,
1482
+ fillWeight,
1264
1483
  role = "status",
1265
1484
  animate,
1266
1485
  ...rest
1267
1486
  }, ref) {
1268
- const color = sketchColor ?? VARIANT_COLOR[variant];
1487
+ const theme = useSketchTheme(sketchColor);
1488
+ const color = sketchColor ?? theme[variant];
1489
+ const defaultFill = theme.isDark ? DARK_VARIANT_FILL[variant] : LIGHT_VARIANT_FILL[variant];
1490
+ const resolvedFill = fill ?? defaultFill;
1269
1491
  return /* @__PURE__ */ jsxs(
1270
1492
  SketchBox,
1271
1493
  {
@@ -1273,14 +1495,17 @@ var Alert = forwardRef(function Alert2({
1273
1495
  role,
1274
1496
  className: cn(className),
1275
1497
  style: { color, ...style },
1276
- contentStyle: { padding: "12px 16px" },
1498
+ contentStyle: { padding: "12px 16px", color: theme.ink },
1277
1499
  roughness,
1278
1500
  seed,
1279
1501
  sketchColor: color,
1280
1502
  bowing,
1281
1503
  fillStyle: fillStyle ?? "hachure",
1282
- fill: VARIANT_FILL[variant],
1504
+ fill: resolvedFill,
1283
1505
  strokeWidth,
1506
+ hachureGap: hachureGap ?? 9,
1507
+ hachureAngle,
1508
+ fillWeight: fillWeight ?? 0.85,
1284
1509
  animate,
1285
1510
  drawInDuration: DRAW_IN_ALERT_MS,
1286
1511
  ...rest,
@@ -1291,12 +1516,13 @@ var Alert = forwardRef(function Alert2({
1291
1516
  style: {
1292
1517
  fontWeight: doodleUiFontWeight(700),
1293
1518
  marginBottom: 4,
1294
- fontSize: 15
1519
+ fontSize: 15,
1520
+ color
1295
1521
  },
1296
1522
  children: title
1297
1523
  }
1298
1524
  ) : null,
1299
- /* @__PURE__ */ jsx("div", { style: { fontSize: 14, lineHeight: 1.5, color: SKETCH_COLORS.ink }, children })
1525
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 14, lineHeight: 1.5, color: theme.ink }, children })
1300
1526
  ]
1301
1527
  }
1302
1528
  );
@@ -1310,15 +1536,20 @@ function Modal({
1310
1536
  description,
1311
1537
  children,
1312
1538
  className,
1539
+ fill,
1313
1540
  roughness,
1314
1541
  seed,
1315
1542
  sketchColor,
1316
1543
  bowing,
1317
1544
  fillStyle,
1318
1545
  strokeWidth,
1546
+ hachureGap,
1547
+ hachureAngle,
1548
+ fillWeight,
1319
1549
  animate
1320
1550
  }) {
1321
- const ink = sketchColor ?? SKETCH_COLORS.ink;
1551
+ const theme = useSketchTheme(sketchColor);
1552
+ const ink = sketchColor ?? theme.ink;
1322
1553
  const [uncontrolled, setUncontrolled] = useState(defaultOpen === true);
1323
1554
  const isOpen = open ?? uncontrolled;
1324
1555
  const shouldAnimate = useAnimate(animate);
@@ -1339,7 +1570,7 @@ function Modal({
1339
1570
  style: {
1340
1571
  position: "fixed",
1341
1572
  inset: 0,
1342
- background: "rgba(31, 29, 26, 0.38)",
1573
+ background: theme.isDark ? "rgba(0, 0, 0, 0.65)" : "rgba(31, 29, 26, 0.38)",
1343
1574
  zIndex: 70
1344
1575
  }
1345
1576
  }
@@ -1368,7 +1599,8 @@ function Modal({
1368
1599
  style: {
1369
1600
  width: "min(480px, calc(100vw - 32px))",
1370
1601
  outline: "none",
1371
- pointerEvents: "auto"
1602
+ pointerEvents: "auto",
1603
+ color: ink
1372
1604
  },
1373
1605
  children: /* @__PURE__ */ jsxs(
1374
1606
  SketchBox,
@@ -1378,11 +1610,14 @@ function Modal({
1378
1610
  sketchColor: ink,
1379
1611
  bowing,
1380
1612
  fillStyle: fillStyle ?? "solid",
1381
- fill: "#f7f6f2",
1613
+ fill: fill ?? theme.paper,
1382
1614
  strokeWidth: strokeWidth ?? 2,
1615
+ hachureGap,
1616
+ hachureAngle,
1617
+ fillWeight,
1383
1618
  shadow: true,
1384
1619
  animate,
1385
- contentStyle: { padding: "20px 22px 18px" },
1620
+ contentStyle: { padding: "20px 22px 18px", color: ink },
1386
1621
  children: [
1387
1622
  /* @__PURE__ */ jsxs(
1388
1623
  "div",
@@ -1425,12 +1660,10 @@ function Modal({
1425
1660
  {
1426
1661
  variant: "ghost",
1427
1662
  size: "sm",
1428
- roughness,
1429
- seed,
1430
1663
  sketchColor: ink,
1431
- animate,
1432
- "aria-label": "Close",
1433
- children: "Close"
1664
+ "aria-label": "Close dialog",
1665
+ style: { padding: "2px 8px", minHeight: 26 },
1666
+ children: "\u2715"
1434
1667
  }
1435
1668
  ) })
1436
1669
  ]
@@ -1440,11 +1673,13 @@ function Modal({
1440
1673
  Dialog.Description,
1441
1674
  {
1442
1675
  style: {
1443
- margin: "0 0 14px",
1676
+ margin: 0,
1677
+ marginBottom: 14,
1444
1678
  fontSize: 14,
1445
- lineHeight: 1.5,
1446
- color: ink,
1447
- opacity: 0.8
1679
+ lineHeight: 1.4,
1680
+ opacity: 0.78,
1681
+ fontFamily: doodleUiFontFamily,
1682
+ color: ink
1448
1683
  },
1449
1684
  children: description
1450
1685
  }
@@ -1475,10 +1710,15 @@ var Divider = forwardRef(
1475
1710
  sketchColor,
1476
1711
  bowing,
1477
1712
  strokeWidth,
1713
+ hachureGap,
1714
+ hachureAngle,
1715
+ fillWeight,
1478
1716
  animate,
1479
1717
  ...rest
1480
1718
  }, ref) {
1481
1719
  const rootRef = useRef(null);
1720
+ const theme = useSketchTheme(sketchColor);
1721
+ const ink = sketchColor ?? theme.ink;
1482
1722
  const shouldAnimate = useAnimate(animate);
1483
1723
  const horizontal = orientation === "horizontal";
1484
1724
  useDrawIn(rootRef, DRAW_IN_DURATION_MS, shouldAnimate);
@@ -1506,9 +1746,12 @@ var Divider = forwardRef(
1506
1746
  shape: horizontal ? "line" : "line-vertical",
1507
1747
  roughness: roughness ?? 1.8,
1508
1748
  seed,
1509
- sketchColor: sketchColor ?? SKETCH_COLORS.ink,
1749
+ sketchColor: ink,
1510
1750
  bowing: bowing ?? 2,
1511
1751
  strokeWidth: strokeWidth ?? 1.5,
1752
+ hachureGap,
1753
+ hachureAngle,
1754
+ fillWeight,
1512
1755
  inset: 4
1513
1756
  }
1514
1757
  )
@@ -1528,12 +1771,16 @@ var Progress = forwardRef(
1528
1771
  bowing,
1529
1772
  fillStyle,
1530
1773
  strokeWidth,
1774
+ hachureGap,
1775
+ fillWeight,
1531
1776
  animate,
1532
1777
  ...rest
1533
1778
  }, ref) {
1534
1779
  const rootRef = useRef(null);
1535
1780
  const trackRef = useRef(null);
1536
- const ink = sketchColor ?? SKETCH_COLORS.accent;
1781
+ const theme = useSketchTheme(sketchColor);
1782
+ const ink = sketchColor ?? theme.accent;
1783
+ const trackInk = sketchColor ?? (theme.isDark ? "rgba(243, 244, 246, 0.45)" : theme.ink);
1537
1784
  const clamped = Math.min(max, Math.max(0, value));
1538
1785
  const percent = max === 0 ? 0 : clamped / max * 100;
1539
1786
  const shouldAnimate = useAnimate(animate);
@@ -1573,7 +1820,7 @@ var Progress = forwardRef(
1573
1820
  shape: "rectangle",
1574
1821
  roughness,
1575
1822
  seed: resolvedSeed,
1576
- sketchColor: SKETCH_COLORS.ink,
1823
+ sketchColor: trackInk,
1577
1824
  bowing,
1578
1825
  strokeWidth: strokeWidth ?? 1.5,
1579
1826
  inset: 2
@@ -1604,6 +1851,8 @@ var Progress = forwardRef(
1604
1851
  fillStyle: fillStyle ?? "hachure",
1605
1852
  bowing,
1606
1853
  strokeWidth: 1.1,
1854
+ hachureGap: hachureGap ?? 5,
1855
+ fillWeight: fillWeight ?? 1.2,
1607
1856
  inset: 1
1608
1857
  }
1609
1858
  )
@@ -1621,15 +1870,20 @@ function Tooltip({
1621
1870
  side = "top",
1622
1871
  delayDuration = 200,
1623
1872
  className,
1873
+ fill,
1624
1874
  roughness,
1625
1875
  seed,
1626
1876
  sketchColor,
1627
1877
  bowing,
1628
1878
  fillStyle,
1629
1879
  strokeWidth,
1880
+ hachureGap,
1881
+ hachureAngle,
1882
+ fillWeight,
1630
1883
  animate
1631
1884
  }) {
1632
- const ink = sketchColor ?? SKETCH_COLORS.ink;
1885
+ const theme = useSketchTheme(sketchColor);
1886
+ const ink = sketchColor ?? theme.ink;
1633
1887
  return /* @__PURE__ */ jsxs(TooltipPrimitive.Root, { delayDuration, children: [
1634
1888
  /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { asChild: true, children }),
1635
1889
  /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
@@ -1647,8 +1901,11 @@ function Tooltip({
1647
1901
  sketchColor: ink,
1648
1902
  bowing,
1649
1903
  fillStyle: fillStyle ?? "solid",
1650
- fill: "#f7f6f2",
1904
+ fill: fill ?? theme.paper,
1651
1905
  strokeWidth: strokeWidth ?? 1.4,
1906
+ hachureGap,
1907
+ hachureAngle,
1908
+ fillWeight,
1652
1909
  animate,
1653
1910
  drawInDuration: DRAW_IN_TOOLTIP_MS,
1654
1911
  contentStyle: {
@@ -1683,12 +1940,16 @@ function Select({
1683
1940
  placeholder = "Select\u2026",
1684
1941
  className,
1685
1942
  style,
1943
+ fill,
1686
1944
  roughness,
1687
1945
  seed,
1688
1946
  sketchColor,
1689
1947
  bowing,
1690
1948
  fillStyle,
1691
1949
  strokeWidth,
1950
+ hachureGap,
1951
+ hachureAngle,
1952
+ fillWeight,
1692
1953
  value,
1693
1954
  defaultValue,
1694
1955
  onValueChange,
@@ -1700,7 +1961,8 @@ function Select({
1700
1961
  const selectedValue = value ?? uncontrolled;
1701
1962
  const selectedLabel = options.find((option) => option.value === selectedValue)?.label;
1702
1963
  const resolvedSeed = useResolvedSeed(seed);
1703
- const ink = sketchColor ?? SKETCH_COLORS.ink;
1964
+ const theme = useSketchTheme(sketchColor);
1965
+ const ink = sketchColor ?? theme.ink;
1704
1966
  return /* @__PURE__ */ jsx(
1705
1967
  SelectSketchContext.Provider,
1706
1968
  {
@@ -1711,8 +1973,13 @@ function Select({
1711
1973
  bowing,
1712
1974
  fillStyle,
1713
1975
  strokeWidth,
1976
+ hachureGap,
1977
+ hachureAngle,
1978
+ fillWeight,
1714
1979
  resolvedSeed,
1715
1980
  ink,
1981
+ paper: fill ?? theme.paper,
1982
+ accent: theme.accent,
1716
1983
  selectedValue,
1717
1984
  selectedLabel,
1718
1985
  placeholder,
@@ -1798,7 +2065,7 @@ var SelectTrigger = forwardRef(
1798
2065
  shape: "rectangle",
1799
2066
  roughness: sketch.roughness,
1800
2067
  seed: sketch.resolvedSeed,
1801
- sketchColor: openish ? SKETCH_COLORS.accent : sketch.ink,
2068
+ sketchColor: openish ? sketch.accent : sketch.ink,
1802
2069
  bowing: sketch.bowing,
1803
2070
  fillStyle: sketch.fillStyle,
1804
2071
  strokeWidth: openish ? (sketch.strokeWidth ?? 1.75) + 0.35 : sketch.strokeWidth
@@ -1849,7 +2116,7 @@ var SelectTrigger = forwardRef(
1849
2116
  }
1850
2117
  );
1851
2118
  var SelectContent = forwardRef(
1852
- function SelectContent2({ className, style, children, ...rest }, ref) {
2119
+ function SelectContent2({ className, style, children, fill, ...rest }, ref) {
1853
2120
  const sketch = useSelectSketch();
1854
2121
  return /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1855
2122
  SelectPrimitive.Content,
@@ -1862,6 +2129,7 @@ var SelectContent = forwardRef(
1862
2129
  zIndex: 80,
1863
2130
  outline: "none",
1864
2131
  minWidth: "var(--radix-select-trigger-width)",
2132
+ color: sketch.ink,
1865
2133
  ...style
1866
2134
  },
1867
2135
  ...rest,
@@ -1873,10 +2141,13 @@ var SelectContent = forwardRef(
1873
2141
  sketchColor: sketch.ink,
1874
2142
  bowing: sketch.bowing,
1875
2143
  fillStyle: sketch.fillStyle ?? "solid",
1876
- fill: "#f7f6f2",
2144
+ fill: fill ?? sketch.paper,
1877
2145
  strokeWidth: sketch.strokeWidth ?? 1.5,
2146
+ hachureGap: sketch.hachureGap,
2147
+ hachureAngle: sketch.hachureAngle,
2148
+ fillWeight: sketch.fillWeight,
1878
2149
  animate: sketch.animate,
1879
- contentStyle: { padding: "6px 4px" },
2150
+ contentStyle: { padding: "6px 4px", color: sketch.ink },
1880
2151
  children: /* @__PURE__ */ jsx(SelectPrimitive.Viewport, { children })
1881
2152
  }
1882
2153
  )
@@ -1922,7 +2193,7 @@ var SelectItem = forwardRef(
1922
2193
  shape: "line",
1923
2194
  roughness: (sketch.roughness ?? 1.5) + 0.4,
1924
2195
  seed: sketch.resolvedSeed,
1925
- sketchColor: selected ? SKETCH_COLORS.accent : sketch.ink,
2196
+ sketchColor: selected ? sketch.accent : sketch.ink,
1926
2197
  bowing: sketch.bowing ?? 1.6,
1927
2198
  strokeWidth: selected ? 1.8 : 1.3,
1928
2199
  inset: UNDERLINE_INSET,
@@ -1971,7 +2242,10 @@ var Switch = forwardRef(
1971
2242
  }, ref) {
1972
2243
  const [uncontrolled, setUncontrolled] = useState(defaultChecked === true);
1973
2244
  const isOn = checked ?? uncontrolled;
1974
- const ink = sketchColor ?? SKETCH_COLORS.ink;
2245
+ const theme = useSketchTheme(sketchColor);
2246
+ const ink = sketchColor ?? theme.ink;
2247
+ const activeColor = sketchColor ?? theme.accent;
2248
+ const activeFill = theme.isDark ? sketchColor ? `${sketchColor}25` : theme.accentFill : theme.accentFill;
1975
2249
  const resolvedSeed = useResolvedSeed(seed);
1976
2250
  const shouldAnimate = useAnimate(animate);
1977
2251
  const trackRef = useRef(null);
@@ -1987,6 +2261,7 @@ var Switch = forwardRef(
1987
2261
  gap: 8,
1988
2262
  cursor: "pointer",
1989
2263
  userSelect: "none",
2264
+ color: ink,
1990
2265
  ...style
1991
2266
  },
1992
2267
  children: [
@@ -2025,10 +2300,10 @@ var Switch = forwardRef(
2025
2300
  shape: "rectangle",
2026
2301
  roughness,
2027
2302
  seed: trackSeed,
2028
- sketchColor: isOn ? SKETCH_COLORS.accent : ink,
2303
+ sketchColor: isOn ? activeColor : ink,
2029
2304
  bowing: bowing ?? 1.4,
2030
2305
  fillStyle: fillStyle ?? (isOn ? "hachure" : void 0),
2031
- fill: isOn ? SKETCH_COLORS.accentFill : void 0,
2306
+ fill: isOn ? activeFill : void 0,
2032
2307
  strokeWidth: strokeWidth ?? 1.6,
2033
2308
  inset: 1.5
2034
2309
  }
@@ -2056,8 +2331,8 @@ var Switch = forwardRef(
2056
2331
  shape: "ellipse",
2057
2332
  roughness: (roughness ?? 1.5) * 0.85,
2058
2333
  seed: deriveSeed(resolvedSeed, "thumb"),
2059
- sketchColor: isOn ? SKETCH_COLORS.accent : ink,
2060
- fill: "#f7f6f2",
2334
+ sketchColor: isOn ? activeColor : ink,
2335
+ fill: theme.paper,
2061
2336
  fillStyle: "solid",
2062
2337
  bowing,
2063
2338
  strokeWidth: (strokeWidth ?? 1.5) + 0.2,
@@ -2076,7 +2351,8 @@ var Switch = forwardRef(
2076
2351
  style: {
2077
2352
  fontSize: 15,
2078
2353
  cursor: "pointer",
2079
- fontFamily: doodleUiFontFamily
2354
+ fontFamily: doodleUiFontFamily,
2355
+ color: ink
2080
2356
  },
2081
2357
  children: label
2082
2358
  }
@@ -2113,7 +2389,9 @@ var Tabs = forwardRef(function Tabs2({
2113
2389
  const [uncontrolled, setUncontrolled] = useState(defaultValue);
2114
2390
  const current = value ?? uncontrolled;
2115
2391
  const resolvedSeed = useResolvedSeed(seed);
2116
- const ink = sketchColor ?? SKETCH_COLORS.ink;
2392
+ const theme = useSketchTheme(sketchColor);
2393
+ const ink = sketchColor ?? theme.ink;
2394
+ const accent = sketchColor ?? theme.accent;
2117
2395
  const shouldAnimate = useAnimate(animate);
2118
2396
  return /* @__PURE__ */ jsx(
2119
2397
  TabsSketchContext.Provider,
@@ -2127,6 +2405,7 @@ var Tabs = forwardRef(function Tabs2({
2127
2405
  strokeWidth,
2128
2406
  resolvedSeed,
2129
2407
  ink,
2408
+ accent,
2130
2409
  current,
2131
2410
  shouldAnimate
2132
2411
  },
@@ -2176,7 +2455,7 @@ function TabUnderline({
2176
2455
  shape: "line",
2177
2456
  roughness: (sketch.roughness ?? 1.5) + 0.35,
2178
2457
  seed,
2179
- sketchColor: SKETCH_COLORS.accent,
2458
+ sketchColor: sketch.accent,
2180
2459
  bowing: sketch.bowing ?? 1.8,
2181
2460
  strokeWidth: (sketch.strokeWidth ?? 1.75) + 0.4,
2182
2461
  inset: 2
@@ -2259,7 +2538,7 @@ var Tab = forwardRef(function Tab2({ className, style, children, value, ...rest
2259
2538
  fontFamily: doodleUiFontFamily,
2260
2539
  fontSize: 15,
2261
2540
  fontWeight: active ? doodleUiFontWeight(650) : doodleUiFontWeight(400),
2262
- color: sketch.ink,
2541
+ color: active ? sketch.accent : sketch.ink,
2263
2542
  outline: "none",
2264
2543
  ...style
2265
2544
  },
@@ -2357,7 +2636,8 @@ var Table = forwardRef(function Table2({
2357
2636
  const tableRef = useRef(null);
2358
2637
  const [lines, setLines] = useState([]);
2359
2638
  const resolvedSeed = useResolvedSeed(seed);
2360
- const ink = sketchColor ?? SKETCH_COLORS.ink;
2639
+ const theme = useSketchTheme(sketchColor);
2640
+ const ink = sketchColor ?? theme.ink;
2361
2641
  const shouldAnimate = useAnimate(animate);
2362
2642
  useLayoutEffect(() => {
2363
2643
  const wrapper = wrapperRef.current;
@@ -2530,18 +2810,18 @@ var TableCell = forwardRef(
2530
2810
  );
2531
2811
  }
2532
2812
  );
2533
- var VARIANT_COLOR2 = {
2534
- info: SKETCH_COLORS.info,
2535
- warning: SKETCH_COLORS.warning,
2536
- error: SKETCH_COLORS.error,
2537
- success: SKETCH_COLORS.success
2538
- };
2539
- var VARIANT_FILL2 = {
2813
+ var LIGHT_VARIANT_FILL2 = {
2540
2814
  info: "#d2deec",
2541
2815
  warning: "#f3e2c0",
2542
2816
  error: "#f3d0cc",
2543
2817
  success: "#d3e8dc"
2544
2818
  };
2819
+ var DARK_VARIANT_FILL2 = {
2820
+ info: "rgba(96, 165, 250, 0.16)",
2821
+ warning: "rgba(251, 191, 36, 0.16)",
2822
+ error: "rgba(248, 113, 113, 0.16)",
2823
+ success: "rgba(52, 211, 153, 0.16)"
2824
+ };
2545
2825
  var POSITION_STYLE = {
2546
2826
  "top-left": { top: 16, left: 16 },
2547
2827
  "top-right": { top: 16, right: 16 },
@@ -2593,6 +2873,7 @@ function Toast({
2593
2873
  title,
2594
2874
  children,
2595
2875
  variant = "info",
2876
+ fill,
2596
2877
  duration,
2597
2878
  className,
2598
2879
  style,
@@ -2602,6 +2883,9 @@ function Toast({
2602
2883
  bowing,
2603
2884
  fillStyle,
2604
2885
  strokeWidth,
2886
+ hachureGap,
2887
+ hachureAngle,
2888
+ fillWeight,
2605
2889
  animate
2606
2890
  }) {
2607
2891
  const position = useContext(ToastPositionContext);
@@ -2609,7 +2893,10 @@ function Toast({
2609
2893
  const [uncontrolled, setUncontrolled] = useState(defaultOpen ?? false);
2610
2894
  const isOpen = open ?? uncontrolled;
2611
2895
  const shouldAnimate = useAnimate(animate);
2612
- const color = sketchColor ?? VARIANT_COLOR2[variant];
2896
+ const theme = useSketchTheme(sketchColor);
2897
+ const color = sketchColor ?? theme[variant];
2898
+ const defaultFill = theme.isDark ? DARK_VARIANT_FILL2[variant] : LIGHT_VARIANT_FILL2[variant];
2899
+ const resolvedFill = fill ?? defaultFill;
2613
2900
  const offset = fromTop ? -14 : 14;
2614
2901
  function handleOpenChange(next) {
2615
2902
  setUncontrolled(next);
@@ -2644,11 +2931,14 @@ function Toast({
2644
2931
  sketchColor: color,
2645
2932
  bowing,
2646
2933
  fillStyle: fillStyle ?? "hachure",
2647
- fill: VARIANT_FILL2[variant],
2934
+ fill: resolvedFill,
2648
2935
  strokeWidth: strokeWidth ?? 1.7,
2936
+ hachureGap: hachureGap ?? 9,
2937
+ hachureAngle,
2938
+ fillWeight: fillWeight ?? 0.85,
2649
2939
  shadow: true,
2650
2940
  animate,
2651
- contentStyle: { padding: "12px 16px" },
2941
+ contentStyle: { padding: "12px 16px", color: theme.ink },
2652
2942
  children: [
2653
2943
  title ? /* @__PURE__ */ jsx(
2654
2944
  ToastPrimitive.Title,
@@ -2672,7 +2962,7 @@ function Toast({
2672
2962
  fontSize: 14,
2673
2963
  lineHeight: 1.5,
2674
2964
  fontFamily: doodleUiFontFamily,
2675
- color: SKETCH_COLORS.ink
2965
+ color: theme.ink
2676
2966
  },
2677
2967
  children
2678
2968
  }
@@ -2717,19 +3007,26 @@ var Accordion = forwardRef(
2717
3007
  sketchColor,
2718
3008
  bowing,
2719
3009
  fillStyle,
2720
- strokeWidth
3010
+ strokeWidth,
3011
+ hachureGap,
3012
+ hachureAngle,
3013
+ fillWeight
2721
3014
  }, ref) {
2722
3015
  const resolvedSeed = useResolvedSeed(seed);
2723
- const ink = sketchColor ?? SKETCH_COLORS.ink;
3016
+ const theme = useSketchTheme(sketchColor);
3017
+ const ink = sketchColor ?? theme.ink;
2724
3018
  const [uncontrolled, setUncontrolled] = useState(defaultValue ?? (type === "multiple" ? [] : void 0));
2725
3019
  const openValue = value ?? uncontrolled;
2726
3020
  const sketchValue = {
2727
3021
  roughness,
2728
3022
  seed: resolvedSeed,
2729
- sketchColor,
3023
+ sketchColor: ink,
2730
3024
  bowing,
2731
3025
  fillStyle,
2732
3026
  strokeWidth,
3027
+ hachureGap,
3028
+ hachureAngle,
3029
+ fillWeight,
2733
3030
  resolvedSeed,
2734
3031
  ink,
2735
3032
  openValue
@@ -2892,11 +3189,6 @@ var AccordionContent = forwardRef(function AccordionContent2({ className, style,
2892
3189
  }
2893
3190
  );
2894
3191
  });
2895
- var STATUS_COLOR = {
2896
- online: SKETCH_COLORS.success,
2897
- offline: "#8a8680",
2898
- busy: SKETCH_COLORS.accent
2899
- };
2900
3192
  var Avatar = forwardRef(
2901
3193
  function Avatar2({
2902
3194
  className,
@@ -2907,18 +3199,28 @@ var Avatar = forwardRef(
2907
3199
  size = 40,
2908
3200
  shape = "circle",
2909
3201
  status,
3202
+ fill,
2910
3203
  roughness,
2911
3204
  seed,
2912
3205
  sketchColor,
2913
3206
  bowing,
2914
3207
  fillStyle,
2915
3208
  strokeWidth,
3209
+ hachureGap,
3210
+ hachureAngle,
3211
+ fillWeight,
2916
3212
  ...rest
2917
3213
  }, ref) {
2918
- const ink = sketchColor ?? SKETCH_COLORS.ink;
3214
+ const theme = useSketchTheme(sketchColor);
3215
+ const ink = sketchColor ?? theme.ink;
2919
3216
  const resolvedSeed = useResolvedSeed(seed);
2920
3217
  const roughShape = shape === "circle" ? "ellipse" : "rectangle";
2921
3218
  const badge = 12;
3219
+ const statusColors = {
3220
+ online: theme.success,
3221
+ offline: theme.isDark ? "#9ca3af" : "#8a8680",
3222
+ busy: theme.accent
3223
+ };
2922
3224
  const rootStyle = {
2923
3225
  position: "relative",
2924
3226
  display: "inline-flex",
@@ -2945,8 +3247,11 @@ var Avatar = forwardRef(
2945
3247
  sketchColor: ink,
2946
3248
  bowing,
2947
3249
  fillStyle: fillStyle ?? "solid",
2948
- fill: "#f7f6f2",
3250
+ fill: fill ?? theme.paper,
2949
3251
  strokeWidth: strokeWidth ?? 1.6,
3252
+ hachureGap,
3253
+ hachureAngle,
3254
+ fillWeight,
2950
3255
  inset: 1.5
2951
3256
  }
2952
3257
  ),
@@ -2990,7 +3295,7 @@ var Avatar = forwardRef(
2990
3295
  fontWeight: doodleUiFontWeight(650),
2991
3296
  fontSize: Math.max(12, size * 0.36),
2992
3297
  color: ink,
2993
- background: SKETCH_COLORS.secondaryFill
3298
+ background: theme.secondaryFill
2994
3299
  },
2995
3300
  children: fallback
2996
3301
  }
@@ -3015,8 +3320,8 @@ var Avatar = forwardRef(
3015
3320
  shape: "ellipse",
3016
3321
  roughness: (roughness ?? 1.5) * 0.8,
3017
3322
  seed: deriveSeed(resolvedSeed, "status"),
3018
- sketchColor: STATUS_COLOR[status],
3019
- fill: STATUS_COLOR[status],
3323
+ sketchColor: statusColors[status],
3324
+ fill: statusColors[status],
3020
3325
  fillStyle: "solid",
3021
3326
  bowing,
3022
3327
  strokeWidth: 1,
@@ -3033,16 +3338,23 @@ var Avatar = forwardRef(
3033
3338
  var Slider = forwardRef(function Slider2({
3034
3339
  className,
3035
3340
  style,
3341
+ fill,
3036
3342
  roughness,
3037
3343
  seed,
3038
3344
  sketchColor,
3039
3345
  bowing,
3040
3346
  fillStyle,
3041
3347
  strokeWidth,
3348
+ hachureGap,
3349
+ hachureAngle,
3350
+ fillWeight,
3042
3351
  thumbShape = "circle",
3043
3352
  ...rest
3044
3353
  }, ref) {
3045
- const ink = sketchColor ?? SKETCH_COLORS.ink;
3354
+ const theme = useSketchTheme(sketchColor);
3355
+ const ink = sketchColor ?? theme.ink;
3356
+ const accent = sketchColor ?? theme.accent;
3357
+ const trackInk = sketchColor ?? (theme.isDark ? "rgba(243, 244, 246, 0.4)" : theme.ink);
3046
3358
  const resolvedSeed = useResolvedSeed(seed);
3047
3359
  return /* @__PURE__ */ jsxs(
3048
3360
  SliderPrimitive.Root,
@@ -3057,6 +3369,7 @@ var Slider = forwardRef(function Slider2({
3057
3369
  height: 28,
3058
3370
  userSelect: "none",
3059
3371
  touchAction: "none",
3372
+ color: ink,
3060
3373
  ...style
3061
3374
  },
3062
3375
  ...rest,
@@ -3076,7 +3389,7 @@ var Slider = forwardRef(function Slider2({
3076
3389
  shape: "line",
3077
3390
  roughness: roughness ?? 1.8,
3078
3391
  seed: resolvedSeed,
3079
- sketchColor: ink,
3392
+ sketchColor: trackInk,
3080
3393
  bowing: bowing ?? 2,
3081
3394
  strokeWidth: strokeWidth ?? 1.6,
3082
3395
  inset: 4
@@ -3096,7 +3409,7 @@ var Slider = forwardRef(function Slider2({
3096
3409
  shape: "line",
3097
3410
  roughness: (roughness ?? 1.5) + 0.4,
3098
3411
  seed: deriveSeed(resolvedSeed, "range"),
3099
- sketchColor: SKETCH_COLORS.accent,
3412
+ sketchColor: accent,
3100
3413
  bowing: bowing ?? 1.6,
3101
3414
  strokeWidth: (strokeWidth ?? 1.6) + 0.6,
3102
3415
  inset: 4
@@ -3124,11 +3437,14 @@ var Slider = forwardRef(function Slider2({
3124
3437
  shape: thumbShape === "square" ? "rectangle" : "ellipse",
3125
3438
  roughness: (roughness ?? 1.5) * 0.85,
3126
3439
  seed: deriveSeed(resolvedSeed, "thumb"),
3127
- sketchColor: SKETCH_COLORS.accent,
3128
- fill: "#f7f6f2",
3440
+ sketchColor: accent,
3441
+ fill: fill ?? theme.paper,
3129
3442
  fillStyle: fillStyle ?? "solid",
3130
3443
  bowing,
3131
3444
  strokeWidth: (strokeWidth ?? 1.5) + 0.3,
3445
+ hachureGap,
3446
+ hachureAngle,
3447
+ fillWeight,
3132
3448
  inset: 1
3133
3449
  }
3134
3450
  )
@@ -3167,7 +3483,10 @@ var Pagination = forwardRef(
3167
3483
  strokeWidth,
3168
3484
  ...rest
3169
3485
  }, ref) {
3170
- const ink = sketchColor ?? SKETCH_COLORS.ink;
3486
+ const theme = useSketchTheme(sketchColor);
3487
+ const ink = sketchColor ?? theme.ink;
3488
+ const accent = sketchColor ?? theme.accent;
3489
+ const accentFill = theme.isDark ? sketchColor ? `${sketchColor}25` : theme.accentFill : theme.accentFill;
3171
3490
  const resolvedSeed = useResolvedSeed(seed);
3172
3491
  const items = pageItems(page, count);
3173
3492
  return /* @__PURE__ */ jsxs(
@@ -3180,6 +3499,7 @@ var Pagination = forwardRef(
3180
3499
  display: "inline-flex",
3181
3500
  alignItems: "center",
3182
3501
  gap: 4,
3502
+ color: ink,
3183
3503
  ...style
3184
3504
  },
3185
3505
  ...rest,
@@ -3193,6 +3513,9 @@ var Pagination = forwardRef(
3193
3513
  roughness,
3194
3514
  seed: deriveSeed(resolvedSeed, "prev"),
3195
3515
  ink,
3516
+ accent,
3517
+ accentFill,
3518
+ isDark: theme.isDark,
3196
3519
  bowing,
3197
3520
  strokeWidth,
3198
3521
  children: /* @__PURE__ */ jsx("span", { style: { position: "relative", width: 16, height: 16, display: "block" }, children: /* @__PURE__ */ jsx(
@@ -3232,6 +3555,9 @@ var Pagination = forwardRef(
3232
3555
  roughness,
3233
3556
  seed: deriveSeed(resolvedSeed, `page-${item}`),
3234
3557
  ink,
3558
+ accent,
3559
+ accentFill,
3560
+ isDark: theme.isDark,
3235
3561
  bowing,
3236
3562
  strokeWidth,
3237
3563
  children: item
@@ -3248,6 +3574,9 @@ var Pagination = forwardRef(
3248
3574
  roughness,
3249
3575
  seed: deriveSeed(resolvedSeed, "next"),
3250
3576
  ink,
3577
+ accent,
3578
+ accentFill,
3579
+ isDark: theme.isDark,
3251
3580
  bowing,
3252
3581
  strokeWidth,
3253
3582
  children: /* @__PURE__ */ jsx("span", { style: { position: "relative", width: 16, height: 16, display: "block" }, children: /* @__PURE__ */ jsx(
@@ -3278,10 +3607,15 @@ function PageButton({
3278
3607
  roughness,
3279
3608
  seed,
3280
3609
  ink,
3610
+ accent,
3611
+ accentFill,
3612
+ isDark,
3281
3613
  bowing,
3282
3614
  strokeWidth,
3283
3615
  ...rest
3284
3616
  }) {
3617
+ const activeColor = accent ?? ink;
3618
+ const textColor = active ? isDark ? "#ffffff" : activeColor : ink;
3285
3619
  return /* @__PURE__ */ jsxs(
3286
3620
  "button",
3287
3621
  {
@@ -3296,7 +3630,7 @@ function PageButton({
3296
3630
  border: "none",
3297
3631
  background: "transparent",
3298
3632
  cursor: disabled ? "not-allowed" : "pointer",
3299
- color: ink,
3633
+ color: textColor,
3300
3634
  fontFamily: doodleUiFontFamily,
3301
3635
  fontWeight: active ? doodleUiFontWeight(700) : doodleUiFontWeight(400),
3302
3636
  fontSize: 14,
@@ -3312,9 +3646,9 @@ function PageButton({
3312
3646
  shape: "ellipse",
3313
3647
  roughness,
3314
3648
  seed,
3315
- sketchColor: active ? SKETCH_COLORS.accent : ink,
3649
+ sketchColor: active ? activeColor : ink,
3316
3650
  bowing,
3317
- fill: active ? SKETCH_COLORS.accentFill : void 0,
3651
+ fill: active ? accentFill : void 0,
3318
3652
  fillStyle: active ? "hachure" : void 0,
3319
3653
  strokeWidth: active ? (strokeWidth ?? 1.6) + 0.3 : strokeWidth ?? 1.4,
3320
3654
  inset: 1.5
@@ -3326,7 +3660,7 @@ function PageButton({
3326
3660
  shape: "ellipse",
3327
3661
  roughness: (roughness ?? 1.5) + 0.45,
3328
3662
  seed,
3329
- sketchColor: SKETCH_COLORS.accent,
3663
+ sketchColor: activeColor,
3330
3664
  bowing: bowing ?? 1.6,
3331
3665
  strokeWidth: 1.1,
3332
3666
  inset: -1.5,
@@ -3359,9 +3693,13 @@ var Breadcrumb = forwardRef(
3359
3693
  sketchColor,
3360
3694
  bowing,
3361
3695
  strokeWidth,
3696
+ hachureGap,
3697
+ hachureAngle,
3698
+ fillWeight,
3362
3699
  ...rest
3363
3700
  }, ref) {
3364
- const ink = sketchColor ?? SKETCH_COLORS.ink;
3701
+ const theme = useSketchTheme(sketchColor);
3702
+ const ink = sketchColor ?? theme.ink;
3365
3703
  const resolvedSeed = useResolvedSeed(seed);
3366
3704
  const items = Children.toArray(children).filter(isValidElement);
3367
3705
  return /* @__PURE__ */ jsx(
@@ -3370,9 +3708,12 @@ var Breadcrumb = forwardRef(
3370
3708
  value: {
3371
3709
  roughness,
3372
3710
  seed: resolvedSeed,
3373
- sketchColor,
3711
+ sketchColor: ink,
3374
3712
  bowing,
3375
3713
  strokeWidth,
3714
+ hachureGap,
3715
+ hachureAngle,
3716
+ fillWeight,
3376
3717
  resolvedSeed,
3377
3718
  ink,
3378
3719
  separator
@@ -3511,11 +3852,15 @@ var Skeleton = forwardRef(
3511
3852
  bowing,
3512
3853
  fillStyle,
3513
3854
  strokeWidth,
3855
+ hachureGap,
3856
+ hachureAngle,
3857
+ fillWeight,
3514
3858
  ...rest
3515
3859
  }, ref) {
3516
3860
  const base = useResolvedSeed(seed);
3517
3861
  const [tick, setTick] = useState(0);
3518
- const ink = sketchColor ?? SKETCH_COLORS.ink;
3862
+ const theme = useSketchTheme(sketchColor);
3863
+ const ink = sketchColor ?? theme.ink;
3519
3864
  useEffect(() => {
3520
3865
  if (!pulse) return;
3521
3866
  const id = window.setInterval(() => {
@@ -3552,6 +3897,9 @@ var Skeleton = forwardRef(
3552
3897
  fillStyle: fillStyle ?? "hachure",
3553
3898
  bowing: bowing ?? 1.6,
3554
3899
  strokeWidth: strokeWidth ?? 1.1,
3900
+ hachureGap,
3901
+ hachureAngle,
3902
+ fillWeight,
3555
3903
  inset: 2,
3556
3904
  style: { opacity: 0.28 }
3557
3905
  }
@@ -3572,15 +3920,21 @@ var Stepper = forwardRef(
3572
3920
  steps,
3573
3921
  current = 0,
3574
3922
  orientation = "horizontal",
3923
+ fill,
3575
3924
  roughness,
3576
3925
  seed,
3577
3926
  sketchColor,
3578
3927
  bowing,
3579
3928
  fillStyle,
3580
3929
  strokeWidth,
3930
+ hachureGap,
3931
+ hachureAngle,
3932
+ fillWeight,
3581
3933
  ...rest
3582
3934
  }, ref) {
3583
- const ink = sketchColor ?? SKETCH_COLORS.ink;
3935
+ const theme = useSketchTheme(sketchColor);
3936
+ const ink = sketchColor ?? theme.ink;
3937
+ const accent = sketchColor ?? theme.accent;
3584
3938
  const resolvedSeed = useResolvedSeed(seed);
3585
3939
  const items = normalizeSteps(steps);
3586
3940
  const horizontal = orientation === "horizontal";
@@ -3594,13 +3948,15 @@ var Stepper = forwardRef(
3594
3948
  display: "flex",
3595
3949
  flexDirection: horizontal ? "row" : "column",
3596
3950
  alignItems: horizontal ? "flex-start" : "stretch",
3951
+ color: ink,
3597
3952
  ...style
3598
3953
  },
3599
3954
  ...rest,
3600
3955
  children: items.map((step, index) => {
3601
3956
  const complete = index < current;
3602
3957
  const active = index === current;
3603
- const markerColor = complete || active ? SKETCH_COLORS.accent : ink;
3958
+ const markerColor = complete || active ? accent : ink;
3959
+ const completeFill = theme.isDark ? sketchColor ? `${sketchColor}25` : theme.accentFill : theme.accentFill;
3604
3960
  return /* @__PURE__ */ jsxs(
3605
3961
  "div",
3606
3962
  {
@@ -3648,10 +4004,13 @@ var Stepper = forwardRef(
3648
4004
  roughness,
3649
4005
  seed: deriveSeed(resolvedSeed, `step-${index}`),
3650
4006
  sketchColor: markerColor,
3651
- fill: complete ? SKETCH_COLORS.accentFill : active ? "#f7f6f2" : void 0,
4007
+ fill: complete ? completeFill : active ? fill ?? theme.paper : void 0,
3652
4008
  fillStyle: complete || active ? fillStyle ?? "hachure" : void 0,
3653
4009
  bowing,
3654
4010
  strokeWidth: active ? (strokeWidth ?? 1.6) + 0.4 : strokeWidth ?? 1.5,
4011
+ hachureGap,
4012
+ hachureAngle,
4013
+ fillWeight,
3655
4014
  inset: 1.5
3656
4015
  }
3657
4016
  ),
@@ -3676,7 +4035,7 @@ var Stepper = forwardRef(
3676
4035
  shape: horizontal ? "line" : "line-vertical",
3677
4036
  roughness: (roughness ?? 1.5) + 0.3,
3678
4037
  seed: deriveSeed(resolvedSeed, `connector-${index}`),
3679
- sketchColor: complete ? SKETCH_COLORS.accent : ink,
4038
+ sketchColor: complete ? accent : theme.isDark ? "rgba(243, 244, 246, 0.35)" : ink,
3680
4039
  bowing: bowing ?? 2,
3681
4040
  strokeWidth: strokeWidth ?? 1.4,
3682
4041
  inset: 2
@@ -3724,10 +4083,14 @@ var Label2 = forwardRef(function Label3({
3724
4083
  sketchColor,
3725
4084
  bowing,
3726
4085
  strokeWidth,
4086
+ hachureGap,
4087
+ hachureAngle,
4088
+ fillWeight,
3727
4089
  animate,
3728
4090
  ...rest
3729
4091
  }, ref) {
3730
- const ink = sketchColor ?? SKETCH_COLORS.ink;
4092
+ const theme = useSketchTheme(sketchColor);
4093
+ const ink = sketchColor ?? theme.ink;
3731
4094
  const resolvedSeed = useResolvedSeed(seed);
3732
4095
  const shouldAnimate = useAnimate(animate);
3733
4096
  const markRef = useRef(null);
@@ -3763,11 +4126,14 @@ var Label2 = forwardRef(function Label3({
3763
4126
  shape: "ellipse",
3764
4127
  roughness: (roughness ?? 1.5) * 0.9,
3765
4128
  seed: resolvedSeed,
3766
- sketchColor: SKETCH_COLORS.accent,
4129
+ sketchColor: theme.accent,
3767
4130
  bowing,
3768
4131
  fillStyle: "solid",
3769
- fill: SKETCH_COLORS.accent,
4132
+ fill: theme.accent,
3770
4133
  strokeWidth: strokeWidth ?? 1.2,
4134
+ hachureGap,
4135
+ hachureAngle,
4136
+ fillWeight,
3771
4137
  inset: 1
3772
4138
  }
3773
4139
  )
@@ -3803,10 +4169,14 @@ var Collapsible = forwardRef(
3803
4169
  bowing,
3804
4170
  fillStyle,
3805
4171
  strokeWidth,
4172
+ hachureGap,
4173
+ hachureAngle,
4174
+ fillWeight,
3806
4175
  ...rest
3807
4176
  }, ref) {
3808
4177
  const resolvedSeed = useResolvedSeed(seed);
3809
- const ink = sketchColor ?? SKETCH_COLORS.ink;
4178
+ const theme = useSketchTheme(sketchColor);
4179
+ const ink = sketchColor ?? theme.ink;
3810
4180
  const [uncontrolled, setUncontrolled] = useState(defaultOpen ?? false);
3811
4181
  const isOpen = open ?? uncontrolled;
3812
4182
  return /* @__PURE__ */ jsx(
@@ -3815,10 +4185,13 @@ var Collapsible = forwardRef(
3815
4185
  value: {
3816
4186
  roughness,
3817
4187
  seed: resolvedSeed,
3818
- sketchColor,
4188
+ sketchColor: ink,
3819
4189
  bowing,
3820
4190
  fillStyle,
3821
4191
  strokeWidth,
4192
+ hachureGap,
4193
+ hachureAngle,
4194
+ fillWeight,
3822
4195
  resolvedSeed,
3823
4196
  ink,
3824
4197
  open: isOpen
@@ -3933,17 +4306,22 @@ function usePopoverSketch() {
3933
4306
  }
3934
4307
  function Popover({
3935
4308
  children,
4309
+ fill,
3936
4310
  roughness,
3937
4311
  seed,
3938
4312
  sketchColor,
3939
4313
  bowing,
3940
4314
  fillStyle,
3941
4315
  strokeWidth,
4316
+ hachureGap,
4317
+ hachureAngle,
4318
+ fillWeight,
3942
4319
  animate,
3943
4320
  ...rest
3944
4321
  }) {
3945
4322
  const resolvedSeed = useResolvedSeed(seed);
3946
- const ink = sketchColor ?? SKETCH_COLORS.ink;
4323
+ const theme = useSketchTheme(sketchColor);
4324
+ const ink = sketchColor ?? theme.ink;
3947
4325
  return /* @__PURE__ */ jsx(
3948
4326
  PopoverSketchContext.Provider,
3949
4327
  {
@@ -3954,8 +4332,12 @@ function Popover({
3954
4332
  bowing,
3955
4333
  fillStyle,
3956
4334
  strokeWidth,
4335
+ hachureGap,
4336
+ hachureAngle,
4337
+ fillWeight,
3957
4338
  resolvedSeed,
3958
4339
  ink,
4340
+ paper: fill ?? theme.paper,
3959
4341
  animate
3960
4342
  },
3961
4343
  children: /* @__PURE__ */ jsx(PopoverPrimitive.Root, { ...rest, children })
@@ -3966,7 +4348,7 @@ var PopoverTrigger = PopoverPrimitive.Trigger;
3966
4348
  var PopoverAnchor = PopoverPrimitive.Anchor;
3967
4349
  var PopoverClose = PopoverPrimitive.Close;
3968
4350
  var PopoverContent = forwardRef(
3969
- function PopoverContent2({ className, style, children, sideOffset = 8, ...rest }, ref) {
4351
+ function PopoverContent2({ className, style, children, fill, sideOffset = 8, ...rest }, ref) {
3970
4352
  const sketch = usePopoverSketch();
3971
4353
  return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
3972
4354
  PopoverPrimitive.Content,
@@ -3974,7 +4356,7 @@ var PopoverContent = forwardRef(
3974
4356
  ref,
3975
4357
  sideOffset,
3976
4358
  className: cn(className),
3977
- style: { zIndex: 80, outline: "none", ...style },
4359
+ style: { zIndex: 80, outline: "none", color: sketch.ink, ...style },
3978
4360
  ...rest,
3979
4361
  children: /* @__PURE__ */ jsx(
3980
4362
  SketchBox,
@@ -3984,11 +4366,14 @@ var PopoverContent = forwardRef(
3984
4366
  sketchColor: sketch.ink,
3985
4367
  bowing: sketch.bowing,
3986
4368
  fillStyle: sketch.fillStyle ?? "solid",
3987
- fill: "#f7f6f2",
4369
+ fill: fill ?? sketch.paper,
3988
4370
  strokeWidth: sketch.strokeWidth ?? 1.5,
4371
+ hachureGap: sketch.hachureGap,
4372
+ hachureAngle: sketch.hachureAngle,
4373
+ fillWeight: sketch.fillWeight,
3989
4374
  shadow: true,
3990
4375
  animate: sketch.animate,
3991
- contentStyle: { padding: "14px 16px", minWidth: 200 },
4376
+ contentStyle: { padding: "14px 16px", minWidth: 200, color: sketch.ink },
3992
4377
  children
3993
4378
  }
3994
4379
  )
@@ -3996,12 +4381,9 @@ var PopoverContent = forwardRef(
3996
4381
  ) });
3997
4382
  }
3998
4383
  );
3999
- var PopoverArrow = forwardRef(
4000
- function PopoverArrow2(props, ref) {
4001
- const sketch = usePopoverSketch();
4002
- return /* @__PURE__ */ jsx(PopoverPrimitive.Arrow, { ref, fill: sketch.ink, ...props });
4003
- }
4004
- );
4384
+ function PopoverArrow(props) {
4385
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Arrow, { ...props });
4386
+ }
4005
4387
  var DropdownMenuSketchContext = createContext(null);
4006
4388
  function useDropdownMenuSketch() {
4007
4389
  const ctx = useContext(DropdownMenuSketchContext);
@@ -4014,17 +4396,22 @@ function useDropdownMenuSketch() {
4014
4396
  }
4015
4397
  function DropdownMenu({
4016
4398
  children,
4399
+ fill,
4017
4400
  roughness,
4018
4401
  seed,
4019
4402
  sketchColor,
4020
4403
  bowing,
4021
4404
  fillStyle,
4022
4405
  strokeWidth,
4406
+ hachureGap,
4407
+ hachureAngle,
4408
+ fillWeight,
4023
4409
  animate,
4024
4410
  ...rest
4025
4411
  }) {
4026
4412
  const resolvedSeed = useResolvedSeed(seed);
4027
- const ink = sketchColor ?? SKETCH_COLORS.ink;
4413
+ const theme = useSketchTheme(sketchColor);
4414
+ const ink = sketchColor ?? theme.ink;
4028
4415
  return /* @__PURE__ */ jsx(
4029
4416
  DropdownMenuSketchContext.Provider,
4030
4417
  {
@@ -4035,8 +4422,13 @@ function DropdownMenu({
4035
4422
  bowing,
4036
4423
  fillStyle,
4037
4424
  strokeWidth,
4425
+ hachureGap,
4426
+ hachureAngle,
4427
+ fillWeight,
4038
4428
  resolvedSeed,
4039
4429
  ink,
4430
+ paper: fill ?? theme.paper,
4431
+ accent: theme.accent,
4040
4432
  animate
4041
4433
  },
4042
4434
  children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.Root, { ...rest, children })
@@ -4047,7 +4439,7 @@ var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
4047
4439
  var DropdownMenuGroup = DropdownMenuPrimitive.Group;
4048
4440
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
4049
4441
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
4050
- var DropdownMenuContent = forwardRef(function DropdownMenuContent2({ className, style, children, sideOffset = 6, align = "start", ...rest }, ref) {
4442
+ var DropdownMenuContent = forwardRef(function DropdownMenuContent2({ className, style, children, fill, sideOffset = 6, align = "start", ...rest }, ref) {
4051
4443
  const sketch = useDropdownMenuSketch();
4052
4444
  return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
4053
4445
  DropdownMenuPrimitive.Content,
@@ -4056,7 +4448,7 @@ var DropdownMenuContent = forwardRef(function DropdownMenuContent2({ className,
4056
4448
  sideOffset,
4057
4449
  align,
4058
4450
  className: cn(className),
4059
- style: { zIndex: 80, outline: "none", minWidth: 180, ...style },
4451
+ style: { zIndex: 80, outline: "none", minWidth: 180, color: sketch.ink, ...style },
4060
4452
  ...rest,
4061
4453
  children: /* @__PURE__ */ jsx(
4062
4454
  SketchBox,
@@ -4066,11 +4458,14 @@ var DropdownMenuContent = forwardRef(function DropdownMenuContent2({ className,
4066
4458
  sketchColor: sketch.ink,
4067
4459
  bowing: sketch.bowing,
4068
4460
  fillStyle: sketch.fillStyle ?? "solid",
4069
- fill: "#f7f6f2",
4461
+ fill: fill ?? sketch.paper,
4070
4462
  strokeWidth: sketch.strokeWidth ?? 1.5,
4463
+ hachureGap: sketch.hachureGap,
4464
+ hachureAngle: sketch.hachureAngle,
4465
+ fillWeight: sketch.fillWeight,
4071
4466
  shadow: true,
4072
4467
  animate: sketch.animate,
4073
- contentStyle: { padding: "6px 4px" },
4468
+ contentStyle: { padding: "6px 4px", color: sketch.ink },
4074
4469
  children
4075
4470
  }
4076
4471
  )
@@ -4185,7 +4580,7 @@ var DropdownMenuCheckboxItem = forwardRef(function DropdownMenuCheckboxItem2({ c
4185
4580
  path: CHECK_PATH2,
4186
4581
  roughness: (sketch.roughness ?? 1.5) * 0.7,
4187
4582
  seed: deriveSeed(sketch.resolvedSeed, "checkbox-mark"),
4188
- sketchColor: SKETCH_COLORS.accent,
4583
+ sketchColor: sketch.accent,
4189
4584
  bowing: sketch.bowing,
4190
4585
  strokeWidth: 1.6,
4191
4586
  inset: 0
@@ -4253,10 +4648,10 @@ var DropdownMenuRadioItem = forwardRef(function DropdownMenuRadioItem2({ classNa
4253
4648
  shape: "ellipse",
4254
4649
  roughness: (sketch.roughness ?? 1.5) * 0.8,
4255
4650
  seed: deriveSeed(sketch.resolvedSeed, "radio-mark"),
4256
- sketchColor: SKETCH_COLORS.accent,
4651
+ sketchColor: sketch.accent,
4257
4652
  bowing: sketch.bowing,
4258
4653
  fillStyle: "solid",
4259
- fill: SKETCH_COLORS.accent,
4654
+ fill: sketch.accent,
4260
4655
  strokeWidth: 1.2,
4261
4656
  inset: 0
4262
4657
  }
@@ -4331,17 +4726,22 @@ function Dialog2({
4331
4726
  open,
4332
4727
  defaultOpen,
4333
4728
  onOpenChange,
4729
+ fill,
4334
4730
  roughness,
4335
4731
  seed,
4336
4732
  sketchColor,
4337
4733
  bowing,
4338
4734
  fillStyle,
4339
4735
  strokeWidth,
4736
+ hachureGap,
4737
+ hachureAngle,
4738
+ fillWeight,
4340
4739
  animate,
4341
4740
  ...rest
4342
4741
  }) {
4343
4742
  const resolvedSeed = useResolvedSeed(seed);
4344
- const ink = sketchColor ?? SKETCH_COLORS.ink;
4743
+ const theme = useSketchTheme(sketchColor);
4744
+ const ink = sketchColor ?? theme.ink;
4345
4745
  const [uncontrolled, setUncontrolled] = useState(defaultOpen === true);
4346
4746
  const isOpen = open ?? uncontrolled;
4347
4747
  return /* @__PURE__ */ jsx(
@@ -4354,8 +4754,13 @@ function Dialog2({
4354
4754
  bowing,
4355
4755
  fillStyle,
4356
4756
  strokeWidth,
4757
+ hachureGap,
4758
+ hachureAngle,
4759
+ fillWeight,
4357
4760
  resolvedSeed,
4358
4761
  ink,
4762
+ paper: fill ?? theme.paper,
4763
+ isDark: theme.isDark,
4359
4764
  animate,
4360
4765
  open: isOpen
4361
4766
  },
@@ -4391,7 +4796,7 @@ var DialogOverlay = forwardRef(
4391
4796
  style: {
4392
4797
  position: "fixed",
4393
4798
  inset: 0,
4394
- background: "rgba(31, 29, 26, 0.38)",
4799
+ background: sketch.isDark ? "rgba(0, 0, 0, 0.65)" : "rgba(31, 29, 26, 0.38)",
4395
4800
  zIndex: 70,
4396
4801
  ...style
4397
4802
  }
@@ -4400,7 +4805,7 @@ var DialogOverlay = forwardRef(
4400
4805
  }
4401
4806
  );
4402
4807
  var DialogContent = forwardRef(
4403
- function DialogContent2({ className, style, contentStyle, children, ...rest }, ref) {
4808
+ function DialogContent2({ className, style, contentStyle, fill, children, ...rest }, ref) {
4404
4809
  const sketch = useDialogSketch();
4405
4810
  const shouldAnimate = useAnimate(sketch.animate);
4406
4811
  return /* @__PURE__ */ jsx(AnimatePresence, { children: sketch.open ? /* @__PURE__ */ jsxs(Dialog.Portal, { forceMount: true, children: [
@@ -4430,6 +4835,7 @@ var DialogContent = forwardRef(
4430
4835
  width: "min(420px, calc(100vw - 32px))",
4431
4836
  outline: "none",
4432
4837
  pointerEvents: "auto",
4838
+ color: sketch.ink,
4433
4839
  ...style
4434
4840
  },
4435
4841
  children: /* @__PURE__ */ jsx(
@@ -4440,10 +4846,13 @@ var DialogContent = forwardRef(
4440
4846
  sketchColor: sketch.ink,
4441
4847
  bowing: sketch.bowing,
4442
4848
  fillStyle: sketch.fillStyle ?? "solid",
4443
- fill: "#f7f6f2",
4849
+ fill: fill ?? sketch.paper,
4444
4850
  strokeWidth: sketch.strokeWidth ?? 2,
4851
+ hachureGap: sketch.hachureGap,
4852
+ hachureAngle: sketch.hachureAngle,
4853
+ fillWeight: sketch.fillWeight,
4445
4854
  animate: sketch.animate,
4446
- contentStyle: { padding: 20, ...contentStyle },
4855
+ contentStyle: { padding: 20, color: sketch.ink, ...contentStyle },
4447
4856
  children
4448
4857
  }
4449
4858
  )
@@ -4540,17 +4949,22 @@ function AlertDialog({
4540
4949
  open,
4541
4950
  defaultOpen,
4542
4951
  onOpenChange,
4952
+ fill,
4543
4953
  roughness,
4544
4954
  seed,
4545
4955
  sketchColor,
4546
4956
  bowing,
4547
4957
  fillStyle,
4548
4958
  strokeWidth,
4959
+ hachureGap,
4960
+ hachureAngle,
4961
+ fillWeight,
4549
4962
  animate,
4550
4963
  ...rest
4551
4964
  }) {
4552
4965
  const resolvedSeed = useResolvedSeed(seed);
4553
- const ink = sketchColor ?? SKETCH_COLORS.ink;
4966
+ const theme = useSketchTheme(sketchColor);
4967
+ const ink = sketchColor ?? theme.ink;
4554
4968
  const [uncontrolled, setUncontrolled] = useState(defaultOpen === true);
4555
4969
  const isOpen = open ?? uncontrolled;
4556
4970
  return /* @__PURE__ */ jsx(
@@ -4563,8 +4977,13 @@ function AlertDialog({
4563
4977
  bowing,
4564
4978
  fillStyle,
4565
4979
  strokeWidth,
4980
+ hachureGap,
4981
+ hachureAngle,
4982
+ fillWeight,
4566
4983
  resolvedSeed,
4567
4984
  ink,
4985
+ paper: fill ?? theme.paper,
4986
+ isDark: theme.isDark,
4568
4987
  animate,
4569
4988
  open: isOpen
4570
4989
  },
@@ -4598,14 +5017,14 @@ var AlertDialogOverlay = forwardRef(function AlertDialogOverlay2({ style, ...res
4598
5017
  style: {
4599
5018
  position: "fixed",
4600
5019
  inset: 0,
4601
- background: "rgba(31, 29, 26, 0.38)",
5020
+ background: sketch.isDark ? "rgba(0, 0, 0, 0.65)" : "rgba(31, 29, 26, 0.38)",
4602
5021
  zIndex: 70,
4603
5022
  ...style
4604
5023
  }
4605
5024
  }
4606
5025
  ) });
4607
5026
  });
4608
- var AlertDialogContent = forwardRef(function AlertDialogContent2({ className, style, contentStyle, children, ...rest }, ref) {
5027
+ var AlertDialogContent = forwardRef(function AlertDialogContent2({ className, style, contentStyle, fill, children, ...rest }, ref) {
4609
5028
  const sketch = useAlertDialogSketch();
4610
5029
  const shouldAnimate = useAnimate(sketch.animate);
4611
5030
  return /* @__PURE__ */ jsx(AnimatePresence, { children: sketch.open ? /* @__PURE__ */ jsxs(AlertDialogPrimitive.Portal, { forceMount: true, children: [
@@ -4635,6 +5054,7 @@ var AlertDialogContent = forwardRef(function AlertDialogContent2({ className, st
4635
5054
  width: "min(420px, calc(100vw - 32px))",
4636
5055
  outline: "none",
4637
5056
  pointerEvents: "auto",
5057
+ color: sketch.ink,
4638
5058
  ...style
4639
5059
  },
4640
5060
  children: /* @__PURE__ */ jsx(
@@ -4645,10 +5065,13 @@ var AlertDialogContent = forwardRef(function AlertDialogContent2({ className, st
4645
5065
  sketchColor: sketch.ink,
4646
5066
  bowing: sketch.bowing,
4647
5067
  fillStyle: sketch.fillStyle ?? "solid",
4648
- fill: "#f7f6f2",
5068
+ fill: fill ?? sketch.paper,
4649
5069
  strokeWidth: sketch.strokeWidth ?? 2,
5070
+ hachureGap: sketch.hachureGap,
5071
+ hachureAngle: sketch.hachureAngle,
5072
+ fillWeight: sketch.fillWeight,
4650
5073
  animate: sketch.animate,
4651
- contentStyle: { padding: 20, ...contentStyle },
5074
+ contentStyle: { padding: 20, color: sketch.ink, ...contentStyle },
4652
5075
  children
4653
5076
  }
4654
5077
  )
@@ -4790,11 +5213,15 @@ var Command = forwardRef(
4790
5213
  bowing,
4791
5214
  fillStyle,
4792
5215
  strokeWidth,
5216
+ hachureGap,
5217
+ hachureAngle,
5218
+ fillWeight,
4793
5219
  animate,
4794
5220
  ...rest
4795
5221
  }, ref) {
4796
5222
  const resolvedSeed = useResolvedSeed(seed);
4797
- const ink = sketchColor ?? SKETCH_COLORS.ink;
5223
+ const theme = useSketchTheme(sketchColor);
5224
+ const ink = sketchColor ?? theme.ink;
4798
5225
  return /* @__PURE__ */ jsx(
4799
5226
  CommandSketchContext.Provider,
4800
5227
  {
@@ -4805,24 +5232,31 @@ var Command = forwardRef(
4805
5232
  bowing,
4806
5233
  fillStyle,
4807
5234
  strokeWidth,
5235
+ hachureGap,
5236
+ hachureAngle,
5237
+ fillWeight,
4808
5238
  resolvedSeed,
4809
5239
  ink,
5240
+ paper: theme.paper,
4810
5241
  animate
4811
5242
  },
4812
5243
  children: /* @__PURE__ */ jsx(
4813
5244
  SketchBox,
4814
5245
  {
4815
5246
  className: cn(className),
4816
- style,
5247
+ style: { color: ink, ...style },
4817
5248
  roughness,
4818
5249
  seed: resolvedSeed,
4819
5250
  sketchColor: ink,
4820
5251
  bowing,
4821
5252
  fillStyle: fillStyle ?? "solid",
4822
- fill: "#f7f6f2",
5253
+ fill: theme.paper,
4823
5254
  strokeWidth: strokeWidth ?? 1.5,
5255
+ hachureGap,
5256
+ hachureAngle,
5257
+ fillWeight,
4824
5258
  animate,
4825
- contentStyle: { padding: 0, display: "flex", flexDirection: "column" },
5259
+ contentStyle: { padding: 0, display: "flex", flexDirection: "column", color: ink },
4826
5260
  children: /* @__PURE__ */ jsx(Command$1, { ref, ...rest, children })
4827
5261
  }
4828
5262
  )
@@ -5043,6 +5477,9 @@ function Combobox({
5043
5477
  bowing,
5044
5478
  fillStyle,
5045
5479
  strokeWidth,
5480
+ hachureGap,
5481
+ hachureAngle,
5482
+ fillWeight,
5046
5483
  animate,
5047
5484
  "aria-label": ariaLabel
5048
5485
  }) {
@@ -5052,7 +5489,8 @@ function Combobox({
5052
5489
  const selectedOption = options.find(
5053
5490
  (option) => option.value === selectedValue
5054
5491
  );
5055
- const ink = sketchColor ?? SKETCH_COLORS.ink;
5492
+ const theme = useSketchTheme(sketchColor);
5493
+ const ink = sketchColor ?? theme.ink;
5056
5494
  const resolvedSeed = useResolvedSeed(seed);
5057
5495
  const shouldAnimate = useAnimate(animate);
5058
5496
  const triggerRef = useRef(null);
@@ -5102,9 +5540,12 @@ function Combobox({
5102
5540
  shape: "rectangle",
5103
5541
  roughness,
5104
5542
  seed: resolvedSeed,
5105
- sketchColor: open ? SKETCH_COLORS.accent : ink,
5543
+ sketchColor: open ? theme.accent : ink,
5106
5544
  bowing,
5107
5545
  fillStyle,
5546
+ hachureGap,
5547
+ hachureAngle,
5548
+ fillWeight,
5108
5549
  strokeWidth: open ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth
5109
5550
  }
5110
5551
  ),
@@ -5163,6 +5604,9 @@ function Combobox({
5163
5604
  bowing,
5164
5605
  fillStyle,
5165
5606
  strokeWidth,
5607
+ hachureGap,
5608
+ hachureAngle,
5609
+ fillWeight,
5166
5610
  animate,
5167
5611
  children: [
5168
5612
  /* @__PURE__ */ jsx(CommandInput, { placeholder: searchPlaceholder }),
@@ -5190,16 +5634,21 @@ var Kbd = forwardRef(function Kbd2({
5190
5634
  children,
5191
5635
  className,
5192
5636
  style,
5637
+ fill,
5193
5638
  roughness,
5194
5639
  seed,
5195
5640
  sketchColor,
5196
5641
  bowing,
5197
5642
  fillStyle,
5198
5643
  strokeWidth,
5644
+ hachureGap,
5645
+ hachureAngle,
5646
+ fillWeight,
5199
5647
  animate,
5200
5648
  ...rest
5201
5649
  }, ref) {
5202
- const ink = sketchColor ?? SKETCH_COLORS.ink;
5650
+ const theme = useSketchTheme(sketchColor);
5651
+ const ink = sketchColor ?? theme.ink;
5203
5652
  return /* @__PURE__ */ jsx(
5204
5653
  SketchBox,
5205
5654
  {
@@ -5207,6 +5656,7 @@ var Kbd = forwardRef(function Kbd2({
5207
5656
  style: {
5208
5657
  display: "inline-flex",
5209
5658
  verticalAlign: "middle",
5659
+ color: ink,
5210
5660
  ...style
5211
5661
  },
5212
5662
  contentStyle: {
@@ -5214,10 +5664,14 @@ var Kbd = forwardRef(function Kbd2({
5214
5664
  fontSize: 11,
5215
5665
  fontFamily: doodleUiFontFamily,
5216
5666
  lineHeight: 1.35,
5217
- letterSpacing: "0.04em"
5667
+ letterSpacing: "0.04em",
5668
+ color: ink
5218
5669
  },
5219
- fill: SKETCH_COLORS.secondaryFill,
5670
+ fill: fill ?? theme.secondaryFill,
5220
5671
  fillStyle: fillStyle ?? "hachure",
5672
+ hachureGap: hachureGap ?? 6,
5673
+ hachureAngle,
5674
+ fillWeight: fillWeight ?? 0.8,
5221
5675
  roughness,
5222
5676
  seed,
5223
5677
  sketchColor: ink,
@@ -5264,7 +5718,8 @@ var Spinner = forwardRef(
5264
5718
  }, ref) {
5265
5719
  const px = SIZE_PX[size];
5266
5720
  const resolvedSeed = useResolvedSeed(seed);
5267
- const ink = sketchColor ?? SKETCH_COLORS.ink;
5721
+ const theme = useSketchTheme(sketchColor);
5722
+ const ink = sketchColor ?? theme.ink;
5268
5723
  const shouldSpin = useAnimate(animate);
5269
5724
  const boxStyle = {
5270
5725
  position: "relative",
@@ -5332,6 +5787,9 @@ var Toggle = forwardRef(
5332
5787
  bowing,
5333
5788
  fillStyle,
5334
5789
  strokeWidth,
5790
+ hachureGap,
5791
+ hachureAngle,
5792
+ fillWeight,
5335
5793
  pressed,
5336
5794
  defaultPressed,
5337
5795
  onPressedChange,
@@ -5343,7 +5801,10 @@ var Toggle = forwardRef(
5343
5801
  const rootRef = useRef(null);
5344
5802
  const [uncontrolled, setUncontrolled] = useState(defaultPressed === true);
5345
5803
  const isPressed = pressed ?? uncontrolled;
5346
- const ink = sketchColor ?? SKETCH_COLORS.ink;
5804
+ const theme = useSketchTheme(sketchColor);
5805
+ const ink = sketchColor ?? theme.ink;
5806
+ const accent = sketchColor ?? theme.accent;
5807
+ const accentFill = theme.isDark ? sketchColor ? `${sketchColor}25` : theme.accentFill : theme.accentFill;
5347
5808
  const resolvedSeed = useResolvedSeed(seed);
5348
5809
  const shouldAnimate = useAnimate(animate);
5349
5810
  const pressSeed = deriveSeed(resolvedSeed, isPressed ? "on" : "off");
@@ -5372,7 +5833,7 @@ var Toggle = forwardRef(
5372
5833
  border: "none",
5373
5834
  background: "transparent",
5374
5835
  cursor: disabled ? "not-allowed" : "pointer",
5375
- color: ink,
5836
+ color: isPressed ? theme.isDark ? "#ffffff" : accent : ink,
5376
5837
  fontFamily: doodleUiFontFamily,
5377
5838
  fontWeight: doodleUiFontWeight(600),
5378
5839
  opacity: disabled ? 0.45 : 1,
@@ -5388,11 +5849,14 @@ var Toggle = forwardRef(
5388
5849
  shape: "rectangle",
5389
5850
  roughness,
5390
5851
  seed: sketchSeed,
5391
- sketchColor: isPressed ? SKETCH_COLORS.accent : ink,
5852
+ sketchColor: isPressed ? accent : ink,
5392
5853
  bowing,
5393
5854
  fillStyle: fillStyle ?? "hachure",
5394
- fill: isPressed ? SKETCH_COLORS.accentFill : void 0,
5395
- strokeWidth: strokeWidth ?? 1.6
5855
+ fill: isPressed ? accentFill : void 0,
5856
+ strokeWidth: strokeWidth ?? 1.6,
5857
+ hachureGap: hachureGap ?? 7,
5858
+ hachureAngle,
5859
+ fillWeight: fillWeight ?? 1
5396
5860
  }
5397
5861
  ),
5398
5862
  /* @__PURE__ */ jsx("span", { style: { position: "relative", zIndex: 1 }, children })
@@ -5418,13 +5882,19 @@ function ToggleGroup(props) {
5418
5882
  bowing,
5419
5883
  fillStyle,
5420
5884
  strokeWidth,
5885
+ hachureGap,
5886
+ hachureAngle,
5887
+ fillWeight,
5421
5888
  size = "md",
5422
5889
  animate,
5423
5890
  type = "single",
5424
5891
  ...rest
5425
5892
  } = props;
5426
5893
  const resolvedSeed = useResolvedSeed(seed);
5427
- const ink = sketchColor ?? SKETCH_COLORS.ink;
5894
+ const theme = useSketchTheme(sketchColor);
5895
+ const ink = sketchColor ?? theme.ink;
5896
+ const accent = sketchColor ?? theme.accent;
5897
+ const accentFill = theme.isDark ? sketchColor ? `${sketchColor}25` : theme.accentFill : theme.accentFill;
5428
5898
  const rootStyle = { display: "inline-flex", gap: 6, flexWrap: "wrap" };
5429
5899
  return /* @__PURE__ */ jsx(
5430
5900
  ToggleGroupSketchContext.Provider,
@@ -5436,8 +5906,14 @@ function ToggleGroup(props) {
5436
5906
  bowing,
5437
5907
  fillStyle,
5438
5908
  strokeWidth,
5909
+ hachureGap,
5910
+ hachureAngle,
5911
+ fillWeight,
5439
5912
  resolvedSeed,
5440
5913
  ink,
5914
+ accent,
5915
+ accentFill,
5916
+ isDark: theme.isDark,
5441
5917
  animate,
5442
5918
  size
5443
5919
  },
@@ -5486,6 +5962,7 @@ var ToggleGroupItem = forwardRef(function ToggleGroupItem2({ className, style, c
5486
5962
  return () => obs.disconnect();
5487
5963
  }, [value]);
5488
5964
  useDrawIn(rootRef, DRAW_IN_DURATION_MS, shouldAnimate, sketchSeed);
5965
+ const textColor = pressed ? sketch.isDark ? "#ffffff" : sketch.accent : sketch.ink;
5489
5966
  return /* @__PURE__ */ jsxs(
5490
5967
  ToggleGroupPrimitive.Item,
5491
5968
  {
@@ -5504,7 +5981,7 @@ var ToggleGroupItem = forwardRef(function ToggleGroupItem2({ className, style, c
5504
5981
  border: "none",
5505
5982
  background: "transparent",
5506
5983
  cursor: disabled ? "not-allowed" : "pointer",
5507
- color: sketch.ink,
5984
+ color: textColor,
5508
5985
  fontFamily: doodleUiFontFamily,
5509
5986
  fontWeight: doodleUiFontWeight(600),
5510
5987
  opacity: disabled ? 0.45 : 1,
@@ -5520,11 +5997,14 @@ var ToggleGroupItem = forwardRef(function ToggleGroupItem2({ className, style, c
5520
5997
  shape: "rectangle",
5521
5998
  roughness: sketch.roughness,
5522
5999
  seed: sketchSeed,
5523
- sketchColor: pressed ? SKETCH_COLORS.accent : sketch.ink,
6000
+ sketchColor: pressed ? sketch.accent : sketch.ink,
5524
6001
  bowing: sketch.bowing,
5525
6002
  fillStyle: sketch.fillStyle ?? "hachure",
5526
- fill: pressed ? SKETCH_COLORS.accentFill : void 0,
5527
- strokeWidth: sketch.strokeWidth ?? 1.6
6003
+ fill: pressed ? sketch.accentFill : void 0,
6004
+ strokeWidth: sketch.strokeWidth ?? 1.6,
6005
+ hachureGap: sketch.hachureGap ?? 7,
6006
+ hachureAngle: sketch.hachureAngle,
6007
+ fillWeight: sketch.fillWeight ?? 1
5528
6008
  }
5529
6009
  ),
5530
6010
  /* @__PURE__ */ jsx("span", { style: { position: "relative", zIndex: 1 }, children })
@@ -5550,13 +6030,17 @@ function InputGroup({
5550
6030
  bowing,
5551
6031
  fillStyle,
5552
6032
  strokeWidth,
6033
+ hachureGap,
6034
+ hachureAngle,
6035
+ fillWeight,
5553
6036
  animate,
5554
6037
  onFocus,
5555
6038
  onBlur,
5556
6039
  ...rest
5557
6040
  }) {
5558
6041
  const resolvedSeed = useResolvedSeed(seed);
5559
- const ink = sketchColor ?? SKETCH_COLORS.ink;
6042
+ const theme = useSketchTheme(sketchColor);
6043
+ const ink = sketchColor ?? theme.ink;
5560
6044
  const [focused, setFocused] = useState(false);
5561
6045
  const shouldAnimate = useAnimate(animate);
5562
6046
  const focusSeed = deriveSeed(resolvedSeed, "focus");
@@ -5567,12 +6051,16 @@ function InputGroup({
5567
6051
  value: {
5568
6052
  roughness,
5569
6053
  seed: resolvedSeed,
5570
- sketchColor,
6054
+ sketchColor: ink,
5571
6055
  bowing,
5572
6056
  fillStyle,
5573
6057
  strokeWidth,
6058
+ hachureGap,
6059
+ hachureAngle,
6060
+ fillWeight,
5574
6061
  resolvedSeed,
5575
6062
  ink,
6063
+ accent: theme.accent,
5576
6064
  animate,
5577
6065
  focused,
5578
6066
  setFocused
@@ -5598,10 +6086,13 @@ function InputGroup({
5598
6086
  {
5599
6087
  roughness,
5600
6088
  seed: sketchSeed,
5601
- sketchColor: focused ? SKETCH_COLORS.accent : ink,
6089
+ sketchColor: focused ? theme.accent : ink,
5602
6090
  bowing,
5603
6091
  fillStyle,
5604
6092
  strokeWidth: focused && !shouldAnimate ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth,
6093
+ hachureGap,
6094
+ hachureAngle,
6095
+ fillWeight,
5605
6096
  animate,
5606
6097
  drawInKey: sketchSeed,
5607
6098
  contentStyle: {
@@ -5701,24 +6192,35 @@ var InputOTP = forwardRef(
5701
6192
  bowing,
5702
6193
  fillStyle,
5703
6194
  strokeWidth,
6195
+ hachureGap,
6196
+ hachureAngle,
6197
+ fillWeight,
6198
+ fill,
5704
6199
  animate,
5705
6200
  children,
5706
6201
  ...rest
5707
6202
  }, ref) {
5708
6203
  const resolvedSeed = useResolvedSeed(seed);
5709
- const ink = sketchColor ?? SKETCH_COLORS.ink;
6204
+ const theme = useSketchTheme(sketchColor);
6205
+ const ink = sketchColor ?? theme.ink;
5710
6206
  return /* @__PURE__ */ jsx(
5711
6207
  InputOTPSketchContext.Provider,
5712
6208
  {
5713
6209
  value: {
5714
6210
  roughness,
5715
6211
  seed: resolvedSeed,
5716
- sketchColor,
6212
+ sketchColor: ink,
5717
6213
  bowing,
5718
6214
  fillStyle,
5719
6215
  strokeWidth,
6216
+ hachureGap,
6217
+ hachureAngle,
6218
+ fillWeight,
6219
+ fill,
5720
6220
  resolvedSeed,
5721
6221
  ink,
6222
+ accent: theme.accent,
6223
+ paper: theme.paper,
5722
6224
  animate
5723
6225
  },
5724
6226
  children: /* @__PURE__ */ jsx(
@@ -5795,9 +6297,13 @@ var InputOTPSlot = forwardRef(
5795
6297
  shape: "rectangle",
5796
6298
  roughness: sketch.roughness,
5797
6299
  seed: slotSeed,
5798
- sketchColor: isActive ? SKETCH_COLORS.accent : sketch.ink,
6300
+ sketchColor: isActive ? sketch.accent : sketch.ink,
5799
6301
  bowing: sketch.bowing,
5800
6302
  fillStyle: sketch.fillStyle,
6303
+ fill: sketch.fill,
6304
+ hachureGap: sketch.hachureGap,
6305
+ hachureAngle: sketch.hachureAngle,
6306
+ fillWeight: sketch.fillWeight,
5801
6307
  strokeWidth: isActive ? (sketch.strokeWidth ?? 1.75) + 0.15 : sketch.strokeWidth
5802
6308
  }
5803
6309
  ),
@@ -5857,17 +6363,22 @@ var ScrollArea = forwardRef(function ScrollArea2({
5857
6363
  className,
5858
6364
  style,
5859
6365
  children,
6366
+ fill,
5860
6367
  roughness,
5861
6368
  seed,
5862
6369
  sketchColor,
5863
6370
  bowing,
5864
6371
  fillStyle,
5865
6372
  strokeWidth,
6373
+ hachureGap,
6374
+ hachureAngle,
6375
+ fillWeight,
5866
6376
  animate,
5867
6377
  ...rest
5868
6378
  }, ref) {
5869
6379
  const resolvedSeed = useResolvedSeed(seed);
5870
- const ink = sketchColor ?? SKETCH_COLORS.ink;
6380
+ const theme = useSketchTheme(sketchColor);
6381
+ const ink = sketchColor ?? theme.ink;
5871
6382
  return /* @__PURE__ */ jsx(
5872
6383
  ScrollAreaSketchContext.Provider,
5873
6384
  {
@@ -5878,8 +6389,12 @@ var ScrollArea = forwardRef(function ScrollArea2({
5878
6389
  bowing,
5879
6390
  fillStyle,
5880
6391
  strokeWidth,
6392
+ hachureGap,
6393
+ hachureAngle,
6394
+ fillWeight,
5881
6395
  resolvedSeed,
5882
6396
  ink,
6397
+ paper: fill ?? theme.paper,
5883
6398
  animate
5884
6399
  },
5885
6400
  children: /* @__PURE__ */ jsx(
@@ -5887,7 +6402,7 @@ var ScrollArea = forwardRef(function ScrollArea2({
5887
6402
  {
5888
6403
  ref,
5889
6404
  className: cn(className),
5890
- style: { position: "relative", overflow: "hidden", ...style },
6405
+ style: { position: "relative", overflow: "hidden", color: ink, ...style },
5891
6406
  ...rest,
5892
6407
  children: /* @__PURE__ */ jsx(
5893
6408
  SketchBox,
@@ -5897,10 +6412,13 @@ var ScrollArea = forwardRef(function ScrollArea2({
5897
6412
  sketchColor: ink,
5898
6413
  bowing,
5899
6414
  fillStyle: fillStyle ?? "solid",
5900
- fill: "#f7f6f2",
6415
+ fill: fill ?? theme.paper,
5901
6416
  strokeWidth: strokeWidth ?? 1.5,
6417
+ hachureGap,
6418
+ hachureAngle,
6419
+ fillWeight,
5902
6420
  animate,
5903
- contentStyle: { padding: 0, height: "100%" },
6421
+ contentStyle: { padding: 0, height: "100%", color: ink },
5904
6422
  style: { height: "100%" },
5905
6423
  children
5906
6424
  }
@@ -5989,7 +6507,8 @@ function ResizableHandle({
5989
6507
  ...rest
5990
6508
  }) {
5991
6509
  const resolvedSeed = useResolvedSeed(seed);
5992
- const ink = sketchColor ?? SKETCH_COLORS.ink;
6510
+ const theme = useSketchTheme(sketchColor);
6511
+ const ink = sketchColor ?? theme.ink;
5993
6512
  const handleSeed = deriveSeed(resolvedSeed, "handle");
5994
6513
  const base = {
5995
6514
  position: "relative",
@@ -6063,17 +6582,22 @@ function useHoverCardSketch() {
6063
6582
  }
6064
6583
  function HoverCard({
6065
6584
  children,
6585
+ fill,
6066
6586
  roughness,
6067
6587
  seed,
6068
6588
  sketchColor,
6069
6589
  bowing,
6070
6590
  fillStyle,
6071
6591
  strokeWidth,
6592
+ hachureGap,
6593
+ hachureAngle,
6594
+ fillWeight,
6072
6595
  animate,
6073
6596
  ...rest
6074
6597
  }) {
6075
6598
  const resolvedSeed = useResolvedSeed(seed);
6076
- const ink = sketchColor ?? SKETCH_COLORS.ink;
6599
+ const theme = useSketchTheme(sketchColor);
6600
+ const ink = sketchColor ?? theme.ink;
6077
6601
  return /* @__PURE__ */ jsx(
6078
6602
  HoverCardSketchContext.Provider,
6079
6603
  {
@@ -6084,8 +6608,12 @@ function HoverCard({
6084
6608
  bowing,
6085
6609
  fillStyle,
6086
6610
  strokeWidth,
6611
+ hachureGap,
6612
+ hachureAngle,
6613
+ fillWeight,
6087
6614
  resolvedSeed,
6088
6615
  ink,
6616
+ paper: fill ?? theme.paper,
6089
6617
  animate
6090
6618
  },
6091
6619
  children: /* @__PURE__ */ jsx(HoverCardPrimitive.Root, { ...rest, children })
@@ -6093,7 +6621,7 @@ function HoverCard({
6093
6621
  );
6094
6622
  }
6095
6623
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
6096
- var HoverCardContent = forwardRef(function HoverCardContent2({ className, style, children, sideOffset = 6, align = "center", ...rest }, ref) {
6624
+ var HoverCardContent = forwardRef(function HoverCardContent2({ className, style, children, fill, sideOffset = 6, align = "center", ...rest }, ref) {
6097
6625
  const sketch = useHoverCardSketch();
6098
6626
  return /* @__PURE__ */ jsx(HoverCardPrimitive.Portal, { children: /* @__PURE__ */ jsx(
6099
6627
  HoverCardPrimitive.Content,
@@ -6102,7 +6630,7 @@ var HoverCardContent = forwardRef(function HoverCardContent2({ className, style,
6102
6630
  sideOffset,
6103
6631
  align,
6104
6632
  className: cn(className),
6105
- style: { zIndex: 75, outline: "none", ...style },
6633
+ style: { zIndex: 75, outline: "none", color: sketch.ink, ...style },
6106
6634
  ...rest,
6107
6635
  children: /* @__PURE__ */ jsx(
6108
6636
  SketchBox,
@@ -6112,11 +6640,14 @@ var HoverCardContent = forwardRef(function HoverCardContent2({ className, style,
6112
6640
  sketchColor: sketch.ink,
6113
6641
  bowing: sketch.bowing,
6114
6642
  fillStyle: sketch.fillStyle ?? "solid",
6115
- fill: "#f7f6f2",
6643
+ fill: fill ?? sketch.paper,
6116
6644
  strokeWidth: sketch.strokeWidth ?? 1.5,
6645
+ hachureGap: sketch.hachureGap,
6646
+ hachureAngle: sketch.hachureAngle,
6647
+ fillWeight: sketch.fillWeight,
6117
6648
  shadow: true,
6118
6649
  animate: sketch.animate,
6119
- contentStyle: { padding: 14, maxWidth: 320, fontSize: 14 },
6650
+ contentStyle: { padding: 14, maxWidth: 320, fontSize: 14, color: sketch.ink },
6120
6651
  children
6121
6652
  }
6122
6653
  )
@@ -6136,17 +6667,22 @@ function useContextMenuSketch() {
6136
6667
  }
6137
6668
  function ContextMenu({
6138
6669
  children,
6670
+ fill,
6139
6671
  roughness,
6140
6672
  seed,
6141
6673
  sketchColor,
6142
6674
  bowing,
6143
6675
  fillStyle,
6144
6676
  strokeWidth,
6677
+ hachureGap,
6678
+ hachureAngle,
6679
+ fillWeight,
6145
6680
  animate,
6146
6681
  ...rest
6147
6682
  }) {
6148
6683
  const resolvedSeed = useResolvedSeed(seed);
6149
- const ink = sketchColor ?? SKETCH_COLORS.ink;
6684
+ const theme = useSketchTheme(sketchColor);
6685
+ const ink = sketchColor ?? theme.ink;
6150
6686
  return /* @__PURE__ */ jsx(
6151
6687
  ContextMenuSketchContext.Provider,
6152
6688
  {
@@ -6157,8 +6693,13 @@ function ContextMenu({
6157
6693
  bowing,
6158
6694
  fillStyle,
6159
6695
  strokeWidth,
6696
+ hachureGap,
6697
+ hachureAngle,
6698
+ fillWeight,
6160
6699
  resolvedSeed,
6161
6700
  ink,
6701
+ paper: fill ?? theme.paper,
6702
+ accent: theme.accent,
6162
6703
  animate
6163
6704
  },
6164
6705
  children: /* @__PURE__ */ jsx(ContextMenuPrimitive.Root, { ...rest, children })
@@ -6169,14 +6710,14 @@ var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
6169
6710
  var ContextMenuGroup = ContextMenuPrimitive.Group;
6170
6711
  var ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
6171
6712
  var ContextMenuSub = ContextMenuPrimitive.Sub;
6172
- var ContextMenuContent = forwardRef(function ContextMenuContent2({ className, style, children, ...rest }, ref) {
6713
+ var ContextMenuContent = forwardRef(function ContextMenuContent2({ className, style, children, fill, ...rest }, ref) {
6173
6714
  const sketch = useContextMenuSketch();
6174
6715
  return /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
6175
6716
  ContextMenuPrimitive.Content,
6176
6717
  {
6177
6718
  ref,
6178
6719
  className: cn(className),
6179
- style: { zIndex: 80, outline: "none", minWidth: 180, ...style },
6720
+ style: { zIndex: 80, outline: "none", minWidth: 180, color: sketch.ink, ...style },
6180
6721
  ...rest,
6181
6722
  children: /* @__PURE__ */ jsx(
6182
6723
  SketchBox,
@@ -6186,11 +6727,14 @@ var ContextMenuContent = forwardRef(function ContextMenuContent2({ className, st
6186
6727
  sketchColor: sketch.ink,
6187
6728
  bowing: sketch.bowing,
6188
6729
  fillStyle: sketch.fillStyle ?? "solid",
6189
- fill: "#f7f6f2",
6730
+ fill: fill ?? sketch.paper,
6190
6731
  strokeWidth: sketch.strokeWidth ?? 1.5,
6732
+ hachureGap: sketch.hachureGap,
6733
+ hachureAngle: sketch.hachureAngle,
6734
+ fillWeight: sketch.fillWeight,
6191
6735
  shadow: true,
6192
6736
  animate: sketch.animate,
6193
- contentStyle: { padding: "6px 4px" },
6737
+ contentStyle: { padding: "6px 4px", color: sketch.ink },
6194
6738
  children
6195
6739
  }
6196
6740
  )
@@ -6305,7 +6849,7 @@ var ContextMenuCheckboxItem = forwardRef(function ContextMenuCheckboxItem2({ cla
6305
6849
  path: CHECK_PATH3,
6306
6850
  roughness: (sketch.roughness ?? 1.5) * 0.7,
6307
6851
  seed: deriveSeed(sketch.resolvedSeed, "checkbox-mark"),
6308
- sketchColor: SKETCH_COLORS.accent,
6852
+ sketchColor: sketch.accent,
6309
6853
  bowing: sketch.bowing,
6310
6854
  strokeWidth: 1.6,
6311
6855
  inset: 0
@@ -6373,10 +6917,10 @@ var ContextMenuRadioItem = forwardRef(function ContextMenuRadioItem2({ className
6373
6917
  shape: "ellipse",
6374
6918
  roughness: (sketch.roughness ?? 1.5) * 0.8,
6375
6919
  seed: deriveSeed(sketch.resolvedSeed, "radio-mark"),
6376
- sketchColor: SKETCH_COLORS.accent,
6920
+ sketchColor: sketch.accent,
6377
6921
  bowing: sketch.bowing,
6378
6922
  fillStyle: "solid",
6379
- fill: SKETCH_COLORS.accent,
6923
+ fill: sketch.accent,
6380
6924
  strokeWidth: 1.2,
6381
6925
  inset: 0
6382
6926
  }
@@ -6446,17 +6990,22 @@ function useNavigationMenuSketch() {
6446
6990
  }
6447
6991
  function NavigationMenu({
6448
6992
  children,
6993
+ fill,
6449
6994
  roughness,
6450
6995
  seed,
6451
6996
  sketchColor,
6452
6997
  bowing,
6453
6998
  fillStyle,
6454
6999
  strokeWidth,
7000
+ hachureGap,
7001
+ hachureAngle,
7002
+ fillWeight,
6455
7003
  animate,
6456
7004
  ...rest
6457
7005
  }) {
6458
7006
  const resolvedSeed = useResolvedSeed(seed);
6459
- const ink = sketchColor ?? SKETCH_COLORS.ink;
7007
+ const theme = useSketchTheme(sketchColor);
7008
+ const ink = sketchColor ?? theme.ink;
6460
7009
  return /* @__PURE__ */ jsx(
6461
7010
  NavigationMenuSketchContext.Provider,
6462
7011
  {
@@ -6467,8 +7016,12 @@ function NavigationMenu({
6467
7016
  bowing,
6468
7017
  fillStyle,
6469
7018
  strokeWidth,
7019
+ hachureGap,
7020
+ hachureAngle,
7021
+ fillWeight,
6470
7022
  resolvedSeed,
6471
7023
  ink,
7024
+ paper: fill ?? theme.paper,
6472
7025
  animate
6473
7026
  },
6474
7027
  children: /* @__PURE__ */ jsxs(NavigationMenuPrimitive.Root, { ...rest, children: [
@@ -6523,14 +7076,14 @@ var NavigationMenuTrigger = forwardRef(function NavigationMenuTrigger2({ classNa
6523
7076
  }
6524
7077
  );
6525
7078
  });
6526
- var NavigationMenuContent = forwardRef(function NavigationMenuContent2({ className, style, children, ...rest }, ref) {
7079
+ var NavigationMenuContent = forwardRef(function NavigationMenuContent2({ className, style, children, fill, ...rest }, ref) {
6527
7080
  const sketch = useNavigationMenuSketch();
6528
7081
  return /* @__PURE__ */ jsx(
6529
7082
  NavigationMenuPrimitive.Content,
6530
7083
  {
6531
7084
  ref,
6532
7085
  className: cn(className),
6533
- style: { outline: "none", ...style },
7086
+ style: { outline: "none", color: sketch.ink, ...style },
6534
7087
  ...rest,
6535
7088
  children: /* @__PURE__ */ jsx(
6536
7089
  SketchBox,
@@ -6540,11 +7093,14 @@ var NavigationMenuContent = forwardRef(function NavigationMenuContent2({ classNa
6540
7093
  sketchColor: sketch.ink,
6541
7094
  bowing: sketch.bowing,
6542
7095
  fillStyle: sketch.fillStyle ?? "solid",
6543
- fill: "#f7f6f2",
7096
+ fill: fill ?? sketch.paper,
6544
7097
  strokeWidth: sketch.strokeWidth ?? 1.5,
7098
+ hachureGap: sketch.hachureGap,
7099
+ hachureAngle: sketch.hachureAngle,
7100
+ fillWeight: sketch.fillWeight,
6545
7101
  shadow: true,
6546
7102
  animate: sketch.animate,
6547
- contentStyle: { padding: 12, minWidth: 200 },
7103
+ contentStyle: { padding: 12, minWidth: 200, color: sketch.ink },
6548
7104
  children
6549
7105
  }
6550
7106
  )
@@ -6646,17 +7202,22 @@ function Menubar({
6646
7202
  children,
6647
7203
  className,
6648
7204
  style,
7205
+ fill,
6649
7206
  roughness,
6650
7207
  seed,
6651
7208
  sketchColor,
6652
7209
  bowing,
6653
7210
  fillStyle,
6654
7211
  strokeWidth,
7212
+ hachureGap,
7213
+ hachureAngle,
7214
+ fillWeight,
6655
7215
  animate,
6656
7216
  ...rest
6657
7217
  }) {
6658
7218
  const resolvedSeed = useResolvedSeed(seed);
6659
- const ink = sketchColor ?? SKETCH_COLORS.ink;
7219
+ const theme = useSketchTheme(sketchColor);
7220
+ const ink = sketchColor ?? theme.ink;
6660
7221
  return /* @__PURE__ */ jsx(
6661
7222
  MenubarSketchContext.Provider,
6662
7223
  {
@@ -6667,8 +7228,12 @@ function Menubar({
6667
7228
  bowing,
6668
7229
  fillStyle,
6669
7230
  strokeWidth,
7231
+ hachureGap,
7232
+ hachureAngle,
7233
+ fillWeight,
6670
7234
  resolvedSeed,
6671
7235
  ink,
7236
+ paper: fill ?? theme.paper,
6672
7237
  animate
6673
7238
  },
6674
7239
  children: /* @__PURE__ */ jsx(
@@ -6713,7 +7278,7 @@ var MenubarTrigger = forwardRef(function MenubarTrigger2({ className, style, chi
6713
7278
  }
6714
7279
  );
6715
7280
  });
6716
- var MenubarContent = forwardRef(function MenubarContent2({ className, style, children, align = "start", sideOffset = 6, ...rest }, ref) {
7281
+ var MenubarContent = forwardRef(function MenubarContent2({ className, style, children, fill, align = "start", sideOffset = 6, ...rest }, ref) {
6717
7282
  const sketch = useMenubarSketch();
6718
7283
  return /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { children: /* @__PURE__ */ jsx(
6719
7284
  MenubarPrimitive.Content,
@@ -6722,7 +7287,7 @@ var MenubarContent = forwardRef(function MenubarContent2({ className, style, chi
6722
7287
  align,
6723
7288
  sideOffset,
6724
7289
  className: cn(className),
6725
- style: { zIndex: 80, outline: "none", minWidth: 180, ...style },
7290
+ style: { zIndex: 80, outline: "none", minWidth: 180, color: sketch.ink, ...style },
6726
7291
  ...rest,
6727
7292
  children: /* @__PURE__ */ jsx(
6728
7293
  SketchBox,
@@ -6732,11 +7297,14 @@ var MenubarContent = forwardRef(function MenubarContent2({ className, style, chi
6732
7297
  sketchColor: sketch.ink,
6733
7298
  bowing: sketch.bowing,
6734
7299
  fillStyle: sketch.fillStyle ?? "solid",
6735
- fill: "#f7f6f2",
7300
+ fill: fill ?? sketch.paper,
6736
7301
  strokeWidth: sketch.strokeWidth ?? 1.5,
7302
+ hachureGap: sketch.hachureGap,
7303
+ hachureAngle: sketch.hachureAngle,
7304
+ fillWeight: sketch.fillWeight,
6737
7305
  shadow: true,
6738
7306
  animate: sketch.animate,
6739
- contentStyle: { padding: "6px 4px" },
7307
+ contentStyle: { padding: "6px 4px", color: sketch.ink },
6740
7308
  children
6741
7309
  }
6742
7310
  )
@@ -6875,17 +7443,22 @@ function SlidingPanelRoot({
6875
7443
  defaultOpen,
6876
7444
  onOpenChange,
6877
7445
  side = "right",
7446
+ fill,
6878
7447
  roughness,
6879
7448
  seed,
6880
7449
  sketchColor,
6881
7450
  bowing,
6882
7451
  fillStyle,
6883
7452
  strokeWidth,
7453
+ hachureGap,
7454
+ hachureAngle,
7455
+ fillWeight,
6884
7456
  animate,
6885
7457
  ...rest
6886
7458
  }) {
6887
7459
  const resolvedSeed = useResolvedSeed(seed);
6888
- const ink = sketchColor ?? SKETCH_COLORS.ink;
7460
+ const theme = useSketchTheme(sketchColor);
7461
+ const ink = sketchColor ?? theme.ink;
6889
7462
  const [uncontrolled, setUncontrolled] = useState(defaultOpen === true);
6890
7463
  const isOpen = open ?? uncontrolled;
6891
7464
  return /* @__PURE__ */ jsx(
@@ -6898,8 +7471,13 @@ function SlidingPanelRoot({
6898
7471
  bowing,
6899
7472
  fillStyle,
6900
7473
  strokeWidth,
7474
+ hachureGap,
7475
+ hachureAngle,
7476
+ fillWeight,
6901
7477
  resolvedSeed,
6902
7478
  ink,
7479
+ paper: fill ?? theme.paper,
7480
+ isDark: theme.isDark,
6903
7481
  animate,
6904
7482
  open: isOpen,
6905
7483
  side
@@ -6977,14 +7555,14 @@ var SlidingPanelOverlay = forwardRef(function SlidingPanelOverlay2({ style, ...r
6977
7555
  style: {
6978
7556
  position: "fixed",
6979
7557
  inset: 0,
6980
- background: "rgba(31, 29, 26, 0.38)",
7558
+ background: sketch.isDark ? "rgba(0, 0, 0, 0.65)" : "rgba(31, 29, 26, 0.38)",
6981
7559
  zIndex: 70,
6982
7560
  ...style
6983
7561
  }
6984
7562
  }
6985
7563
  ) });
6986
7564
  });
6987
- var SlidingPanelContent = forwardRef(function SlidingPanelContent2({ className, style, contentStyle, children, chrome, ...rest }, ref) {
7565
+ var SlidingPanelContent = forwardRef(function SlidingPanelContent2({ className, style, contentStyle, fill, children, chrome, ...rest }, ref) {
6988
7566
  const sketch = useSlidingPanelSketch();
6989
7567
  const shouldAnimate = useAnimate(sketch.animate);
6990
7568
  const variants = slideVariants(sketch.side, shouldAnimate);
@@ -7015,8 +7593,11 @@ var SlidingPanelContent = forwardRef(function SlidingPanelContent2({ className,
7015
7593
  sketchColor: sketch.ink,
7016
7594
  bowing: sketch.bowing,
7017
7595
  fillStyle: sketch.fillStyle ?? "solid",
7018
- fill: "#f7f6f2",
7596
+ fill: fill ?? sketch.paper,
7019
7597
  strokeWidth: sketch.strokeWidth ?? 2,
7598
+ hachureGap: sketch.hachureGap,
7599
+ hachureAngle: sketch.hachureAngle,
7600
+ fillWeight: sketch.fillWeight,
7020
7601
  animate: sketch.animate,
7021
7602
  contentStyle: {
7022
7603
  padding: 20,
@@ -7024,6 +7605,7 @@ var SlidingPanelContent = forwardRef(function SlidingPanelContent2({ className,
7024
7605
  boxSizing: "border-box",
7025
7606
  display: "flex",
7026
7607
  flexDirection: "column",
7608
+ color: sketch.ink,
7027
7609
  ...contentStyle
7028
7610
  },
7029
7611
  style: { height: "100%" },
@@ -7155,7 +7737,7 @@ var DrawerHandle = forwardRef(
7155
7737
  shape: "line",
7156
7738
  roughness: (sketch.roughness ?? 1.5) + 0.3,
7157
7739
  seed: deriveSeed(sketch.resolvedSeed, "drawer-handle"),
7158
- sketchColor: sketch.sketchColor ?? SKETCH_COLORS.ink,
7740
+ sketchColor: sketch.sketchColor ?? sketch.ink,
7159
7741
  bowing: sketch.bowing ?? 1.6,
7160
7742
  strokeWidth: 2.4,
7161
7743
  width: 48,
@@ -7191,14 +7773,20 @@ function AspectRatio({
7191
7773
  className,
7192
7774
  style,
7193
7775
  children,
7776
+ fill,
7194
7777
  roughness,
7195
7778
  seed,
7196
7779
  sketchColor,
7197
7780
  bowing,
7198
7781
  fillStyle,
7199
7782
  strokeWidth,
7783
+ hachureGap,
7784
+ hachureAngle,
7785
+ fillWeight,
7200
7786
  animate
7201
7787
  }) {
7788
+ const theme = useSketchTheme(sketchColor);
7789
+ const ink = sketchColor ?? theme.ink;
7202
7790
  const inner = /* @__PURE__ */ jsx(
7203
7791
  AspectRatioPrimitive.Root,
7204
7792
  {
@@ -7207,6 +7795,7 @@ function AspectRatio({
7207
7795
  style: {
7208
7796
  width: "100%",
7209
7797
  overflow: "hidden",
7798
+ color: ink,
7210
7799
  ...style
7211
7800
  },
7212
7801
  children: /* @__PURE__ */ jsx("div", { style: { width: "100%", height: "100%" }, children })
@@ -7219,13 +7808,16 @@ function AspectRatio({
7219
7808
  SketchBox,
7220
7809
  {
7221
7810
  className: cn(className),
7222
- style: { width: "100%", ...style },
7223
- contentStyle: { padding: 0, width: "100%" },
7224
- fill: SKETCH_COLORS.paper,
7225
- fillStyle: fillStyle ?? "hachure",
7811
+ style: { width: "100%", color: ink, ...style },
7812
+ contentStyle: { padding: 0, width: "100%", color: ink },
7813
+ fill: fill ?? theme.paper,
7814
+ fillStyle: fillStyle ?? "solid",
7815
+ hachureGap,
7816
+ hachureAngle,
7817
+ fillWeight,
7226
7818
  roughness,
7227
7819
  seed,
7228
- sketchColor,
7820
+ sketchColor: ink,
7229
7821
  bowing,
7230
7822
  strokeWidth,
7231
7823
  animate,
@@ -7240,12 +7832,16 @@ var NativeSelect = forwardRef(
7240
7832
  style,
7241
7833
  options,
7242
7834
  children,
7835
+ fill,
7243
7836
  roughness,
7244
7837
  seed,
7245
7838
  sketchColor,
7246
7839
  bowing,
7247
7840
  fillStyle,
7248
7841
  strokeWidth,
7842
+ hachureGap,
7843
+ hachureAngle,
7844
+ fillWeight,
7249
7845
  animate,
7250
7846
  disabled,
7251
7847
  ...rest
@@ -7253,7 +7849,8 @@ var NativeSelect = forwardRef(
7253
7849
  const fieldRef = useRef(null);
7254
7850
  const shouldAnimate = useAnimate(animate);
7255
7851
  const resolvedSeed = useResolvedSeed(seed);
7256
- const ink = sketchColor ?? SKETCH_COLORS.ink;
7852
+ const theme = useSketchTheme(sketchColor);
7853
+ const ink = sketchColor ?? theme.ink;
7257
7854
  useDrawIn(fieldRef, DRAW_IN_DURATION_MS, shouldAnimate);
7258
7855
  return /* @__PURE__ */ jsx(
7259
7856
  "span",
@@ -7264,6 +7861,7 @@ var NativeSelect = forwardRef(
7264
7861
  display: "block",
7265
7862
  width: "100%",
7266
7863
  opacity: disabled ? 0.6 : 1,
7864
+ color: ink,
7267
7865
  ...style
7268
7866
  },
7269
7867
  children: /* @__PURE__ */ jsxs("span", { ref: fieldRef, style: { position: "relative", display: "block" }, children: [
@@ -7275,9 +7873,12 @@ var NativeSelect = forwardRef(
7275
7873
  seed: resolvedSeed,
7276
7874
  sketchColor: ink,
7277
7875
  bowing,
7278
- fillStyle,
7279
- fill: SKETCH_COLORS.paper,
7280
- strokeWidth
7876
+ fillStyle: fillStyle ?? "solid",
7877
+ fill: fill ?? theme.paper,
7878
+ strokeWidth,
7879
+ hachureGap,
7880
+ hachureAngle,
7881
+ fillWeight
7281
7882
  }
7282
7883
  ),
7283
7884
  /* @__PURE__ */ jsx(
@@ -7350,7 +7951,8 @@ var NativeSelect = forwardRef(
7350
7951
  var EmptyContext = createContext(null);
7351
7952
  function useEmptyInk() {
7352
7953
  const ctx = useContext(EmptyContext);
7353
- return ctx?.ink ?? SKETCH_COLORS.ink;
7954
+ const theme = useSketchTheme();
7955
+ return ctx?.ink ?? theme.ink;
7354
7956
  }
7355
7957
  var emptyContentStyle = {
7356
7958
  display: "flex",
@@ -7368,22 +7970,27 @@ var Empty = forwardRef(function Empty2({
7368
7970
  style,
7369
7971
  children,
7370
7972
  bordered = true,
7973
+ fill,
7371
7974
  roughness,
7372
7975
  seed,
7373
7976
  sketchColor,
7374
7977
  bowing,
7375
7978
  fillStyle,
7376
7979
  strokeWidth,
7980
+ hachureGap,
7981
+ hachureAngle,
7982
+ fillWeight,
7377
7983
  animate,
7378
7984
  ...rest
7379
7985
  }, ref) {
7380
- const ink = sketchColor ?? SKETCH_COLORS.ink;
7986
+ const theme = useSketchTheme(sketchColor);
7987
+ const ink = sketchColor ?? theme.ink;
7381
7988
  const inner = /* @__PURE__ */ jsx(EmptyContext.Provider, { value: { ink }, children: /* @__PURE__ */ jsx(
7382
7989
  "div",
7383
7990
  {
7384
7991
  ref: bordered ? void 0 : ref,
7385
7992
  className: cn(className),
7386
- style: { ...emptyContentStyle, ...style },
7993
+ style: { ...emptyContentStyle, color: ink, ...style },
7387
7994
  ...bordered ? {} : rest,
7388
7995
  children
7389
7996
  }
@@ -7396,13 +8003,16 @@ var Empty = forwardRef(function Empty2({
7396
8003
  {
7397
8004
  ref,
7398
8005
  className: cn(className),
7399
- style: { width: "100%", ...style },
7400
- contentStyle: emptyContentStyle,
7401
- fill: SKETCH_COLORS.secondaryFill,
8006
+ style: { width: "100%", color: ink, ...style },
8007
+ contentStyle: { ...emptyContentStyle, color: ink },
8008
+ fill: fill ?? theme.secondaryFill,
7402
8009
  fillStyle: fillStyle ?? "hachure",
8010
+ hachureGap: hachureGap ?? 8,
8011
+ hachureAngle,
8012
+ fillWeight: fillWeight ?? 0.85,
7403
8013
  roughness,
7404
8014
  seed,
7405
- sketchColor,
8015
+ sketchColor: ink,
7406
8016
  bowing,
7407
8017
  strokeWidth,
7408
8018
  animate,
@@ -7554,6 +8164,7 @@ function FieldDescription({
7554
8164
  ...rest
7555
8165
  }) {
7556
8166
  const { descriptionId } = useField();
8167
+ const theme = useSketchTheme();
7557
8168
  return /* @__PURE__ */ jsx(
7558
8169
  "p",
7559
8170
  {
@@ -7564,7 +8175,7 @@ function FieldDescription({
7564
8175
  fontFamily: doodleUiFontFamily,
7565
8176
  fontSize: 12,
7566
8177
  lineHeight: 1.45,
7567
- color: SKETCH_COLORS.ink,
8178
+ color: theme.ink,
7568
8179
  opacity: 0.75,
7569
8180
  ...style
7570
8181
  },
@@ -7580,6 +8191,7 @@ function FieldError({
7580
8191
  ...rest
7581
8192
  }) {
7582
8193
  const { error, errorId } = useField();
8194
+ const theme = useSketchTheme();
7583
8195
  const message = children ?? error;
7584
8196
  if (!message) return null;
7585
8197
  return /* @__PURE__ */ jsx(
@@ -7593,7 +8205,7 @@ function FieldError({
7593
8205
  fontFamily: doodleUiFontFamily,
7594
8206
  fontSize: 12,
7595
8207
  lineHeight: 1.45,
7596
- color: SKETCH_COLORS.error,
8208
+ color: theme.error,
7597
8209
  ...style
7598
8210
  },
7599
8211
  ...rest,
@@ -7639,7 +8251,10 @@ var Heading = forwardRef(
7639
8251
  ...rest
7640
8252
  }, ref) {
7641
8253
  const Tag = `h${level}`;
7642
- const ink = sketchColor ?? SKETCH_COLORS.ink;
8254
+ const theme = useSketchTheme(sketchColor);
8255
+ const ink = sketchColor ?? theme.ink;
8256
+ const accentColor = sketchColor ?? theme.accent;
8257
+ const accentFill = theme.isDark ? sketchColor ? `${sketchColor}25` : theme.accentFill : theme.accentFill;
7643
8258
  const resolvedSeed = useResolvedSeed(seed);
7644
8259
  const shouldAnimate = useAnimate(animate);
7645
8260
  const accentRef = useRef(null);
@@ -7682,8 +8297,8 @@ var Heading = forwardRef(
7682
8297
  shape: "rectangle",
7683
8298
  roughness,
7684
8299
  seed: resolvedSeed,
7685
- sketchColor: SKETCH_COLORS.accent,
7686
- fill: SKETCH_COLORS.accentFill,
8300
+ sketchColor: accentColor,
8301
+ fill: accentFill,
7687
8302
  fillStyle: "solid",
7688
8303
  bowing,
7689
8304
  strokeWidth: strokeWidth ?? 1.2
@@ -7712,7 +8327,7 @@ var Heading = forwardRef(
7712
8327
  path: "M 2 4 Q 40 1 80 5 T 160 3",
7713
8328
  roughness,
7714
8329
  seed: resolvedSeed,
7715
- sketchColor: ink,
8330
+ sketchColor: accentColor,
7716
8331
  bowing,
7717
8332
  strokeWidth: strokeWidth ?? 1.5
7718
8333
  }
@@ -7725,6 +8340,7 @@ var Heading = forwardRef(
7725
8340
  }
7726
8341
  );
7727
8342
  var Text = forwardRef(function Text2({ variant = "body", className, style, children, ...rest }, ref) {
8343
+ const theme = useSketchTheme();
7728
8344
  const sizes = { body: 14, lead: 17, muted: 13 };
7729
8345
  const opacity = variant === "muted" ? 0.75 : 1;
7730
8346
  return /* @__PURE__ */ jsx(
@@ -7738,7 +8354,7 @@ var Text = forwardRef(function Text2({ variant = "body", className, style, child
7738
8354
  fontSize: sizes[variant],
7739
8355
  fontWeight: doodleUiFontWeight(variant === "lead" ? 500 : 400),
7740
8356
  lineHeight: 1.55,
7741
- color: SKETCH_COLORS.ink,
8357
+ color: theme.ink,
7742
8358
  opacity,
7743
8359
  ...style
7744
8360
  },
@@ -7761,7 +8377,9 @@ var Blockquote = forwardRef(
7761
8377
  animate,
7762
8378
  ...rest
7763
8379
  }, ref) {
7764
- const ink = sketchColor ?? SKETCH_COLORS.ink;
8380
+ const theme = useSketchTheme(sketchColor);
8381
+ const ink = sketchColor ?? theme.ink;
8382
+ const accent = sketchColor ?? theme.accent;
7765
8383
  const resolvedSeed = useResolvedSeed(seed);
7766
8384
  const shouldAnimate = useAnimate(animate);
7767
8385
  const ruleRef = useRef(null);
@@ -7797,7 +8415,7 @@ var Blockquote = forwardRef(
7797
8415
  shape: "line-vertical",
7798
8416
  roughness,
7799
8417
  seed: resolvedSeed,
7800
- sketchColor: ink,
8418
+ sketchColor: accent,
7801
8419
  bowing,
7802
8420
  strokeWidth: strokeWidth ?? 2
7803
8421
  }
@@ -7815,33 +8433,42 @@ var InlineCode = forwardRef(
7815
8433
  className,
7816
8434
  style,
7817
8435
  children,
8436
+ fill,
7818
8437
  roughness,
7819
8438
  seed,
7820
8439
  sketchColor,
7821
8440
  bowing,
7822
8441
  fillStyle,
7823
8442
  strokeWidth,
8443
+ hachureGap,
8444
+ hachureAngle,
8445
+ fillWeight,
7824
8446
  animate,
7825
8447
  ...rest
7826
8448
  }, ref) {
7827
- const ink = sketchColor ?? SKETCH_COLORS.ink;
8449
+ const theme = useSketchTheme(sketchColor);
8450
+ const ink = sketchColor ?? theme.ink;
7828
8451
  return /* @__PURE__ */ jsx(
7829
8452
  SketchBox,
7830
8453
  {
7831
8454
  className: cn(className),
7832
- style: { display: "inline-flex", verticalAlign: "baseline", ...style },
8455
+ style: { display: "inline-flex", verticalAlign: "baseline", color: ink, ...style },
7833
8456
  contentStyle: {
7834
8457
  padding: "1px 6px",
7835
8458
  fontSize: "0.9em",
7836
- fontFamily: "ui-monospace, monospace"
8459
+ fontFamily: "ui-monospace, monospace",
8460
+ color: ink
7837
8461
  },
7838
- fill: SKETCH_COLORS.paper,
7839
- fillStyle: fillStyle ?? "hachure",
8462
+ fill: fill ?? theme.paper,
8463
+ fillStyle: fillStyle ?? "solid",
7840
8464
  roughness,
7841
8465
  seed,
7842
8466
  sketchColor: ink,
7843
8467
  bowing,
7844
8468
  strokeWidth: strokeWidth ?? 1.2,
8469
+ hachureGap,
8470
+ hachureAngle,
8471
+ fillWeight,
7845
8472
  animate,
7846
8473
  ...rest,
7847
8474
  children: /* @__PURE__ */ jsx(
@@ -7867,6 +8494,7 @@ var Highlight = forwardRef(
7867
8494
  className,
7868
8495
  style,
7869
8496
  children,
8497
+ fill,
7870
8498
  roughness,
7871
8499
  seed,
7872
8500
  sketchColor,
@@ -7876,6 +8504,9 @@ var Highlight = forwardRef(
7876
8504
  ...rest
7877
8505
  }, ref) {
7878
8506
  const resolvedSeed = useResolvedSeed(seed);
8507
+ const theme = useSketchTheme(sketchColor);
8508
+ const accent = sketchColor ?? theme.accent;
8509
+ const accentFill = fill ?? (theme.isDark ? sketchColor ? `${sketchColor}25` : theme.accentFill : theme.accentFill);
7879
8510
  const shouldAnimate = useAnimate(animate);
7880
8511
  const markRef = useRef(null);
7881
8512
  useDrawIn(markRef, DRAW_IN_MARK_MS, shouldAnimate);
@@ -7906,8 +8537,8 @@ var Highlight = forwardRef(
7906
8537
  shape: "rectangle",
7907
8538
  roughness,
7908
8539
  seed: resolvedSeed,
7909
- sketchColor: sketchColor ?? SKETCH_COLORS.accent,
7910
- fill: SKETCH_COLORS.accentFill,
8540
+ sketchColor: accent,
8541
+ fill: accentFill,
7911
8542
  fillStyle: "solid",
7912
8543
  bowing,
7913
8544
  strokeWidth: strokeWidth ?? 1
@@ -7958,7 +8589,9 @@ function SidebarProvider({
7958
8589
  const toggleCollapsed = useCallback(() => {
7959
8590
  setCollapsed((c) => !c);
7960
8591
  }, []);
7961
- const ink = sketchColor ?? SKETCH_COLORS.ink;
8592
+ const theme = useSketchTheme(sketchColor);
8593
+ const ink = sketchColor ?? theme.ink;
8594
+ const paper = theme.paper;
7962
8595
  const value = useMemo(
7963
8596
  () => ({
7964
8597
  open,
@@ -7966,7 +8599,8 @@ function SidebarProvider({
7966
8599
  collapsed,
7967
8600
  toggleCollapsed,
7968
8601
  ink,
7969
- sketch: { roughness, seed, sketchColor, bowing, strokeWidth }
8602
+ paper,
8603
+ sketch: { roughness, seed, sketchColor: ink, bowing, strokeWidth }
7970
8604
  }),
7971
8605
  [
7972
8606
  open,
@@ -7974,17 +8608,17 @@ function SidebarProvider({
7974
8608
  collapsed,
7975
8609
  toggleCollapsed,
7976
8610
  ink,
8611
+ paper,
7977
8612
  roughness,
7978
8613
  seed,
7979
- sketchColor,
7980
8614
  bowing,
7981
8615
  strokeWidth
7982
8616
  ]
7983
8617
  );
7984
8618
  return /* @__PURE__ */ jsx(SidebarContext.Provider, { value, children });
7985
8619
  }
7986
- var Sidebar = forwardRef(function Sidebar2({ className, style, children, side = "left", ...rest }, ref) {
7987
- const { open, collapsed, sketch } = useSidebar();
8620
+ var Sidebar = forwardRef(function Sidebar2({ className, style, children, fill, side = "left", ...rest }, ref) {
8621
+ const { open, collapsed, ink, paper, sketch } = useSidebar();
7988
8622
  const resolvedSeed = useResolvedSeed(sketch.seed);
7989
8623
  const width = collapsed ? SIDEBAR_WIDTH_COLLAPSED : SIDEBAR_WIDTH;
7990
8624
  if (!open) {
@@ -8003,7 +8637,8 @@ var Sidebar = forwardRef(function Sidebar2({ className, style, children, side =
8003
8637
  transition: "width 200ms ease",
8004
8638
  display: "flex",
8005
8639
  flexDirection: "column",
8006
- background: SKETCH_COLORS.paper,
8640
+ background: fill ?? paper,
8641
+ color: ink,
8007
8642
  ...style
8008
8643
  },
8009
8644
  "data-side": side,
@@ -8028,7 +8663,7 @@ var Sidebar = forwardRef(function Sidebar2({ className, style, children, side =
8028
8663
  shape: "line-vertical",
8029
8664
  roughness: sketch.roughness,
8030
8665
  seed: resolvedSeed,
8031
- sketchColor: sketch.sketchColor ?? SKETCH_COLORS.ink,
8666
+ sketchColor: sketch.sketchColor ?? ink,
8032
8667
  bowing: sketch.bowing,
8033
8668
  strokeWidth: sketch.strokeWidth ?? 1.5
8034
8669
  }
@@ -8045,14 +8680,14 @@ function SidebarHeader({
8045
8680
  children,
8046
8681
  ...rest
8047
8682
  }) {
8048
- const { collapsed } = useSidebar();
8683
+ const { collapsed, ink } = useSidebar();
8049
8684
  return /* @__PURE__ */ jsx(
8050
8685
  "div",
8051
8686
  {
8052
8687
  className: cn(className),
8053
8688
  style: {
8054
8689
  padding: collapsed ? "12px 8px" : "16px 14px",
8055
- borderBottom: `1px solid ${SKETCH_COLORS.ink}22`,
8690
+ borderBottom: `1px solid ${ink}22`,
8056
8691
  ...style
8057
8692
  },
8058
8693
  ...rest,
@@ -8087,13 +8722,14 @@ function SidebarFooter({
8087
8722
  children,
8088
8723
  ...rest
8089
8724
  }) {
8725
+ const { ink } = useSidebar();
8090
8726
  return /* @__PURE__ */ jsx(
8091
8727
  "div",
8092
8728
  {
8093
8729
  className: cn(className),
8094
8730
  style: {
8095
8731
  padding: "12px 10px",
8096
- borderTop: `1px solid ${SKETCH_COLORS.ink}22`,
8732
+ borderTop: `1px solid ${ink}22`,
8097
8733
  ...style
8098
8734
  },
8099
8735
  ...rest,
@@ -8250,12 +8886,16 @@ function Carousel({
8250
8886
  style,
8251
8887
  children,
8252
8888
  setApi,
8889
+ fill,
8253
8890
  roughness,
8254
8891
  seed,
8255
8892
  sketchColor,
8256
8893
  bowing,
8257
8894
  strokeWidth,
8258
8895
  fillStyle,
8896
+ hachureGap,
8897
+ hachureAngle,
8898
+ fillWeight,
8259
8899
  animate
8260
8900
  }) {
8261
8901
  const [emblaRef, api] = useEmblaCarousel(
@@ -8267,6 +8907,9 @@ function Carousel({
8267
8907
  );
8268
8908
  const [canScrollPrev, setCanScrollPrev] = useState(false);
8269
8909
  const [canScrollNext, setCanScrollNext] = useState(false);
8910
+ const theme = useSketchTheme(sketchColor);
8911
+ const ink = sketchColor ?? theme.ink;
8912
+ const paper = fill ?? theme.paper;
8270
8913
  const scrollPrev = useCallback(() => api?.scrollPrev(), [api]);
8271
8914
  const scrollNext = useCallback(() => api?.scrollNext(), [api]);
8272
8915
  const onSelect = useCallback(() => {
@@ -8316,11 +8959,16 @@ function Carousel({
8316
8959
  sketch: {
8317
8960
  roughness,
8318
8961
  seed,
8319
- sketchColor,
8962
+ sketchColor: ink,
8320
8963
  bowing,
8321
8964
  strokeWidth,
8322
8965
  fillStyle,
8323
- animate
8966
+ hachureGap,
8967
+ hachureAngle,
8968
+ fillWeight,
8969
+ animate,
8970
+ paper,
8971
+ ink
8324
8972
  },
8325
8973
  bordered
8326
8974
  };
@@ -8335,6 +8983,8 @@ function Carousel({
8335
8983
  style: {
8336
8984
  position: "relative",
8337
8985
  width: "100%",
8986
+ outline: "none",
8987
+ color: ink,
8338
8988
  ...style
8339
8989
  },
8340
8990
  children
@@ -8366,15 +9016,18 @@ var CarouselContent = forwardRef(
8366
9016
  return /* @__PURE__ */ jsx(
8367
9017
  SketchBox,
8368
9018
  {
8369
- fill: SKETCH_COLORS.paper,
8370
- fillStyle: sketch.fillStyle ?? "hachure",
9019
+ fill: sketch.paper,
9020
+ fillStyle: sketch.fillStyle ?? "solid",
8371
9021
  roughness: sketch.roughness,
8372
9022
  seed: sketch.seed,
8373
9023
  sketchColor: sketch.sketchColor,
8374
9024
  bowing: sketch.bowing,
8375
9025
  strokeWidth: sketch.strokeWidth,
9026
+ hachureGap: sketch.hachureGap,
9027
+ hachureAngle: sketch.hachureAngle,
9028
+ fillWeight: sketch.fillWeight,
8376
9029
  animate: sketch.animate,
8377
- contentStyle: { padding: 8 },
9030
+ contentStyle: { padding: 8, color: sketch.ink },
8378
9031
  children: viewport
8379
9032
  }
8380
9033
  );
@@ -8417,7 +9070,7 @@ var CarouselArrow = forwardRef(function CarouselArrow2({ className, style, direc
8417
9070
  orientation
8418
9071
  } = useCarousel();
8419
9072
  const resolvedSeed = useResolvedSeed(sketch.seed);
8420
- const ink = sketch.sketchColor ?? SKETCH_COLORS.ink;
9073
+ const ink = sketch.sketchColor ?? sketch.ink;
8421
9074
  const isPrev = direction === "prev";
8422
9075
  const disabled = isPrev ? !canScrollPrev : !canScrollNext;
8423
9076
  const shouldAnimate = useAnimate(sketch.animate);
@@ -8470,7 +9123,7 @@ var CarouselArrow = forwardRef(function CarouselArrow2({ className, style, direc
8470
9123
  seed: sketchSeed,
8471
9124
  sketchColor: ink,
8472
9125
  bowing: sketch.bowing,
8473
- fill: SKETCH_COLORS.paper,
9126
+ fill: sketch.paper,
8474
9127
  fillStyle: "solid",
8475
9128
  strokeWidth: sketch.strokeWidth ?? 1.5,
8476
9129
  inset: 1.5
@@ -8515,6 +9168,6 @@ var CarouselNext = forwardRef(
8515
9168
  }
8516
9169
  );
8517
9170
 
8518
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AspectRatio, Avatar, Badge, Blockquote, Breadcrumb, BreadcrumbItem, Button, Card, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuSub, ContextMenuTrigger, DEFAULT_BOWING, DEFAULT_INK, DEFAULT_ROUGHNESS, DEFAULT_STROKE_WIDTH, DRAW_IN_ALERT_MS, DRAW_IN_DURATION_MS, DRAW_IN_MARK_MS, DRAW_IN_TOOLTIP_MS, Dialog2 as Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Divider, DoodleUIProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHandle, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuTrigger, Empty, EmptyAction, EmptyDescription, EmptyMedia, EmptyTitle, Field, FieldControl, FieldDescription, FieldError, FieldLabel, Heading, Highlight, HoverCard, HoverCardArrow, HoverCardContent, HoverCardTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, Label2 as Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Modal, ModalClose, ModalDescription, ModalRoot, ModalTitle, ModalTrigger, NativeSelect, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuItemLink, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, Paragraph, Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, PopoverTrigger, Progress, Radio, RadioGroup, ResizableHandle, ResizablePanel, ResizablePanelGroup, RoughSvg, SKETCH_COLORS, ScrollArea, ScrollAreaCorner, ScrollAreaViewport, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectSeparator, SelectTrigger, SelectValue, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarHeader, SidebarInset, SidebarItem, SidebarLayout, SidebarProvider, SidebarTrigger, Skeleton, SketchBox, SketchSeedProvider, Slider, Spinner, Stepper, Switch, TABLE_STAGGER_MS, Tab, TabList, TabPanel, Table, TableBody, TableCell, TableHead, TableHeaderCell, TableRow, Tabs, Text, Textarea, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastRoot, ToastTitle, ToastViewport, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipProvider, deriveSeed, toRoughOptions, useAnimate, useCarousel, useDoodleUI, useDrawIn, useResolvedSeed, useSidebar, useSketchSeed };
9171
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AspectRatio, Avatar, Badge, Blockquote, Breadcrumb, BreadcrumbItem, Button, Card, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuSub, ContextMenuTrigger, DARK_SKETCH_COLORS, DEFAULT_BOWING, DEFAULT_DARK_CARD_BG, DEFAULT_DARK_INK, DEFAULT_DARK_PAPER, DEFAULT_INK, DEFAULT_PAPER, DEFAULT_ROUGHNESS, DEFAULT_STROKE_WIDTH, DRAW_IN_ALERT_MS, DRAW_IN_DURATION_MS, DRAW_IN_MARK_MS, DRAW_IN_TOOLTIP_MS, Dialog2 as Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Divider, DoodleUIProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHandle, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuTrigger, Empty, EmptyAction, EmptyDescription, EmptyMedia, EmptyTitle, Field, FieldControl, FieldDescription, FieldError, FieldLabel, Heading, Highlight, HoverCard, HoverCardArrow, HoverCardContent, HoverCardTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, Label2 as Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Modal, ModalClose, ModalDescription, ModalRoot, ModalTitle, ModalTrigger, NativeSelect, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuItemLink, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, Paragraph, Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, PopoverTrigger, Progress, Radio, RadioGroup, ResizableHandle, ResizablePanel, ResizablePanelGroup, RoughSvg, SKETCH_COLORS, ScrollArea, ScrollAreaCorner, ScrollAreaViewport, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectSeparator, SelectTrigger, SelectValue, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarHeader, SidebarInset, SidebarItem, SidebarLayout, SidebarProvider, SidebarTrigger, Skeleton, SketchBox, SketchSeedProvider, Slider, Spinner, Stepper, Switch, TABLE_STAGGER_MS, Tab, TabList, TabPanel, Table, TableBody, TableCell, TableHead, TableHeaderCell, TableRow, Tabs, Text, Textarea, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastRoot, ToastTitle, ToastViewport, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipProvider, deriveSeed, toRoughOptions, useAnimate, useCarousel, useDoodleUI, useDrawIn, useResolvedSeed, useSidebar, useSketchSeed, useSketchTheme };
8519
9172
  //# sourceMappingURL=index.js.map
8520
9173
  //# sourceMappingURL=index.js.map