@particle-academy/react-fancy 3.2.2 → 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 +219 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +101 -2
- package/dist/index.d.ts +101 -2
- package/dist/index.js +218 -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,
|
|
@@ -6673,6 +6769,127 @@ var Timeline = Object.assign(TimelineRoot, {
|
|
|
6673
6769
|
Item: TimelineItem,
|
|
6674
6770
|
Block: TimelineBlock
|
|
6675
6771
|
});
|
|
6772
|
+
var TONE_CLASSES = {
|
|
6773
|
+
violet: "bg-violet-500 hover:bg-violet-600",
|
|
6774
|
+
emerald: "bg-emerald-500 hover:bg-emerald-600",
|
|
6775
|
+
sky: "bg-sky-500 hover:bg-sky-600",
|
|
6776
|
+
rose: "bg-rose-500 hover:bg-rose-600",
|
|
6777
|
+
amber: "bg-amber-500 hover:bg-amber-600",
|
|
6778
|
+
indigo: "bg-indigo-500 hover:bg-indigo-600",
|
|
6779
|
+
blue: "bg-blue-500 hover:bg-blue-600",
|
|
6780
|
+
zinc: "bg-zinc-500 hover:bg-zinc-600"
|
|
6781
|
+
};
|
|
6782
|
+
var OFF_CLASSES = "bg-zinc-100 hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700";
|
|
6783
|
+
var TimeGrid = react.forwardRef(
|
|
6784
|
+
({
|
|
6785
|
+
rows,
|
|
6786
|
+
cols,
|
|
6787
|
+
value,
|
|
6788
|
+
onChange,
|
|
6789
|
+
toneOn = "violet",
|
|
6790
|
+
cellWidth = 20,
|
|
6791
|
+
cellHeight = 16,
|
|
6792
|
+
sparseColLabels = true,
|
|
6793
|
+
toggleStripsOnHeaderClick = true,
|
|
6794
|
+
ariaCell,
|
|
6795
|
+
cellId,
|
|
6796
|
+
className
|
|
6797
|
+
}, ref) => {
|
|
6798
|
+
const [drag, setDrag] = react.useState(null);
|
|
6799
|
+
const setCell = (r, c, v) => {
|
|
6800
|
+
if (value[r]?.[c] === v) return;
|
|
6801
|
+
const next = value.map((row) => row.slice());
|
|
6802
|
+
next[r][c] = v;
|
|
6803
|
+
onChange(next);
|
|
6804
|
+
};
|
|
6805
|
+
const toggleRow = (r) => {
|
|
6806
|
+
if (!toggleStripsOnHeaderClick) return;
|
|
6807
|
+
const all = value[r].every(Boolean);
|
|
6808
|
+
const next = value.map((row) => row.slice());
|
|
6809
|
+
for (let c = 0; c < cols.length; c++) next[r][c] = !all;
|
|
6810
|
+
onChange(next);
|
|
6811
|
+
};
|
|
6812
|
+
const toggleCol = (c) => {
|
|
6813
|
+
if (!toggleStripsOnHeaderClick) return;
|
|
6814
|
+
const all = value.every((row) => row[c]);
|
|
6815
|
+
const next = value.map((row) => row.slice());
|
|
6816
|
+
for (let r = 0; r < rows.length; r++) next[r][c] = !all;
|
|
6817
|
+
onChange(next);
|
|
6818
|
+
};
|
|
6819
|
+
const colStep = Math.max(1, Math.floor(cols.length / 6));
|
|
6820
|
+
const onTone = TONE_CLASSES[toneOn];
|
|
6821
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6822
|
+
"div",
|
|
6823
|
+
{
|
|
6824
|
+
ref,
|
|
6825
|
+
"data-react-fancy-timegrid": "",
|
|
6826
|
+
className: cn(
|
|
6827
|
+
"select-none overflow-x-auto",
|
|
6828
|
+
className
|
|
6829
|
+
),
|
|
6830
|
+
onMouseLeave: () => setDrag(null),
|
|
6831
|
+
onMouseUp: () => setDrag(null),
|
|
6832
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "text-[10px]", children: [
|
|
6833
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
6834
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", {}),
|
|
6835
|
+
cols.map((label, c) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6836
|
+
"th",
|
|
6837
|
+
{
|
|
6838
|
+
onClick: () => toggleCol(c),
|
|
6839
|
+
style: { width: cellWidth },
|
|
6840
|
+
"data-react-fancy-timegrid-col": c,
|
|
6841
|
+
className: cn(
|
|
6842
|
+
"text-zinc-400",
|
|
6843
|
+
toggleStripsOnHeaderClick && "cursor-pointer hover:text-zinc-700 dark:hover:text-zinc-200"
|
|
6844
|
+
),
|
|
6845
|
+
children: sparseColLabels ? c % colStep === 0 ? label : "" : label
|
|
6846
|
+
},
|
|
6847
|
+
c
|
|
6848
|
+
))
|
|
6849
|
+
] }) }),
|
|
6850
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((label, r) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
6851
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6852
|
+
"th",
|
|
6853
|
+
{
|
|
6854
|
+
onClick: () => toggleRow(r),
|
|
6855
|
+
"data-react-fancy-timegrid-row": r,
|
|
6856
|
+
className: cn(
|
|
6857
|
+
"pr-1 text-right font-medium text-zinc-500",
|
|
6858
|
+
toggleStripsOnHeaderClick && "cursor-pointer hover:text-zinc-800 dark:hover:text-zinc-200"
|
|
6859
|
+
),
|
|
6860
|
+
children: label
|
|
6861
|
+
}
|
|
6862
|
+
),
|
|
6863
|
+
cols.map((_, c) => {
|
|
6864
|
+
const on = value[r]?.[c] ?? false;
|
|
6865
|
+
return /* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-px", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6866
|
+
"button",
|
|
6867
|
+
{
|
|
6868
|
+
type: "button",
|
|
6869
|
+
onMouseDown: () => {
|
|
6870
|
+
const v = !on;
|
|
6871
|
+
setDrag(v);
|
|
6872
|
+
setCell(r, c, v);
|
|
6873
|
+
},
|
|
6874
|
+
onMouseEnter: () => drag !== null && setCell(r, c, drag),
|
|
6875
|
+
style: { width: cellWidth, height: cellHeight },
|
|
6876
|
+
"data-react-fancy-timegrid-cell": cellId ? cellId(r, c) : `${r}:${c}`,
|
|
6877
|
+
"aria-pressed": on,
|
|
6878
|
+
"aria-label": ariaCell ? ariaCell(r, c, on) : `${rows[r]} ${cols[c]} ${on ? "on" : "off"}`,
|
|
6879
|
+
className: cn(
|
|
6880
|
+
"block rounded-sm transition",
|
|
6881
|
+
on ? onTone : OFF_CLASSES
|
|
6882
|
+
)
|
|
6883
|
+
}
|
|
6884
|
+
) }, c);
|
|
6885
|
+
})
|
|
6886
|
+
] }, r)) })
|
|
6887
|
+
] })
|
|
6888
|
+
}
|
|
6889
|
+
);
|
|
6890
|
+
}
|
|
6891
|
+
);
|
|
6892
|
+
TimeGrid.displayName = "TimeGrid";
|
|
6676
6893
|
var Tooltip = react.forwardRef(
|
|
6677
6894
|
function Tooltip2({ children, content, placement = "top", delay = 200, offset = 8, className }, _ref) {
|
|
6678
6895
|
const [open, setOpen] = react.useState(false);
|
|
@@ -13174,11 +13391,13 @@ exports.Separator = Separator;
|
|
|
13174
13391
|
exports.Sidebar = Sidebar;
|
|
13175
13392
|
exports.Skeleton = Skeleton;
|
|
13176
13393
|
exports.Slider = Slider;
|
|
13394
|
+
exports.StickyNote = StickyNote;
|
|
13177
13395
|
exports.Switch = Switch;
|
|
13178
13396
|
exports.Table = Table;
|
|
13179
13397
|
exports.Tabs = Tabs;
|
|
13180
13398
|
exports.Text = Text;
|
|
13181
13399
|
exports.Textarea = Textarea;
|
|
13400
|
+
exports.TimeGrid = TimeGrid;
|
|
13182
13401
|
exports.TimePicker = TimePicker;
|
|
13183
13402
|
exports.Timeline = Timeline;
|
|
13184
13403
|
exports.Toast = Toast;
|