doodleui-react 0.1.0 → 0.1.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/README.md +3 -1
- package/dist/index.cjs +102 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -2
- package/dist/index.d.ts +10 -2
- package/dist/index.js +102 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -61,7 +61,9 @@ Button, Input, Textarea, Checkbox, Radio, Card, Badge, Alert, Modal, Divider, Pr
|
|
|
61
61
|
|
|
62
62
|
## Docs
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
Live site: [doodle-ui.netlify.app](https://doodle-ui.netlify.app)
|
|
65
|
+
|
|
66
|
+
The source for that site is `apps/docs` in the [doodle-ui](https://github.com/KanchanaSW/doodle-ui) monorepo.
|
|
65
67
|
|
|
66
68
|
## License
|
|
67
69
|
|
package/dist/index.cjs
CHANGED
|
@@ -72,6 +72,18 @@ var SKETCH_COLORS = {
|
|
|
72
72
|
function randomSeed() {
|
|
73
73
|
return Math.floor(Math.random() * 2 ** 31);
|
|
74
74
|
}
|
|
75
|
+
var doodleUiFontFamily = "var(--doodle-ui-font, inherit)";
|
|
76
|
+
function doodleUiFontWeight(fallback) {
|
|
77
|
+
return `var(--doodle-ui-font-weight, ${fallback})`;
|
|
78
|
+
}
|
|
79
|
+
function nextFontIndex(current, count) {
|
|
80
|
+
if (count <= 1) return 0;
|
|
81
|
+
let next = current;
|
|
82
|
+
while (next === current) {
|
|
83
|
+
next = Math.floor(Math.random() * count);
|
|
84
|
+
}
|
|
85
|
+
return next;
|
|
86
|
+
}
|
|
75
87
|
function cn(...parts) {
|
|
76
88
|
const value = parts.filter(Boolean).join(" ");
|
|
77
89
|
return value.length > 0 ? value : void 0;
|
|
@@ -79,15 +91,35 @@ function cn(...parts) {
|
|
|
79
91
|
var SketchSeedContext = react.createContext(null);
|
|
80
92
|
function SketchSeedProvider({
|
|
81
93
|
children,
|
|
82
|
-
initialSeed
|
|
94
|
+
initialSeed,
|
|
95
|
+
fonts,
|
|
96
|
+
initialFontIndex = 0
|
|
83
97
|
}) {
|
|
84
98
|
const [seed, setSeed] = react.useState(() => initialSeed ?? randomSeed());
|
|
99
|
+
const [fontIndex, setFontIndex] = react.useState(initialFontIndex);
|
|
100
|
+
const fontCount = fonts?.length ?? 0;
|
|
85
101
|
const shuffle = react.useCallback(() => {
|
|
86
102
|
setSeed(randomSeed());
|
|
87
|
-
|
|
103
|
+
setFontIndex((current) => nextFontIndex(current, fontCount));
|
|
104
|
+
}, [fontCount]);
|
|
105
|
+
const activeFamily = fontIndex > 0 ? fonts?.[fontIndex] : void 0;
|
|
106
|
+
react.useLayoutEffect(() => {
|
|
107
|
+
const root = document.documentElement;
|
|
108
|
+
if (activeFamily) {
|
|
109
|
+
root.style.setProperty("--doodle-ui-font", activeFamily);
|
|
110
|
+
root.style.setProperty("--doodle-ui-font-weight", "400");
|
|
111
|
+
} else {
|
|
112
|
+
root.style.setProperty("--doodle-ui-font", "initial");
|
|
113
|
+
root.style.setProperty("--doodle-ui-font-weight", "initial");
|
|
114
|
+
}
|
|
115
|
+
return () => {
|
|
116
|
+
root.style.removeProperty("--doodle-ui-font");
|
|
117
|
+
root.style.removeProperty("--doodle-ui-font-weight");
|
|
118
|
+
};
|
|
119
|
+
}, [activeFamily]);
|
|
88
120
|
const value = react.useMemo(
|
|
89
|
-
() => ({ seed, shuffle, setSeed }),
|
|
90
|
-
[seed, shuffle]
|
|
121
|
+
() => ({ seed, fontIndex, shuffle, setSeed }),
|
|
122
|
+
[seed, fontIndex, shuffle]
|
|
91
123
|
);
|
|
92
124
|
return /* @__PURE__ */ jsxRuntime.jsx(SketchSeedContext.Provider, { value, children });
|
|
93
125
|
}
|
|
@@ -292,7 +324,12 @@ var SketchBox = react.forwardRef(
|
|
|
292
324
|
"div",
|
|
293
325
|
{
|
|
294
326
|
className: contentClassName,
|
|
295
|
-
style: {
|
|
327
|
+
style: {
|
|
328
|
+
position: "relative",
|
|
329
|
+
zIndex: 1,
|
|
330
|
+
fontFamily: doodleUiFontFamily,
|
|
331
|
+
...contentStyle
|
|
332
|
+
},
|
|
296
333
|
children
|
|
297
334
|
}
|
|
298
335
|
)
|
|
@@ -353,8 +390,8 @@ var Button = react.forwardRef(
|
|
|
353
390
|
background: "transparent",
|
|
354
391
|
cursor: disabled ? "not-allowed" : "pointer",
|
|
355
392
|
color: ink,
|
|
356
|
-
fontFamily:
|
|
357
|
-
fontWeight: 600,
|
|
393
|
+
fontFamily: doodleUiFontFamily,
|
|
394
|
+
fontWeight: doodleUiFontWeight(600),
|
|
358
395
|
lineHeight: 1.2,
|
|
359
396
|
opacity: disabled ? 0.45 : 1,
|
|
360
397
|
...SIZE_STYLES[size],
|
|
@@ -410,7 +447,18 @@ var Input = react.forwardRef(function Input2({
|
|
|
410
447
|
width: "100%"
|
|
411
448
|
},
|
|
412
449
|
children: [
|
|
413
|
-
label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
450
|
+
label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
451
|
+
"span",
|
|
452
|
+
{
|
|
453
|
+
style: {
|
|
454
|
+
fontSize: 13,
|
|
455
|
+
fontWeight: doodleUiFontWeight(600),
|
|
456
|
+
fontFamily: doodleUiFontFamily,
|
|
457
|
+
color: ink
|
|
458
|
+
},
|
|
459
|
+
children: label
|
|
460
|
+
}
|
|
461
|
+
) : null,
|
|
414
462
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: { position: "relative", display: "block" }, children: [
|
|
415
463
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
416
464
|
RoughSvg,
|
|
@@ -447,7 +495,7 @@ var Input = react.forwardRef(function Input2({
|
|
|
447
495
|
outline: "none",
|
|
448
496
|
background: "transparent",
|
|
449
497
|
color: ink,
|
|
450
|
-
fontFamily:
|
|
498
|
+
fontFamily: doodleUiFontFamily,
|
|
451
499
|
fontSize: 15,
|
|
452
500
|
padding: "8px 12px",
|
|
453
501
|
...style
|
|
@@ -490,7 +538,18 @@ var Textarea = react.forwardRef(
|
|
|
490
538
|
width: "100%"
|
|
491
539
|
},
|
|
492
540
|
children: [
|
|
493
|
-
label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
541
|
+
label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
542
|
+
"span",
|
|
543
|
+
{
|
|
544
|
+
style: {
|
|
545
|
+
fontSize: 13,
|
|
546
|
+
fontWeight: doodleUiFontWeight(600),
|
|
547
|
+
fontFamily: doodleUiFontFamily,
|
|
548
|
+
color: ink
|
|
549
|
+
},
|
|
550
|
+
children: label
|
|
551
|
+
}
|
|
552
|
+
) : null,
|
|
494
553
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: { position: "relative", display: "block" }, children: [
|
|
495
554
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
496
555
|
RoughSvg,
|
|
@@ -528,7 +587,7 @@ var Textarea = react.forwardRef(
|
|
|
528
587
|
outline: "none",
|
|
529
588
|
background: "transparent",
|
|
530
589
|
color: ink,
|
|
531
|
-
fontFamily:
|
|
590
|
+
fontFamily: doodleUiFontFamily,
|
|
532
591
|
fontSize: 15,
|
|
533
592
|
lineHeight: 1.5,
|
|
534
593
|
padding: "10px 12px",
|
|
@@ -638,7 +697,14 @@ var Checkbox = react.forwardRef(
|
|
|
638
697
|
]
|
|
639
698
|
}
|
|
640
699
|
),
|
|
641
|
-
label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
700
|
+
label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
701
|
+
"label",
|
|
702
|
+
{
|
|
703
|
+
htmlFor: inputId,
|
|
704
|
+
style: { fontSize: 15, cursor: "pointer", fontFamily: doodleUiFontFamily },
|
|
705
|
+
children: label
|
|
706
|
+
}
|
|
707
|
+
) : null
|
|
642
708
|
]
|
|
643
709
|
}
|
|
644
710
|
);
|
|
@@ -751,7 +817,14 @@ var Radio = react.forwardRef(function Radio2({
|
|
|
751
817
|
]
|
|
752
818
|
}
|
|
753
819
|
),
|
|
754
|
-
label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
820
|
+
label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
821
|
+
"label",
|
|
822
|
+
{
|
|
823
|
+
htmlFor: inputId,
|
|
824
|
+
style: { fontSize: 15, cursor: "pointer", fontFamily: doodleUiFontFamily },
|
|
825
|
+
children: label
|
|
826
|
+
}
|
|
827
|
+
) : null
|
|
755
828
|
]
|
|
756
829
|
}
|
|
757
830
|
);
|
|
@@ -796,7 +869,7 @@ var Card = react.forwardRef(function Card2({
|
|
|
796
869
|
"div",
|
|
797
870
|
{
|
|
798
871
|
style: {
|
|
799
|
-
fontWeight: 700,
|
|
872
|
+
fontWeight: doodleUiFontWeight(700),
|
|
800
873
|
fontSize: 16,
|
|
801
874
|
marginBottom: 10
|
|
802
875
|
},
|
|
@@ -836,7 +909,7 @@ var Badge = react.forwardRef(function Badge2({
|
|
|
836
909
|
contentStyle: {
|
|
837
910
|
padding: "2px 10px",
|
|
838
911
|
fontSize: 12,
|
|
839
|
-
fontWeight: 650,
|
|
912
|
+
fontWeight: doodleUiFontWeight(650),
|
|
840
913
|
lineHeight: 1.4,
|
|
841
914
|
letterSpacing: "0.01em"
|
|
842
915
|
},
|
|
@@ -897,7 +970,17 @@ var Alert = react.forwardRef(function Alert2({
|
|
|
897
970
|
strokeWidth,
|
|
898
971
|
...rest,
|
|
899
972
|
children: [
|
|
900
|
-
title ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
973
|
+
title ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
974
|
+
"div",
|
|
975
|
+
{
|
|
976
|
+
style: {
|
|
977
|
+
fontWeight: doodleUiFontWeight(700),
|
|
978
|
+
marginBottom: 4,
|
|
979
|
+
fontSize: 15
|
|
980
|
+
},
|
|
981
|
+
children: title
|
|
982
|
+
}
|
|
983
|
+
) : null,
|
|
901
984
|
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 14, lineHeight: 1.5, color: SKETCH_COLORS.ink }, children })
|
|
902
985
|
]
|
|
903
986
|
}
|
|
@@ -977,7 +1060,8 @@ function Modal({
|
|
|
977
1060
|
style: {
|
|
978
1061
|
margin: 0,
|
|
979
1062
|
fontSize: 18,
|
|
980
|
-
fontWeight: 700,
|
|
1063
|
+
fontWeight: doodleUiFontWeight(700),
|
|
1064
|
+
fontFamily: doodleUiFontFamily,
|
|
981
1065
|
color: ink
|
|
982
1066
|
},
|
|
983
1067
|
children: title
|
|
@@ -1186,6 +1270,7 @@ function Tooltip({
|
|
|
1186
1270
|
padding: "6px 10px",
|
|
1187
1271
|
fontSize: 13,
|
|
1188
1272
|
lineHeight: 1.35,
|
|
1273
|
+
fontFamily: doodleUiFontFamily,
|
|
1189
1274
|
color: ink,
|
|
1190
1275
|
maxWidth: 240
|
|
1191
1276
|
},
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/utils.ts","../src/context/SketchSeedContext.tsx","../src/hooks/useResolvedSeed.ts","../src/hooks/useElementSize.ts","../src/primitives/RoughSvg.tsx","../src/primitives/SketchBox.tsx","../src/components/Button.tsx","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Card.tsx","../src/components/Badge.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/Divider.tsx","../src/components/Progress.tsx","../src/components/Tooltip.tsx"],"names":["createContext","useState","useCallback","useMemo","jsx","useContext","useLayoutEffect","useRef","rough","forwardRef","SketchBox","jsxs","Button","Input","Textarea","Checkbox","useId","CheckboxPrimitive","RadioGroup","RadioGroupPrimitive","Radio","Card","Badge","Alert","Dialog","Divider","Progress","TooltipPrimitive"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CSSProperties, HTMLAttributes } from \"react\";\nimport type { Options } from \"roughjs/bin/core\";\n\nexport type FillStyle =\n | \"hachure\"\n | \"solid\"\n | \"zigzag\"\n | \"cross-hatch\"\n | \"dots\"\n | \"dashed\"\n | \"zigzag-line\";\n\nexport type RoughShape = \"rectangle\" | \"ellipse\" | \"line\" | \"line-vertical\" | \"path\";\n\nexport interface SketchProps {\n /** Sketchiness intensity. Default 1.5 */\n roughness?: number;\n /** Lock the wobble. Omit to follow SketchSeedProvider or randomize on mount */\n seed?: number;\n /** Stroke color override */\n sketchColor?: string;\n /** Line curvature. Default 1 */\n bowing?: number;\n fillStyle?: FillStyle;\n strokeWidth?: number;\n}\n\nexport interface RoughSvgProps extends SketchProps {\n shape?: RoughShape;\n /** Explicit width. Falls back to the parent box via ResizeObserver */\n width?: number;\n height?: number;\n fill?: string;\n /** Inset the drawing from the box edge so strokes are not clipped */\n inset?: number;\n path?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport type PolymorphicClassName = Pick<HTMLAttributes<HTMLElement>, \"className\" | \"style\">;\n\nexport function toRoughOptions(\n props: SketchProps & { fill?: string; stroke?: string },\n): Options {\n const stroke = props.stroke ?? props.sketchColor ?? DEFAULT_INK;\n const options: Options = {\n roughness: props.roughness ?? DEFAULT_ROUGHNESS,\n bowing: props.bowing ?? DEFAULT_BOWING,\n stroke,\n strokeWidth: props.strokeWidth ?? DEFAULT_STROKE_WIDTH,\n seed: props.seed,\n };\n if (props.fill) {\n options.fill = props.fill;\n options.fillStyle = props.fillStyle ?? \"hachure\";\n }\n return options;\n}\n\nexport const DEFAULT_ROUGHNESS = 1.5;\nexport const DEFAULT_BOWING = 1;\nexport const DEFAULT_STROKE_WIDTH = 1.75;\nexport const DEFAULT_INK = \"#1f1d1a\";\nexport const DEFAULT_INSET = 3;\n\nexport const SKETCH_COLORS = {\n ink: DEFAULT_INK,\n accent: \"#e24b3b\",\n accentFill: \"#f4c4bc\",\n secondaryFill: \"#d7e3d4\",\n paper: \"#eef0ea\",\n info: \"#1d4e89\",\n warning: \"#c47b17\",\n error: \"#c0392b\",\n success: \"#2d6a4f\",\n} as const;\n","export function randomSeed(): number {\n return Math.floor(Math.random() * 2 ** 31);\n}\n\nexport function cn(\n ...parts: Array<string | undefined | false | null>\n): string | undefined {\n const value = parts.filter(Boolean).join(\" \");\n return value.length > 0 ? value : undefined;\n}\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { randomSeed } from \"../utils\";\n\nexport interface SketchSeedContextValue {\n seed: number;\n shuffle: () => void;\n setSeed: (seed: number) => void;\n}\n\nconst SketchSeedContext = createContext<SketchSeedContextValue | null>(null);\n\nexport interface SketchSeedProviderProps {\n children: ReactNode;\n initialSeed?: number;\n}\n\nexport function SketchSeedProvider({\n children,\n initialSeed,\n}: SketchSeedProviderProps) {\n const [seed, setSeed] = useState(() => initialSeed ?? randomSeed());\n\n const shuffle = useCallback(() => {\n setSeed(randomSeed());\n }, []);\n\n const value = useMemo(\n () => ({ seed, shuffle, setSeed }),\n [seed, shuffle],\n );\n\n return (\n <SketchSeedContext.Provider value={value}>\n {children}\n </SketchSeedContext.Provider>\n );\n}\n\nexport function useSketchSeed(): SketchSeedContextValue {\n const ctx = useContext(SketchSeedContext);\n if (!ctx) {\n throw new Error(\n \"useSketchSeed() must be used inside <SketchSeedProvider>. Wrap your tree so Shuffle can redraw every sketch.\",\n );\n }\n return ctx;\n}\n\nexport function useOptionalSketchSeed(): SketchSeedContextValue | null {\n return useContext(SketchSeedContext);\n}\n\nexport { SketchSeedContext };\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useOptionalSketchSeed } from \"../context/SketchSeedContext\";\nimport { randomSeed } from \"../utils\";\n\n/**\n * Resolves the seed used to draw a sketch:\n * 1. explicit `seed` prop (locked, ignores Shuffle)\n * 2. SketchSeedProvider seed (redraws on Shuffle)\n * 3. a stable random seed generated on mount\n */\nexport function useResolvedSeed(seed?: number): number {\n const ctx = useOptionalSketchSeed();\n const [fallback] = useState(randomSeed);\n if (seed != null) return seed;\n if (ctx) return ctx.seed;\n return fallback;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useState, type RefObject } from \"react\";\n\nexport function useElementSize(\n ref: RefObject<HTMLElement | null>,\n): { width: number; height: number } {\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const update = () => {\n setSize({ width: el.offsetWidth, height: el.offsetHeight });\n };\n\n update();\n const observer = new ResizeObserver(update);\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type CSSProperties } from \"react\";\nimport rough from \"roughjs\";\nimport { useResolvedSeed } from \"../hooks/useResolvedSeed\";\nimport { useElementSize } from \"../hooks/useElementSize\";\nimport {\n DEFAULT_INSET,\n toRoughOptions,\n type RoughSvgProps,\n} from \"../types\";\n\n/**\n * Absolutely-positioned SVG layer that draws a rough.js shape behind HTML content.\n * Parent must be `position: relative`.\n */\nexport function RoughSvg({\n shape = \"rectangle\",\n width: widthProp,\n height: heightProp,\n roughness,\n seed: seedProp,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n inset = DEFAULT_INSET,\n path,\n className,\n style,\n}: RoughSvgProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const svgRef = useRef<SVGSVGElement>(null);\n const measured = useElementSize(containerRef);\n const seed = useResolvedSeed(seedProp);\n\n const width = widthProp ?? measured.width;\n const height = heightProp ?? measured.height;\n\n useLayoutEffect(() => {\n const svg = svgRef.current;\n if (!svg || width < 2 || height < 2) return;\n\n while (svg.firstChild) svg.removeChild(svg.firstChild);\n\n const rc = rough.svg(svg);\n const options = toRoughOptions({\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n });\n\n const x = inset;\n const y = inset;\n const w = Math.max(1, width - inset * 2);\n const h = Math.max(1, height - inset * 2);\n\n let node: SVGGElement;\n switch (shape) {\n case \"ellipse\":\n node = rc.ellipse(width / 2, height / 2, w, h, options);\n break;\n case \"line\":\n node = rc.line(inset, height / 2, width - inset, height / 2, options);\n break;\n case \"line-vertical\":\n node = rc.line(width / 2, inset, width / 2, height - inset, options);\n break;\n case \"path\":\n if (!path) return;\n node = rc.path(path, options);\n break;\n default:\n node = rc.rectangle(x, y, w, h, options);\n }\n\n svg.appendChild(node);\n }, [\n width,\n height,\n shape,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n inset,\n path,\n ]);\n\n const overlayStyle: CSSProperties = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n overflow: \"visible\",\n zIndex: 0,\n ...style,\n };\n\n return (\n <div\n ref={containerRef}\n aria-hidden=\"true\"\n className={className}\n style={overlayStyle}\n >\n <svg\n ref={svgRef}\n width=\"100%\"\n height=\"100%\"\n overflow=\"visible\"\n style={{ display: \"block\" }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { RoughSvg } from \"./RoughSvg\";\nimport type { FillStyle, RoughShape, SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface SketchBoxProps\n extends SketchProps, Omit<HTMLAttributes<HTMLDivElement>, \"color\"> {\n children?: ReactNode;\n shape?: RoughShape;\n fill?: string;\n fillStyle?: FillStyle;\n shadow?: boolean;\n contentClassName?: string;\n contentStyle?: CSSProperties;\n inset?: number;\n path?: string;\n}\n\nexport const SketchBox = forwardRef<HTMLDivElement, SketchBoxProps>(\n function SketchBox(\n {\n children,\n className,\n style,\n contentClassName,\n contentStyle,\n shape = \"rectangle\",\n fill,\n fillStyle,\n shadow = false,\n roughness,\n seed,\n sketchColor,\n bowing,\n strokeWidth,\n inset,\n path,\n ...rest\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cn(className)}\n style={{ position: \"relative\", ...style }}\n {...rest}\n >\n {shadow ? (\n <RoughSvg\n shape={shape}\n roughness={(roughness ?? 1.5) + 0.35}\n seed={seed}\n sketchColor={sketchColor}\n bowing={bowing}\n fillStyle=\"hachure\"\n fill={sketchColor ?? \"#1f1d1a\"}\n strokeWidth={1}\n inset={inset}\n style={{ transform: \"translate(5px, 6px)\", opacity: 0.16 }}\n />\n ) : null}\n <RoughSvg\n shape={shape}\n roughness={roughness}\n seed={seed}\n sketchColor={sketchColor}\n bowing={bowing}\n fillStyle={fill ? fillStyle : shadow ? \"solid\" : fillStyle}\n fill={fill ?? (shadow ? \"#f7f6f2\" : undefined)}\n strokeWidth={strokeWidth}\n inset={inset}\n path={path}\n />\n <div\n className={contentClassName}\n style={{ position: \"relative\", zIndex: 1, ...contentStyle }}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n SketchProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nconst SIZE_STYLES: Record<ButtonSize, CSSProperties> = {\n sm: { fontSize: 13, padding: \"4px 12px\", minHeight: 30 },\n md: { fontSize: 15, padding: \"8px 16px\", minHeight: 38 },\n lg: { fontSize: 17, padding: \"11px 22px\", minHeight: 46 },\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n {\n children,\n className,\n style,\n variant = \"primary\",\n size = \"md\",\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n disabled,\n onMouseEnter,\n onMouseLeave,\n ...rest\n },\n ref,\n ) {\n const [hovered, setHovered] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n const fill =\n variant === \"primary\"\n ? SKETCH_COLORS.accentFill\n : variant === \"secondary\"\n ? SKETCH_COLORS.secondaryFill\n : undefined;\n\n const stroke =\n variant === \"ghost\" && !hovered\n ? \"transparent\"\n : variant === \"primary\"\n ? sketchColor ?? SKETCH_COLORS.accent\n : ink;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(className)}\n disabled={disabled}\n onMouseEnter={(event) => {\n setHovered(true);\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setHovered(false);\n onMouseLeave?.(event);\n }}\n style={{\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n border: \"none\",\n background: \"transparent\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n color: ink,\n fontFamily: \"inherit\",\n fontWeight: 600,\n lineHeight: 1.2,\n opacity: disabled ? 0.45 : 1,\n ...SIZE_STYLES[size],\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={stroke}\n bowing={bowing}\n fillStyle={fillStyle ?? \"hachure\"}\n fill={fill}\n strokeWidth={\n hovered ? (strokeWidth ?? 1.75) + 0.4 : strokeWidth\n }\n />\n <span style={{ position: \"relative\", zIndex: 1 }}>{children}</span>\n </button>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"color\" | \"size\">,\n SketchProps {\n label?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const inputId = id;\n\n return (\n <label\n htmlFor={inputId}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n width: \"100%\",\n }}\n >\n {label ? (\n <span style={{ fontSize: 13, fontWeight: 600, color: ink }}>\n {label}\n </span>\n ) : null}\n <span style={{ position: \"relative\", display: \"block\" }}>\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={focused ? SKETCH_COLORS.accent : ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={focused ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth}\n />\n <input\n ref={ref}\n id={inputId}\n className={cn(className)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: \"relative\",\n zIndex: 1,\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n color: ink,\n fontFamily: \"inherit\",\n fontSize: 15,\n padding: \"8px 12px\",\n ...style,\n }}\n {...rest}\n />\n </span>\n </label>\n );\n});\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"color\">,\n SketchProps {\n label?: ReactNode;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n rows = 4,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n ) {\n const [focused, setFocused] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <label\n htmlFor={id}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n width: \"100%\",\n }}\n >\n {label ? (\n <span style={{ fontSize: 13, fontWeight: 600, color: ink }}>\n {label}\n </span>\n ) : null}\n <span style={{ position: \"relative\", display: \"block\" }}>\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={focused ? SKETCH_COLORS.accent : ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={focused ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth}\n />\n <textarea\n ref={ref}\n id={id}\n rows={rows}\n className={cn(className)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: \"relative\",\n zIndex: 1,\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n color: ink,\n fontFamily: \"inherit\",\n fontSize: 15,\n lineHeight: 1.5,\n padding: \"10px 12px\",\n resize: \"vertical\",\n ...style,\n }}\n {...rest}\n />\n </span>\n </label>\n );\n },\n);\n","\"use client\";\n\nimport { forwardRef, useId, type ReactNode } from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface CheckboxProps\n extends Omit<CheckboxPrimitive.CheckboxProps, \"asChild\">,\n SketchProps {\n label?: ReactNode;\n}\n\nconst BOX = 20;\nconst CHECK_PATH = \"M 4.5 10.5 L 8.5 14.5 L 15.5 5.5\";\n\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n function Checkbox(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n checked,\n defaultChecked,\n onCheckedChange,\n id,\n ...rest\n },\n ref,\n ) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <span\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n userSelect: \"none\",\n ...style,\n }}\n >\n <CheckboxPrimitive.Root\n ref={ref}\n id={inputId}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n style={{\n position: \"relative\",\n width: BOX,\n height: BOX,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n flexShrink: 0,\n cursor: \"pointer\",\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={strokeWidth ?? 1.6}\n inset={1.5}\n />\n <CheckboxPrimitive.Indicator\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n }}\n >\n <RoughSvg\n shape=\"path\"\n path={CHECK_PATH}\n roughness={(roughness ?? 1.5) * 0.7}\n seed={seed}\n sketchColor={SKETCH_COLORS.accent}\n bowing={bowing}\n strokeWidth={(strokeWidth ?? 1.6) + 0.4}\n inset={0}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label ? (\n <label htmlFor={inputId} style={{ fontSize: 15, cursor: \"pointer\" }}>\n {label}\n </label>\n ) : null}\n </span>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface RadioGroupProps\n extends ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n function RadioGroup({ className, style, children, ...rest }, ref) {\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(className)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n ...style,\n }}\n {...rest}\n >\n {children}\n </RadioGroupPrimitive.Root>\n );\n },\n);\n\nexport interface RadioProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>,\n \"asChild\"\n >,\n SketchProps {\n label?: ReactNode;\n}\n\nconst SIZE = 20;\n\nexport const Radio = forwardRef<HTMLButtonElement, RadioProps>(function Radio(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n ...rest\n },\n ref,\n) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <span\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n userSelect: \"none\",\n ...style,\n }}\n >\n <RadioGroupPrimitive.Item\n ref={ref}\n id={inputId}\n style={{\n position: \"relative\",\n width: SIZE,\n height: SIZE,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n flexShrink: 0,\n cursor: \"pointer\",\n borderRadius: \"50%\",\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"ellipse\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={strokeWidth ?? 1.6}\n inset={1.5}\n />\n <RadioGroupPrimitive.Indicator\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n }}\n >\n <RoughSvg\n shape=\"ellipse\"\n roughness={(roughness ?? 1.5) + 0.2}\n seed={seed}\n sketchColor={SKETCH_COLORS.accent}\n fill={SKETCH_COLORS.accent}\n fillStyle=\"solid\"\n bowing={bowing}\n strokeWidth={1}\n inset={6}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {label ? (\n <label htmlFor={inputId} style={{ fontSize: 15, cursor: \"pointer\" }}>\n {label}\n </label>\n ) : null}\n </span>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { SketchBox, type SketchBoxProps } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\" | \"title\">,\n SketchProps {\n shadow?: boolean;\n fill?: string;\n title?: ReactNode;\n footer?: ReactNode;\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n children,\n className,\n style,\n shadow = true,\n fill,\n title,\n footer,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n) {\n const boxProps: SketchBoxProps = {\n shadow,\n fill,\n roughness,\n seed,\n sketchColor: sketchColor ?? SKETCH_COLORS.ink,\n bowing,\n fillStyle,\n strokeWidth,\n };\n\n return (\n <SketchBox\n ref={ref}\n className={cn(className)}\n style={style}\n contentStyle={{ padding: \"16px 18px\" }}\n {...boxProps}\n {...rest}\n >\n {title ? (\n <div\n style={{\n fontWeight: 700,\n fontSize: 16,\n marginBottom: 10,\n }}\n >\n {title}\n </div>\n ) : null}\n {children}\n {footer ? (\n <div style={{ marginTop: 14, fontSize: 13, opacity: 0.8 }}>\n {footer}\n </div>\n ) : null}\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type BadgeVariant = \"default\" | \"accent\" | \"outline\";\n\nexport interface BadgeProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"color\">,\n SketchProps {\n variant?: BadgeVariant;\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n children,\n className,\n style,\n variant = \"default\",\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n) {\n const ink =\n variant === \"accent\"\n ? sketchColor ?? SKETCH_COLORS.accent\n : sketchColor ?? SKETCH_COLORS.ink;\n\n const fill =\n variant === \"accent\"\n ? SKETCH_COLORS.accentFill\n : variant === \"outline\"\n ? undefined\n : SKETCH_COLORS.secondaryFill;\n\n return (\n <SketchBox\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n verticalAlign: \"middle\",\n ...style,\n }}\n contentStyle={{\n padding: \"2px 10px\",\n fontSize: 12,\n fontWeight: 650,\n lineHeight: 1.4,\n letterSpacing: \"0.01em\",\n }}\n fill={fill}\n fillStyle={fillStyle ?? \"hachure\"}\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n strokeWidth={strokeWidth ?? 1.4}\n {...rest}\n >\n <span ref={ref}>{children}</span>\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type AlertVariant = \"info\" | \"warning\" | \"error\" | \"success\";\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\" | \"title\">,\n SketchProps {\n variant?: AlertVariant;\n title?: ReactNode;\n}\n\nconst VARIANT_COLOR: Record<AlertVariant, string> = {\n info: SKETCH_COLORS.info,\n warning: SKETCH_COLORS.warning,\n error: SKETCH_COLORS.error,\n success: SKETCH_COLORS.success,\n};\n\nconst VARIANT_FILL: Record<AlertVariant, string> = {\n info: \"#d2deec\",\n warning: \"#f3e2c0\",\n error: \"#f3d0cc\",\n success: \"#d3e8dc\",\n};\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n children,\n className,\n style,\n variant = \"info\",\n title,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n role = \"status\",\n ...rest\n },\n ref,\n) {\n const color = sketchColor ?? VARIANT_COLOR[variant];\n\n return (\n <SketchBox\n ref={ref}\n role={role}\n className={cn(className)}\n style={{ color, ...style }}\n contentStyle={{ padding: \"12px 16px\" }}\n roughness={roughness}\n seed={seed}\n sketchColor={color}\n bowing={bowing}\n fillStyle={fillStyle ?? \"hachure\"}\n fill={VARIANT_FILL[variant]}\n strokeWidth={strokeWidth}\n {...rest}\n >\n {title ? (\n <div style={{ fontWeight: 700, marginBottom: 4, fontSize: 15 }}>\n {title}\n </div>\n ) : null}\n <div style={{ fontSize: 14, lineHeight: 1.5, color: SKETCH_COLORS.ink }}>\n {children}\n </div>\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { Button } from \"./Button\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface ModalProps extends SketchProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nexport function Modal({\n open,\n defaultOpen,\n onOpenChange,\n trigger,\n title,\n description,\n children,\n className,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n}: ModalProps) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <Dialog.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {trigger ? <Dialog.Trigger asChild>{trigger}</Dialog.Trigger> : null}\n <Dialog.Portal>\n <Dialog.Overlay\n style={{\n position: \"fixed\",\n inset: 0,\n background: \"rgba(31, 29, 26, 0.38)\",\n zIndex: 70,\n }}\n />\n <Dialog.Content\n className={cn(className)}\n style={{\n position: \"fixed\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 80,\n width: \"min(480px, calc(100vw - 32px))\",\n outline: \"none\",\n }}\n >\n <SketchBox\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle ?? \"solid\"}\n fill=\"#f7f6f2\"\n strokeWidth={strokeWidth ?? 2}\n shadow\n contentStyle={{ padding: \"20px 22px 18px\" }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 12,\n marginBottom: title ? 10 : 0,\n }}\n >\n {title ? (\n <Dialog.Title\n style={{\n margin: 0,\n fontSize: 18,\n fontWeight: 700,\n color: ink,\n }}\n >\n {title}\n </Dialog.Title>\n ) : (\n <Dialog.Title style={{ position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", clip: \"rect(0 0 0 0)\" }}>\n Dialog\n </Dialog.Title>\n )}\n <Dialog.Close asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n aria-label=\"Close\"\n >\n Close\n </Button>\n </Dialog.Close>\n </div>\n {description ? (\n <Dialog.Description\n style={{\n margin: \"0 0 14px\",\n fontSize: 14,\n lineHeight: 1.5,\n color: ink,\n opacity: 0.8,\n }}\n >\n {description}\n </Dialog.Description>\n ) : null}\n <div>{children}</div>\n </SketchBox>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n\nexport const ModalRoot = Dialog.Root;\nexport const ModalTrigger = Dialog.Trigger;\nexport const ModalClose = Dialog.Close;\nexport const ModalTitle = Dialog.Title;\nexport const ModalDescription = Dialog.Description;\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type DividerOrientation = \"horizontal\" | \"vertical\";\n\nexport interface DividerProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\">,\n SketchProps {\n orientation?: DividerOrientation;\n}\n\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n function Divider(\n {\n className,\n style,\n orientation = \"horizontal\",\n roughness,\n seed,\n sketchColor,\n bowing,\n strokeWidth,\n ...rest\n },\n ref,\n ) {\n const horizontal = orientation === \"horizontal\";\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(className)}\n style={{\n position: \"relative\",\n width: horizontal ? \"100%\" : 12,\n height: horizontal ? 12 : \"100%\",\n minHeight: horizontal ? 12 : 48,\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape={horizontal ? \"line\" : \"line-vertical\"}\n roughness={roughness ?? 1.8}\n seed={seed}\n sketchColor={sketchColor ?? SKETCH_COLORS.ink}\n bowing={bowing ?? 2}\n strokeWidth={strokeWidth ?? 1.5}\n inset={4}\n />\n </div>\n );\n },\n);\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface ProgressProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\">,\n SketchProps {\n value?: number;\n max?: number;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n function Progress(\n {\n className,\n style,\n value = 0,\n max = 100,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n ) {\n const ink = sketchColor ?? SKETCH_COLORS.accent;\n const clamped = Math.min(max, Math.max(0, value));\n const percent = max === 0 ? 0 : (clamped / max) * 100;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={clamped}\n className={cn(className)}\n style={{\n position: \"relative\",\n width: \"100%\",\n height: 18,\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={SKETCH_COLORS.ink}\n bowing={bowing}\n strokeWidth={strokeWidth ?? 1.5}\n inset={2}\n />\n {percent > 0 ? (\n <div\n style={{\n position: \"absolute\",\n left: 5,\n top: 4,\n bottom: 4,\n width: `calc(${percent}% - 10px)`,\n minWidth: percent > 0 ? 8 : 0,\n overflow: \"hidden\",\n }}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={(roughness ?? 1.5) + 0.55}\n seed={seed}\n sketchColor={ink}\n fill={ink}\n fillStyle={fillStyle ?? \"hachure\"}\n bowing={bowing}\n strokeWidth={1.1}\n inset={1}\n />\n </div>\n ) : null}\n </div>\n );\n },\n);\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\n\nexport interface TooltipProps extends SketchProps {\n content: ReactNode;\n children: ReactNode;\n side?: ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>[\"side\"];\n delayDuration?: number;\n className?: string;\n}\n\nexport function Tooltip({\n content,\n children,\n side = \"top\",\n delayDuration = 200,\n className,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n}: TooltipProps) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <TooltipPrimitive.Root delayDuration={delayDuration}>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={8}\n className={cn(className)}\n style={{ zIndex: 60, outline: \"none\" }}\n >\n <SketchBox\n roughness={roughness ?? 1.3}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle ?? \"solid\"}\n fill=\"#f7f6f2\"\n strokeWidth={strokeWidth ?? 1.4}\n contentStyle={{\n padding: \"6px 10px\",\n fontSize: 13,\n lineHeight: 1.35,\n color: ink,\n maxWidth: 240,\n }}\n >\n {content}\n </SketchBox>\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/utils.ts","../src/context/SketchSeedContext.tsx","../src/hooks/useResolvedSeed.ts","../src/hooks/useElementSize.ts","../src/primitives/RoughSvg.tsx","../src/primitives/SketchBox.tsx","../src/components/Button.tsx","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Card.tsx","../src/components/Badge.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/Divider.tsx","../src/components/Progress.tsx","../src/components/Tooltip.tsx"],"names":["createContext","useState","useCallback","useLayoutEffect","useMemo","jsx","useContext","useRef","rough","forwardRef","SketchBox","jsxs","Button","Input","Textarea","Checkbox","useId","CheckboxPrimitive","RadioGroup","RadioGroupPrimitive","Radio","Card","Badge","Alert","Dialog","Divider","Progress","TooltipPrimitive"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CSSProperties, HTMLAttributes } from \"react\";\nimport type { Options } from \"roughjs/bin/core\";\n\nexport type FillStyle =\n | \"hachure\"\n | \"solid\"\n | \"zigzag\"\n | \"cross-hatch\"\n | \"dots\"\n | \"dashed\"\n | \"zigzag-line\";\n\nexport type RoughShape = \"rectangle\" | \"ellipse\" | \"line\" | \"line-vertical\" | \"path\";\n\nexport interface SketchProps {\n /** Sketchiness intensity. Default 1.5 */\n roughness?: number;\n /** Lock the wobble. Omit to follow SketchSeedProvider or randomize on mount */\n seed?: number;\n /** Stroke color override */\n sketchColor?: string;\n /** Line curvature. Default 1 */\n bowing?: number;\n fillStyle?: FillStyle;\n strokeWidth?: number;\n}\n\nexport interface RoughSvgProps extends SketchProps {\n shape?: RoughShape;\n /** Explicit width. Falls back to the parent box via ResizeObserver */\n width?: number;\n height?: number;\n fill?: string;\n /** Inset the drawing from the box edge so strokes are not clipped */\n inset?: number;\n path?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport type PolymorphicClassName = Pick<HTMLAttributes<HTMLElement>, \"className\" | \"style\">;\n\nexport function toRoughOptions(\n props: SketchProps & { fill?: string; stroke?: string },\n): Options {\n const stroke = props.stroke ?? props.sketchColor ?? DEFAULT_INK;\n const options: Options = {\n roughness: props.roughness ?? DEFAULT_ROUGHNESS,\n bowing: props.bowing ?? DEFAULT_BOWING,\n stroke,\n strokeWidth: props.strokeWidth ?? DEFAULT_STROKE_WIDTH,\n seed: props.seed,\n };\n if (props.fill) {\n options.fill = props.fill;\n options.fillStyle = props.fillStyle ?? \"hachure\";\n }\n return options;\n}\n\nexport const DEFAULT_ROUGHNESS = 1.5;\nexport const DEFAULT_BOWING = 1;\nexport const DEFAULT_STROKE_WIDTH = 1.75;\nexport const DEFAULT_INK = \"#1f1d1a\";\nexport const DEFAULT_INSET = 3;\n\nexport const SKETCH_COLORS = {\n ink: DEFAULT_INK,\n accent: \"#e24b3b\",\n accentFill: \"#f4c4bc\",\n secondaryFill: \"#d7e3d4\",\n paper: \"#eef0ea\",\n info: \"#1d4e89\",\n warning: \"#c47b17\",\n error: \"#c0392b\",\n success: \"#2d6a4f\",\n} as const;\n","export function randomSeed(): number {\n return Math.floor(Math.random() * 2 ** 31);\n}\n\n/** Follows SketchSeedProvider --doodle-ui-font. Unset = inherit the page default. */\nexport const doodleUiFontFamily = \"var(--doodle-ui-font, inherit)\";\n\n/** When a handwriting face is active the provider sets --doodle-ui-font-weight to 400. */\nexport function doodleUiFontWeight(fallback: number): string {\n return `var(--doodle-ui-font-weight, ${fallback})`;\n}\n\nexport function nextFontIndex(current: number, count: number): number {\n if (count <= 1) return 0;\n let next = current;\n while (next === current) {\n next = Math.floor(Math.random() * count);\n }\n return next;\n}\n\nexport function cn(\n ...parts: Array<string | undefined | false | null>\n): string | undefined {\n const value = parts.filter(Boolean).join(\" \");\n return value.length > 0 ? value : undefined;\n}\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { nextFontIndex, randomSeed } from \"../utils\";\n\nexport interface SketchSeedContextValue {\n seed: number;\n fontIndex: number;\n shuffle: () => void;\n setSeed: (seed: number) => void;\n}\n\nconst SketchSeedContext = createContext<SketchSeedContextValue | null>(null);\n\nexport interface SketchSeedProviderProps {\n children: ReactNode;\n initialSeed?: number;\n /**\n * CSS font-family values for Shuffle. Index 0 is the page default\n * (`--doodle-ui-font` is left unset). Later indexes set the variable.\n */\n fonts?: readonly string[];\n /** Starting palette index. Defaults to 0 (unset / page default). */\n initialFontIndex?: number;\n}\n\nexport function SketchSeedProvider({\n children,\n initialSeed,\n fonts,\n initialFontIndex = 0,\n}: SketchSeedProviderProps) {\n const [seed, setSeed] = useState(() => initialSeed ?? randomSeed());\n const [fontIndex, setFontIndex] = useState(initialFontIndex);\n const fontCount = fonts?.length ?? 0;\n\n const shuffle = useCallback(() => {\n setSeed(randomSeed());\n setFontIndex((current) => nextFontIndex(current, fontCount));\n }, [fontCount]);\n\n const activeFamily = fontIndex > 0 ? fonts?.[fontIndex] : undefined;\n\n useLayoutEffect(() => {\n const root = document.documentElement;\n if (activeFamily) {\n root.style.setProperty(\"--doodle-ui-font\", activeFamily);\n root.style.setProperty(\"--doodle-ui-font-weight\", \"400\");\n } else {\n // Override docs :root defaults so Shuffle can return to Outfit.\n root.style.setProperty(\"--doodle-ui-font\", \"initial\");\n root.style.setProperty(\"--doodle-ui-font-weight\", \"initial\");\n }\n return () => {\n root.style.removeProperty(\"--doodle-ui-font\");\n root.style.removeProperty(\"--doodle-ui-font-weight\");\n };\n }, [activeFamily]);\n\n const value = useMemo(\n () => ({ seed, fontIndex, shuffle, setSeed }),\n [seed, fontIndex, shuffle],\n );\n\n return (\n <SketchSeedContext.Provider value={value}>\n {children}\n </SketchSeedContext.Provider>\n );\n}\n\nexport function useSketchSeed(): SketchSeedContextValue {\n const ctx = useContext(SketchSeedContext);\n if (!ctx) {\n throw new Error(\n \"useSketchSeed() must be used inside <SketchSeedProvider>. Wrap your tree so Shuffle can redraw every sketch.\",\n );\n }\n return ctx;\n}\n\nexport function useOptionalSketchSeed(): SketchSeedContextValue | null {\n return useContext(SketchSeedContext);\n}\n\nexport { SketchSeedContext };\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useOptionalSketchSeed } from \"../context/SketchSeedContext\";\nimport { randomSeed } from \"../utils\";\n\n/**\n * Resolves the seed used to draw a sketch:\n * 1. explicit `seed` prop (locked, ignores Shuffle)\n * 2. SketchSeedProvider seed (redraws on Shuffle)\n * 3. a stable random seed generated on mount\n */\nexport function useResolvedSeed(seed?: number): number {\n const ctx = useOptionalSketchSeed();\n const [fallback] = useState(randomSeed);\n if (seed != null) return seed;\n if (ctx) return ctx.seed;\n return fallback;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useState, type RefObject } from \"react\";\n\nexport function useElementSize(\n ref: RefObject<HTMLElement | null>,\n): { width: number; height: number } {\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const update = () => {\n setSize({ width: el.offsetWidth, height: el.offsetHeight });\n };\n\n update();\n const observer = new ResizeObserver(update);\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type CSSProperties } from \"react\";\nimport rough from \"roughjs\";\nimport { useResolvedSeed } from \"../hooks/useResolvedSeed\";\nimport { useElementSize } from \"../hooks/useElementSize\";\nimport {\n DEFAULT_INSET,\n toRoughOptions,\n type RoughSvgProps,\n} from \"../types\";\n\n/**\n * Absolutely-positioned SVG layer that draws a rough.js shape behind HTML content.\n * Parent must be `position: relative`.\n */\nexport function RoughSvg({\n shape = \"rectangle\",\n width: widthProp,\n height: heightProp,\n roughness,\n seed: seedProp,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n inset = DEFAULT_INSET,\n path,\n className,\n style,\n}: RoughSvgProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const svgRef = useRef<SVGSVGElement>(null);\n const measured = useElementSize(containerRef);\n const seed = useResolvedSeed(seedProp);\n\n const width = widthProp ?? measured.width;\n const height = heightProp ?? measured.height;\n\n useLayoutEffect(() => {\n const svg = svgRef.current;\n if (!svg || width < 2 || height < 2) return;\n\n while (svg.firstChild) svg.removeChild(svg.firstChild);\n\n const rc = rough.svg(svg);\n const options = toRoughOptions({\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n });\n\n const x = inset;\n const y = inset;\n const w = Math.max(1, width - inset * 2);\n const h = Math.max(1, height - inset * 2);\n\n let node: SVGGElement;\n switch (shape) {\n case \"ellipse\":\n node = rc.ellipse(width / 2, height / 2, w, h, options);\n break;\n case \"line\":\n node = rc.line(inset, height / 2, width - inset, height / 2, options);\n break;\n case \"line-vertical\":\n node = rc.line(width / 2, inset, width / 2, height - inset, options);\n break;\n case \"path\":\n if (!path) return;\n node = rc.path(path, options);\n break;\n default:\n node = rc.rectangle(x, y, w, h, options);\n }\n\n svg.appendChild(node);\n }, [\n width,\n height,\n shape,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n inset,\n path,\n ]);\n\n const overlayStyle: CSSProperties = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n overflow: \"visible\",\n zIndex: 0,\n ...style,\n };\n\n return (\n <div\n ref={containerRef}\n aria-hidden=\"true\"\n className={className}\n style={overlayStyle}\n >\n <svg\n ref={svgRef}\n width=\"100%\"\n height=\"100%\"\n overflow=\"visible\"\n style={{ display: \"block\" }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { RoughSvg } from \"./RoughSvg\";\nimport type { FillStyle, RoughShape, SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily } from \"../utils\";\n\nexport interface SketchBoxProps\n extends SketchProps, Omit<HTMLAttributes<HTMLDivElement>, \"color\"> {\n children?: ReactNode;\n shape?: RoughShape;\n fill?: string;\n fillStyle?: FillStyle;\n shadow?: boolean;\n contentClassName?: string;\n contentStyle?: CSSProperties;\n inset?: number;\n path?: string;\n}\n\nexport const SketchBox = forwardRef<HTMLDivElement, SketchBoxProps>(\n function SketchBox(\n {\n children,\n className,\n style,\n contentClassName,\n contentStyle,\n shape = \"rectangle\",\n fill,\n fillStyle,\n shadow = false,\n roughness,\n seed,\n sketchColor,\n bowing,\n strokeWidth,\n inset,\n path,\n ...rest\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cn(className)}\n style={{ position: \"relative\", ...style }}\n {...rest}\n >\n {shadow ? (\n <RoughSvg\n shape={shape}\n roughness={(roughness ?? 1.5) + 0.35}\n seed={seed}\n sketchColor={sketchColor}\n bowing={bowing}\n fillStyle=\"hachure\"\n fill={sketchColor ?? \"#1f1d1a\"}\n strokeWidth={1}\n inset={inset}\n style={{ transform: \"translate(5px, 6px)\", opacity: 0.16 }}\n />\n ) : null}\n <RoughSvg\n shape={shape}\n roughness={roughness}\n seed={seed}\n sketchColor={sketchColor}\n bowing={bowing}\n fillStyle={fill ? fillStyle : shadow ? \"solid\" : fillStyle}\n fill={fill ?? (shadow ? \"#f7f6f2\" : undefined)}\n strokeWidth={strokeWidth}\n inset={inset}\n path={path}\n />\n <div\n className={contentClassName}\n style={{\n position: \"relative\",\n zIndex: 1,\n fontFamily: doodleUiFontFamily,\n ...contentStyle,\n }}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily, doodleUiFontWeight } from \"../utils\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n SketchProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nconst SIZE_STYLES: Record<ButtonSize, CSSProperties> = {\n sm: { fontSize: 13, padding: \"4px 12px\", minHeight: 30 },\n md: { fontSize: 15, padding: \"8px 16px\", minHeight: 38 },\n lg: { fontSize: 17, padding: \"11px 22px\", minHeight: 46 },\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n {\n children,\n className,\n style,\n variant = \"primary\",\n size = \"md\",\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n disabled,\n onMouseEnter,\n onMouseLeave,\n ...rest\n },\n ref,\n ) {\n const [hovered, setHovered] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n const fill =\n variant === \"primary\"\n ? SKETCH_COLORS.accentFill\n : variant === \"secondary\"\n ? SKETCH_COLORS.secondaryFill\n : undefined;\n\n const stroke =\n variant === \"ghost\" && !hovered\n ? \"transparent\"\n : variant === \"primary\"\n ? sketchColor ?? SKETCH_COLORS.accent\n : ink;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(className)}\n disabled={disabled}\n onMouseEnter={(event) => {\n setHovered(true);\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setHovered(false);\n onMouseLeave?.(event);\n }}\n style={{\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n border: \"none\",\n background: \"transparent\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n color: ink,\n fontFamily: doodleUiFontFamily,\n fontWeight: doodleUiFontWeight(600),\n lineHeight: 1.2,\n opacity: disabled ? 0.45 : 1,\n ...SIZE_STYLES[size],\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={stroke}\n bowing={bowing}\n fillStyle={fillStyle ?? \"hachure\"}\n fill={fill}\n strokeWidth={\n hovered ? (strokeWidth ?? 1.75) + 0.4 : strokeWidth\n }\n />\n <span style={{ position: \"relative\", zIndex: 1 }}>{children}</span>\n </button>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily, doodleUiFontWeight } from \"../utils\";\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"color\" | \"size\">,\n SketchProps {\n label?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const inputId = id;\n\n return (\n <label\n htmlFor={inputId}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n width: \"100%\",\n }}\n >\n {label ? (\n <span\n style={{\n fontSize: 13,\n fontWeight: doodleUiFontWeight(600),\n fontFamily: doodleUiFontFamily,\n color: ink,\n }}\n >\n {label}\n </span>\n ) : null}\n <span style={{ position: \"relative\", display: \"block\" }}>\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={focused ? SKETCH_COLORS.accent : ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={focused ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth}\n />\n <input\n ref={ref}\n id={inputId}\n className={cn(className)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: \"relative\",\n zIndex: 1,\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n color: ink,\n fontFamily: doodleUiFontFamily,\n fontSize: 15,\n padding: \"8px 12px\",\n ...style,\n }}\n {...rest}\n />\n </span>\n </label>\n );\n});\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily, doodleUiFontWeight } from \"../utils\";\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"color\">,\n SketchProps {\n label?: ReactNode;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n rows = 4,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n ) {\n const [focused, setFocused] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <label\n htmlFor={id}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n width: \"100%\",\n }}\n >\n {label ? (\n <span\n style={{\n fontSize: 13,\n fontWeight: doodleUiFontWeight(600),\n fontFamily: doodleUiFontFamily,\n color: ink,\n }}\n >\n {label}\n </span>\n ) : null}\n <span style={{ position: \"relative\", display: \"block\" }}>\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={focused ? SKETCH_COLORS.accent : ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={focused ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth}\n />\n <textarea\n ref={ref}\n id={id}\n rows={rows}\n className={cn(className)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: \"relative\",\n zIndex: 1,\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n color: ink,\n fontFamily: doodleUiFontFamily,\n fontSize: 15,\n lineHeight: 1.5,\n padding: \"10px 12px\",\n resize: \"vertical\",\n ...style,\n }}\n {...rest}\n />\n </span>\n </label>\n );\n },\n);\n","\"use client\";\n\nimport { forwardRef, useId, type ReactNode } from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily } from \"../utils\";\n\nexport interface CheckboxProps\n extends Omit<CheckboxPrimitive.CheckboxProps, \"asChild\">,\n SketchProps {\n label?: ReactNode;\n}\n\nconst BOX = 20;\nconst CHECK_PATH = \"M 4.5 10.5 L 8.5 14.5 L 15.5 5.5\";\n\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n function Checkbox(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n checked,\n defaultChecked,\n onCheckedChange,\n id,\n ...rest\n },\n ref,\n ) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <span\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n userSelect: \"none\",\n ...style,\n }}\n >\n <CheckboxPrimitive.Root\n ref={ref}\n id={inputId}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n style={{\n position: \"relative\",\n width: BOX,\n height: BOX,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n flexShrink: 0,\n cursor: \"pointer\",\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={strokeWidth ?? 1.6}\n inset={1.5}\n />\n <CheckboxPrimitive.Indicator\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n }}\n >\n <RoughSvg\n shape=\"path\"\n path={CHECK_PATH}\n roughness={(roughness ?? 1.5) * 0.7}\n seed={seed}\n sketchColor={SKETCH_COLORS.accent}\n bowing={bowing}\n strokeWidth={(strokeWidth ?? 1.6) + 0.4}\n inset={0}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label ? (\n <label\n htmlFor={inputId}\n style={{ fontSize: 15, cursor: \"pointer\", fontFamily: doodleUiFontFamily }}\n >\n {label}\n </label>\n ) : null}\n </span>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily } from \"../utils\";\n\nexport interface RadioGroupProps\n extends ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n function RadioGroup({ className, style, children, ...rest }, ref) {\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(className)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n ...style,\n }}\n {...rest}\n >\n {children}\n </RadioGroupPrimitive.Root>\n );\n },\n);\n\nexport interface RadioProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>,\n \"asChild\"\n >,\n SketchProps {\n label?: ReactNode;\n}\n\nconst SIZE = 20;\n\nexport const Radio = forwardRef<HTMLButtonElement, RadioProps>(function Radio(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n ...rest\n },\n ref,\n) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <span\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n userSelect: \"none\",\n ...style,\n }}\n >\n <RadioGroupPrimitive.Item\n ref={ref}\n id={inputId}\n style={{\n position: \"relative\",\n width: SIZE,\n height: SIZE,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n flexShrink: 0,\n cursor: \"pointer\",\n borderRadius: \"50%\",\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"ellipse\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={strokeWidth ?? 1.6}\n inset={1.5}\n />\n <RadioGroupPrimitive.Indicator\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n }}\n >\n <RoughSvg\n shape=\"ellipse\"\n roughness={(roughness ?? 1.5) + 0.2}\n seed={seed}\n sketchColor={SKETCH_COLORS.accent}\n fill={SKETCH_COLORS.accent}\n fillStyle=\"solid\"\n bowing={bowing}\n strokeWidth={1}\n inset={6}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {label ? (\n <label\n htmlFor={inputId}\n style={{ fontSize: 15, cursor: \"pointer\", fontFamily: doodleUiFontFamily }}\n >\n {label}\n </label>\n ) : null}\n </span>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { SketchBox, type SketchBoxProps } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontWeight } from \"../utils\";\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\" | \"title\">,\n SketchProps {\n shadow?: boolean;\n fill?: string;\n title?: ReactNode;\n footer?: ReactNode;\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n children,\n className,\n style,\n shadow = true,\n fill,\n title,\n footer,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n) {\n const boxProps: SketchBoxProps = {\n shadow,\n fill,\n roughness,\n seed,\n sketchColor: sketchColor ?? SKETCH_COLORS.ink,\n bowing,\n fillStyle,\n strokeWidth,\n };\n\n return (\n <SketchBox\n ref={ref}\n className={cn(className)}\n style={style}\n contentStyle={{ padding: \"16px 18px\" }}\n {...boxProps}\n {...rest}\n >\n {title ? (\n <div\n style={{\n fontWeight: doodleUiFontWeight(700),\n fontSize: 16,\n marginBottom: 10,\n }}\n >\n {title}\n </div>\n ) : null}\n {children}\n {footer ? (\n <div style={{ marginTop: 14, fontSize: 13, opacity: 0.8 }}>\n {footer}\n </div>\n ) : null}\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontWeight } from \"../utils\";\n\nexport type BadgeVariant = \"default\" | \"accent\" | \"outline\";\n\nexport interface BadgeProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"color\">,\n SketchProps {\n variant?: BadgeVariant;\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n children,\n className,\n style,\n variant = \"default\",\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n) {\n const ink =\n variant === \"accent\"\n ? sketchColor ?? SKETCH_COLORS.accent\n : sketchColor ?? SKETCH_COLORS.ink;\n\n const fill =\n variant === \"accent\"\n ? SKETCH_COLORS.accentFill\n : variant === \"outline\"\n ? undefined\n : SKETCH_COLORS.secondaryFill;\n\n return (\n <SketchBox\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n verticalAlign: \"middle\",\n ...style,\n }}\n contentStyle={{\n padding: \"2px 10px\",\n fontSize: 12,\n fontWeight: doodleUiFontWeight(650),\n lineHeight: 1.4,\n letterSpacing: \"0.01em\",\n }}\n fill={fill}\n fillStyle={fillStyle ?? \"hachure\"}\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n strokeWidth={strokeWidth ?? 1.4}\n {...rest}\n >\n <span ref={ref}>{children}</span>\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontWeight } from \"../utils\";\n\nexport type AlertVariant = \"info\" | \"warning\" | \"error\" | \"success\";\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\" | \"title\">,\n SketchProps {\n variant?: AlertVariant;\n title?: ReactNode;\n}\n\nconst VARIANT_COLOR: Record<AlertVariant, string> = {\n info: SKETCH_COLORS.info,\n warning: SKETCH_COLORS.warning,\n error: SKETCH_COLORS.error,\n success: SKETCH_COLORS.success,\n};\n\nconst VARIANT_FILL: Record<AlertVariant, string> = {\n info: \"#d2deec\",\n warning: \"#f3e2c0\",\n error: \"#f3d0cc\",\n success: \"#d3e8dc\",\n};\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n children,\n className,\n style,\n variant = \"info\",\n title,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n role = \"status\",\n ...rest\n },\n ref,\n) {\n const color = sketchColor ?? VARIANT_COLOR[variant];\n\n return (\n <SketchBox\n ref={ref}\n role={role}\n className={cn(className)}\n style={{ color, ...style }}\n contentStyle={{ padding: \"12px 16px\" }}\n roughness={roughness}\n seed={seed}\n sketchColor={color}\n bowing={bowing}\n fillStyle={fillStyle ?? \"hachure\"}\n fill={VARIANT_FILL[variant]}\n strokeWidth={strokeWidth}\n {...rest}\n >\n {title ? (\n <div\n style={{\n fontWeight: doodleUiFontWeight(700),\n marginBottom: 4,\n fontSize: 15,\n }}\n >\n {title}\n </div>\n ) : null}\n <div style={{ fontSize: 14, lineHeight: 1.5, color: SKETCH_COLORS.ink }}>\n {children}\n </div>\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { Button } from \"./Button\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily, doodleUiFontWeight } from \"../utils\";\n\nexport interface ModalProps extends SketchProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nexport function Modal({\n open,\n defaultOpen,\n onOpenChange,\n trigger,\n title,\n description,\n children,\n className,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n}: ModalProps) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <Dialog.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {trigger ? <Dialog.Trigger asChild>{trigger}</Dialog.Trigger> : null}\n <Dialog.Portal>\n <Dialog.Overlay\n style={{\n position: \"fixed\",\n inset: 0,\n background: \"rgba(31, 29, 26, 0.38)\",\n zIndex: 70,\n }}\n />\n <Dialog.Content\n className={cn(className)}\n style={{\n position: \"fixed\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 80,\n width: \"min(480px, calc(100vw - 32px))\",\n outline: \"none\",\n }}\n >\n <SketchBox\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle ?? \"solid\"}\n fill=\"#f7f6f2\"\n strokeWidth={strokeWidth ?? 2}\n shadow\n contentStyle={{ padding: \"20px 22px 18px\" }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 12,\n marginBottom: title ? 10 : 0,\n }}\n >\n {title ? (\n <Dialog.Title\n style={{\n margin: 0,\n fontSize: 18,\n fontWeight: doodleUiFontWeight(700),\n fontFamily: doodleUiFontFamily,\n color: ink,\n }}\n >\n {title}\n </Dialog.Title>\n ) : (\n <Dialog.Title style={{ position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", clip: \"rect(0 0 0 0)\" }}>\n Dialog\n </Dialog.Title>\n )}\n <Dialog.Close asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n aria-label=\"Close\"\n >\n Close\n </Button>\n </Dialog.Close>\n </div>\n {description ? (\n <Dialog.Description\n style={{\n margin: \"0 0 14px\",\n fontSize: 14,\n lineHeight: 1.5,\n color: ink,\n opacity: 0.8,\n }}\n >\n {description}\n </Dialog.Description>\n ) : null}\n <div>{children}</div>\n </SketchBox>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n\nexport const ModalRoot = Dialog.Root;\nexport const ModalTrigger = Dialog.Trigger;\nexport const ModalClose = Dialog.Close;\nexport const ModalTitle = Dialog.Title;\nexport const ModalDescription = Dialog.Description;\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type DividerOrientation = \"horizontal\" | \"vertical\";\n\nexport interface DividerProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\">,\n SketchProps {\n orientation?: DividerOrientation;\n}\n\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n function Divider(\n {\n className,\n style,\n orientation = \"horizontal\",\n roughness,\n seed,\n sketchColor,\n bowing,\n strokeWidth,\n ...rest\n },\n ref,\n ) {\n const horizontal = orientation === \"horizontal\";\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(className)}\n style={{\n position: \"relative\",\n width: horizontal ? \"100%\" : 12,\n height: horizontal ? 12 : \"100%\",\n minHeight: horizontal ? 12 : 48,\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape={horizontal ? \"line\" : \"line-vertical\"}\n roughness={roughness ?? 1.8}\n seed={seed}\n sketchColor={sketchColor ?? SKETCH_COLORS.ink}\n bowing={bowing ?? 2}\n strokeWidth={strokeWidth ?? 1.5}\n inset={4}\n />\n </div>\n );\n },\n);\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface ProgressProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\">,\n SketchProps {\n value?: number;\n max?: number;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n function Progress(\n {\n className,\n style,\n value = 0,\n max = 100,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n ) {\n const ink = sketchColor ?? SKETCH_COLORS.accent;\n const clamped = Math.min(max, Math.max(0, value));\n const percent = max === 0 ? 0 : (clamped / max) * 100;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={clamped}\n className={cn(className)}\n style={{\n position: \"relative\",\n width: \"100%\",\n height: 18,\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={SKETCH_COLORS.ink}\n bowing={bowing}\n strokeWidth={strokeWidth ?? 1.5}\n inset={2}\n />\n {percent > 0 ? (\n <div\n style={{\n position: \"absolute\",\n left: 5,\n top: 4,\n bottom: 4,\n width: `calc(${percent}% - 10px)`,\n minWidth: percent > 0 ? 8 : 0,\n overflow: \"hidden\",\n }}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={(roughness ?? 1.5) + 0.55}\n seed={seed}\n sketchColor={ink}\n fill={ink}\n fillStyle={fillStyle ?? \"hachure\"}\n bowing={bowing}\n strokeWidth={1.1}\n inset={1}\n />\n </div>\n ) : null}\n </div>\n );\n },\n);\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily } from \"../utils\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\n\nexport interface TooltipProps extends SketchProps {\n content: ReactNode;\n children: ReactNode;\n side?: ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>[\"side\"];\n delayDuration?: number;\n className?: string;\n}\n\nexport function Tooltip({\n content,\n children,\n side = \"top\",\n delayDuration = 200,\n className,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n}: TooltipProps) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <TooltipPrimitive.Root delayDuration={delayDuration}>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={8}\n className={cn(className)}\n style={{ zIndex: 60, outline: \"none\" }}\n >\n <SketchBox\n roughness={roughness ?? 1.3}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle ?? \"solid\"}\n fill=\"#f7f6f2\"\n strokeWidth={strokeWidth ?? 1.4}\n contentStyle={{\n padding: \"6px 10px\",\n fontSize: 13,\n lineHeight: 1.35,\n fontFamily: doodleUiFontFamily,\n color: ink,\n maxWidth: 240,\n }}\n >\n {content}\n </SketchBox>\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -73,14 +73,22 @@ declare const SketchBox: react.ForwardRefExoticComponent<SketchBoxProps & react.
|
|
|
73
73
|
|
|
74
74
|
interface SketchSeedContextValue {
|
|
75
75
|
seed: number;
|
|
76
|
+
fontIndex: number;
|
|
76
77
|
shuffle: () => void;
|
|
77
78
|
setSeed: (seed: number) => void;
|
|
78
79
|
}
|
|
79
80
|
interface SketchSeedProviderProps {
|
|
80
81
|
children: ReactNode;
|
|
81
82
|
initialSeed?: number;
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
/**
|
|
84
|
+
* CSS font-family values for Shuffle. Index 0 is the page default
|
|
85
|
+
* (`--doodle-ui-font` is left unset). Later indexes set the variable.
|
|
86
|
+
*/
|
|
87
|
+
fonts?: readonly string[];
|
|
88
|
+
/** Starting palette index. Defaults to 0 (unset / page default). */
|
|
89
|
+
initialFontIndex?: number;
|
|
90
|
+
}
|
|
91
|
+
declare function SketchSeedProvider({ children, initialSeed, fonts, initialFontIndex, }: SketchSeedProviderProps): react.JSX.Element;
|
|
84
92
|
declare function useSketchSeed(): SketchSeedContextValue;
|
|
85
93
|
|
|
86
94
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -73,14 +73,22 @@ declare const SketchBox: react.ForwardRefExoticComponent<SketchBoxProps & react.
|
|
|
73
73
|
|
|
74
74
|
interface SketchSeedContextValue {
|
|
75
75
|
seed: number;
|
|
76
|
+
fontIndex: number;
|
|
76
77
|
shuffle: () => void;
|
|
77
78
|
setSeed: (seed: number) => void;
|
|
78
79
|
}
|
|
79
80
|
interface SketchSeedProviderProps {
|
|
80
81
|
children: ReactNode;
|
|
81
82
|
initialSeed?: number;
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
/**
|
|
84
|
+
* CSS font-family values for Shuffle. Index 0 is the page default
|
|
85
|
+
* (`--doodle-ui-font` is left unset). Later indexes set the variable.
|
|
86
|
+
*/
|
|
87
|
+
fonts?: readonly string[];
|
|
88
|
+
/** Starting palette index. Defaults to 0 (unset / page default). */
|
|
89
|
+
initialFontIndex?: number;
|
|
90
|
+
}
|
|
91
|
+
declare function SketchSeedProvider({ children, initialSeed, fonts, initialFontIndex, }: SketchSeedProviderProps): react.JSX.Element;
|
|
84
92
|
declare function useSketchSeed(): SketchSeedContextValue;
|
|
85
93
|
|
|
86
94
|
/**
|
package/dist/index.js
CHANGED
|
@@ -44,6 +44,18 @@ var SKETCH_COLORS = {
|
|
|
44
44
|
function randomSeed() {
|
|
45
45
|
return Math.floor(Math.random() * 2 ** 31);
|
|
46
46
|
}
|
|
47
|
+
var doodleUiFontFamily = "var(--doodle-ui-font, inherit)";
|
|
48
|
+
function doodleUiFontWeight(fallback) {
|
|
49
|
+
return `var(--doodle-ui-font-weight, ${fallback})`;
|
|
50
|
+
}
|
|
51
|
+
function nextFontIndex(current, count) {
|
|
52
|
+
if (count <= 1) return 0;
|
|
53
|
+
let next = current;
|
|
54
|
+
while (next === current) {
|
|
55
|
+
next = Math.floor(Math.random() * count);
|
|
56
|
+
}
|
|
57
|
+
return next;
|
|
58
|
+
}
|
|
47
59
|
function cn(...parts) {
|
|
48
60
|
const value = parts.filter(Boolean).join(" ");
|
|
49
61
|
return value.length > 0 ? value : void 0;
|
|
@@ -51,15 +63,35 @@ function cn(...parts) {
|
|
|
51
63
|
var SketchSeedContext = createContext(null);
|
|
52
64
|
function SketchSeedProvider({
|
|
53
65
|
children,
|
|
54
|
-
initialSeed
|
|
66
|
+
initialSeed,
|
|
67
|
+
fonts,
|
|
68
|
+
initialFontIndex = 0
|
|
55
69
|
}) {
|
|
56
70
|
const [seed, setSeed] = useState(() => initialSeed ?? randomSeed());
|
|
71
|
+
const [fontIndex, setFontIndex] = useState(initialFontIndex);
|
|
72
|
+
const fontCount = fonts?.length ?? 0;
|
|
57
73
|
const shuffle = useCallback(() => {
|
|
58
74
|
setSeed(randomSeed());
|
|
59
|
-
|
|
75
|
+
setFontIndex((current) => nextFontIndex(current, fontCount));
|
|
76
|
+
}, [fontCount]);
|
|
77
|
+
const activeFamily = fontIndex > 0 ? fonts?.[fontIndex] : void 0;
|
|
78
|
+
useLayoutEffect(() => {
|
|
79
|
+
const root = document.documentElement;
|
|
80
|
+
if (activeFamily) {
|
|
81
|
+
root.style.setProperty("--doodle-ui-font", activeFamily);
|
|
82
|
+
root.style.setProperty("--doodle-ui-font-weight", "400");
|
|
83
|
+
} else {
|
|
84
|
+
root.style.setProperty("--doodle-ui-font", "initial");
|
|
85
|
+
root.style.setProperty("--doodle-ui-font-weight", "initial");
|
|
86
|
+
}
|
|
87
|
+
return () => {
|
|
88
|
+
root.style.removeProperty("--doodle-ui-font");
|
|
89
|
+
root.style.removeProperty("--doodle-ui-font-weight");
|
|
90
|
+
};
|
|
91
|
+
}, [activeFamily]);
|
|
60
92
|
const value = useMemo(
|
|
61
|
-
() => ({ seed, shuffle, setSeed }),
|
|
62
|
-
[seed, shuffle]
|
|
93
|
+
() => ({ seed, fontIndex, shuffle, setSeed }),
|
|
94
|
+
[seed, fontIndex, shuffle]
|
|
63
95
|
);
|
|
64
96
|
return /* @__PURE__ */ jsx(SketchSeedContext.Provider, { value, children });
|
|
65
97
|
}
|
|
@@ -264,7 +296,12 @@ var SketchBox = forwardRef(
|
|
|
264
296
|
"div",
|
|
265
297
|
{
|
|
266
298
|
className: contentClassName,
|
|
267
|
-
style: {
|
|
299
|
+
style: {
|
|
300
|
+
position: "relative",
|
|
301
|
+
zIndex: 1,
|
|
302
|
+
fontFamily: doodleUiFontFamily,
|
|
303
|
+
...contentStyle
|
|
304
|
+
},
|
|
268
305
|
children
|
|
269
306
|
}
|
|
270
307
|
)
|
|
@@ -325,8 +362,8 @@ var Button = forwardRef(
|
|
|
325
362
|
background: "transparent",
|
|
326
363
|
cursor: disabled ? "not-allowed" : "pointer",
|
|
327
364
|
color: ink,
|
|
328
|
-
fontFamily:
|
|
329
|
-
fontWeight: 600,
|
|
365
|
+
fontFamily: doodleUiFontFamily,
|
|
366
|
+
fontWeight: doodleUiFontWeight(600),
|
|
330
367
|
lineHeight: 1.2,
|
|
331
368
|
opacity: disabled ? 0.45 : 1,
|
|
332
369
|
...SIZE_STYLES[size],
|
|
@@ -382,7 +419,18 @@ var Input = forwardRef(function Input2({
|
|
|
382
419
|
width: "100%"
|
|
383
420
|
},
|
|
384
421
|
children: [
|
|
385
|
-
label ? /* @__PURE__ */ jsx(
|
|
422
|
+
label ? /* @__PURE__ */ jsx(
|
|
423
|
+
"span",
|
|
424
|
+
{
|
|
425
|
+
style: {
|
|
426
|
+
fontSize: 13,
|
|
427
|
+
fontWeight: doodleUiFontWeight(600),
|
|
428
|
+
fontFamily: doodleUiFontFamily,
|
|
429
|
+
color: ink
|
|
430
|
+
},
|
|
431
|
+
children: label
|
|
432
|
+
}
|
|
433
|
+
) : null,
|
|
386
434
|
/* @__PURE__ */ jsxs("span", { style: { position: "relative", display: "block" }, children: [
|
|
387
435
|
/* @__PURE__ */ jsx(
|
|
388
436
|
RoughSvg,
|
|
@@ -419,7 +467,7 @@ var Input = forwardRef(function Input2({
|
|
|
419
467
|
outline: "none",
|
|
420
468
|
background: "transparent",
|
|
421
469
|
color: ink,
|
|
422
|
-
fontFamily:
|
|
470
|
+
fontFamily: doodleUiFontFamily,
|
|
423
471
|
fontSize: 15,
|
|
424
472
|
padding: "8px 12px",
|
|
425
473
|
...style
|
|
@@ -462,7 +510,18 @@ var Textarea = forwardRef(
|
|
|
462
510
|
width: "100%"
|
|
463
511
|
},
|
|
464
512
|
children: [
|
|
465
|
-
label ? /* @__PURE__ */ jsx(
|
|
513
|
+
label ? /* @__PURE__ */ jsx(
|
|
514
|
+
"span",
|
|
515
|
+
{
|
|
516
|
+
style: {
|
|
517
|
+
fontSize: 13,
|
|
518
|
+
fontWeight: doodleUiFontWeight(600),
|
|
519
|
+
fontFamily: doodleUiFontFamily,
|
|
520
|
+
color: ink
|
|
521
|
+
},
|
|
522
|
+
children: label
|
|
523
|
+
}
|
|
524
|
+
) : null,
|
|
466
525
|
/* @__PURE__ */ jsxs("span", { style: { position: "relative", display: "block" }, children: [
|
|
467
526
|
/* @__PURE__ */ jsx(
|
|
468
527
|
RoughSvg,
|
|
@@ -500,7 +559,7 @@ var Textarea = forwardRef(
|
|
|
500
559
|
outline: "none",
|
|
501
560
|
background: "transparent",
|
|
502
561
|
color: ink,
|
|
503
|
-
fontFamily:
|
|
562
|
+
fontFamily: doodleUiFontFamily,
|
|
504
563
|
fontSize: 15,
|
|
505
564
|
lineHeight: 1.5,
|
|
506
565
|
padding: "10px 12px",
|
|
@@ -610,7 +669,14 @@ var Checkbox = forwardRef(
|
|
|
610
669
|
]
|
|
611
670
|
}
|
|
612
671
|
),
|
|
613
|
-
label ? /* @__PURE__ */ jsx(
|
|
672
|
+
label ? /* @__PURE__ */ jsx(
|
|
673
|
+
"label",
|
|
674
|
+
{
|
|
675
|
+
htmlFor: inputId,
|
|
676
|
+
style: { fontSize: 15, cursor: "pointer", fontFamily: doodleUiFontFamily },
|
|
677
|
+
children: label
|
|
678
|
+
}
|
|
679
|
+
) : null
|
|
614
680
|
]
|
|
615
681
|
}
|
|
616
682
|
);
|
|
@@ -723,7 +789,14 @@ var Radio = forwardRef(function Radio2({
|
|
|
723
789
|
]
|
|
724
790
|
}
|
|
725
791
|
),
|
|
726
|
-
label ? /* @__PURE__ */ jsx(
|
|
792
|
+
label ? /* @__PURE__ */ jsx(
|
|
793
|
+
"label",
|
|
794
|
+
{
|
|
795
|
+
htmlFor: inputId,
|
|
796
|
+
style: { fontSize: 15, cursor: "pointer", fontFamily: doodleUiFontFamily },
|
|
797
|
+
children: label
|
|
798
|
+
}
|
|
799
|
+
) : null
|
|
727
800
|
]
|
|
728
801
|
}
|
|
729
802
|
);
|
|
@@ -768,7 +841,7 @@ var Card = forwardRef(function Card2({
|
|
|
768
841
|
"div",
|
|
769
842
|
{
|
|
770
843
|
style: {
|
|
771
|
-
fontWeight: 700,
|
|
844
|
+
fontWeight: doodleUiFontWeight(700),
|
|
772
845
|
fontSize: 16,
|
|
773
846
|
marginBottom: 10
|
|
774
847
|
},
|
|
@@ -808,7 +881,7 @@ var Badge = forwardRef(function Badge2({
|
|
|
808
881
|
contentStyle: {
|
|
809
882
|
padding: "2px 10px",
|
|
810
883
|
fontSize: 12,
|
|
811
|
-
fontWeight: 650,
|
|
884
|
+
fontWeight: doodleUiFontWeight(650),
|
|
812
885
|
lineHeight: 1.4,
|
|
813
886
|
letterSpacing: "0.01em"
|
|
814
887
|
},
|
|
@@ -869,7 +942,17 @@ var Alert = forwardRef(function Alert2({
|
|
|
869
942
|
strokeWidth,
|
|
870
943
|
...rest,
|
|
871
944
|
children: [
|
|
872
|
-
title ? /* @__PURE__ */ jsx(
|
|
945
|
+
title ? /* @__PURE__ */ jsx(
|
|
946
|
+
"div",
|
|
947
|
+
{
|
|
948
|
+
style: {
|
|
949
|
+
fontWeight: doodleUiFontWeight(700),
|
|
950
|
+
marginBottom: 4,
|
|
951
|
+
fontSize: 15
|
|
952
|
+
},
|
|
953
|
+
children: title
|
|
954
|
+
}
|
|
955
|
+
) : null,
|
|
873
956
|
/* @__PURE__ */ jsx("div", { style: { fontSize: 14, lineHeight: 1.5, color: SKETCH_COLORS.ink }, children })
|
|
874
957
|
]
|
|
875
958
|
}
|
|
@@ -949,7 +1032,8 @@ function Modal({
|
|
|
949
1032
|
style: {
|
|
950
1033
|
margin: 0,
|
|
951
1034
|
fontSize: 18,
|
|
952
|
-
fontWeight: 700,
|
|
1035
|
+
fontWeight: doodleUiFontWeight(700),
|
|
1036
|
+
fontFamily: doodleUiFontFamily,
|
|
953
1037
|
color: ink
|
|
954
1038
|
},
|
|
955
1039
|
children: title
|
|
@@ -1158,6 +1242,7 @@ function Tooltip({
|
|
|
1158
1242
|
padding: "6px 10px",
|
|
1159
1243
|
fontSize: 13,
|
|
1160
1244
|
lineHeight: 1.35,
|
|
1245
|
+
fontFamily: doodleUiFontFamily,
|
|
1161
1246
|
color: ink,
|
|
1162
1247
|
maxWidth: 240
|
|
1163
1248
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/utils.ts","../src/context/SketchSeedContext.tsx","../src/hooks/useResolvedSeed.ts","../src/hooks/useElementSize.ts","../src/primitives/RoughSvg.tsx","../src/primitives/SketchBox.tsx","../src/components/Button.tsx","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Card.tsx","../src/components/Badge.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/Divider.tsx","../src/components/Progress.tsx","../src/components/Tooltip.tsx"],"names":["useState","useLayoutEffect","jsx","SketchBox","forwardRef","Button","jsxs","Input","Textarea","Checkbox","RadioGroup","Radio","useId","Card","Badge","Alert","Divider","Progress"],"mappings":"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","file":"index.js","sourcesContent":["import type { CSSProperties, HTMLAttributes } from \"react\";\nimport type { Options } from \"roughjs/bin/core\";\n\nexport type FillStyle =\n | \"hachure\"\n | \"solid\"\n | \"zigzag\"\n | \"cross-hatch\"\n | \"dots\"\n | \"dashed\"\n | \"zigzag-line\";\n\nexport type RoughShape = \"rectangle\" | \"ellipse\" | \"line\" | \"line-vertical\" | \"path\";\n\nexport interface SketchProps {\n /** Sketchiness intensity. Default 1.5 */\n roughness?: number;\n /** Lock the wobble. Omit to follow SketchSeedProvider or randomize on mount */\n seed?: number;\n /** Stroke color override */\n sketchColor?: string;\n /** Line curvature. Default 1 */\n bowing?: number;\n fillStyle?: FillStyle;\n strokeWidth?: number;\n}\n\nexport interface RoughSvgProps extends SketchProps {\n shape?: RoughShape;\n /** Explicit width. Falls back to the parent box via ResizeObserver */\n width?: number;\n height?: number;\n fill?: string;\n /** Inset the drawing from the box edge so strokes are not clipped */\n inset?: number;\n path?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport type PolymorphicClassName = Pick<HTMLAttributes<HTMLElement>, \"className\" | \"style\">;\n\nexport function toRoughOptions(\n props: SketchProps & { fill?: string; stroke?: string },\n): Options {\n const stroke = props.stroke ?? props.sketchColor ?? DEFAULT_INK;\n const options: Options = {\n roughness: props.roughness ?? DEFAULT_ROUGHNESS,\n bowing: props.bowing ?? DEFAULT_BOWING,\n stroke,\n strokeWidth: props.strokeWidth ?? DEFAULT_STROKE_WIDTH,\n seed: props.seed,\n };\n if (props.fill) {\n options.fill = props.fill;\n options.fillStyle = props.fillStyle ?? \"hachure\";\n }\n return options;\n}\n\nexport const DEFAULT_ROUGHNESS = 1.5;\nexport const DEFAULT_BOWING = 1;\nexport const DEFAULT_STROKE_WIDTH = 1.75;\nexport const DEFAULT_INK = \"#1f1d1a\";\nexport const DEFAULT_INSET = 3;\n\nexport const SKETCH_COLORS = {\n ink: DEFAULT_INK,\n accent: \"#e24b3b\",\n accentFill: \"#f4c4bc\",\n secondaryFill: \"#d7e3d4\",\n paper: \"#eef0ea\",\n info: \"#1d4e89\",\n warning: \"#c47b17\",\n error: \"#c0392b\",\n success: \"#2d6a4f\",\n} as const;\n","export function randomSeed(): number {\n return Math.floor(Math.random() * 2 ** 31);\n}\n\nexport function cn(\n ...parts: Array<string | undefined | false | null>\n): string | undefined {\n const value = parts.filter(Boolean).join(\" \");\n return value.length > 0 ? value : undefined;\n}\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { randomSeed } from \"../utils\";\n\nexport interface SketchSeedContextValue {\n seed: number;\n shuffle: () => void;\n setSeed: (seed: number) => void;\n}\n\nconst SketchSeedContext = createContext<SketchSeedContextValue | null>(null);\n\nexport interface SketchSeedProviderProps {\n children: ReactNode;\n initialSeed?: number;\n}\n\nexport function SketchSeedProvider({\n children,\n initialSeed,\n}: SketchSeedProviderProps) {\n const [seed, setSeed] = useState(() => initialSeed ?? randomSeed());\n\n const shuffle = useCallback(() => {\n setSeed(randomSeed());\n }, []);\n\n const value = useMemo(\n () => ({ seed, shuffle, setSeed }),\n [seed, shuffle],\n );\n\n return (\n <SketchSeedContext.Provider value={value}>\n {children}\n </SketchSeedContext.Provider>\n );\n}\n\nexport function useSketchSeed(): SketchSeedContextValue {\n const ctx = useContext(SketchSeedContext);\n if (!ctx) {\n throw new Error(\n \"useSketchSeed() must be used inside <SketchSeedProvider>. Wrap your tree so Shuffle can redraw every sketch.\",\n );\n }\n return ctx;\n}\n\nexport function useOptionalSketchSeed(): SketchSeedContextValue | null {\n return useContext(SketchSeedContext);\n}\n\nexport { SketchSeedContext };\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useOptionalSketchSeed } from \"../context/SketchSeedContext\";\nimport { randomSeed } from \"../utils\";\n\n/**\n * Resolves the seed used to draw a sketch:\n * 1. explicit `seed` prop (locked, ignores Shuffle)\n * 2. SketchSeedProvider seed (redraws on Shuffle)\n * 3. a stable random seed generated on mount\n */\nexport function useResolvedSeed(seed?: number): number {\n const ctx = useOptionalSketchSeed();\n const [fallback] = useState(randomSeed);\n if (seed != null) return seed;\n if (ctx) return ctx.seed;\n return fallback;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useState, type RefObject } from \"react\";\n\nexport function useElementSize(\n ref: RefObject<HTMLElement | null>,\n): { width: number; height: number } {\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const update = () => {\n setSize({ width: el.offsetWidth, height: el.offsetHeight });\n };\n\n update();\n const observer = new ResizeObserver(update);\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type CSSProperties } from \"react\";\nimport rough from \"roughjs\";\nimport { useResolvedSeed } from \"../hooks/useResolvedSeed\";\nimport { useElementSize } from \"../hooks/useElementSize\";\nimport {\n DEFAULT_INSET,\n toRoughOptions,\n type RoughSvgProps,\n} from \"../types\";\n\n/**\n * Absolutely-positioned SVG layer that draws a rough.js shape behind HTML content.\n * Parent must be `position: relative`.\n */\nexport function RoughSvg({\n shape = \"rectangle\",\n width: widthProp,\n height: heightProp,\n roughness,\n seed: seedProp,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n inset = DEFAULT_INSET,\n path,\n className,\n style,\n}: RoughSvgProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const svgRef = useRef<SVGSVGElement>(null);\n const measured = useElementSize(containerRef);\n const seed = useResolvedSeed(seedProp);\n\n const width = widthProp ?? measured.width;\n const height = heightProp ?? measured.height;\n\n useLayoutEffect(() => {\n const svg = svgRef.current;\n if (!svg || width < 2 || height < 2) return;\n\n while (svg.firstChild) svg.removeChild(svg.firstChild);\n\n const rc = rough.svg(svg);\n const options = toRoughOptions({\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n });\n\n const x = inset;\n const y = inset;\n const w = Math.max(1, width - inset * 2);\n const h = Math.max(1, height - inset * 2);\n\n let node: SVGGElement;\n switch (shape) {\n case \"ellipse\":\n node = rc.ellipse(width / 2, height / 2, w, h, options);\n break;\n case \"line\":\n node = rc.line(inset, height / 2, width - inset, height / 2, options);\n break;\n case \"line-vertical\":\n node = rc.line(width / 2, inset, width / 2, height - inset, options);\n break;\n case \"path\":\n if (!path) return;\n node = rc.path(path, options);\n break;\n default:\n node = rc.rectangle(x, y, w, h, options);\n }\n\n svg.appendChild(node);\n }, [\n width,\n height,\n shape,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n inset,\n path,\n ]);\n\n const overlayStyle: CSSProperties = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n overflow: \"visible\",\n zIndex: 0,\n ...style,\n };\n\n return (\n <div\n ref={containerRef}\n aria-hidden=\"true\"\n className={className}\n style={overlayStyle}\n >\n <svg\n ref={svgRef}\n width=\"100%\"\n height=\"100%\"\n overflow=\"visible\"\n style={{ display: \"block\" }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { RoughSvg } from \"./RoughSvg\";\nimport type { FillStyle, RoughShape, SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface SketchBoxProps\n extends SketchProps, Omit<HTMLAttributes<HTMLDivElement>, \"color\"> {\n children?: ReactNode;\n shape?: RoughShape;\n fill?: string;\n fillStyle?: FillStyle;\n shadow?: boolean;\n contentClassName?: string;\n contentStyle?: CSSProperties;\n inset?: number;\n path?: string;\n}\n\nexport const SketchBox = forwardRef<HTMLDivElement, SketchBoxProps>(\n function SketchBox(\n {\n children,\n className,\n style,\n contentClassName,\n contentStyle,\n shape = \"rectangle\",\n fill,\n fillStyle,\n shadow = false,\n roughness,\n seed,\n sketchColor,\n bowing,\n strokeWidth,\n inset,\n path,\n ...rest\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cn(className)}\n style={{ position: \"relative\", ...style }}\n {...rest}\n >\n {shadow ? (\n <RoughSvg\n shape={shape}\n roughness={(roughness ?? 1.5) + 0.35}\n seed={seed}\n sketchColor={sketchColor}\n bowing={bowing}\n fillStyle=\"hachure\"\n fill={sketchColor ?? \"#1f1d1a\"}\n strokeWidth={1}\n inset={inset}\n style={{ transform: \"translate(5px, 6px)\", opacity: 0.16 }}\n />\n ) : null}\n <RoughSvg\n shape={shape}\n roughness={roughness}\n seed={seed}\n sketchColor={sketchColor}\n bowing={bowing}\n fillStyle={fill ? fillStyle : shadow ? \"solid\" : fillStyle}\n fill={fill ?? (shadow ? \"#f7f6f2\" : undefined)}\n strokeWidth={strokeWidth}\n inset={inset}\n path={path}\n />\n <div\n className={contentClassName}\n style={{ position: \"relative\", zIndex: 1, ...contentStyle }}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n SketchProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nconst SIZE_STYLES: Record<ButtonSize, CSSProperties> = {\n sm: { fontSize: 13, padding: \"4px 12px\", minHeight: 30 },\n md: { fontSize: 15, padding: \"8px 16px\", minHeight: 38 },\n lg: { fontSize: 17, padding: \"11px 22px\", minHeight: 46 },\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n {\n children,\n className,\n style,\n variant = \"primary\",\n size = \"md\",\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n disabled,\n onMouseEnter,\n onMouseLeave,\n ...rest\n },\n ref,\n ) {\n const [hovered, setHovered] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n const fill =\n variant === \"primary\"\n ? SKETCH_COLORS.accentFill\n : variant === \"secondary\"\n ? SKETCH_COLORS.secondaryFill\n : undefined;\n\n const stroke =\n variant === \"ghost\" && !hovered\n ? \"transparent\"\n : variant === \"primary\"\n ? sketchColor ?? SKETCH_COLORS.accent\n : ink;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(className)}\n disabled={disabled}\n onMouseEnter={(event) => {\n setHovered(true);\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setHovered(false);\n onMouseLeave?.(event);\n }}\n style={{\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n border: \"none\",\n background: \"transparent\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n color: ink,\n fontFamily: \"inherit\",\n fontWeight: 600,\n lineHeight: 1.2,\n opacity: disabled ? 0.45 : 1,\n ...SIZE_STYLES[size],\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={stroke}\n bowing={bowing}\n fillStyle={fillStyle ?? \"hachure\"}\n fill={fill}\n strokeWidth={\n hovered ? (strokeWidth ?? 1.75) + 0.4 : strokeWidth\n }\n />\n <span style={{ position: \"relative\", zIndex: 1 }}>{children}</span>\n </button>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"color\" | \"size\">,\n SketchProps {\n label?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const inputId = id;\n\n return (\n <label\n htmlFor={inputId}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n width: \"100%\",\n }}\n >\n {label ? (\n <span style={{ fontSize: 13, fontWeight: 600, color: ink }}>\n {label}\n </span>\n ) : null}\n <span style={{ position: \"relative\", display: \"block\" }}>\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={focused ? SKETCH_COLORS.accent : ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={focused ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth}\n />\n <input\n ref={ref}\n id={inputId}\n className={cn(className)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: \"relative\",\n zIndex: 1,\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n color: ink,\n fontFamily: \"inherit\",\n fontSize: 15,\n padding: \"8px 12px\",\n ...style,\n }}\n {...rest}\n />\n </span>\n </label>\n );\n});\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"color\">,\n SketchProps {\n label?: ReactNode;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n rows = 4,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n ) {\n const [focused, setFocused] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <label\n htmlFor={id}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n width: \"100%\",\n }}\n >\n {label ? (\n <span style={{ fontSize: 13, fontWeight: 600, color: ink }}>\n {label}\n </span>\n ) : null}\n <span style={{ position: \"relative\", display: \"block\" }}>\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={focused ? SKETCH_COLORS.accent : ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={focused ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth}\n />\n <textarea\n ref={ref}\n id={id}\n rows={rows}\n className={cn(className)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: \"relative\",\n zIndex: 1,\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n color: ink,\n fontFamily: \"inherit\",\n fontSize: 15,\n lineHeight: 1.5,\n padding: \"10px 12px\",\n resize: \"vertical\",\n ...style,\n }}\n {...rest}\n />\n </span>\n </label>\n );\n },\n);\n","\"use client\";\n\nimport { forwardRef, useId, type ReactNode } from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface CheckboxProps\n extends Omit<CheckboxPrimitive.CheckboxProps, \"asChild\">,\n SketchProps {\n label?: ReactNode;\n}\n\nconst BOX = 20;\nconst CHECK_PATH = \"M 4.5 10.5 L 8.5 14.5 L 15.5 5.5\";\n\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n function Checkbox(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n checked,\n defaultChecked,\n onCheckedChange,\n id,\n ...rest\n },\n ref,\n ) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <span\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n userSelect: \"none\",\n ...style,\n }}\n >\n <CheckboxPrimitive.Root\n ref={ref}\n id={inputId}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n style={{\n position: \"relative\",\n width: BOX,\n height: BOX,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n flexShrink: 0,\n cursor: \"pointer\",\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={strokeWidth ?? 1.6}\n inset={1.5}\n />\n <CheckboxPrimitive.Indicator\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n }}\n >\n <RoughSvg\n shape=\"path\"\n path={CHECK_PATH}\n roughness={(roughness ?? 1.5) * 0.7}\n seed={seed}\n sketchColor={SKETCH_COLORS.accent}\n bowing={bowing}\n strokeWidth={(strokeWidth ?? 1.6) + 0.4}\n inset={0}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label ? (\n <label htmlFor={inputId} style={{ fontSize: 15, cursor: \"pointer\" }}>\n {label}\n </label>\n ) : null}\n </span>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface RadioGroupProps\n extends ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n function RadioGroup({ className, style, children, ...rest }, ref) {\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(className)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n ...style,\n }}\n {...rest}\n >\n {children}\n </RadioGroupPrimitive.Root>\n );\n },\n);\n\nexport interface RadioProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>,\n \"asChild\"\n >,\n SketchProps {\n label?: ReactNode;\n}\n\nconst SIZE = 20;\n\nexport const Radio = forwardRef<HTMLButtonElement, RadioProps>(function Radio(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n ...rest\n },\n ref,\n) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <span\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n userSelect: \"none\",\n ...style,\n }}\n >\n <RadioGroupPrimitive.Item\n ref={ref}\n id={inputId}\n style={{\n position: \"relative\",\n width: SIZE,\n height: SIZE,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n flexShrink: 0,\n cursor: \"pointer\",\n borderRadius: \"50%\",\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"ellipse\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={strokeWidth ?? 1.6}\n inset={1.5}\n />\n <RadioGroupPrimitive.Indicator\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n }}\n >\n <RoughSvg\n shape=\"ellipse\"\n roughness={(roughness ?? 1.5) + 0.2}\n seed={seed}\n sketchColor={SKETCH_COLORS.accent}\n fill={SKETCH_COLORS.accent}\n fillStyle=\"solid\"\n bowing={bowing}\n strokeWidth={1}\n inset={6}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {label ? (\n <label htmlFor={inputId} style={{ fontSize: 15, cursor: \"pointer\" }}>\n {label}\n </label>\n ) : null}\n </span>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { SketchBox, type SketchBoxProps } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\" | \"title\">,\n SketchProps {\n shadow?: boolean;\n fill?: string;\n title?: ReactNode;\n footer?: ReactNode;\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n children,\n className,\n style,\n shadow = true,\n fill,\n title,\n footer,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n) {\n const boxProps: SketchBoxProps = {\n shadow,\n fill,\n roughness,\n seed,\n sketchColor: sketchColor ?? SKETCH_COLORS.ink,\n bowing,\n fillStyle,\n strokeWidth,\n };\n\n return (\n <SketchBox\n ref={ref}\n className={cn(className)}\n style={style}\n contentStyle={{ padding: \"16px 18px\" }}\n {...boxProps}\n {...rest}\n >\n {title ? (\n <div\n style={{\n fontWeight: 700,\n fontSize: 16,\n marginBottom: 10,\n }}\n >\n {title}\n </div>\n ) : null}\n {children}\n {footer ? (\n <div style={{ marginTop: 14, fontSize: 13, opacity: 0.8 }}>\n {footer}\n </div>\n ) : null}\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type BadgeVariant = \"default\" | \"accent\" | \"outline\";\n\nexport interface BadgeProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"color\">,\n SketchProps {\n variant?: BadgeVariant;\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n children,\n className,\n style,\n variant = \"default\",\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n) {\n const ink =\n variant === \"accent\"\n ? sketchColor ?? SKETCH_COLORS.accent\n : sketchColor ?? SKETCH_COLORS.ink;\n\n const fill =\n variant === \"accent\"\n ? SKETCH_COLORS.accentFill\n : variant === \"outline\"\n ? undefined\n : SKETCH_COLORS.secondaryFill;\n\n return (\n <SketchBox\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n verticalAlign: \"middle\",\n ...style,\n }}\n contentStyle={{\n padding: \"2px 10px\",\n fontSize: 12,\n fontWeight: 650,\n lineHeight: 1.4,\n letterSpacing: \"0.01em\",\n }}\n fill={fill}\n fillStyle={fillStyle ?? \"hachure\"}\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n strokeWidth={strokeWidth ?? 1.4}\n {...rest}\n >\n <span ref={ref}>{children}</span>\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type AlertVariant = \"info\" | \"warning\" | \"error\" | \"success\";\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\" | \"title\">,\n SketchProps {\n variant?: AlertVariant;\n title?: ReactNode;\n}\n\nconst VARIANT_COLOR: Record<AlertVariant, string> = {\n info: SKETCH_COLORS.info,\n warning: SKETCH_COLORS.warning,\n error: SKETCH_COLORS.error,\n success: SKETCH_COLORS.success,\n};\n\nconst VARIANT_FILL: Record<AlertVariant, string> = {\n info: \"#d2deec\",\n warning: \"#f3e2c0\",\n error: \"#f3d0cc\",\n success: \"#d3e8dc\",\n};\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n children,\n className,\n style,\n variant = \"info\",\n title,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n role = \"status\",\n ...rest\n },\n ref,\n) {\n const color = sketchColor ?? VARIANT_COLOR[variant];\n\n return (\n <SketchBox\n ref={ref}\n role={role}\n className={cn(className)}\n style={{ color, ...style }}\n contentStyle={{ padding: \"12px 16px\" }}\n roughness={roughness}\n seed={seed}\n sketchColor={color}\n bowing={bowing}\n fillStyle={fillStyle ?? \"hachure\"}\n fill={VARIANT_FILL[variant]}\n strokeWidth={strokeWidth}\n {...rest}\n >\n {title ? (\n <div style={{ fontWeight: 700, marginBottom: 4, fontSize: 15 }}>\n {title}\n </div>\n ) : null}\n <div style={{ fontSize: 14, lineHeight: 1.5, color: SKETCH_COLORS.ink }}>\n {children}\n </div>\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { Button } from \"./Button\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface ModalProps extends SketchProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nexport function Modal({\n open,\n defaultOpen,\n onOpenChange,\n trigger,\n title,\n description,\n children,\n className,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n}: ModalProps) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <Dialog.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {trigger ? <Dialog.Trigger asChild>{trigger}</Dialog.Trigger> : null}\n <Dialog.Portal>\n <Dialog.Overlay\n style={{\n position: \"fixed\",\n inset: 0,\n background: \"rgba(31, 29, 26, 0.38)\",\n zIndex: 70,\n }}\n />\n <Dialog.Content\n className={cn(className)}\n style={{\n position: \"fixed\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 80,\n width: \"min(480px, calc(100vw - 32px))\",\n outline: \"none\",\n }}\n >\n <SketchBox\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle ?? \"solid\"}\n fill=\"#f7f6f2\"\n strokeWidth={strokeWidth ?? 2}\n shadow\n contentStyle={{ padding: \"20px 22px 18px\" }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 12,\n marginBottom: title ? 10 : 0,\n }}\n >\n {title ? (\n <Dialog.Title\n style={{\n margin: 0,\n fontSize: 18,\n fontWeight: 700,\n color: ink,\n }}\n >\n {title}\n </Dialog.Title>\n ) : (\n <Dialog.Title style={{ position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", clip: \"rect(0 0 0 0)\" }}>\n Dialog\n </Dialog.Title>\n )}\n <Dialog.Close asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n aria-label=\"Close\"\n >\n Close\n </Button>\n </Dialog.Close>\n </div>\n {description ? (\n <Dialog.Description\n style={{\n margin: \"0 0 14px\",\n fontSize: 14,\n lineHeight: 1.5,\n color: ink,\n opacity: 0.8,\n }}\n >\n {description}\n </Dialog.Description>\n ) : null}\n <div>{children}</div>\n </SketchBox>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n\nexport const ModalRoot = Dialog.Root;\nexport const ModalTrigger = Dialog.Trigger;\nexport const ModalClose = Dialog.Close;\nexport const ModalTitle = Dialog.Title;\nexport const ModalDescription = Dialog.Description;\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type DividerOrientation = \"horizontal\" | \"vertical\";\n\nexport interface DividerProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\">,\n SketchProps {\n orientation?: DividerOrientation;\n}\n\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n function Divider(\n {\n className,\n style,\n orientation = \"horizontal\",\n roughness,\n seed,\n sketchColor,\n bowing,\n strokeWidth,\n ...rest\n },\n ref,\n ) {\n const horizontal = orientation === \"horizontal\";\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(className)}\n style={{\n position: \"relative\",\n width: horizontal ? \"100%\" : 12,\n height: horizontal ? 12 : \"100%\",\n minHeight: horizontal ? 12 : 48,\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape={horizontal ? \"line\" : \"line-vertical\"}\n roughness={roughness ?? 1.8}\n seed={seed}\n sketchColor={sketchColor ?? SKETCH_COLORS.ink}\n bowing={bowing ?? 2}\n strokeWidth={strokeWidth ?? 1.5}\n inset={4}\n />\n </div>\n );\n },\n);\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface ProgressProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\">,\n SketchProps {\n value?: number;\n max?: number;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n function Progress(\n {\n className,\n style,\n value = 0,\n max = 100,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n ) {\n const ink = sketchColor ?? SKETCH_COLORS.accent;\n const clamped = Math.min(max, Math.max(0, value));\n const percent = max === 0 ? 0 : (clamped / max) * 100;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={clamped}\n className={cn(className)}\n style={{\n position: \"relative\",\n width: \"100%\",\n height: 18,\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={SKETCH_COLORS.ink}\n bowing={bowing}\n strokeWidth={strokeWidth ?? 1.5}\n inset={2}\n />\n {percent > 0 ? (\n <div\n style={{\n position: \"absolute\",\n left: 5,\n top: 4,\n bottom: 4,\n width: `calc(${percent}% - 10px)`,\n minWidth: percent > 0 ? 8 : 0,\n overflow: \"hidden\",\n }}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={(roughness ?? 1.5) + 0.55}\n seed={seed}\n sketchColor={ink}\n fill={ink}\n fillStyle={fillStyle ?? \"hachure\"}\n bowing={bowing}\n strokeWidth={1.1}\n inset={1}\n />\n </div>\n ) : null}\n </div>\n );\n },\n);\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\n\nexport interface TooltipProps extends SketchProps {\n content: ReactNode;\n children: ReactNode;\n side?: ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>[\"side\"];\n delayDuration?: number;\n className?: string;\n}\n\nexport function Tooltip({\n content,\n children,\n side = \"top\",\n delayDuration = 200,\n className,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n}: TooltipProps) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <TooltipPrimitive.Root delayDuration={delayDuration}>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={8}\n className={cn(className)}\n style={{ zIndex: 60, outline: \"none\" }}\n >\n <SketchBox\n roughness={roughness ?? 1.3}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle ?? \"solid\"}\n fill=\"#f7f6f2\"\n strokeWidth={strokeWidth ?? 1.4}\n contentStyle={{\n padding: \"6px 10px\",\n fontSize: 13,\n lineHeight: 1.35,\n color: ink,\n maxWidth: 240,\n }}\n >\n {content}\n </SketchBox>\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/utils.ts","../src/context/SketchSeedContext.tsx","../src/hooks/useResolvedSeed.ts","../src/hooks/useElementSize.ts","../src/primitives/RoughSvg.tsx","../src/primitives/SketchBox.tsx","../src/components/Button.tsx","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Card.tsx","../src/components/Badge.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/Divider.tsx","../src/components/Progress.tsx","../src/components/Tooltip.tsx"],"names":["useState","useLayoutEffect","jsx","SketchBox","forwardRef","Button","jsxs","Input","Textarea","Checkbox","RadioGroup","Radio","useId","Card","Badge","Alert","Divider","Progress"],"mappings":"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","file":"index.js","sourcesContent":["import type { CSSProperties, HTMLAttributes } from \"react\";\nimport type { Options } from \"roughjs/bin/core\";\n\nexport type FillStyle =\n | \"hachure\"\n | \"solid\"\n | \"zigzag\"\n | \"cross-hatch\"\n | \"dots\"\n | \"dashed\"\n | \"zigzag-line\";\n\nexport type RoughShape = \"rectangle\" | \"ellipse\" | \"line\" | \"line-vertical\" | \"path\";\n\nexport interface SketchProps {\n /** Sketchiness intensity. Default 1.5 */\n roughness?: number;\n /** Lock the wobble. Omit to follow SketchSeedProvider or randomize on mount */\n seed?: number;\n /** Stroke color override */\n sketchColor?: string;\n /** Line curvature. Default 1 */\n bowing?: number;\n fillStyle?: FillStyle;\n strokeWidth?: number;\n}\n\nexport interface RoughSvgProps extends SketchProps {\n shape?: RoughShape;\n /** Explicit width. Falls back to the parent box via ResizeObserver */\n width?: number;\n height?: number;\n fill?: string;\n /** Inset the drawing from the box edge so strokes are not clipped */\n inset?: number;\n path?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport type PolymorphicClassName = Pick<HTMLAttributes<HTMLElement>, \"className\" | \"style\">;\n\nexport function toRoughOptions(\n props: SketchProps & { fill?: string; stroke?: string },\n): Options {\n const stroke = props.stroke ?? props.sketchColor ?? DEFAULT_INK;\n const options: Options = {\n roughness: props.roughness ?? DEFAULT_ROUGHNESS,\n bowing: props.bowing ?? DEFAULT_BOWING,\n stroke,\n strokeWidth: props.strokeWidth ?? DEFAULT_STROKE_WIDTH,\n seed: props.seed,\n };\n if (props.fill) {\n options.fill = props.fill;\n options.fillStyle = props.fillStyle ?? \"hachure\";\n }\n return options;\n}\n\nexport const DEFAULT_ROUGHNESS = 1.5;\nexport const DEFAULT_BOWING = 1;\nexport const DEFAULT_STROKE_WIDTH = 1.75;\nexport const DEFAULT_INK = \"#1f1d1a\";\nexport const DEFAULT_INSET = 3;\n\nexport const SKETCH_COLORS = {\n ink: DEFAULT_INK,\n accent: \"#e24b3b\",\n accentFill: \"#f4c4bc\",\n secondaryFill: \"#d7e3d4\",\n paper: \"#eef0ea\",\n info: \"#1d4e89\",\n warning: \"#c47b17\",\n error: \"#c0392b\",\n success: \"#2d6a4f\",\n} as const;\n","export function randomSeed(): number {\n return Math.floor(Math.random() * 2 ** 31);\n}\n\n/** Follows SketchSeedProvider --doodle-ui-font. Unset = inherit the page default. */\nexport const doodleUiFontFamily = \"var(--doodle-ui-font, inherit)\";\n\n/** When a handwriting face is active the provider sets --doodle-ui-font-weight to 400. */\nexport function doodleUiFontWeight(fallback: number): string {\n return `var(--doodle-ui-font-weight, ${fallback})`;\n}\n\nexport function nextFontIndex(current: number, count: number): number {\n if (count <= 1) return 0;\n let next = current;\n while (next === current) {\n next = Math.floor(Math.random() * count);\n }\n return next;\n}\n\nexport function cn(\n ...parts: Array<string | undefined | false | null>\n): string | undefined {\n const value = parts.filter(Boolean).join(\" \");\n return value.length > 0 ? value : undefined;\n}\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { nextFontIndex, randomSeed } from \"../utils\";\n\nexport interface SketchSeedContextValue {\n seed: number;\n fontIndex: number;\n shuffle: () => void;\n setSeed: (seed: number) => void;\n}\n\nconst SketchSeedContext = createContext<SketchSeedContextValue | null>(null);\n\nexport interface SketchSeedProviderProps {\n children: ReactNode;\n initialSeed?: number;\n /**\n * CSS font-family values for Shuffle. Index 0 is the page default\n * (`--doodle-ui-font` is left unset). Later indexes set the variable.\n */\n fonts?: readonly string[];\n /** Starting palette index. Defaults to 0 (unset / page default). */\n initialFontIndex?: number;\n}\n\nexport function SketchSeedProvider({\n children,\n initialSeed,\n fonts,\n initialFontIndex = 0,\n}: SketchSeedProviderProps) {\n const [seed, setSeed] = useState(() => initialSeed ?? randomSeed());\n const [fontIndex, setFontIndex] = useState(initialFontIndex);\n const fontCount = fonts?.length ?? 0;\n\n const shuffle = useCallback(() => {\n setSeed(randomSeed());\n setFontIndex((current) => nextFontIndex(current, fontCount));\n }, [fontCount]);\n\n const activeFamily = fontIndex > 0 ? fonts?.[fontIndex] : undefined;\n\n useLayoutEffect(() => {\n const root = document.documentElement;\n if (activeFamily) {\n root.style.setProperty(\"--doodle-ui-font\", activeFamily);\n root.style.setProperty(\"--doodle-ui-font-weight\", \"400\");\n } else {\n // Override docs :root defaults so Shuffle can return to Outfit.\n root.style.setProperty(\"--doodle-ui-font\", \"initial\");\n root.style.setProperty(\"--doodle-ui-font-weight\", \"initial\");\n }\n return () => {\n root.style.removeProperty(\"--doodle-ui-font\");\n root.style.removeProperty(\"--doodle-ui-font-weight\");\n };\n }, [activeFamily]);\n\n const value = useMemo(\n () => ({ seed, fontIndex, shuffle, setSeed }),\n [seed, fontIndex, shuffle],\n );\n\n return (\n <SketchSeedContext.Provider value={value}>\n {children}\n </SketchSeedContext.Provider>\n );\n}\n\nexport function useSketchSeed(): SketchSeedContextValue {\n const ctx = useContext(SketchSeedContext);\n if (!ctx) {\n throw new Error(\n \"useSketchSeed() must be used inside <SketchSeedProvider>. Wrap your tree so Shuffle can redraw every sketch.\",\n );\n }\n return ctx;\n}\n\nexport function useOptionalSketchSeed(): SketchSeedContextValue | null {\n return useContext(SketchSeedContext);\n}\n\nexport { SketchSeedContext };\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useOptionalSketchSeed } from \"../context/SketchSeedContext\";\nimport { randomSeed } from \"../utils\";\n\n/**\n * Resolves the seed used to draw a sketch:\n * 1. explicit `seed` prop (locked, ignores Shuffle)\n * 2. SketchSeedProvider seed (redraws on Shuffle)\n * 3. a stable random seed generated on mount\n */\nexport function useResolvedSeed(seed?: number): number {\n const ctx = useOptionalSketchSeed();\n const [fallback] = useState(randomSeed);\n if (seed != null) return seed;\n if (ctx) return ctx.seed;\n return fallback;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useState, type RefObject } from \"react\";\n\nexport function useElementSize(\n ref: RefObject<HTMLElement | null>,\n): { width: number; height: number } {\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const update = () => {\n setSize({ width: el.offsetWidth, height: el.offsetHeight });\n };\n\n update();\n const observer = new ResizeObserver(update);\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type CSSProperties } from \"react\";\nimport rough from \"roughjs\";\nimport { useResolvedSeed } from \"../hooks/useResolvedSeed\";\nimport { useElementSize } from \"../hooks/useElementSize\";\nimport {\n DEFAULT_INSET,\n toRoughOptions,\n type RoughSvgProps,\n} from \"../types\";\n\n/**\n * Absolutely-positioned SVG layer that draws a rough.js shape behind HTML content.\n * Parent must be `position: relative`.\n */\nexport function RoughSvg({\n shape = \"rectangle\",\n width: widthProp,\n height: heightProp,\n roughness,\n seed: seedProp,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n inset = DEFAULT_INSET,\n path,\n className,\n style,\n}: RoughSvgProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const svgRef = useRef<SVGSVGElement>(null);\n const measured = useElementSize(containerRef);\n const seed = useResolvedSeed(seedProp);\n\n const width = widthProp ?? measured.width;\n const height = heightProp ?? measured.height;\n\n useLayoutEffect(() => {\n const svg = svgRef.current;\n if (!svg || width < 2 || height < 2) return;\n\n while (svg.firstChild) svg.removeChild(svg.firstChild);\n\n const rc = rough.svg(svg);\n const options = toRoughOptions({\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n });\n\n const x = inset;\n const y = inset;\n const w = Math.max(1, width - inset * 2);\n const h = Math.max(1, height - inset * 2);\n\n let node: SVGGElement;\n switch (shape) {\n case \"ellipse\":\n node = rc.ellipse(width / 2, height / 2, w, h, options);\n break;\n case \"line\":\n node = rc.line(inset, height / 2, width - inset, height / 2, options);\n break;\n case \"line-vertical\":\n node = rc.line(width / 2, inset, width / 2, height - inset, options);\n break;\n case \"path\":\n if (!path) return;\n node = rc.path(path, options);\n break;\n default:\n node = rc.rectangle(x, y, w, h, options);\n }\n\n svg.appendChild(node);\n }, [\n width,\n height,\n shape,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n fill,\n inset,\n path,\n ]);\n\n const overlayStyle: CSSProperties = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n overflow: \"visible\",\n zIndex: 0,\n ...style,\n };\n\n return (\n <div\n ref={containerRef}\n aria-hidden=\"true\"\n className={className}\n style={overlayStyle}\n >\n <svg\n ref={svgRef}\n width=\"100%\"\n height=\"100%\"\n overflow=\"visible\"\n style={{ display: \"block\" }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { RoughSvg } from \"./RoughSvg\";\nimport type { FillStyle, RoughShape, SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily } from \"../utils\";\n\nexport interface SketchBoxProps\n extends SketchProps, Omit<HTMLAttributes<HTMLDivElement>, \"color\"> {\n children?: ReactNode;\n shape?: RoughShape;\n fill?: string;\n fillStyle?: FillStyle;\n shadow?: boolean;\n contentClassName?: string;\n contentStyle?: CSSProperties;\n inset?: number;\n path?: string;\n}\n\nexport const SketchBox = forwardRef<HTMLDivElement, SketchBoxProps>(\n function SketchBox(\n {\n children,\n className,\n style,\n contentClassName,\n contentStyle,\n shape = \"rectangle\",\n fill,\n fillStyle,\n shadow = false,\n roughness,\n seed,\n sketchColor,\n bowing,\n strokeWidth,\n inset,\n path,\n ...rest\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cn(className)}\n style={{ position: \"relative\", ...style }}\n {...rest}\n >\n {shadow ? (\n <RoughSvg\n shape={shape}\n roughness={(roughness ?? 1.5) + 0.35}\n seed={seed}\n sketchColor={sketchColor}\n bowing={bowing}\n fillStyle=\"hachure\"\n fill={sketchColor ?? \"#1f1d1a\"}\n strokeWidth={1}\n inset={inset}\n style={{ transform: \"translate(5px, 6px)\", opacity: 0.16 }}\n />\n ) : null}\n <RoughSvg\n shape={shape}\n roughness={roughness}\n seed={seed}\n sketchColor={sketchColor}\n bowing={bowing}\n fillStyle={fill ? fillStyle : shadow ? \"solid\" : fillStyle}\n fill={fill ?? (shadow ? \"#f7f6f2\" : undefined)}\n strokeWidth={strokeWidth}\n inset={inset}\n path={path}\n />\n <div\n className={contentClassName}\n style={{\n position: \"relative\",\n zIndex: 1,\n fontFamily: doodleUiFontFamily,\n ...contentStyle,\n }}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily, doodleUiFontWeight } from \"../utils\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n SketchProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nconst SIZE_STYLES: Record<ButtonSize, CSSProperties> = {\n sm: { fontSize: 13, padding: \"4px 12px\", minHeight: 30 },\n md: { fontSize: 15, padding: \"8px 16px\", minHeight: 38 },\n lg: { fontSize: 17, padding: \"11px 22px\", minHeight: 46 },\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n {\n children,\n className,\n style,\n variant = \"primary\",\n size = \"md\",\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n disabled,\n onMouseEnter,\n onMouseLeave,\n ...rest\n },\n ref,\n ) {\n const [hovered, setHovered] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n const fill =\n variant === \"primary\"\n ? SKETCH_COLORS.accentFill\n : variant === \"secondary\"\n ? SKETCH_COLORS.secondaryFill\n : undefined;\n\n const stroke =\n variant === \"ghost\" && !hovered\n ? \"transparent\"\n : variant === \"primary\"\n ? sketchColor ?? SKETCH_COLORS.accent\n : ink;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(className)}\n disabled={disabled}\n onMouseEnter={(event) => {\n setHovered(true);\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setHovered(false);\n onMouseLeave?.(event);\n }}\n style={{\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n border: \"none\",\n background: \"transparent\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n color: ink,\n fontFamily: doodleUiFontFamily,\n fontWeight: doodleUiFontWeight(600),\n lineHeight: 1.2,\n opacity: disabled ? 0.45 : 1,\n ...SIZE_STYLES[size],\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={stroke}\n bowing={bowing}\n fillStyle={fillStyle ?? \"hachure\"}\n fill={fill}\n strokeWidth={\n hovered ? (strokeWidth ?? 1.75) + 0.4 : strokeWidth\n }\n />\n <span style={{ position: \"relative\", zIndex: 1 }}>{children}</span>\n </button>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily, doodleUiFontWeight } from \"../utils\";\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"color\" | \"size\">,\n SketchProps {\n label?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const inputId = id;\n\n return (\n <label\n htmlFor={inputId}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n width: \"100%\",\n }}\n >\n {label ? (\n <span\n style={{\n fontSize: 13,\n fontWeight: doodleUiFontWeight(600),\n fontFamily: doodleUiFontFamily,\n color: ink,\n }}\n >\n {label}\n </span>\n ) : null}\n <span style={{ position: \"relative\", display: \"block\" }}>\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={focused ? SKETCH_COLORS.accent : ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={focused ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth}\n />\n <input\n ref={ref}\n id={inputId}\n className={cn(className)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: \"relative\",\n zIndex: 1,\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n color: ink,\n fontFamily: doodleUiFontFamily,\n fontSize: 15,\n padding: \"8px 12px\",\n ...style,\n }}\n {...rest}\n />\n </span>\n </label>\n );\n});\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily, doodleUiFontWeight } from \"../utils\";\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"color\">,\n SketchProps {\n label?: ReactNode;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n rows = 4,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n ) {\n const [focused, setFocused] = useState(false);\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <label\n htmlFor={id}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n width: \"100%\",\n }}\n >\n {label ? (\n <span\n style={{\n fontSize: 13,\n fontWeight: doodleUiFontWeight(600),\n fontFamily: doodleUiFontFamily,\n color: ink,\n }}\n >\n {label}\n </span>\n ) : null}\n <span style={{ position: \"relative\", display: \"block\" }}>\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={focused ? SKETCH_COLORS.accent : ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={focused ? (strokeWidth ?? 1.75) + 0.35 : strokeWidth}\n />\n <textarea\n ref={ref}\n id={id}\n rows={rows}\n className={cn(className)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: \"relative\",\n zIndex: 1,\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n color: ink,\n fontFamily: doodleUiFontFamily,\n fontSize: 15,\n lineHeight: 1.5,\n padding: \"10px 12px\",\n resize: \"vertical\",\n ...style,\n }}\n {...rest}\n />\n </span>\n </label>\n );\n },\n);\n","\"use client\";\n\nimport { forwardRef, useId, type ReactNode } from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily } from \"../utils\";\n\nexport interface CheckboxProps\n extends Omit<CheckboxPrimitive.CheckboxProps, \"asChild\">,\n SketchProps {\n label?: ReactNode;\n}\n\nconst BOX = 20;\nconst CHECK_PATH = \"M 4.5 10.5 L 8.5 14.5 L 15.5 5.5\";\n\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n function Checkbox(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n checked,\n defaultChecked,\n onCheckedChange,\n id,\n ...rest\n },\n ref,\n ) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <span\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n userSelect: \"none\",\n ...style,\n }}\n >\n <CheckboxPrimitive.Root\n ref={ref}\n id={inputId}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n style={{\n position: \"relative\",\n width: BOX,\n height: BOX,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n flexShrink: 0,\n cursor: \"pointer\",\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={strokeWidth ?? 1.6}\n inset={1.5}\n />\n <CheckboxPrimitive.Indicator\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n }}\n >\n <RoughSvg\n shape=\"path\"\n path={CHECK_PATH}\n roughness={(roughness ?? 1.5) * 0.7}\n seed={seed}\n sketchColor={SKETCH_COLORS.accent}\n bowing={bowing}\n strokeWidth={(strokeWidth ?? 1.6) + 0.4}\n inset={0}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label ? (\n <label\n htmlFor={inputId}\n style={{ fontSize: 15, cursor: \"pointer\", fontFamily: doodleUiFontFamily }}\n >\n {label}\n </label>\n ) : null}\n </span>\n );\n },\n);\n","\"use client\";\n\nimport {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily } from \"../utils\";\n\nexport interface RadioGroupProps\n extends ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n function RadioGroup({ className, style, children, ...rest }, ref) {\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(className)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n ...style,\n }}\n {...rest}\n >\n {children}\n </RadioGroupPrimitive.Root>\n );\n },\n);\n\nexport interface RadioProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>,\n \"asChild\"\n >,\n SketchProps {\n label?: ReactNode;\n}\n\nconst SIZE = 20;\n\nexport const Radio = forwardRef<HTMLButtonElement, RadioProps>(function Radio(\n {\n className,\n style,\n label,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n id,\n ...rest\n },\n ref,\n) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <span\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n userSelect: \"none\",\n ...style,\n }}\n >\n <RadioGroupPrimitive.Item\n ref={ref}\n id={inputId}\n style={{\n position: \"relative\",\n width: SIZE,\n height: SIZE,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n flexShrink: 0,\n cursor: \"pointer\",\n borderRadius: \"50%\",\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"ellipse\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle}\n strokeWidth={strokeWidth ?? 1.6}\n inset={1.5}\n />\n <RadioGroupPrimitive.Indicator\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"block\",\n }}\n >\n <RoughSvg\n shape=\"ellipse\"\n roughness={(roughness ?? 1.5) + 0.2}\n seed={seed}\n sketchColor={SKETCH_COLORS.accent}\n fill={SKETCH_COLORS.accent}\n fillStyle=\"solid\"\n bowing={bowing}\n strokeWidth={1}\n inset={6}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {label ? (\n <label\n htmlFor={inputId}\n style={{ fontSize: 15, cursor: \"pointer\", fontFamily: doodleUiFontFamily }}\n >\n {label}\n </label>\n ) : null}\n </span>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { SketchBox, type SketchBoxProps } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontWeight } from \"../utils\";\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\" | \"title\">,\n SketchProps {\n shadow?: boolean;\n fill?: string;\n title?: ReactNode;\n footer?: ReactNode;\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n children,\n className,\n style,\n shadow = true,\n fill,\n title,\n footer,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n) {\n const boxProps: SketchBoxProps = {\n shadow,\n fill,\n roughness,\n seed,\n sketchColor: sketchColor ?? SKETCH_COLORS.ink,\n bowing,\n fillStyle,\n strokeWidth,\n };\n\n return (\n <SketchBox\n ref={ref}\n className={cn(className)}\n style={style}\n contentStyle={{ padding: \"16px 18px\" }}\n {...boxProps}\n {...rest}\n >\n {title ? (\n <div\n style={{\n fontWeight: doodleUiFontWeight(700),\n fontSize: 16,\n marginBottom: 10,\n }}\n >\n {title}\n </div>\n ) : null}\n {children}\n {footer ? (\n <div style={{ marginTop: 14, fontSize: 13, opacity: 0.8 }}>\n {footer}\n </div>\n ) : null}\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontWeight } from \"../utils\";\n\nexport type BadgeVariant = \"default\" | \"accent\" | \"outline\";\n\nexport interface BadgeProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"color\">,\n SketchProps {\n variant?: BadgeVariant;\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n children,\n className,\n style,\n variant = \"default\",\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n) {\n const ink =\n variant === \"accent\"\n ? sketchColor ?? SKETCH_COLORS.accent\n : sketchColor ?? SKETCH_COLORS.ink;\n\n const fill =\n variant === \"accent\"\n ? SKETCH_COLORS.accentFill\n : variant === \"outline\"\n ? undefined\n : SKETCH_COLORS.secondaryFill;\n\n return (\n <SketchBox\n className={cn(className)}\n style={{\n display: \"inline-flex\",\n verticalAlign: \"middle\",\n ...style,\n }}\n contentStyle={{\n padding: \"2px 10px\",\n fontSize: 12,\n fontWeight: doodleUiFontWeight(650),\n lineHeight: 1.4,\n letterSpacing: \"0.01em\",\n }}\n fill={fill}\n fillStyle={fillStyle ?? \"hachure\"}\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n strokeWidth={strokeWidth ?? 1.4}\n {...rest}\n >\n <span ref={ref}>{children}</span>\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontWeight } from \"../utils\";\n\nexport type AlertVariant = \"info\" | \"warning\" | \"error\" | \"success\";\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\" | \"title\">,\n SketchProps {\n variant?: AlertVariant;\n title?: ReactNode;\n}\n\nconst VARIANT_COLOR: Record<AlertVariant, string> = {\n info: SKETCH_COLORS.info,\n warning: SKETCH_COLORS.warning,\n error: SKETCH_COLORS.error,\n success: SKETCH_COLORS.success,\n};\n\nconst VARIANT_FILL: Record<AlertVariant, string> = {\n info: \"#d2deec\",\n warning: \"#f3e2c0\",\n error: \"#f3d0cc\",\n success: \"#d3e8dc\",\n};\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n children,\n className,\n style,\n variant = \"info\",\n title,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n role = \"status\",\n ...rest\n },\n ref,\n) {\n const color = sketchColor ?? VARIANT_COLOR[variant];\n\n return (\n <SketchBox\n ref={ref}\n role={role}\n className={cn(className)}\n style={{ color, ...style }}\n contentStyle={{ padding: \"12px 16px\" }}\n roughness={roughness}\n seed={seed}\n sketchColor={color}\n bowing={bowing}\n fillStyle={fillStyle ?? \"hachure\"}\n fill={VARIANT_FILL[variant]}\n strokeWidth={strokeWidth}\n {...rest}\n >\n {title ? (\n <div\n style={{\n fontWeight: doodleUiFontWeight(700),\n marginBottom: 4,\n fontSize: 15,\n }}\n >\n {title}\n </div>\n ) : null}\n <div style={{ fontSize: 14, lineHeight: 1.5, color: SKETCH_COLORS.ink }}>\n {children}\n </div>\n </SketchBox>\n );\n});\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { Button } from \"./Button\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily, doodleUiFontWeight } from \"../utils\";\n\nexport interface ModalProps extends SketchProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nexport function Modal({\n open,\n defaultOpen,\n onOpenChange,\n trigger,\n title,\n description,\n children,\n className,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n}: ModalProps) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <Dialog.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {trigger ? <Dialog.Trigger asChild>{trigger}</Dialog.Trigger> : null}\n <Dialog.Portal>\n <Dialog.Overlay\n style={{\n position: \"fixed\",\n inset: 0,\n background: \"rgba(31, 29, 26, 0.38)\",\n zIndex: 70,\n }}\n />\n <Dialog.Content\n className={cn(className)}\n style={{\n position: \"fixed\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 80,\n width: \"min(480px, calc(100vw - 32px))\",\n outline: \"none\",\n }}\n >\n <SketchBox\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle ?? \"solid\"}\n fill=\"#f7f6f2\"\n strokeWidth={strokeWidth ?? 2}\n shadow\n contentStyle={{ padding: \"20px 22px 18px\" }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 12,\n marginBottom: title ? 10 : 0,\n }}\n >\n {title ? (\n <Dialog.Title\n style={{\n margin: 0,\n fontSize: 18,\n fontWeight: doodleUiFontWeight(700),\n fontFamily: doodleUiFontFamily,\n color: ink,\n }}\n >\n {title}\n </Dialog.Title>\n ) : (\n <Dialog.Title style={{ position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", clip: \"rect(0 0 0 0)\" }}>\n Dialog\n </Dialog.Title>\n )}\n <Dialog.Close asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n roughness={roughness}\n seed={seed}\n sketchColor={ink}\n aria-label=\"Close\"\n >\n Close\n </Button>\n </Dialog.Close>\n </div>\n {description ? (\n <Dialog.Description\n style={{\n margin: \"0 0 14px\",\n fontSize: 14,\n lineHeight: 1.5,\n color: ink,\n opacity: 0.8,\n }}\n >\n {description}\n </Dialog.Description>\n ) : null}\n <div>{children}</div>\n </SketchBox>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n\nexport const ModalRoot = Dialog.Root;\nexport const ModalTrigger = Dialog.Trigger;\nexport const ModalClose = Dialog.Close;\nexport const ModalTitle = Dialog.Title;\nexport const ModalDescription = Dialog.Description;\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport type DividerOrientation = \"horizontal\" | \"vertical\";\n\nexport interface DividerProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\">,\n SketchProps {\n orientation?: DividerOrientation;\n}\n\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n function Divider(\n {\n className,\n style,\n orientation = \"horizontal\",\n roughness,\n seed,\n sketchColor,\n bowing,\n strokeWidth,\n ...rest\n },\n ref,\n ) {\n const horizontal = orientation === \"horizontal\";\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(className)}\n style={{\n position: \"relative\",\n width: horizontal ? \"100%\" : 12,\n height: horizontal ? 12 : \"100%\",\n minHeight: horizontal ? 12 : 48,\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape={horizontal ? \"line\" : \"line-vertical\"}\n roughness={roughness ?? 1.8}\n seed={seed}\n sketchColor={sketchColor ?? SKETCH_COLORS.ink}\n bowing={bowing ?? 2}\n strokeWidth={strokeWidth ?? 1.5}\n inset={4}\n />\n </div>\n );\n },\n);\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { RoughSvg } from \"../primitives/RoughSvg\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn } from \"../utils\";\n\nexport interface ProgressProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"color\">,\n SketchProps {\n value?: number;\n max?: number;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n function Progress(\n {\n className,\n style,\n value = 0,\n max = 100,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n ...rest\n },\n ref,\n ) {\n const ink = sketchColor ?? SKETCH_COLORS.accent;\n const clamped = Math.min(max, Math.max(0, value));\n const percent = max === 0 ? 0 : (clamped / max) * 100;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={clamped}\n className={cn(className)}\n style={{\n position: \"relative\",\n width: \"100%\",\n height: 18,\n ...style,\n }}\n {...rest}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={roughness}\n seed={seed}\n sketchColor={SKETCH_COLORS.ink}\n bowing={bowing}\n strokeWidth={strokeWidth ?? 1.5}\n inset={2}\n />\n {percent > 0 ? (\n <div\n style={{\n position: \"absolute\",\n left: 5,\n top: 4,\n bottom: 4,\n width: `calc(${percent}% - 10px)`,\n minWidth: percent > 0 ? 8 : 0,\n overflow: \"hidden\",\n }}\n >\n <RoughSvg\n shape=\"rectangle\"\n roughness={(roughness ?? 1.5) + 0.55}\n seed={seed}\n sketchColor={ink}\n fill={ink}\n fillStyle={fillStyle ?? \"hachure\"}\n bowing={bowing}\n strokeWidth={1.1}\n inset={1}\n />\n </div>\n ) : null}\n </div>\n );\n },\n);\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { SketchBox } from \"../primitives/SketchBox\";\nimport { SKETCH_COLORS, type SketchProps } from \"../types\";\nimport { cn, doodleUiFontFamily } from \"../utils\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\n\nexport interface TooltipProps extends SketchProps {\n content: ReactNode;\n children: ReactNode;\n side?: ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>[\"side\"];\n delayDuration?: number;\n className?: string;\n}\n\nexport function Tooltip({\n content,\n children,\n side = \"top\",\n delayDuration = 200,\n className,\n roughness,\n seed,\n sketchColor,\n bowing,\n fillStyle,\n strokeWidth,\n}: TooltipProps) {\n const ink = sketchColor ?? SKETCH_COLORS.ink;\n\n return (\n <TooltipPrimitive.Root delayDuration={delayDuration}>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={8}\n className={cn(className)}\n style={{ zIndex: 60, outline: \"none\" }}\n >\n <SketchBox\n roughness={roughness ?? 1.3}\n seed={seed}\n sketchColor={ink}\n bowing={bowing}\n fillStyle={fillStyle ?? \"solid\"}\n fill=\"#f7f6f2\"\n strokeWidth={strokeWidth ?? 1.4}\n contentStyle={{\n padding: \"6px 10px\",\n fontSize: 13,\n lineHeight: 1.35,\n fontFamily: doodleUiFontFamily,\n color: ink,\n maxWidth: 240,\n }}\n >\n {content}\n </SketchBox>\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n}\n"]}
|