@particle-academy/react-fancy 5.42.1 → 5.44.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 (74) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/dist/{Composer.types-CuSPnaOt.d.cts → PastePills.types-CDyotkUb.d.cts} +35 -82
  3. package/dist/{Composer.types-CuSPnaOt.d.ts → PastePills.types-CDyotkUb.d.ts} +35 -82
  4. package/dist/PastedFilesInput-CrgNoEBd.d.ts +141 -0
  5. package/dist/PastedFilesInput-DQ1eZaHk.d.cts +141 -0
  6. package/dist/{chunk-IPNJMHJ3.cjs → chunk-2QIGXSSZ.cjs} +105 -3
  7. package/dist/chunk-2QIGXSSZ.cjs.map +1 -0
  8. package/dist/{chunk-BZOU7VJQ.cjs → chunk-BR27AXFE.cjs} +16 -10
  9. package/dist/chunk-BR27AXFE.cjs.map +1 -0
  10. package/dist/{chunk-G4WYCWIQ.js → chunk-DMFJJ73P.js} +3 -3
  11. package/dist/{chunk-G4WYCWIQ.js.map → chunk-DMFJJ73P.js.map} +1 -1
  12. package/dist/{chunk-2VIDYJUG.js → chunk-EEWRLFTI.js} +107 -5
  13. package/dist/chunk-EEWRLFTI.js.map +1 -0
  14. package/dist/{chunk-SF5OAVGD.js → chunk-JZCAMPIA.js} +12 -4
  15. package/dist/chunk-JZCAMPIA.js.map +1 -0
  16. package/dist/{chunk-2JOWGYAJ.js → chunk-KYZNCVRD.js} +213 -179
  17. package/dist/chunk-KYZNCVRD.js.map +1 -0
  18. package/dist/{chunk-MXAVGOHW.js → chunk-L637KPEA.js} +12 -6
  19. package/dist/chunk-L637KPEA.js.map +1 -0
  20. package/dist/{chunk-6TZPM43Q.cjs → chunk-MSRYJETY.cjs} +219 -178
  21. package/dist/chunk-MSRYJETY.cjs.map +1 -0
  22. package/dist/{chunk-K4NHVCY6.cjs → chunk-S5ZYG5MG.cjs} +8 -8
  23. package/dist/{chunk-K4NHVCY6.cjs.map → chunk-S5ZYG5MG.cjs.map} +1 -1
  24. package/dist/{chunk-7VLRHXLQ.cjs → chunk-WN45ZE37.cjs} +171 -50
  25. package/dist/chunk-WN45ZE37.cjs.map +1 -0
  26. package/dist/{chunk-UUBHUSUP.cjs → chunk-Z3FIU77M.cjs} +14 -6
  27. package/dist/chunk-Z3FIU77M.cjs.map +1 -0
  28. package/dist/{chunk-NUPQJ5SJ.js → chunk-ZVXOL5H3.js} +173 -52
  29. package/dist/chunk-ZVXOL5H3.js.map +1 -0
  30. package/dist/composer.cjs +4 -4
  31. package/dist/composer.d.cts +93 -3
  32. package/dist/composer.d.ts +93 -3
  33. package/dist/composer.js +2 -2
  34. package/dist/{index-BsIBOwaK.d.cts → index-BF5qsQur.d.cts} +8 -2
  35. package/dist/{index-S4FC1yFK.d.ts → index-BZON-gXr.d.ts} +8 -2
  36. package/dist/index.cjs +70 -58
  37. package/dist/index.d.cts +4 -3
  38. package/dist/index.d.ts +4 -3
  39. package/dist/index.js +11 -11
  40. package/dist/input.cjs +6 -2
  41. package/dist/input.d.cts +34 -0
  42. package/dist/input.d.ts +34 -0
  43. package/dist/input.js +5 -1
  44. package/dist/inputs.cjs +8 -6
  45. package/dist/inputs.d.cts +1 -0
  46. package/dist/inputs.d.ts +1 -0
  47. package/dist/inputs.js +4 -2
  48. package/dist/json-editor.cjs +15 -13
  49. package/dist/json-editor.js +4 -2
  50. package/dist/paste-pills.cjs +65 -0
  51. package/dist/paste-pills.cjs.map +1 -0
  52. package/dist/paste-pills.d.cts +34 -0
  53. package/dist/paste-pills.d.ts +34 -0
  54. package/dist/paste-pills.js +8 -0
  55. package/dist/paste-pills.js.map +1 -0
  56. package/dist/prompt-input.cjs +3 -3
  57. package/dist/prompt-input.d.cts +2 -2
  58. package/dist/prompt-input.d.ts +2 -2
  59. package/dist/prompt-input.js +2 -2
  60. package/dist/tree-nav.cjs +4 -3
  61. package/dist/tree-nav.d.cts +14 -7
  62. package/dist/tree-nav.d.ts +14 -7
  63. package/dist/tree-nav.js +2 -1
  64. package/package.json +11 -1
  65. package/dist/chunk-2JOWGYAJ.js.map +0 -1
  66. package/dist/chunk-2VIDYJUG.js.map +0 -1
  67. package/dist/chunk-6TZPM43Q.cjs.map +0 -1
  68. package/dist/chunk-7VLRHXLQ.cjs.map +0 -1
  69. package/dist/chunk-BZOU7VJQ.cjs.map +0 -1
  70. package/dist/chunk-IPNJMHJ3.cjs.map +0 -1
  71. package/dist/chunk-MXAVGOHW.js.map +0 -1
  72. package/dist/chunk-NUPQJ5SJ.js.map +0 -1
  73. package/dist/chunk-SF5OAVGD.js.map +0 -1
  74. package/dist/chunk-UUBHUSUP.cjs.map +0 -1
package/dist/input.d.cts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { InputHTMLAttributes, ReactNode } from 'react';
3
3
  import { a as InputBaseProps, I as InputAffixProps } from './inputs.types-duxPKadC.cjs';
4
+ import { C as ComposerPastePreview, a as ComposerPasteClassNames, b as HeldPaste, H as HeldImage } from './PastePills.types-CDyotkUb.cjs';
4
5
  import './types-DJI492iY.cjs';
5
6
 
6
7
  interface InputProps extends InputBaseProps, InputAffixProps, Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "type" | "prefix"> {
@@ -25,6 +26,39 @@ interface InputProps extends InputBaseProps, InputAffixProps, Omit<InputHTMLAttr
25
26
  /** Accessible label for the toggle. Defaults to "Show password" / "Hide password". */
26
27
  revealLabel?: string;
27
28
  hideLabel?: string;
29
+ /**
30
+ * Hold a paste of at least this many characters as a pill in the field, as
31
+ * `Composer` and `PromptInput` do — same code, from `PastePills`. Try 500.
32
+ *
33
+ * **Omit it (and `pasteImages`) and this is a plain `<input>`, exactly as
34
+ * before.** Setting either swaps it for a single-line editor that can hold a
35
+ * pill, plus a hidden `<input name={name}>` that posts the value with every pill
36
+ * expanded, so a native form submit sends the whole paste. `ref` then points at
37
+ * that hidden input; `onValueChange` receives the value with a marker for each
38
+ * pill (see `pasteMarker`), and `onChange` is not called.
39
+ */
40
+ pasteThreshold?: number;
41
+ /**
42
+ * Hold a pasted image as a pill, and put the file in a hidden
43
+ * `<input type="file" multiple>` in the same form so a submit posts it. The text
44
+ * marks where it sat as `[Pasted image N]`.
45
+ */
46
+ pasteImages?: boolean;
47
+ /**
48
+ * The field name pasted files are posted under. Defaults to `{name}_files[]`
49
+ * (an array for PHP / Laravel); without either, the files are held but not
50
+ * posted.
51
+ */
52
+ pasteFilesName?: string;
53
+ /** Characters of a held paste shown at EACH end of its hover preview. Default 20. */
54
+ previewChars?: number;
55
+ renderPastePreview?: (preview: ComposerPastePreview) => ReactNode;
56
+ pasteClassNames?: ComposerPasteClassNames;
57
+ /** The held pastes and images, if you want to own them (an agent attaching one, a restored draft). */
58
+ heldPastes?: HeldPaste[];
59
+ onHeldPastesChange?: (pastes: HeldPaste[]) => void;
60
+ heldImages?: HeldImage[];
61
+ onHeldImagesChange?: (images: HeldImage[]) => void;
28
62
  }
29
63
 
30
64
  declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
package/dist/input.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { InputHTMLAttributes, ReactNode } from 'react';
3
3
  import { a as InputBaseProps, I as InputAffixProps } from './inputs.types-DzGcqcPf.js';
4
+ import { C as ComposerPastePreview, a as ComposerPasteClassNames, b as HeldPaste, H as HeldImage } from './PastePills.types-CDyotkUb.js';
4
5
  import './types-DJI492iY.js';
5
6
 
6
7
  interface InputProps extends InputBaseProps, InputAffixProps, Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "type" | "prefix"> {
@@ -25,6 +26,39 @@ interface InputProps extends InputBaseProps, InputAffixProps, Omit<InputHTMLAttr
25
26
  /** Accessible label for the toggle. Defaults to "Show password" / "Hide password". */
26
27
  revealLabel?: string;
27
28
  hideLabel?: string;
29
+ /**
30
+ * Hold a paste of at least this many characters as a pill in the field, as
31
+ * `Composer` and `PromptInput` do — same code, from `PastePills`. Try 500.
32
+ *
33
+ * **Omit it (and `pasteImages`) and this is a plain `<input>`, exactly as
34
+ * before.** Setting either swaps it for a single-line editor that can hold a
35
+ * pill, plus a hidden `<input name={name}>` that posts the value with every pill
36
+ * expanded, so a native form submit sends the whole paste. `ref` then points at
37
+ * that hidden input; `onValueChange` receives the value with a marker for each
38
+ * pill (see `pasteMarker`), and `onChange` is not called.
39
+ */
40
+ pasteThreshold?: number;
41
+ /**
42
+ * Hold a pasted image as a pill, and put the file in a hidden
43
+ * `<input type="file" multiple>` in the same form so a submit posts it. The text
44
+ * marks where it sat as `[Pasted image N]`.
45
+ */
46
+ pasteImages?: boolean;
47
+ /**
48
+ * The field name pasted files are posted under. Defaults to `{name}_files[]`
49
+ * (an array for PHP / Laravel); without either, the files are held but not
50
+ * posted.
51
+ */
52
+ pasteFilesName?: string;
53
+ /** Characters of a held paste shown at EACH end of its hover preview. Default 20. */
54
+ previewChars?: number;
55
+ renderPastePreview?: (preview: ComposerPastePreview) => ReactNode;
56
+ pasteClassNames?: ComposerPasteClassNames;
57
+ /** The held pastes and images, if you want to own them (an agent attaching one, a restored draft). */
58
+ heldPastes?: HeldPaste[];
59
+ onHeldPastesChange?: (pastes: HeldPaste[]) => void;
60
+ heldImages?: HeldImage[];
61
+ onHeldImagesChange?: (images: HeldImage[]) => void;
28
62
  }
29
63
 
30
64
  declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
package/dist/input.js CHANGED
@@ -1,11 +1,15 @@
1
1
  import './chunk-SHDSKHCC.js';
2
- export { Input } from './chunk-2VIDYJUG.js';
2
+ export { Input } from './chunk-EEWRLFTI.js';
3
3
  import './chunk-PWEZCMIY.js';
4
4
  import './chunk-KKWNKBKR.js';
5
5
  import './chunk-5MU6X3KO.js';
6
6
  import './chunk-GFYSELJF.js';
7
+ import './chunk-KYZNCVRD.js';
8
+ import './chunk-CF5KRDN4.js';
7
9
  import './chunk-OL53XYHF.js';
8
10
  import './chunk-NRXK42LO.js';
11
+ import './chunk-MQ6VGG62.js';
12
+ import './chunk-WHEXTDPV.js';
9
13
  import './chunk-EDYAXGUM.js';
10
14
  import './chunk-MMW2JGKZ.js';
11
15
  //# sourceMappingURL=input.js.map
package/dist/inputs.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  require('./chunk-O5IO7TCO.cjs');
4
+ require('./chunk-QGPMVFZJ.cjs');
4
5
  var chunkZUQUL53P_cjs = require('./chunk-ZUQUL53P.cjs');
5
6
  var chunkFPZYPD3N_cjs = require('./chunk-FPZYPD3N.cjs');
6
7
  require('./chunk-HXLSEBAL.cjs');
@@ -11,16 +12,17 @@ var chunk6MDZQIMZ_cjs = require('./chunk-6MDZQIMZ.cjs');
11
12
  var chunkU7PFHQBN_cjs = require('./chunk-U7PFHQBN.cjs');
12
13
  var chunkBZDXX6E3_cjs = require('./chunk-BZDXX6E3.cjs');
13
14
  require('./chunk-URTLYNZI.cjs');
14
- require('./chunk-QGPMVFZJ.cjs');
15
+ var chunk2QIGXSSZ_cjs = require('./chunk-2QIGXSSZ.cjs');
15
16
  var chunkAR3JOPGT_cjs = require('./chunk-AR3JOPGT.cjs');
16
17
  var chunkY52NXM73_cjs = require('./chunk-Y52NXM73.cjs');
17
18
  var chunkBZZDHDMK_cjs = require('./chunk-BZZDHDMK.cjs');
18
- var chunkIPNJMHJ3_cjs = require('./chunk-IPNJMHJ3.cjs');
19
19
  var chunkV6VFSX6V_cjs = require('./chunk-V6VFSX6V.cjs');
20
20
  require('./chunk-7EZBMGEE.cjs');
21
21
  var chunkXKDW6B7X_cjs = require('./chunk-XKDW6B7X.cjs');
22
22
  var chunkBBOIFV27_cjs = require('./chunk-BBOIFV27.cjs');
23
23
  require('./chunk-YLGTDBB2.cjs');
24
+ require('./chunk-MSRYJETY.cjs');
25
+ require('./chunk-X7H75WVP.cjs');
24
26
  var chunkKJ22KE56_cjs = require('./chunk-KJ22KE56.cjs');
25
27
  var chunkL3V3BYVS_cjs = require('./chunk-L3V3BYVS.cjs');
26
28
  require('./chunk-J2DI6RMR.cjs');
@@ -60,6 +62,10 @@ Object.defineProperty(exports, "CheckboxGroup", {
60
62
  enumerable: true,
61
63
  get: function () { return chunkBZDXX6E3_cjs.CheckboxGroup; }
62
64
  });
65
+ Object.defineProperty(exports, "Input", {
66
+ enumerable: true,
67
+ get: function () { return chunk2QIGXSSZ_cjs.Input; }
68
+ });
63
69
  Object.defineProperty(exports, "Select", {
64
70
  enumerable: true,
65
71
  get: function () { return chunkAR3JOPGT_cjs.Select; }
@@ -72,10 +78,6 @@ Object.defineProperty(exports, "DatePicker", {
72
78
  enumerable: true,
73
79
  get: function () { return chunkBZZDHDMK_cjs.DatePicker; }
74
80
  });
75
- Object.defineProperty(exports, "Input", {
76
- enumerable: true,
77
- get: function () { return chunkIPNJMHJ3_cjs.Input; }
78
- });
79
81
  Object.defineProperty(exports, "Textarea", {
80
82
  enumerable: true,
81
83
  get: function () { return chunkV6VFSX6V_cjs.Textarea; }
package/dist/inputs.d.cts CHANGED
@@ -14,3 +14,4 @@ export { D as DisplayValue, a as DisplayValueProps, F as FieldModeContext, b as
14
14
  export { InlineEdit, useInlineEdit } from './mode.cjs';
15
15
  import 'react';
16
16
  import './types-DJI492iY.cjs';
17
+ import './PastePills.types-CDyotkUb.cjs';
package/dist/inputs.d.ts CHANGED
@@ -14,3 +14,4 @@ export { D as DisplayValue, a as DisplayValueProps, F as FieldModeContext, b as
14
14
  export { InlineEdit, useInlineEdit } from './mode.js';
15
15
  import 'react';
16
16
  import './types-DJI492iY.js';
17
+ import './PastePills.types-CDyotkUb.js';
package/dist/inputs.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import './chunk-VXHFR5MV.js';
2
+ import './chunk-SHDSKHCC.js';
2
3
  export { MultiSwitch } from './chunk-NE3Z4AWP.js';
3
4
  export { RadioGroup } from './chunk-LBU3T2LF.js';
4
5
  import './chunk-GNHQVPZP.js';
@@ -9,16 +10,17 @@ export { Form, FormProvider } from './chunk-PQWQ5K6J.js';
9
10
  export { Checkbox } from './chunk-4HRD4S25.js';
10
11
  export { CheckboxGroup } from './chunk-FNJDMGJ3.js';
11
12
  import './chunk-V4EARA4F.js';
12
- import './chunk-SHDSKHCC.js';
13
+ export { Input } from './chunk-EEWRLFTI.js';
13
14
  export { Select } from './chunk-IECPLOSZ.js';
14
15
  export { Switch } from './chunk-NBAHXZHJ.js';
15
16
  export { DatePicker } from './chunk-OC75GWX5.js';
16
- export { Input } from './chunk-2VIDYJUG.js';
17
17
  export { Textarea } from './chunk-DEFGT75G.js';
18
18
  import './chunk-PWEZCMIY.js';
19
19
  export { DisplayValue } from './chunk-KKWNKBKR.js';
20
20
  export { Field } from './chunk-5MU6X3KO.js';
21
21
  import './chunk-GFYSELJF.js';
22
+ import './chunk-KYZNCVRD.js';
23
+ import './chunk-CF5KRDN4.js';
22
24
  export { useInlineEdit } from './chunk-OL53XYHF.js';
23
25
  export { FieldModeContext, useFieldMode } from './chunk-NRXK42LO.js';
24
26
  import './chunk-MQ6VGG62.js';
@@ -1,16 +1,18 @@
1
1
  'use strict';
2
2
 
3
- var chunkK4NHVCY6_cjs = require('./chunk-K4NHVCY6.cjs');
3
+ var chunkS5ZYG5MG_cjs = require('./chunk-S5ZYG5MG.cjs');
4
+ require('./chunk-2QIGXSSZ.cjs');
4
5
  require('./chunk-AR3JOPGT.cjs');
5
6
  require('./chunk-Y52NXM73.cjs');
6
7
  require('./chunk-BZZDHDMK.cjs');
7
- require('./chunk-IPNJMHJ3.cjs');
8
8
  require('./chunk-V6VFSX6V.cjs');
9
9
  require('./chunk-7EZBMGEE.cjs');
10
10
  require('./chunk-XKDW6B7X.cjs');
11
11
  require('./chunk-BBOIFV27.cjs');
12
12
  require('./chunk-YLGTDBB2.cjs');
13
13
  require('./chunk-BVRPDMB7.cjs');
14
+ require('./chunk-MSRYJETY.cjs');
15
+ require('./chunk-X7H75WVP.cjs');
14
16
  require('./chunk-MOU6O324.cjs');
15
17
  require('./chunk-ICQJ6475.cjs');
16
18
  require('./chunk-BFKCVSNK.cjs');
@@ -31,47 +33,47 @@ require('./chunk-ZU5Q77OT.cjs');
31
33
 
32
34
  Object.defineProperty(exports, "JsonEditor", {
33
35
  enumerable: true,
34
- get: function () { return chunkK4NHVCY6_cjs.JsonEditor; }
36
+ get: function () { return chunkS5ZYG5MG_cjs.JsonEditor; }
35
37
  });
36
38
  Object.defineProperty(exports, "applyJsonEdit", {
37
39
  enumerable: true,
38
- get: function () { return chunkK4NHVCY6_cjs.applyJsonEdit; }
40
+ get: function () { return chunkS5ZYG5MG_cjs.applyJsonEdit; }
39
41
  });
40
42
  Object.defineProperty(exports, "describeEdit", {
41
43
  enumerable: true,
42
- get: function () { return chunkK4NHVCY6_cjs.describeEdit; }
44
+ get: function () { return chunkS5ZYG5MG_cjs.describeEdit; }
43
45
  });
44
46
  Object.defineProperty(exports, "findJsonConflicts", {
45
47
  enumerable: true,
46
- get: function () { return chunkK4NHVCY6_cjs.findJsonConflicts; }
48
+ get: function () { return chunkS5ZYG5MG_cjs.findJsonConflicts; }
47
49
  });
48
50
  Object.defineProperty(exports, "getAtPath", {
49
51
  enumerable: true,
50
- get: function () { return chunkK4NHVCY6_cjs.getAtPath; }
52
+ get: function () { return chunkS5ZYG5MG_cjs.getAtPath; }
51
53
  });
52
54
  Object.defineProperty(exports, "inferType", {
53
55
  enumerable: true,
54
- get: function () { return chunkK4NHVCY6_cjs.inferType; }
56
+ get: function () { return chunkS5ZYG5MG_cjs.inferType; }
55
57
  });
56
58
  Object.defineProperty(exports, "parseKeyMap", {
57
59
  enumerable: true,
58
- get: function () { return chunkK4NHVCY6_cjs.parseKeyMap; }
60
+ get: function () { return chunkS5ZYG5MG_cjs.parseKeyMap; }
59
61
  });
60
62
  Object.defineProperty(exports, "parsePath", {
61
63
  enumerable: true,
62
- get: function () { return chunkK4NHVCY6_cjs.parsePath; }
64
+ get: function () { return chunkS5ZYG5MG_cjs.parsePath; }
63
65
  });
64
66
  Object.defineProperty(exports, "pathToString", {
65
67
  enumerable: true,
66
- get: function () { return chunkK4NHVCY6_cjs.pathToString; }
68
+ get: function () { return chunkS5ZYG5MG_cjs.pathToString; }
67
69
  });
68
70
  Object.defineProperty(exports, "resolveKeyRule", {
69
71
  enumerable: true,
70
- get: function () { return chunkK4NHVCY6_cjs.resolveKeyRule; }
72
+ get: function () { return chunkS5ZYG5MG_cjs.resolveKeyRule; }
71
73
  });
72
74
  Object.defineProperty(exports, "typeMatches", {
73
75
  enumerable: true,
74
- get: function () { return chunkK4NHVCY6_cjs.typeMatches; }
76
+ get: function () { return chunkS5ZYG5MG_cjs.typeMatches; }
75
77
  });
76
78
  //# sourceMappingURL=json-editor.cjs.map
77
79
  //# sourceMappingURL=json-editor.cjs.map
@@ -1,14 +1,16 @@
1
- export { JsonEditor, applyJsonEdit, describeEdit, findJsonConflicts, getAtPath, inferType, parseKeyMap, parsePath, pathToString, resolveKeyRule, typeMatches } from './chunk-G4WYCWIQ.js';
1
+ export { JsonEditor, applyJsonEdit, describeEdit, findJsonConflicts, getAtPath, inferType, parseKeyMap, parsePath, pathToString, resolveKeyRule, typeMatches } from './chunk-DMFJJ73P.js';
2
+ import './chunk-EEWRLFTI.js';
2
3
  import './chunk-IECPLOSZ.js';
3
4
  import './chunk-NBAHXZHJ.js';
4
5
  import './chunk-OC75GWX5.js';
5
- import './chunk-2VIDYJUG.js';
6
6
  import './chunk-DEFGT75G.js';
7
7
  import './chunk-PWEZCMIY.js';
8
8
  import './chunk-KKWNKBKR.js';
9
9
  import './chunk-5MU6X3KO.js';
10
10
  import './chunk-GFYSELJF.js';
11
11
  import './chunk-F2GAZZVS.js';
12
+ import './chunk-KYZNCVRD.js';
13
+ import './chunk-CF5KRDN4.js';
12
14
  import './chunk-6FCQD2KQ.js';
13
15
  import './chunk-JJRD3WX3.js';
14
16
  import './chunk-XJXQG34J.js';
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ var chunkMSRYJETY_cjs = require('./chunk-MSRYJETY.cjs');
4
+ require('./chunk-X7H75WVP.cjs');
5
+ require('./chunk-J2DI6RMR.cjs');
6
+ require('./chunk-NBZC6LOB.cjs');
7
+ require('./chunk-SNHU2AI4.cjs');
8
+ require('./chunk-ZU5Q77OT.cjs');
9
+
10
+
11
+
12
+ Object.defineProperty(exports, "HOST_ATTR", {
13
+ enumerable: true,
14
+ get: function () { return chunkMSRYJETY_cjs.HOST_ATTR; }
15
+ });
16
+ Object.defineProperty(exports, "InlinePasteEditor", {
17
+ enumerable: true,
18
+ get: function () { return chunkMSRYJETY_cjs.InlinePasteEditor; }
19
+ });
20
+ Object.defineProperty(exports, "InlinePill", {
21
+ enumerable: true,
22
+ get: function () { return chunkMSRYJETY_cjs.InlinePill; }
23
+ });
24
+ Object.defineProperty(exports, "PILL_MARK", {
25
+ enumerable: true,
26
+ get: function () { return chunkMSRYJETY_cjs.PILL_MARK; }
27
+ });
28
+ Object.defineProperty(exports, "PastedFilesInput", {
29
+ enumerable: true,
30
+ get: function () { return chunkMSRYJETY_cjs.PastedFilesInput; }
31
+ });
32
+ Object.defineProperty(exports, "endsOf", {
33
+ enumerable: true,
34
+ get: function () { return chunkMSRYJETY_cjs.endsOf; }
35
+ });
36
+ Object.defineProperty(exports, "expandMarkers", {
37
+ enumerable: true,
38
+ get: function () { return chunkMSRYJETY_cjs.expandMarkers; }
39
+ });
40
+ Object.defineProperty(exports, "markedIds", {
41
+ enumerable: true,
42
+ get: function () { return chunkMSRYJETY_cjs.markedIds; }
43
+ });
44
+ Object.defineProperty(exports, "pasteMarker", {
45
+ enumerable: true,
46
+ get: function () { return chunkMSRYJETY_cjs.pasteMarker; }
47
+ });
48
+ Object.defineProperty(exports, "segmentValue", {
49
+ enumerable: true,
50
+ get: function () { return chunkMSRYJETY_cjs.segmentValue; }
51
+ });
52
+ Object.defineProperty(exports, "useInlinePaste", {
53
+ enumerable: true,
54
+ get: function () { return chunkMSRYJETY_cjs.useInlinePaste; }
55
+ });
56
+ Object.defineProperty(exports, "usePastePills", {
57
+ enumerable: true,
58
+ get: function () { return chunkMSRYJETY_cjs.usePastePills; }
59
+ });
60
+ Object.defineProperty(exports, "withSeparators", {
61
+ enumerable: true,
62
+ get: function () { return chunkMSRYJETY_cjs.withSeparators; }
63
+ });
64
+ //# sourceMappingURL=paste-pills.cjs.map
65
+ //# sourceMappingURL=paste-pills.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"paste-pills.cjs"}
@@ -0,0 +1,34 @@
1
+ import { C as ComposerPastePreview, a as ComposerPasteClassNames } from './PastePills.types-CDyotkUb.cjs';
2
+ export { H as HeldImage, b as HeldPaste, P as PILL_MARK, c as PasteClassNames, d as PasteEventLike, e as PastePreview, U as UsePastePillsOptions, f as UsePastePillsResult, V as ValueSegment, g as expandMarkers, m as markedIds, p as pasteMarker, s as segmentValue, u as usePastePills } from './PastePills.types-CDyotkUb.cjs';
3
+ export { H as HOST_ATTR, I as InlinePasteEditor, a as InlinePasteEditorHandle, P as PastedFilesInput, b as PastedFilesInputProps, c as PillToInsert, U as UseInlinePasteOptions, u as useInlinePaste } from './PastedFilesInput-DQ1eZaHk.cjs';
4
+ import * as react from 'react';
5
+ import { ReactNode } from 'react';
6
+
7
+ /**
8
+ * Thousands separators, written out rather than left to `toLocaleString()`.
9
+ *
10
+ * The number exists so someone can size the paste at a glance, and `2,036` sizes
11
+ * faster than `2036`. It is not left to the runtime locale because the label beside
12
+ * it ("Pasted text") is not localised either, so a locale-formatted number next to
13
+ * an English noun would be half a translation.
14
+ */
15
+ declare function withSeparators(n: number): string;
16
+ /** First and last N characters, middle elided. The ends say WHICH paste this is. */
17
+ declare function endsOf(text: string, chars: number): string;
18
+ interface InlinePillProps {
19
+ preview: ComposerPastePreview;
20
+ previewChars: number;
21
+ renderPastePreview?: (preview: ComposerPastePreview) => ReactNode;
22
+ classNames?: ComposerPasteClassNames;
23
+ disabled: boolean;
24
+ onExpand: (id: string) => void;
25
+ }
26
+ /**
27
+ * One pill inside the message, portalled by `Composer` into a placeholder the
28
+ * editor made. Internal — its own file so its props are not read as `Composer`'s.
29
+ *
30
+ * The hover preview is a portalled `Tooltip`, so the scrolling input cannot clip it.
31
+ */
32
+ declare function InlinePill({ preview, previewChars, renderPastePreview, classNames, disabled, onExpand, }: InlinePillProps): react.JSX.Element;
33
+
34
+ export { ComposerPasteClassNames, ComposerPastePreview, InlinePill, endsOf, withSeparators };
@@ -0,0 +1,34 @@
1
+ import { C as ComposerPastePreview, a as ComposerPasteClassNames } from './PastePills.types-CDyotkUb.js';
2
+ export { H as HeldImage, b as HeldPaste, P as PILL_MARK, c as PasteClassNames, d as PasteEventLike, e as PastePreview, U as UsePastePillsOptions, f as UsePastePillsResult, V as ValueSegment, g as expandMarkers, m as markedIds, p as pasteMarker, s as segmentValue, u as usePastePills } from './PastePills.types-CDyotkUb.js';
3
+ export { H as HOST_ATTR, I as InlinePasteEditor, a as InlinePasteEditorHandle, P as PastedFilesInput, b as PastedFilesInputProps, c as PillToInsert, U as UseInlinePasteOptions, u as useInlinePaste } from './PastedFilesInput-CrgNoEBd.js';
4
+ import * as react from 'react';
5
+ import { ReactNode } from 'react';
6
+
7
+ /**
8
+ * Thousands separators, written out rather than left to `toLocaleString()`.
9
+ *
10
+ * The number exists so someone can size the paste at a glance, and `2,036` sizes
11
+ * faster than `2036`. It is not left to the runtime locale because the label beside
12
+ * it ("Pasted text") is not localised either, so a locale-formatted number next to
13
+ * an English noun would be half a translation.
14
+ */
15
+ declare function withSeparators(n: number): string;
16
+ /** First and last N characters, middle elided. The ends say WHICH paste this is. */
17
+ declare function endsOf(text: string, chars: number): string;
18
+ interface InlinePillProps {
19
+ preview: ComposerPastePreview;
20
+ previewChars: number;
21
+ renderPastePreview?: (preview: ComposerPastePreview) => ReactNode;
22
+ classNames?: ComposerPasteClassNames;
23
+ disabled: boolean;
24
+ onExpand: (id: string) => void;
25
+ }
26
+ /**
27
+ * One pill inside the message, portalled by `Composer` into a placeholder the
28
+ * editor made. Internal — its own file so its props are not read as `Composer`'s.
29
+ *
30
+ * The hover preview is a portalled `Tooltip`, so the scrolling input cannot clip it.
31
+ */
32
+ declare function InlinePill({ preview, previewChars, renderPastePreview, classNames, disabled, onExpand, }: InlinePillProps): react.JSX.Element;
33
+
34
+ export { ComposerPasteClassNames, ComposerPastePreview, InlinePill, endsOf, withSeparators };
@@ -0,0 +1,8 @@
1
+ export { HOST_ATTR, InlinePasteEditor, InlinePill, PILL_MARK, PastedFilesInput, endsOf, expandMarkers, markedIds, pasteMarker, segmentValue, useInlinePaste, usePastePills, withSeparators } from './chunk-KYZNCVRD.js';
2
+ import './chunk-CF5KRDN4.js';
3
+ import './chunk-MQ6VGG62.js';
4
+ import './chunk-WHEXTDPV.js';
5
+ import './chunk-EDYAXGUM.js';
6
+ import './chunk-MMW2JGKZ.js';
7
+ //# sourceMappingURL=paste-pills.js.map
8
+ //# sourceMappingURL=paste-pills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"paste-pills.js"}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkUUBHUSUP_cjs = require('./chunk-UUBHUSUP.cjs');
3
+ var chunkZ3FIU77M_cjs = require('./chunk-Z3FIU77M.cjs');
4
4
  require('./chunk-AIA5UNQ5.cjs');
5
- require('./chunk-6TZPM43Q.cjs');
5
+ require('./chunk-MSRYJETY.cjs');
6
6
  require('./chunk-X7H75WVP.cjs');
7
7
  require('./chunk-M5MUGSON.cjs');
8
8
  require('./chunk-ICQJ6475.cjs');
@@ -18,7 +18,7 @@ require('./chunk-ZU5Q77OT.cjs');
18
18
 
19
19
  Object.defineProperty(exports, "PromptInput", {
20
20
  enumerable: true,
21
- get: function () { return chunkUUBHUSUP_cjs.PromptInput; }
21
+ get: function () { return chunkZ3FIU77M_cjs.PromptInput; }
22
22
  });
23
23
  //# sourceMappingURL=prompt-input.cjs.map
24
24
  //# sourceMappingURL=prompt-input.cjs.map
@@ -1,3 +1,3 @@
1
- export { a as PromptAttachment, b as PromptCmd, c as PromptInput, d as PromptInputProps, e as PromptMention } from './index-BsIBOwaK.cjs';
1
+ export { a as PromptAttachment, b as PromptCmd, c as PromptInput, d as PromptInputProps, e as PromptMention } from './index-BF5qsQur.cjs';
2
2
  import 'react';
3
- import './Composer.types-CuSPnaOt.cjs';
3
+ import './PastePills.types-CDyotkUb.cjs';
@@ -1,3 +1,3 @@
1
- export { a as PromptAttachment, b as PromptCmd, c as PromptInput, d as PromptInputProps, e as PromptMention } from './index-S4FC1yFK.js';
1
+ export { a as PromptAttachment, b as PromptCmd, c as PromptInput, d as PromptInputProps, e as PromptMention } from './index-BZON-gXr.js';
2
2
  import 'react';
3
- import './Composer.types-CuSPnaOt.js';
3
+ import './PastePills.types-CDyotkUb.js';
@@ -1,6 +1,6 @@
1
- export { PromptInput } from './chunk-SF5OAVGD.js';
1
+ export { PromptInput } from './chunk-JZCAMPIA.js';
2
2
  import './chunk-TJ66S5K6.js';
3
- import './chunk-2JOWGYAJ.js';
3
+ import './chunk-KYZNCVRD.js';
4
4
  import './chunk-CF5KRDN4.js';
5
5
  import './chunk-LQ4ICCN2.js';
6
6
  import './chunk-JJRD3WX3.js';
package/dist/tree-nav.cjs CHANGED
@@ -1,17 +1,18 @@
1
1
  'use strict';
2
2
 
3
- var chunk7VLRHXLQ_cjs = require('./chunk-7VLRHXLQ.cjs');
3
+ var chunkWN45ZE37_cjs = require('./chunk-WN45ZE37.cjs');
4
+ require('./chunk-IR6JSQ4O.cjs');
4
5
  require('./chunk-ZU5Q77OT.cjs');
5
6
 
6
7
 
7
8
 
8
9
  Object.defineProperty(exports, "TreeNav", {
9
10
  enumerable: true,
10
- get: function () { return chunk7VLRHXLQ_cjs.TreeNav; }
11
+ get: function () { return chunkWN45ZE37_cjs.TreeNav; }
11
12
  });
12
13
  Object.defineProperty(exports, "useTreeNav", {
13
14
  enumerable: true,
14
- get: function () { return chunk7VLRHXLQ_cjs.useTreeNav; }
15
+ get: function () { return chunkWN45ZE37_cjs.useTreeNav; }
15
16
  });
16
17
  //# sourceMappingURL=tree-nav.cjs.map
17
18
  //# sourceMappingURL=tree-nav.cjs.map
@@ -69,6 +69,18 @@ interface TreeNavProps {
69
69
  * @default "none"
70
70
  */
71
71
  dragCursor?: "grab" | "none";
72
+ /**
73
+ * Render only the rows in view. For big trees — thousands of expanded nodes —
74
+ * where mounting every visible row is itself the cost. The visible rows are
75
+ * flattened (expanded folders only) and windowed by `VirtualList`; selection,
76
+ * expansion, context menus and drag-and-drop behave as in the nested tree.
77
+ * Needs a `height`. Default `false`.
78
+ */
79
+ virtualize?: boolean;
80
+ /** Height of the scroll viewport when `virtualize` is on. Default 400. */
81
+ height?: number | string;
82
+ /** Estimated row height in px when `virtualize` is on; real heights replace it as rows render. Default 26. */
83
+ rowHeight?: number;
72
84
  /** Custom className */
73
85
  className?: string;
74
86
  }
@@ -96,17 +108,12 @@ interface TreeNodeProps {
96
108
  className?: string;
97
109
  }
98
110
 
99
- declare function TreeNode({ node, depth }: TreeNodeProps): react.JSX.Element;
100
- declare namespace TreeNode {
101
- var displayName: string;
102
- }
103
-
104
- declare function TreeNavRoot({ nodes, selectedId, onSelect, onNodeContextMenu, draggable, onNodeMove, acceptExternalDrops, onExternalDrop, expandedIds: controlledExpanded, defaultExpandedIds, onExpandedChange, defaultExpandAll, indentSize, showIcons, dragCursor, className, }: TreeNavProps): react.JSX.Element;
111
+ declare function TreeNavRoot({ nodes, selectedId, onSelect, onNodeContextMenu, draggable, onNodeMove, acceptExternalDrops, onExternalDrop, expandedIds: controlledExpanded, defaultExpandedIds, onExpandedChange, defaultExpandAll, indentSize, showIcons, dragCursor, virtualize, height, rowHeight, className, }: TreeNavProps): react.JSX.Element;
105
112
  declare namespace TreeNavRoot {
106
113
  var displayName: string;
107
114
  }
108
115
  declare const TreeNav: typeof TreeNavRoot & {
109
- Node: typeof TreeNode;
116
+ Node: react.MemoExoticComponent<({ node, depth }: TreeNodeProps) => react.JSX.Element>;
110
117
  };
111
118
 
112
119
  declare function useTreeNav(): TreeNavContextValue;
@@ -69,6 +69,18 @@ interface TreeNavProps {
69
69
  * @default "none"
70
70
  */
71
71
  dragCursor?: "grab" | "none";
72
+ /**
73
+ * Render only the rows in view. For big trees — thousands of expanded nodes —
74
+ * where mounting every visible row is itself the cost. The visible rows are
75
+ * flattened (expanded folders only) and windowed by `VirtualList`; selection,
76
+ * expansion, context menus and drag-and-drop behave as in the nested tree.
77
+ * Needs a `height`. Default `false`.
78
+ */
79
+ virtualize?: boolean;
80
+ /** Height of the scroll viewport when `virtualize` is on. Default 400. */
81
+ height?: number | string;
82
+ /** Estimated row height in px when `virtualize` is on; real heights replace it as rows render. Default 26. */
83
+ rowHeight?: number;
72
84
  /** Custom className */
73
85
  className?: string;
74
86
  }
@@ -96,17 +108,12 @@ interface TreeNodeProps {
96
108
  className?: string;
97
109
  }
98
110
 
99
- declare function TreeNode({ node, depth }: TreeNodeProps): react.JSX.Element;
100
- declare namespace TreeNode {
101
- var displayName: string;
102
- }
103
-
104
- declare function TreeNavRoot({ nodes, selectedId, onSelect, onNodeContextMenu, draggable, onNodeMove, acceptExternalDrops, onExternalDrop, expandedIds: controlledExpanded, defaultExpandedIds, onExpandedChange, defaultExpandAll, indentSize, showIcons, dragCursor, className, }: TreeNavProps): react.JSX.Element;
111
+ declare function TreeNavRoot({ nodes, selectedId, onSelect, onNodeContextMenu, draggable, onNodeMove, acceptExternalDrops, onExternalDrop, expandedIds: controlledExpanded, defaultExpandedIds, onExpandedChange, defaultExpandAll, indentSize, showIcons, dragCursor, virtualize, height, rowHeight, className, }: TreeNavProps): react.JSX.Element;
105
112
  declare namespace TreeNavRoot {
106
113
  var displayName: string;
107
114
  }
108
115
  declare const TreeNav: typeof TreeNavRoot & {
109
- Node: typeof TreeNode;
116
+ Node: react.MemoExoticComponent<({ node, depth }: TreeNodeProps) => react.JSX.Element>;
110
117
  };
111
118
 
112
119
  declare function useTreeNav(): TreeNavContextValue;
package/dist/tree-nav.js CHANGED
@@ -1,4 +1,5 @@
1
- export { TreeNav, useTreeNav } from './chunk-NUPQJ5SJ.js';
1
+ export { TreeNav, useTreeNav } from './chunk-ZVXOL5H3.js';
2
+ import './chunk-Z4CW3U6C.js';
2
3
  import './chunk-MMW2JGKZ.js';
3
4
  //# sourceMappingURL=tree-nav.js.map
4
5
  //# sourceMappingURL=tree-nav.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@particle-academy/react-fancy",
3
- "version": "5.42.1",
3
+ "version": "5.44.0",
4
4
  "description": "React UI component library for Human+ UX — controlled, agent-bridgeable primitives",
5
5
  "repository": {
6
6
  "type": "git",
@@ -633,6 +633,16 @@
633
633
  "default": "./dist/pagination.cjs"
634
634
  }
635
635
  },
636
+ "./paste-pills": {
637
+ "import": {
638
+ "types": "./dist/paste-pills.d.ts",
639
+ "default": "./dist/paste-pills.js"
640
+ },
641
+ "require": {
642
+ "types": "./dist/paste-pills.d.cts",
643
+ "default": "./dist/paste-pills.cjs"
644
+ }
645
+ },
636
646
  "./pdf-viewer": {
637
647
  "import": {
638
648
  "types": "./dist/pdf-viewer.d.ts",