@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.
Files changed (110) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +1 -0
  3. package/dist/autocomplete.cjs +3 -3
  4. package/dist/autocomplete.js +2 -2
  5. package/dist/{chunk-ZUJVGHFW.js → chunk-24RWB7Q3.js} +3 -3
  6. package/dist/{chunk-ZUJVGHFW.js.map → chunk-24RWB7Q3.js.map} +1 -1
  7. package/dist/{chunk-GODJVIIO.js → chunk-3W6BKQVZ.js} +4 -4
  8. package/dist/{chunk-GODJVIIO.js.map → chunk-3W6BKQVZ.js.map} +1 -1
  9. package/dist/{chunk-AZ5DWOQY.cjs → chunk-6B43ARGW.cjs} +4 -4
  10. package/dist/{chunk-AZ5DWOQY.cjs.map → chunk-6B43ARGW.cjs.map} +1 -1
  11. package/dist/{chunk-Q62RDKRA.cjs → chunk-7N7XVBH7.cjs} +6 -6
  12. package/dist/{chunk-Q62RDKRA.cjs.map → chunk-7N7XVBH7.cjs.map} +1 -1
  13. package/dist/{chunk-VGUAIFGE.js → chunk-C2VGO375.js} +3 -3
  14. package/dist/{chunk-VGUAIFGE.js.map → chunk-C2VGO375.js.map} +1 -1
  15. package/dist/{chunk-H7OTLGRD.cjs → chunk-DQWAG7YY.cjs} +4 -4
  16. package/dist/{chunk-H7OTLGRD.cjs.map → chunk-DQWAG7YY.cjs.map} +1 -1
  17. package/dist/{chunk-3KJN3GTB.cjs → chunk-EDIB6V6Y.cjs} +4 -4
  18. package/dist/{chunk-3KJN3GTB.cjs.map → chunk-EDIB6V6Y.cjs.map} +1 -1
  19. package/dist/{chunk-G5MDMQVQ.cjs → chunk-EEFU5BVM.cjs} +6 -6
  20. package/dist/{chunk-G5MDMQVQ.cjs.map → chunk-EEFU5BVM.cjs.map} +1 -1
  21. package/dist/{chunk-IYG436ZY.js → chunk-EW2N52FD.js} +3 -3
  22. package/dist/{chunk-IYG436ZY.js.map → chunk-EW2N52FD.js.map} +1 -1
  23. package/dist/{chunk-RSB2P3JK.js → chunk-FECD3WKN.js} +3 -3
  24. package/dist/{chunk-RSB2P3JK.js.map → chunk-FECD3WKN.js.map} +1 -1
  25. package/dist/{chunk-6RXEWM3V.js → chunk-FNHKZMMI.js} +3 -3
  26. package/dist/{chunk-6RXEWM3V.js.map → chunk-FNHKZMMI.js.map} +1 -1
  27. package/dist/{chunk-M5ER3Y5I.cjs → chunk-FR3V5IAJ.cjs} +4 -4
  28. package/dist/{chunk-M5ER3Y5I.cjs.map → chunk-FR3V5IAJ.cjs.map} +1 -1
  29. package/dist/{chunk-DXLPBLNC.cjs → chunk-FSLEFL4U.cjs} +4 -4
  30. package/dist/{chunk-DXLPBLNC.cjs.map → chunk-FSLEFL4U.cjs.map} +1 -1
  31. package/dist/{chunk-FQCLJZZS.js → chunk-FX37P4KR.js} +3 -3
  32. package/dist/{chunk-FQCLJZZS.js.map → chunk-FX37P4KR.js.map} +1 -1
  33. package/dist/{chunk-DW2PHLOA.js → chunk-H5LJFN7D.js} +3 -3
  34. package/dist/{chunk-DW2PHLOA.js.map → chunk-H5LJFN7D.js.map} +1 -1
  35. package/dist/{chunk-F3U4AVGF.js → chunk-HCIEXBEB.js} +3 -3
  36. package/dist/{chunk-F3U4AVGF.js.map → chunk-HCIEXBEB.js.map} +1 -1
  37. package/dist/{chunk-QAM6N3VG.cjs → chunk-HEGM5LMZ.cjs} +4 -4
  38. package/dist/{chunk-QAM6N3VG.cjs.map → chunk-HEGM5LMZ.cjs.map} +1 -1
  39. package/dist/{chunk-KAKKZDCE.js → chunk-J57JSHDC.js} +3 -3
  40. package/dist/{chunk-KAKKZDCE.js.map → chunk-J57JSHDC.js.map} +1 -1
  41. package/dist/{chunk-6BCXGP2T.js → chunk-JN5DHZ6I.js} +3 -3
  42. package/dist/{chunk-6BCXGP2T.js.map → chunk-JN5DHZ6I.js.map} +1 -1
  43. package/dist/chunk-LJCQI6ZS.js +1212 -0
  44. package/dist/chunk-LJCQI6ZS.js.map +1 -0
  45. package/dist/{chunk-JV2HEOCB.cjs → chunk-MAY4NMRI.cjs} +4 -4
  46. package/dist/{chunk-JV2HEOCB.cjs.map → chunk-MAY4NMRI.cjs.map} +1 -1
  47. package/dist/{chunk-BQENLOEV.js → chunk-MD7HUHJB.js} +4 -4
  48. package/dist/{chunk-BQENLOEV.js.map → chunk-MD7HUHJB.js.map} +1 -1
  49. package/dist/{chunk-QUZOGRZS.js → chunk-OE4AIUAN.js} +3 -3
  50. package/dist/{chunk-QUZOGRZS.js.map → chunk-OE4AIUAN.js.map} +1 -1
  51. package/dist/chunk-OP7A4SZZ.cjs +1216 -0
  52. package/dist/chunk-OP7A4SZZ.cjs.map +1 -0
  53. package/dist/{chunk-YBBBX5H2.cjs → chunk-OUPHLIXV.cjs} +11 -11
  54. package/dist/{chunk-YBBBX5H2.cjs.map → chunk-OUPHLIXV.cjs.map} +1 -1
  55. package/dist/{chunk-XGGAAG74.cjs → chunk-QQKWI7QP.cjs} +7 -3
  56. package/dist/chunk-QQKWI7QP.cjs.map +1 -0
  57. package/dist/{chunk-XT4WBBCD.cjs → chunk-R4SANV3G.cjs} +11 -11
  58. package/dist/{chunk-XT4WBBCD.cjs.map → chunk-R4SANV3G.cjs.map} +1 -1
  59. package/dist/{chunk-GJWNZMJT.js → chunk-RUEDMYBF.js} +7 -3
  60. package/dist/chunk-RUEDMYBF.js.map +1 -0
  61. package/dist/{chunk-UORN3Z7R.cjs → chunk-TBLKVTJC.cjs} +6 -6
  62. package/dist/{chunk-UORN3Z7R.cjs.map → chunk-TBLKVTJC.cjs.map} +1 -1
  63. package/dist/{chunk-L5NDZEL6.cjs → chunk-ZFXCZ2QO.cjs} +9 -9
  64. package/dist/{chunk-L5NDZEL6.cjs.map → chunk-ZFXCZ2QO.cjs.map} +1 -1
  65. package/dist/composer.cjs +6 -6
  66. package/dist/composer.js +4 -4
  67. package/dist/dropdown.cjs +4 -4
  68. package/dist/dropdown.js +2 -2
  69. package/dist/editor.cjs +1 -1
  70. package/dist/editor.js +1 -1
  71. package/dist/index.cjs +99 -86
  72. package/dist/index.cjs.map +1 -1
  73. package/dist/index.d.cts +1 -0
  74. package/dist/index.d.ts +1 -0
  75. package/dist/index.js +22 -21
  76. package/dist/index.js.map +1 -1
  77. package/dist/input.cjs +5 -5
  78. package/dist/input.js +4 -4
  79. package/dist/inputs.cjs +19 -19
  80. package/dist/inputs.js +8 -8
  81. package/dist/json-editor.cjs +17 -17
  82. package/dist/json-editor.js +6 -6
  83. package/dist/mobile-menu.cjs +1 -1
  84. package/dist/mobile-menu.js +1 -1
  85. package/dist/number-field.cjs +6 -6
  86. package/dist/number-field.js +5 -5
  87. package/dist/paste-pills.cjs +16 -16
  88. package/dist/paste-pills.js +3 -3
  89. package/dist/phone-input.cjs +39 -0
  90. package/dist/phone-input.cjs.map +1 -0
  91. package/dist/phone-input.d.cts +139 -0
  92. package/dist/phone-input.d.ts +139 -0
  93. package/dist/phone-input.js +22 -0
  94. package/dist/phone-input.js.map +1 -0
  95. package/dist/popover.cjs +4 -4
  96. package/dist/popover.js +2 -2
  97. package/dist/prompt-input.cjs +8 -8
  98. package/dist/prompt-input.js +5 -5
  99. package/dist/reason-tag.cjs +4 -4
  100. package/dist/reason-tag.js +3 -3
  101. package/dist/select.cjs +3 -3
  102. package/dist/select.js +2 -2
  103. package/dist/sidebar.cjs +5 -5
  104. package/dist/sidebar.js +3 -3
  105. package/dist/tooltip.cjs +3 -3
  106. package/dist/tooltip.js +2 -2
  107. package/docs/PhoneInput.md +104 -0
  108. package/package.json +11 -1
  109. package/dist/chunk-GJWNZMJT.js.map +0 -1
  110. 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 floatingRect = floating.getBoundingClientRect();
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-XGGAAG74.cjs.map
118
- //# sourceMappingURL=chunk-XGGAAG74.cjs.map
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 chunkAZ5DWOQY_cjs = require('./chunk-AZ5DWOQY.cjs');
3
+ var chunk6B43ARGW_cjs = require('./chunk-6B43ARGW.cjs');
4
4
  var chunkJKD6CFIP_cjs = require('./chunk-JKD6CFIP.cjs');
5
- var chunkUORN3Z7R_cjs = require('./chunk-UORN3Z7R.cjs');
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(chunkUORN3Z7R_cjs.markedIds(text));
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 = chunkUORN3Z7R_cjs.expandMarkers(
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 = chunkUORN3Z7R_cjs.useInlinePaste({
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
- chunkUORN3Z7R_cjs.InlinePasteEditor,
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
- chunkUORN3Z7R_cjs.PastedFilesInput,
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(chunkAZ5DWOQY_cjs.Tooltip, { content: attachButton === "icon" ? "Attach files \u2014 or drop them here" : "Drop files here, or click", children: /* @__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(chunkAZ5DWOQY_cjs.Tooltip, { content: `Send \xB7 ${modKey}+Enter`, children: /* @__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-XT4WBBCD.cjs.map
948
- //# sourceMappingURL=chunk-XT4WBBCD.cjs.map
947
+ //# sourceMappingURL=chunk-R4SANV3G.cjs.map
948
+ //# sourceMappingURL=chunk-R4SANV3G.cjs.map