@particle-academy/react-fancy 6.9.0 → 6.10.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/CHANGELOG.md +10 -0
- package/README.md +1 -0
- package/dist/autocomplete.cjs +3 -3
- package/dist/autocomplete.js +2 -2
- package/dist/{chunk-ZUJVGHFW.js → chunk-24RWB7Q3.js} +3 -3
- package/dist/{chunk-ZUJVGHFW.js.map → chunk-24RWB7Q3.js.map} +1 -1
- package/dist/{chunk-GODJVIIO.js → chunk-3W6BKQVZ.js} +4 -4
- package/dist/{chunk-GODJVIIO.js.map → chunk-3W6BKQVZ.js.map} +1 -1
- package/dist/{chunk-AZ5DWOQY.cjs → chunk-6B43ARGW.cjs} +4 -4
- package/dist/{chunk-AZ5DWOQY.cjs.map → chunk-6B43ARGW.cjs.map} +1 -1
- package/dist/{chunk-Q62RDKRA.cjs → chunk-7N7XVBH7.cjs} +6 -6
- package/dist/{chunk-Q62RDKRA.cjs.map → chunk-7N7XVBH7.cjs.map} +1 -1
- package/dist/{chunk-VGUAIFGE.js → chunk-C2VGO375.js} +3 -3
- package/dist/{chunk-VGUAIFGE.js.map → chunk-C2VGO375.js.map} +1 -1
- package/dist/{chunk-H7OTLGRD.cjs → chunk-DQWAG7YY.cjs} +4 -4
- package/dist/{chunk-H7OTLGRD.cjs.map → chunk-DQWAG7YY.cjs.map} +1 -1
- package/dist/{chunk-3KJN3GTB.cjs → chunk-EDIB6V6Y.cjs} +4 -4
- package/dist/{chunk-3KJN3GTB.cjs.map → chunk-EDIB6V6Y.cjs.map} +1 -1
- package/dist/{chunk-G5MDMQVQ.cjs → chunk-EEFU5BVM.cjs} +6 -6
- package/dist/{chunk-G5MDMQVQ.cjs.map → chunk-EEFU5BVM.cjs.map} +1 -1
- package/dist/{chunk-IYG436ZY.js → chunk-EW2N52FD.js} +3 -3
- package/dist/{chunk-IYG436ZY.js.map → chunk-EW2N52FD.js.map} +1 -1
- package/dist/{chunk-RSB2P3JK.js → chunk-FECD3WKN.js} +3 -3
- package/dist/{chunk-RSB2P3JK.js.map → chunk-FECD3WKN.js.map} +1 -1
- package/dist/{chunk-6RXEWM3V.js → chunk-FNHKZMMI.js} +3 -3
- package/dist/{chunk-6RXEWM3V.js.map → chunk-FNHKZMMI.js.map} +1 -1
- package/dist/{chunk-M5ER3Y5I.cjs → chunk-FR3V5IAJ.cjs} +4 -4
- package/dist/{chunk-M5ER3Y5I.cjs.map → chunk-FR3V5IAJ.cjs.map} +1 -1
- package/dist/{chunk-DXLPBLNC.cjs → chunk-FSLEFL4U.cjs} +4 -4
- package/dist/{chunk-DXLPBLNC.cjs.map → chunk-FSLEFL4U.cjs.map} +1 -1
- package/dist/{chunk-FQCLJZZS.js → chunk-FX37P4KR.js} +3 -3
- package/dist/{chunk-FQCLJZZS.js.map → chunk-FX37P4KR.js.map} +1 -1
- package/dist/{chunk-DW2PHLOA.js → chunk-H5LJFN7D.js} +3 -3
- package/dist/{chunk-DW2PHLOA.js.map → chunk-H5LJFN7D.js.map} +1 -1
- package/dist/{chunk-F3U4AVGF.js → chunk-HCIEXBEB.js} +3 -3
- package/dist/{chunk-F3U4AVGF.js.map → chunk-HCIEXBEB.js.map} +1 -1
- package/dist/{chunk-QAM6N3VG.cjs → chunk-HEGM5LMZ.cjs} +4 -4
- package/dist/{chunk-QAM6N3VG.cjs.map → chunk-HEGM5LMZ.cjs.map} +1 -1
- package/dist/{chunk-KAKKZDCE.js → chunk-J57JSHDC.js} +3 -3
- package/dist/{chunk-KAKKZDCE.js.map → chunk-J57JSHDC.js.map} +1 -1
- package/dist/{chunk-6BCXGP2T.js → chunk-JN5DHZ6I.js} +3 -3
- package/dist/{chunk-6BCXGP2T.js.map → chunk-JN5DHZ6I.js.map} +1 -1
- package/dist/chunk-LJCQI6ZS.js +1212 -0
- package/dist/chunk-LJCQI6ZS.js.map +1 -0
- package/dist/{chunk-JV2HEOCB.cjs → chunk-MAY4NMRI.cjs} +4 -4
- package/dist/{chunk-JV2HEOCB.cjs.map → chunk-MAY4NMRI.cjs.map} +1 -1
- package/dist/{chunk-BQENLOEV.js → chunk-MD7HUHJB.js} +4 -4
- package/dist/{chunk-BQENLOEV.js.map → chunk-MD7HUHJB.js.map} +1 -1
- package/dist/{chunk-QUZOGRZS.js → chunk-OE4AIUAN.js} +3 -3
- package/dist/{chunk-QUZOGRZS.js.map → chunk-OE4AIUAN.js.map} +1 -1
- package/dist/chunk-OP7A4SZZ.cjs +1216 -0
- package/dist/chunk-OP7A4SZZ.cjs.map +1 -0
- package/dist/{chunk-YBBBX5H2.cjs → chunk-OUPHLIXV.cjs} +11 -11
- package/dist/{chunk-YBBBX5H2.cjs.map → chunk-OUPHLIXV.cjs.map} +1 -1
- package/dist/{chunk-XGGAAG74.cjs → chunk-QQKWI7QP.cjs} +7 -3
- package/dist/chunk-QQKWI7QP.cjs.map +1 -0
- package/dist/{chunk-XT4WBBCD.cjs → chunk-R4SANV3G.cjs} +11 -11
- package/dist/{chunk-XT4WBBCD.cjs.map → chunk-R4SANV3G.cjs.map} +1 -1
- package/dist/{chunk-GJWNZMJT.js → chunk-RUEDMYBF.js} +7 -3
- package/dist/chunk-RUEDMYBF.js.map +1 -0
- package/dist/{chunk-UORN3Z7R.cjs → chunk-TBLKVTJC.cjs} +6 -6
- package/dist/{chunk-UORN3Z7R.cjs.map → chunk-TBLKVTJC.cjs.map} +1 -1
- package/dist/{chunk-L5NDZEL6.cjs → chunk-ZFXCZ2QO.cjs} +9 -9
- package/dist/{chunk-L5NDZEL6.cjs.map → chunk-ZFXCZ2QO.cjs.map} +1 -1
- package/dist/composer.cjs +6 -6
- package/dist/composer.js +4 -4
- package/dist/dropdown.cjs +4 -4
- package/dist/dropdown.js +2 -2
- package/dist/editor.cjs +1 -1
- package/dist/editor.js +1 -1
- package/dist/index.cjs +99 -86
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +22 -21
- package/dist/index.js.map +1 -1
- package/dist/input.cjs +5 -5
- package/dist/input.js +4 -4
- package/dist/inputs.cjs +19 -19
- package/dist/inputs.js +8 -8
- package/dist/json-editor.cjs +17 -17
- package/dist/json-editor.js +6 -6
- package/dist/mobile-menu.cjs +1 -1
- package/dist/mobile-menu.js +1 -1
- package/dist/number-field.cjs +6 -6
- package/dist/number-field.js +5 -5
- package/dist/paste-pills.cjs +16 -16
- package/dist/paste-pills.js +3 -3
- package/dist/phone-input.cjs +39 -0
- package/dist/phone-input.cjs.map +1 -0
- package/dist/phone-input.d.cts +139 -0
- package/dist/phone-input.d.ts +139 -0
- package/dist/phone-input.js +22 -0
- package/dist/phone-input.js.map +1 -0
- package/dist/popover.cjs +4 -4
- package/dist/popover.js +2 -2
- package/dist/prompt-input.cjs +8 -8
- package/dist/prompt-input.js +5 -5
- package/dist/reason-tag.cjs +4 -4
- package/dist/reason-tag.js +3 -3
- package/dist/select.cjs +3 -3
- package/dist/select.js +2 -2
- package/dist/sidebar.cjs +5 -5
- package/dist/sidebar.js +3 -3
- package/dist/tooltip.cjs +3 -3
- package/dist/tooltip.js +2 -2
- package/docs/PhoneInput.md +104 -0
- package/package.json +11 -1
- package/dist/chunk-GJWNZMJT.js.map +0 -1
- package/dist/chunk-XGGAAG74.cjs.map +0 -1
|
@@ -63,7 +63,11 @@ function useFloatingPosition(anchorRef, floatingRef, options = {}) {
|
|
|
63
63
|
const floating = floatingRef.current;
|
|
64
64
|
if (!anchor || !floating) return;
|
|
65
65
|
const anchorRect = anchor.getBoundingClientRect();
|
|
66
|
-
const
|
|
66
|
+
const box = floating.getBoundingClientRect();
|
|
67
|
+
const floatingRect = {
|
|
68
|
+
width: floating.offsetWidth || box.width,
|
|
69
|
+
height: floating.offsetHeight || box.height
|
|
70
|
+
};
|
|
67
71
|
const next = getPosition(anchorRect, floatingRect, placement, offset, chunk36IC3NDN_cjs.directionOf(anchor));
|
|
68
72
|
setPosition(
|
|
69
73
|
(prev) => prev.x === next.x && prev.y === next.y && prev.placement === next.placement && prev.dir === next.dir ? prev : next
|
|
@@ -114,5 +118,5 @@ function useFloatingPosition(anchorRef, floatingRef, options = {}) {
|
|
|
114
118
|
}
|
|
115
119
|
|
|
116
120
|
exports.useFloatingPosition = useFloatingPosition;
|
|
117
|
-
//# sourceMappingURL=chunk-
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
121
|
+
//# sourceMappingURL=chunk-QQKWI7QP.cjs.map
|
|
122
|
+
//# sourceMappingURL=chunk-QQKWI7QP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-floating-position.ts"],"names":["useState","useCallback","directionOf","useEffect"],"mappings":"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","file":"chunk-QQKWI7QP.cjs","sourcesContent":["import { useCallback, useEffect, useState, type RefObject } from \"react\";\nimport type { Placement } from \"../utils/types\";\nimport { directionOf, type Direction } from \"../utils/direction\";\n\ninterface FloatingPosition {\n x: number;\n y: number;\n placement: Placement;\n /**\n * The anchor's writing direction. Put it on the floating element as `dir`:\n * a floating element is portalled to `<body>`, so without it a `dir` set on\n * a wrapper (rather than on `<html>`) would not reach the popup.\n */\n dir: Direction;\n}\n\ninterface UseFloatingPositionOptions {\n placement?: Placement;\n offset?: number;\n enabled?: boolean;\n}\n\nfunction getPosition(\n anchor: DOMRect,\n floating: DOMRect,\n placement: Placement,\n offset: number,\n dir: Direction = \"ltr\",\n): FloatingPosition {\n let x = 0;\n let y = 0;\n const base = placement.split(\"-\")[0] as \"top\" | \"bottom\" | \"left\" | \"right\";\n const align = placement.split(\"-\")[1] as \"start\" | \"end\" | undefined;\n\n switch (base) {\n case \"top\":\n x = anchor.left + anchor.width / 2 - floating.width / 2;\n y = anchor.top - floating.height - offset;\n break;\n case \"bottom\":\n x = anchor.left + anchor.width / 2 - floating.width / 2;\n y = anchor.bottom + offset;\n break;\n case \"left\":\n x = anchor.left - floating.width - offset;\n y = anchor.top + anchor.height / 2 - floating.height / 2;\n break;\n case \"right\":\n x = anchor.right + offset;\n y = anchor.top + anchor.height / 2 - floating.height / 2;\n break;\n }\n\n // `start` / `end` are LOGICAL: `bottom-start` lines the popup up with the\n // anchor's inline-start edge, which is its RIGHT edge in RTL. The base side\n // (`left` / `right`) stays physical, as the names say.\n if (base === \"top\" || base === \"bottom\") {\n const startEdge = dir === \"rtl\" ? anchor.right - floating.width : anchor.left;\n const endEdge = dir === \"rtl\" ? anchor.left : anchor.right - floating.width;\n if (align === \"start\") x = startEdge;\n else if (align === \"end\") x = endEdge;\n }\n\n if (base === \"left\" || base === \"right\") {\n if (align === \"start\") y = anchor.top;\n else if (align === \"end\") y = anchor.bottom - floating.height;\n }\n\n // Viewport clamping\n let finalPlacement = placement;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n if (base === \"bottom\" && y + floating.height > vh) {\n y = anchor.top - floating.height - offset;\n finalPlacement = placement.replace(\"bottom\", \"top\") as Placement;\n } else if (base === \"top\" && y < 0) {\n y = anchor.bottom + offset;\n finalPlacement = placement.replace(\"top\", \"bottom\") as Placement;\n }\n\n x = Math.max(4, Math.min(x, vw - floating.width - 4));\n y = Math.max(4, Math.min(y, vh - floating.height - 4));\n\n return { x, y, placement: finalPlacement, dir };\n}\n\nexport function useFloatingPosition(\n anchorRef: RefObject<HTMLElement | null>,\n floatingRef: RefObject<HTMLElement | null>,\n options: UseFloatingPositionOptions = {},\n): FloatingPosition {\n const { placement = \"bottom\", offset = 8, enabled = true } = options;\n const [position, setPosition] = useState<FloatingPosition>({\n x: -9999,\n y: -9999,\n placement,\n dir: \"ltr\",\n });\n\n const update = useCallback(() => {\n const anchor = anchorRef.current;\n const floating = floatingRef.current;\n if (!anchor || !floating) return;\n\n const anchorRect = anchor.getBoundingClientRect();\n // The popup's SIZE comes from layout, not from its transformed box: popups\n // open with `fancy-scale-in` (scale 0.95 to 1) and are measured during it, so\n // the box is 5% small, and nothing re-measures when the animation ends. That\n // left an RTL `bottom-start` (and an LTR `bottom-end`) popup off the anchor's\n // edge for good. Layout size is 0 where nothing lays out (jsdom), so the box\n // is the fallback.\n const box = floating.getBoundingClientRect();\n const floatingRect = {\n width: floating.offsetWidth || box.width,\n height: floating.offsetHeight || box.height,\n } as DOMRect;\n const next = getPosition(anchorRect, floatingRect, placement, offset, directionOf(anchor));\n // Bail out when nothing changed so this can run after every commit\n // (below) without causing an infinite render loop.\n setPosition((prev) =>\n prev.x === next.x && prev.y === next.y && prev.placement === next.placement && prev.dir === next.dir\n ? prev\n : next,\n );\n }, [anchorRef, floatingRef, placement, offset]);\n\n // Re-measure after every commit while open.\n //\n // The floating element mounts a frame or two AFTER `enabled` flips — its\n // render is gated behind a state flip (e.g. useAnimation's `mounted`), so at\n // the moment `enabled` turns true the floating ref is still null and a single\n // measurement no-ops, leaving the popover parked at its off-screen sentinel.\n //\n // A passive effect with no deps runs after *every* commit — including the one\n // that finally mounts the floating element — and, crucially, keeps running in\n // hidden/background tabs where `requestAnimationFrame` is paused. The bail-out\n // in `update` makes the steady-state calls free, so this both fixes the\n // late-mount race and survives tab-visibility throttling.\n useEffect(() => {\n if (enabled) update();\n });\n\n // …but the per-commit effect ISN'T enough when the floating element mounts\n // through a <Portal> whose own mount gate (SSR-safe; renders nothing until its\n // useEffect runs) attaches the node WITHOUT re-rendering this hook's component.\n // Then no commit happens here, the measurement never runs, and the popover\n // stays parked at its off-screen sentinel until an unrelated scroll/resize\n // fires `update()` — the \"menu only appears after I scroll\" bug. Poll with rAF\n // until the node is actually in the DOM, measure it, then keep it observed for\n // size changes (async content / lazily-loaded icons).\n useEffect(() => {\n if (!enabled) return;\n let raf = 0;\n let ro: ResizeObserver | null = null;\n const tick = () => {\n const el = floatingRef.current;\n if (el) {\n update();\n if (typeof ResizeObserver !== \"undefined\") {\n ro = new ResizeObserver(() => update());\n ro.observe(el);\n }\n } else {\n raf = requestAnimationFrame(tick);\n }\n };\n raf = requestAnimationFrame(tick);\n return () => {\n cancelAnimationFrame(raf);\n ro?.disconnect();\n };\n }, [enabled, update, floatingRef]);\n\n // Park off-screen when closed so the next open re-measures from scratch.\n useEffect(() => {\n if (!enabled) {\n setPosition((prev) =>\n prev.x === -9999 ? prev : { x: -9999, y: -9999, placement, dir: prev.dir },\n );\n }\n }, [enabled, placement]);\n\n // Reposition on scroll/resize while open.\n useEffect(() => {\n if (!enabled) return;\n\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n };\n }, [update, enabled]);\n\n return position;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk6B43ARGW_cjs = require('./chunk-6B43ARGW.cjs');
|
|
4
4
|
var chunkJKD6CFIP_cjs = require('./chunk-JKD6CFIP.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkTBLKVTJC_cjs = require('./chunk-TBLKVTJC.cjs');
|
|
6
6
|
var chunk2C64OVOZ_cjs = require('./chunk-2C64OVOZ.cjs');
|
|
7
7
|
var chunk6V44RRSB_cjs = require('./chunk-6V44RRSB.cjs');
|
|
8
8
|
var chunkXEI5JG7C_cjs = require('./chunk-XEI5JG7C.cjs');
|
|
@@ -46,12 +46,12 @@ function readPromptDraft(raw, inline) {
|
|
|
46
46
|
let text = typeof d.text === "string" ? d.text : "";
|
|
47
47
|
let pills = (Array.isArray(d.pills) ? d.pills : []).map(readPill).filter((p) => p !== null);
|
|
48
48
|
let attachments = (Array.isArray(d.attachments) ? d.attachments : []).map((a) => readFile(a)).filter((a) => a !== null);
|
|
49
|
-
const marked = new Set(
|
|
49
|
+
const marked = new Set(chunkTBLKVTJC_cjs.markedIds(text));
|
|
50
50
|
pills = pills.filter((p) => marked.has(p.id));
|
|
51
51
|
if (!inline && pills.length > 0) {
|
|
52
52
|
const texts = pills.flatMap((p) => p.kind === "text" ? [{ id: p.id, text: p.text }] : []);
|
|
53
53
|
const images = pills.flatMap((p) => p.kind === "image" ? [p] : []);
|
|
54
|
-
text =
|
|
54
|
+
text = chunkTBLKVTJC_cjs.expandMarkers(
|
|
55
55
|
text,
|
|
56
56
|
texts,
|
|
57
57
|
images.map((p) => ({ id: p.id, label: p.label }))
|
|
@@ -324,7 +324,7 @@ var PromptInput = react.forwardRef(function PromptInput2({
|
|
|
324
324
|
[commit, persist]
|
|
325
325
|
);
|
|
326
326
|
const editorRef = react.useRef(null);
|
|
327
|
-
const paste =
|
|
327
|
+
const paste = chunkTBLKVTJC_cjs.useInlinePaste({
|
|
328
328
|
pasteThreshold,
|
|
329
329
|
pasteImages,
|
|
330
330
|
previewChars,
|
|
@@ -660,7 +660,7 @@ var PromptInput = react.forwardRef(function PromptInput2({
|
|
|
660
660
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
661
661
|
inline ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
662
662
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
663
|
-
|
|
663
|
+
chunkTBLKVTJC_cjs.InlinePasteEditor,
|
|
664
664
|
{
|
|
665
665
|
ref: editorRef,
|
|
666
666
|
value: text,
|
|
@@ -688,7 +688,7 @@ var PromptInput = react.forwardRef(function PromptInput2({
|
|
|
688
688
|
paste.portals,
|
|
689
689
|
name && /* @__PURE__ */ jsxRuntime.jsx("input", { type: "hidden", name, value: paste.expand(text) }),
|
|
690
690
|
pasteImages && pasteFilesName && /* @__PURE__ */ jsxRuntime.jsx(
|
|
691
|
-
|
|
691
|
+
chunkTBLKVTJC_cjs.PastedFilesInput,
|
|
692
692
|
{
|
|
693
693
|
name: pasteFilesName,
|
|
694
694
|
files: paste.imagesIn(text).flatMap((i) => filesRef.current.has(i.id) ? [i.file] : [])
|
|
@@ -800,7 +800,7 @@ var PromptInput = react.forwardRef(function PromptInput2({
|
|
|
800
800
|
)
|
|
801
801
|
] }),
|
|
802
802
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 border-t border-zinc-200 bg-zinc-50/60 px-3 py-2 dark:border-zinc-800 dark:bg-zinc-900/40", children: [
|
|
803
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
803
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6B43ARGW_cjs.Tooltip, { content: attachButton === "icon" ? "Attach files \u2014 or drop them here" : "Drop files here, or click", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
804
804
|
chunkXEI5JG7C_cjs.Button,
|
|
805
805
|
{
|
|
806
806
|
variant: "ghost",
|
|
@@ -867,7 +867,7 @@ var PromptInput = react.forwardRef(function PromptInput2({
|
|
|
867
867
|
]
|
|
868
868
|
}
|
|
869
869
|
),
|
|
870
|
-
sendButton === "icon" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
870
|
+
sendButton === "icon" ? /* @__PURE__ */ jsxRuntime.jsx(chunk6B43ARGW_cjs.Tooltip, { content: `Send \xB7 ${modKey}+Enter`, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
871
871
|
chunkXEI5JG7C_cjs.Button,
|
|
872
872
|
{
|
|
873
873
|
color: "violet",
|
|
@@ -944,5 +944,5 @@ exports.detectPlatform = detectPlatform;
|
|
|
944
944
|
exports.modifierKeyLabel = modifierKeyLabel;
|
|
945
945
|
exports.promptDataUrlToFile = promptDataUrlToFile;
|
|
946
946
|
exports.promptFileToDataUrl = promptFileToDataUrl;
|
|
947
|
-
//# sourceMappingURL=chunk-
|
|
948
|
-
//# sourceMappingURL=chunk-
|
|
947
|
+
//# sourceMappingURL=chunk-R4SANV3G.cjs.map
|
|
948
|
+
//# sourceMappingURL=chunk-R4SANV3G.cjs.map
|