@particle-academy/react-fancy 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +97 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +51 -2
- package/dist/index.d.ts +51 -2
- package/dist/index.js +97 -1
- package/dist/index.js.map +1 -1
- package/docs/StickyNote.md +59 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -6408,6 +6408,102 @@ var Callout = react.forwardRef(
|
|
|
6408
6408
|
}
|
|
6409
6409
|
);
|
|
6410
6410
|
Callout.displayName = "Callout";
|
|
6411
|
+
var colorClasses5 = {
|
|
6412
|
+
yellow: "bg-amber-100 text-amber-950 dark:bg-amber-200 dark:text-amber-950",
|
|
6413
|
+
blue: "bg-sky-100 text-sky-950 dark:bg-sky-200 dark:text-sky-950",
|
|
6414
|
+
green: "bg-emerald-100 text-emerald-950 dark:bg-emerald-200 dark:text-emerald-950",
|
|
6415
|
+
pink: "bg-pink-100 text-pink-950 dark:bg-pink-200 dark:text-pink-950",
|
|
6416
|
+
violet: "bg-violet-100 text-violet-950 dark:bg-violet-200 dark:text-violet-950"
|
|
6417
|
+
};
|
|
6418
|
+
var isPreset = (c) => c in colorClasses5;
|
|
6419
|
+
var StickyNote = react.forwardRef(
|
|
6420
|
+
({
|
|
6421
|
+
value,
|
|
6422
|
+
defaultValue,
|
|
6423
|
+
onChange,
|
|
6424
|
+
color = "yellow",
|
|
6425
|
+
rotate = 0,
|
|
6426
|
+
width = 180,
|
|
6427
|
+
height = "auto",
|
|
6428
|
+
selected = false,
|
|
6429
|
+
editable = true,
|
|
6430
|
+
autoFocus = false,
|
|
6431
|
+
id,
|
|
6432
|
+
children,
|
|
6433
|
+
className,
|
|
6434
|
+
style
|
|
6435
|
+
}, ref) => {
|
|
6436
|
+
const isControlled = value !== void 0;
|
|
6437
|
+
const [internal, setInternal] = react.useState(defaultValue ?? "");
|
|
6438
|
+
const text = isControlled ? value : internal;
|
|
6439
|
+
const editRef = react.useRef(null);
|
|
6440
|
+
react.useEffect(() => {
|
|
6441
|
+
const el = editRef.current;
|
|
6442
|
+
if (el && document.activeElement !== el && el.textContent !== text) {
|
|
6443
|
+
el.textContent = text ?? "";
|
|
6444
|
+
}
|
|
6445
|
+
}, [text]);
|
|
6446
|
+
react.useEffect(() => {
|
|
6447
|
+
if (!editable || !autoFocus) return;
|
|
6448
|
+
const el = editRef.current;
|
|
6449
|
+
if (!el) return;
|
|
6450
|
+
el.focus();
|
|
6451
|
+
const range2 = document.createRange();
|
|
6452
|
+
range2.selectNodeContents(el);
|
|
6453
|
+
range2.collapse(false);
|
|
6454
|
+
const sel = window.getSelection();
|
|
6455
|
+
sel?.removeAllRanges();
|
|
6456
|
+
sel?.addRange(range2);
|
|
6457
|
+
}, [editable, autoFocus]);
|
|
6458
|
+
const commit = () => {
|
|
6459
|
+
const next = editRef.current?.textContent ?? "";
|
|
6460
|
+
if (next === text) return;
|
|
6461
|
+
if (!isControlled) setInternal(next);
|
|
6462
|
+
onChange?.(next);
|
|
6463
|
+
};
|
|
6464
|
+
const preset = isPreset(color);
|
|
6465
|
+
const content = children != null ? children : editable ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6466
|
+
"div",
|
|
6467
|
+
{
|
|
6468
|
+
ref: editRef,
|
|
6469
|
+
contentEditable: true,
|
|
6470
|
+
suppressContentEditableWarning: true,
|
|
6471
|
+
spellCheck: false,
|
|
6472
|
+
role: "textbox",
|
|
6473
|
+
"aria-multiline": "true",
|
|
6474
|
+
className: "outline-none whitespace-pre-wrap break-words min-h-[1.4em]",
|
|
6475
|
+
onBlur: commit,
|
|
6476
|
+
onKeyDown: (e) => {
|
|
6477
|
+
if (e.key === "Escape") e.currentTarget.blur();
|
|
6478
|
+
},
|
|
6479
|
+
children: text
|
|
6480
|
+
}
|
|
6481
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "whitespace-pre-wrap break-words", children: text });
|
|
6482
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6483
|
+
"div",
|
|
6484
|
+
{
|
|
6485
|
+
ref,
|
|
6486
|
+
id,
|
|
6487
|
+
"data-react-fancy-sticky": "",
|
|
6488
|
+
className: cn(
|
|
6489
|
+
"rounded-sm p-3.5 text-sm leading-relaxed shadow-[0_2px_8px_rgba(0,0,0,0.12),0_1px_2px_rgba(0,0,0,0.08)]",
|
|
6490
|
+
preset ? colorClasses5[color] : "text-zinc-900",
|
|
6491
|
+
selected && "ring-2 ring-blue-500 ring-offset-1",
|
|
6492
|
+
className
|
|
6493
|
+
),
|
|
6494
|
+
style: {
|
|
6495
|
+
width,
|
|
6496
|
+
height,
|
|
6497
|
+
transform: rotate ? `rotate(${rotate}deg)` : void 0,
|
|
6498
|
+
...preset ? null : { background: color },
|
|
6499
|
+
...style
|
|
6500
|
+
},
|
|
6501
|
+
children: content
|
|
6502
|
+
}
|
|
6503
|
+
);
|
|
6504
|
+
}
|
|
6505
|
+
);
|
|
6506
|
+
StickyNote.displayName = "StickyNote";
|
|
6411
6507
|
var TimelineContext = react.createContext({
|
|
6412
6508
|
variant: "stacked",
|
|
6413
6509
|
index: 0,
|
|
@@ -13295,6 +13391,7 @@ exports.Separator = Separator;
|
|
|
13295
13391
|
exports.Sidebar = Sidebar;
|
|
13296
13392
|
exports.Skeleton = Skeleton;
|
|
13297
13393
|
exports.Slider = Slider;
|
|
13394
|
+
exports.StickyNote = StickyNote;
|
|
13298
13395
|
exports.Switch = Switch;
|
|
13299
13396
|
exports.Table = Table;
|
|
13300
13397
|
exports.Tabs = Tabs;
|