@particle-academy/react-fancy 5.49.1 → 5.51.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 (146) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/button.cjs +4 -4
  3. package/dist/button.js +2 -2
  4. package/dist/chart.cjs +2 -2
  5. package/dist/chart.d.cts +9 -1
  6. package/dist/chart.d.ts +9 -1
  7. package/dist/chart.js +1 -1
  8. package/dist/{chunk-T5OCRKPD.cjs → chunk-23PAOCQQ.cjs} +4 -4
  9. package/dist/{chunk-T5OCRKPD.cjs.map → chunk-23PAOCQQ.cjs.map} +1 -1
  10. package/dist/{chunk-GBGJWAXZ.cjs → chunk-25UPDBI6.cjs} +4 -4
  11. package/dist/{chunk-GBGJWAXZ.cjs.map → chunk-25UPDBI6.cjs.map} +1 -1
  12. package/dist/chunk-3K2CEAI7.js +78 -0
  13. package/dist/chunk-3K2CEAI7.js.map +1 -0
  14. package/dist/{chunk-L637KPEA.js → chunk-4NBM3LXN.js} +3 -3
  15. package/dist/{chunk-L637KPEA.js.map → chunk-4NBM3LXN.js.map} +1 -1
  16. package/dist/chunk-6TBRBN7H.js +212 -0
  17. package/dist/chunk-6TBRBN7H.js.map +1 -0
  18. package/dist/{chunk-2QIGXSSZ.cjs → chunk-7ZDJPHLJ.cjs} +6 -6
  19. package/dist/{chunk-2QIGXSSZ.cjs.map → chunk-7ZDJPHLJ.cjs.map} +1 -1
  20. package/dist/{chunk-RLC2BE3D.cjs → chunk-ATANWEXA.cjs} +21 -21
  21. package/dist/{chunk-RLC2BE3D.cjs.map → chunk-ATANWEXA.cjs.map} +1 -1
  22. package/dist/{chunk-7B3HK6TY.cjs → chunk-B6CQ4KK7.cjs} +6 -4
  23. package/dist/chunk-B6CQ4KK7.cjs.map +1 -0
  24. package/dist/{chunk-YQJWD53X.js → chunk-ENYHLZ2X.js} +3 -3
  25. package/dist/{chunk-YQJWD53X.js.map → chunk-ENYHLZ2X.js.map} +1 -1
  26. package/dist/chunk-FQZE5N2N.cjs +80 -0
  27. package/dist/chunk-FQZE5N2N.cjs.map +1 -0
  28. package/dist/{chunk-PV5WDIGM.cjs → chunk-FVG3YXXM.cjs} +4 -4
  29. package/dist/{chunk-PV5WDIGM.cjs.map → chunk-FVG3YXXM.cjs.map} +1 -1
  30. package/dist/{chunk-3XJKJQSY.cjs → chunk-FWA4PCW7.cjs} +4 -4
  31. package/dist/{chunk-3XJKJQSY.cjs.map → chunk-FWA4PCW7.cjs.map} +1 -1
  32. package/dist/{chunk-KYZNCVRD.js → chunk-FYKOLKQZ.js} +43 -26
  33. package/dist/chunk-FYKOLKQZ.js.map +1 -0
  34. package/dist/{chunk-JHDO6CRT.js → chunk-GAB2QXHH.js} +103 -41
  35. package/dist/chunk-GAB2QXHH.js.map +1 -0
  36. package/dist/{chunk-EEKXWXYO.cjs → chunk-GCWIZNN2.cjs} +4 -4
  37. package/dist/{chunk-EEKXWXYO.cjs.map → chunk-GCWIZNN2.cjs.map} +1 -1
  38. package/dist/{chunk-Z43BI7CQ.cjs → chunk-GU5BYZTR.cjs} +4 -4
  39. package/dist/{chunk-Z43BI7CQ.cjs.map → chunk-GU5BYZTR.cjs.map} +1 -1
  40. package/dist/{chunk-TXCAIL5X.cjs → chunk-HKRB2Z6R.cjs} +4 -4
  41. package/dist/{chunk-TXCAIL5X.cjs.map → chunk-HKRB2Z6R.cjs.map} +1 -1
  42. package/dist/{chunk-VM5BNL4L.js → chunk-IAUJKZAQ.js} +4 -4
  43. package/dist/{chunk-VM5BNL4L.js.map → chunk-IAUJKZAQ.js.map} +1 -1
  44. package/dist/{chunk-GMNMJLZO.js → chunk-K6EJLBBQ.js} +12 -6
  45. package/dist/chunk-K6EJLBBQ.js.map +1 -0
  46. package/dist/{chunk-ZLYOMQ2J.js → chunk-KODD54GT.js} +3 -3
  47. package/dist/{chunk-ZLYOMQ2J.js.map → chunk-KODD54GT.js.map} +1 -1
  48. package/dist/{chunk-ODAPI4QJ.cjs → chunk-M52IS5SO.cjs} +11 -11
  49. package/dist/{chunk-ODAPI4QJ.cjs.map → chunk-M52IS5SO.cjs.map} +1 -1
  50. package/dist/{chunk-CK6LRROH.js → chunk-M5ACSJJ4.js} +6 -4
  51. package/dist/chunk-M5ACSJJ4.js.map +1 -0
  52. package/dist/{chunk-FNYUUVOK.cjs → chunk-MFQ5NBSV.cjs} +14 -7
  53. package/dist/chunk-MFQ5NBSV.cjs.map +1 -0
  54. package/dist/{chunk-SK4AEUO4.js → chunk-MGE5KOVA.js} +4 -4
  55. package/dist/{chunk-SK4AEUO4.js.map → chunk-MGE5KOVA.js.map} +1 -1
  56. package/dist/{chunk-TKDUT7ZA.cjs → chunk-MH4QS7OE.cjs} +10 -10
  57. package/dist/{chunk-TKDUT7ZA.cjs.map → chunk-MH4QS7OE.cjs.map} +1 -1
  58. package/dist/{chunk-P7F32HIH.js → chunk-N6OZZAOT.js} +3 -3
  59. package/dist/{chunk-P7F32HIH.js.map → chunk-N6OZZAOT.js.map} +1 -1
  60. package/dist/{chunk-K74R6IEB.js → chunk-PCTZNK2Z.js} +4 -4
  61. package/dist/{chunk-K74R6IEB.js.map → chunk-PCTZNK2Z.js.map} +1 -1
  62. package/dist/{chunk-VFIVF5YO.js → chunk-PHDIQ4VC.js} +3 -3
  63. package/dist/{chunk-VFIVF5YO.js.map → chunk-PHDIQ4VC.js.map} +1 -1
  64. package/dist/{chunk-MSRYJETY.cjs → chunk-R3UG6PVX.cjs} +42 -25
  65. package/dist/chunk-R3UG6PVX.cjs.map +1 -0
  66. package/dist/{chunk-I6XHZ3S2.cjs → chunk-SAPOYAGN.cjs} +103 -41
  67. package/dist/chunk-SAPOYAGN.cjs.map +1 -0
  68. package/dist/{chunk-BR27AXFE.cjs → chunk-SYVOGYJG.cjs} +9 -9
  69. package/dist/{chunk-BR27AXFE.cjs.map → chunk-SYVOGYJG.cjs.map} +1 -1
  70. package/dist/{chunk-NYDR2VSA.js → chunk-TNYWQ6EQ.js} +3 -3
  71. package/dist/{chunk-NYDR2VSA.js.map → chunk-TNYWQ6EQ.js.map} +1 -1
  72. package/dist/{chunk-SWBF2BXA.js → chunk-TT3K5D6J.js} +3 -3
  73. package/dist/{chunk-SWBF2BXA.js.map → chunk-TT3K5D6J.js.map} +1 -1
  74. package/dist/{chunk-62WPAKFS.js → chunk-UDEEPMQ4.js} +3 -3
  75. package/dist/{chunk-62WPAKFS.js.map → chunk-UDEEPMQ4.js.map} +1 -1
  76. package/dist/{chunk-W7IP6RT3.cjs → chunk-WBVWV2V7.cjs} +4 -4
  77. package/dist/{chunk-W7IP6RT3.cjs.map → chunk-WBVWV2V7.cjs.map} +1 -1
  78. package/dist/chunk-X2FC7ODX.cjs +215 -0
  79. package/dist/chunk-X2FC7ODX.cjs.map +1 -0
  80. package/dist/{chunk-EEWRLFTI.js → chunk-XB6YHUKW.js} +3 -3
  81. package/dist/{chunk-EEWRLFTI.js.map → chunk-XB6YHUKW.js.map} +1 -1
  82. package/dist/{chunk-D354R6T6.js → chunk-ZY4CVNNZ.js} +3 -3
  83. package/dist/{chunk-D354R6T6.js.map → chunk-ZY4CVNNZ.js.map} +1 -1
  84. package/dist/command.cjs +4 -4
  85. package/dist/command.js +2 -2
  86. package/dist/composer.cjs +7 -5
  87. package/dist/composer.js +5 -3
  88. package/dist/content-renderer.cjs +5 -5
  89. package/dist/content-renderer.js +2 -2
  90. package/dist/context-menu.cjs +4 -4
  91. package/dist/context-menu.js +2 -2
  92. package/dist/drawer.cjs +4 -4
  93. package/dist/drawer.js +2 -2
  94. package/dist/dropdown.cjs +4 -4
  95. package/dist/dropdown.js +2 -2
  96. package/dist/editor.cjs +6 -6
  97. package/dist/editor.js +4 -4
  98. package/dist/index.cjs +83 -79
  99. package/dist/index.d.cts +85 -8
  100. package/dist/index.d.ts +85 -8
  101. package/dist/index.js +21 -21
  102. package/dist/input.cjs +6 -4
  103. package/dist/input.js +5 -3
  104. package/dist/inputs.cjs +4 -4
  105. package/dist/inputs.js +3 -3
  106. package/dist/json-editor.cjs +17 -17
  107. package/dist/json-editor.js +6 -6
  108. package/dist/magic-wand.cjs +5 -4
  109. package/dist/magic-wand.d.cts +51 -6
  110. package/dist/magic-wand.d.ts +51 -6
  111. package/dist/magic-wand.js +4 -3
  112. package/dist/mobile-menu.cjs +4 -4
  113. package/dist/mobile-menu.js +2 -2
  114. package/dist/modal.cjs +4 -4
  115. package/dist/modal.js +2 -2
  116. package/dist/paste-pills.cjs +17 -15
  117. package/dist/paste-pills.d.cts +3 -1
  118. package/dist/paste-pills.d.ts +3 -1
  119. package/dist/paste-pills.js +4 -2
  120. package/dist/prompt-input.cjs +9 -6
  121. package/dist/prompt-input.js +8 -5
  122. package/dist/reason-tag.cjs +4 -4
  123. package/dist/reason-tag.js +3 -3
  124. package/dist/sidebar.cjs +1 -1
  125. package/dist/sidebar.js +1 -1
  126. package/dist/styles.css.map +1 -1
  127. package/docs/Chart.md +6 -0
  128. package/docs/ContentRenderer.md +36 -0
  129. package/docs/MagicWand.md +29 -2
  130. package/package.json +1 -1
  131. package/dist/chunk-3WGRVDQR.cjs +0 -39
  132. package/dist/chunk-3WGRVDQR.cjs.map +0 -1
  133. package/dist/chunk-7B3HK6TY.cjs.map +0 -1
  134. package/dist/chunk-CHADHN6M.js +0 -37
  135. package/dist/chunk-CHADHN6M.js.map +0 -1
  136. package/dist/chunk-CK6LRROH.js.map +0 -1
  137. package/dist/chunk-FNYUUVOK.cjs.map +0 -1
  138. package/dist/chunk-GMNMJLZO.js.map +0 -1
  139. package/dist/chunk-I6XHZ3S2.cjs.map +0 -1
  140. package/dist/chunk-JHDO6CRT.js.map +0 -1
  141. package/dist/chunk-KYZNCVRD.js.map +0 -1
  142. package/dist/chunk-LRNWD26Z.cjs +0 -82
  143. package/dist/chunk-LRNWD26Z.cjs.map +0 -1
  144. package/dist/chunk-MSRYJETY.cjs.map +0 -1
  145. package/dist/chunk-QXYO76NZ.js +0 -79
  146. package/dist/chunk-QXYO76NZ.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -21,7 +21,7 @@ var chunkCOH45MGW_cjs = require('./chunk-COH45MGW.cjs');
21
21
  var chunkYMDYDUBH_cjs = require('./chunk-YMDYDUBH.cjs');
22
22
  var chunkRLMU3NHQ_cjs = require('./chunk-RLMU3NHQ.cjs');
23
23
  var chunkUBZFOTZN_cjs = require('./chunk-UBZFOTZN.cjs');
24
- var chunkEEKXWXYO_cjs = require('./chunk-EEKXWXYO.cjs');
24
+ var chunkGCWIZNN2_cjs = require('./chunk-GCWIZNN2.cjs');
25
25
  var chunk5P3PISAX_cjs = require('./chunk-5P3PISAX.cjs');
26
26
  var chunkOS2QC3NE_cjs = require('./chunk-OS2QC3NE.cjs');
27
27
  var chunk6IBBAOQC_cjs = require('./chunk-6IBBAOQC.cjs');
@@ -30,27 +30,27 @@ var chunk7Y2AENZD_cjs = require('./chunk-7Y2AENZD.cjs');
30
30
  var chunkO6GTY53I_cjs = require('./chunk-O6GTY53I.cjs');
31
31
  var chunkATJSHM6J_cjs = require('./chunk-ATJSHM6J.cjs');
32
32
  var chunkLLA33GKC_cjs = require('./chunk-LLA33GKC.cjs');
33
- var chunkWKNVZUWZ_cjs = require('./chunk-WKNVZUWZ.cjs');
34
33
  var chunkPFEFKLUV_cjs = require('./chunk-PFEFKLUV.cjs');
35
34
  var chunkRWOH2ADL_cjs = require('./chunk-RWOH2ADL.cjs');
36
- var chunkTKDUT7ZA_cjs = require('./chunk-TKDUT7ZA.cjs');
35
+ var chunkMH4QS7OE_cjs = require('./chunk-MH4QS7OE.cjs');
36
+ var chunkX7H75WVP_cjs = require('./chunk-X7H75WVP.cjs');
37
37
  var chunkWKAEAGMT_cjs = require('./chunk-WKAEAGMT.cjs');
38
38
  var chunkAE53RKWR_cjs = require('./chunk-AE53RKWR.cjs');
39
- var chunkGBGJWAXZ_cjs = require('./chunk-GBGJWAXZ.cjs');
40
- var chunkTXCAIL5X_cjs = require('./chunk-TXCAIL5X.cjs');
39
+ var chunk25UPDBI6_cjs = require('./chunk-25UPDBI6.cjs');
40
+ var chunkHKRB2Z6R_cjs = require('./chunk-HKRB2Z6R.cjs');
41
41
  var chunkI6L7OP7G_cjs = require('./chunk-I6L7OP7G.cjs');
42
42
  var chunkQSFTWIUH_cjs = require('./chunk-QSFTWIUH.cjs');
43
43
  var chunkXK5WHQ3O_cjs = require('./chunk-XK5WHQ3O.cjs');
44
44
  var chunkHIN6PHSE_cjs = require('./chunk-HIN6PHSE.cjs');
45
45
  var chunkF7YCIII4_cjs = require('./chunk-F7YCIII4.cjs');
46
- var chunkRLC2BE3D_cjs = require('./chunk-RLC2BE3D.cjs');
47
- var chunk2QIGXSSZ_cjs = require('./chunk-2QIGXSSZ.cjs');
46
+ var chunkATANWEXA_cjs = require('./chunk-ATANWEXA.cjs');
47
+ var chunk7ZDJPHLJ_cjs = require('./chunk-7ZDJPHLJ.cjs');
48
48
  var chunkAR3JOPGT_cjs = require('./chunk-AR3JOPGT.cjs');
49
49
  var chunkY52NXM73_cjs = require('./chunk-Y52NXM73.cjs');
50
50
  var chunkBZZDHDMK_cjs = require('./chunk-BZZDHDMK.cjs');
51
51
  var chunkQAFAPHAF_cjs = require('./chunk-QAFAPHAF.cjs');
52
52
  var chunkSUCBR6L5_cjs = require('./chunk-SUCBR6L5.cjs');
53
- var chunkI6XHZ3S2_cjs = require('./chunk-I6XHZ3S2.cjs');
53
+ var chunkSAPOYAGN_cjs = require('./chunk-SAPOYAGN.cjs');
54
54
  var chunkV6VFSX6V_cjs = require('./chunk-V6VFSX6V.cjs');
55
55
  require('./chunk-7EZBMGEE.cjs');
56
56
  var chunkXKDW6B7X_cjs = require('./chunk-XKDW6B7X.cjs');
@@ -69,29 +69,29 @@ var chunk2KZINS6D_cjs = require('./chunk-2KZINS6D.cjs');
69
69
  var chunkRU6ZTA4M_cjs = require('./chunk-RU6ZTA4M.cjs');
70
70
  var chunkTGNQ5Y6F_cjs = require('./chunk-TGNQ5Y6F.cjs');
71
71
  require('./chunk-S3TRSECD.cjs');
72
- var chunkPV5WDIGM_cjs = require('./chunk-PV5WDIGM.cjs');
73
- var chunkZ43BI7CQ_cjs = require('./chunk-Z43BI7CQ.cjs');
74
- var chunkT5OCRKPD_cjs = require('./chunk-T5OCRKPD.cjs');
75
- var chunkODAPI4QJ_cjs = require('./chunk-ODAPI4QJ.cjs');
72
+ var chunkFVG3YXXM_cjs = require('./chunk-FVG3YXXM.cjs');
73
+ var chunkGU5BYZTR_cjs = require('./chunk-GU5BYZTR.cjs');
74
+ var chunk23PAOCQQ_cjs = require('./chunk-23PAOCQQ.cjs');
75
+ var chunkM52IS5SO_cjs = require('./chunk-M52IS5SO.cjs');
76
76
  var chunkHPNIEYSJ_cjs = require('./chunk-HPNIEYSJ.cjs');
77
77
  var chunkT6YELZPJ_cjs = require('./chunk-T6YELZPJ.cjs');
78
- var chunkFNYUUVOK_cjs = require('./chunk-FNYUUVOK.cjs');
78
+ var chunkMFQ5NBSV_cjs = require('./chunk-MFQ5NBSV.cjs');
79
79
  var chunkAVU4JOYM_cjs = require('./chunk-AVU4JOYM.cjs');
80
80
  var chunkWIS4QRGK_cjs = require('./chunk-WIS4QRGK.cjs');
81
81
  var chunkVGBZWDMM_cjs = require('./chunk-VGBZWDMM.cjs');
82
82
  var chunkDHIUMQLP_cjs = require('./chunk-DHIUMQLP.cjs');
83
- var chunk7B3HK6TY_cjs = require('./chunk-7B3HK6TY.cjs');
83
+ var chunkB6CQ4KK7_cjs = require('./chunk-B6CQ4KK7.cjs');
84
84
  var chunkHE3JJXIL_cjs = require('./chunk-HE3JJXIL.cjs');
85
85
  require('./chunk-AIA5UNQ5.cjs');
86
86
  var chunkG7227RTY_cjs = require('./chunk-G7227RTY.cjs');
87
87
  require('./chunk-XFBLUPKF.cjs');
88
88
  var chunkBVRPDMB7_cjs = require('./chunk-BVRPDMB7.cjs');
89
- var chunkW7IP6RT3_cjs = require('./chunk-W7IP6RT3.cjs');
89
+ var chunkWBVWV2V7_cjs = require('./chunk-WBVWV2V7.cjs');
90
90
  var chunkTXTRTTG7_cjs = require('./chunk-TXTRTTG7.cjs');
91
- var chunk3WGRVDQR_cjs = require('./chunk-3WGRVDQR.cjs');
92
- var chunkBR27AXFE_cjs = require('./chunk-BR27AXFE.cjs');
93
- var chunkMSRYJETY_cjs = require('./chunk-MSRYJETY.cjs');
94
- var chunkX7H75WVP_cjs = require('./chunk-X7H75WVP.cjs');
91
+ var chunkFQZE5N2N_cjs = require('./chunk-FQZE5N2N.cjs');
92
+ var chunkSYVOGYJG_cjs = require('./chunk-SYVOGYJG.cjs');
93
+ var chunkR3UG6PVX_cjs = require('./chunk-R3UG6PVX.cjs');
94
+ var chunkWKNVZUWZ_cjs = require('./chunk-WKNVZUWZ.cjs');
95
95
  var chunkFQSSVOVQ_cjs = require('./chunk-FQSSVOVQ.cjs');
96
96
  var chunk5CXJ5Z4C_cjs = require('./chunk-5CXJ5Z4C.cjs');
97
97
  require('./chunk-VBWRH4UW.cjs');
@@ -99,8 +99,8 @@ var chunkMOU6O324_cjs = require('./chunk-MOU6O324.cjs');
99
99
  var chunkLMPPAQKP_cjs = require('./chunk-LMPPAQKP.cjs');
100
100
  var chunkJFOORUUD_cjs = require('./chunk-JFOORUUD.cjs');
101
101
  require('./chunk-M5MUGSON.cjs');
102
- var chunk3XJKJQSY_cjs = require('./chunk-3XJKJQSY.cjs');
103
- var chunkLRNWD26Z_cjs = require('./chunk-LRNWD26Z.cjs');
102
+ var chunkFWA4PCW7_cjs = require('./chunk-FWA4PCW7.cjs');
103
+ var chunkX2FC7ODX_cjs = require('./chunk-X2FC7ODX.cjs');
104
104
  var chunkXCZZVRBY_cjs = require('./chunk-XCZZVRBY.cjs');
105
105
  var chunkQKFOJKVE_cjs = require('./chunk-QKFOJKVE.cjs');
106
106
  var chunkQOGKO6JH_cjs = require('./chunk-QOGKO6JH.cjs');
@@ -199,7 +199,7 @@ Object.defineProperty(exports, "useToast", {
199
199
  });
200
200
  Object.defineProperty(exports, "ReasonTag", {
201
201
  enumerable: true,
202
- get: function () { return chunkEEKXWXYO_cjs.ReasonTag; }
202
+ get: function () { return chunkGCWIZNN2_cjs.ReasonTag; }
203
203
  });
204
204
  Object.defineProperty(exports, "Section", {
205
205
  enumerable: true,
@@ -241,14 +241,6 @@ Object.defineProperty(exports, "Pillbox", {
241
241
  enumerable: true,
242
242
  get: function () { return chunkLLA33GKC_cjs.Pillbox; }
243
243
  });
244
- Object.defineProperty(exports, "Popover", {
245
- enumerable: true,
246
- get: function () { return chunkWKNVZUWZ_cjs.Popover; }
247
- });
248
- Object.defineProperty(exports, "usePopover", {
249
- enumerable: true,
250
- get: function () { return chunkWKNVZUWZ_cjs.usePopover; }
251
- });
252
244
  Object.defineProperty(exports, "Profile", {
253
245
  enumerable: true,
254
246
  get: function () { return chunkPFEFKLUV_cjs.Profile; }
@@ -259,19 +251,23 @@ Object.defineProperty(exports, "Progress", {
259
251
  });
260
252
  Object.defineProperty(exports, "PromptInput", {
261
253
  enumerable: true,
262
- get: function () { return chunkTKDUT7ZA_cjs.PromptInput; }
254
+ get: function () { return chunkMH4QS7OE_cjs.PromptInput; }
263
255
  });
264
256
  Object.defineProperty(exports, "browserPlatformHints", {
265
257
  enumerable: true,
266
- get: function () { return chunkTKDUT7ZA_cjs.browserPlatformHints; }
258
+ get: function () { return chunkMH4QS7OE_cjs.browserPlatformHints; }
267
259
  });
268
260
  Object.defineProperty(exports, "detectPlatform", {
269
261
  enumerable: true,
270
- get: function () { return chunkTKDUT7ZA_cjs.detectPlatform; }
262
+ get: function () { return chunkMH4QS7OE_cjs.detectPlatform; }
271
263
  });
272
264
  Object.defineProperty(exports, "modifierKeyLabel", {
273
265
  enumerable: true,
274
- get: function () { return chunkTKDUT7ZA_cjs.modifierKeyLabel; }
266
+ get: function () { return chunkMH4QS7OE_cjs.modifierKeyLabel; }
267
+ });
268
+ Object.defineProperty(exports, "Tooltip", {
269
+ enumerable: true,
270
+ get: function () { return chunkX7H75WVP_cjs.Tooltip; }
275
271
  });
276
272
  Object.defineProperty(exports, "PullQuote", {
277
273
  enumerable: true,
@@ -291,19 +287,19 @@ Object.defineProperty(exports, "selectMode", {
291
287
  });
292
288
  Object.defineProperty(exports, "MobileMenu", {
293
289
  enumerable: true,
294
- get: function () { return chunkGBGJWAXZ_cjs.MobileMenu; }
290
+ get: function () { return chunk25UPDBI6_cjs.MobileMenu; }
295
291
  });
296
292
  Object.defineProperty(exports, "useMobileMenu", {
297
293
  enumerable: true,
298
- get: function () { return chunkGBGJWAXZ_cjs.useMobileMenu; }
294
+ get: function () { return chunk25UPDBI6_cjs.useMobileMenu; }
299
295
  });
300
296
  Object.defineProperty(exports, "Modal", {
301
297
  enumerable: true,
302
- get: function () { return chunkTXCAIL5X_cjs.Modal; }
298
+ get: function () { return chunkHKRB2Z6R_cjs.Modal; }
303
299
  });
304
300
  Object.defineProperty(exports, "useModal", {
305
301
  enumerable: true,
306
- get: function () { return chunkTXCAIL5X_cjs.useModal; }
302
+ get: function () { return chunkHKRB2Z6R_cjs.useModal; }
307
303
  });
308
304
  Object.defineProperty(exports, "MoodMeter", {
309
305
  enumerable: true,
@@ -347,55 +343,55 @@ Object.defineProperty(exports, "textareaAdapter", {
347
343
  });
348
344
  Object.defineProperty(exports, "JSON_FIELD_TYPES", {
349
345
  enumerable: true,
350
- get: function () { return chunkRLC2BE3D_cjs.JSON_FIELD_TYPES; }
346
+ get: function () { return chunkATANWEXA_cjs.JSON_FIELD_TYPES; }
351
347
  });
352
348
  Object.defineProperty(exports, "JsonEditor", {
353
349
  enumerable: true,
354
- get: function () { return chunkRLC2BE3D_cjs.JsonEditor; }
350
+ get: function () { return chunkATANWEXA_cjs.JsonEditor; }
355
351
  });
356
352
  Object.defineProperty(exports, "applyJsonEdit", {
357
353
  enumerable: true,
358
- get: function () { return chunkRLC2BE3D_cjs.applyJsonEdit; }
354
+ get: function () { return chunkATANWEXA_cjs.applyJsonEdit; }
359
355
  });
360
356
  Object.defineProperty(exports, "describeEdit", {
361
357
  enumerable: true,
362
- get: function () { return chunkRLC2BE3D_cjs.describeEdit; }
358
+ get: function () { return chunkATANWEXA_cjs.describeEdit; }
363
359
  });
364
360
  Object.defineProperty(exports, "findJsonConflicts", {
365
361
  enumerable: true,
366
- get: function () { return chunkRLC2BE3D_cjs.findJsonConflicts; }
362
+ get: function () { return chunkATANWEXA_cjs.findJsonConflicts; }
367
363
  });
368
364
  Object.defineProperty(exports, "getAtPath", {
369
365
  enumerable: true,
370
- get: function () { return chunkRLC2BE3D_cjs.getAtPath; }
366
+ get: function () { return chunkATANWEXA_cjs.getAtPath; }
371
367
  });
372
368
  Object.defineProperty(exports, "inferType", {
373
369
  enumerable: true,
374
- get: function () { return chunkRLC2BE3D_cjs.inferType; }
370
+ get: function () { return chunkATANWEXA_cjs.inferType; }
375
371
  });
376
372
  Object.defineProperty(exports, "parseKeyMap", {
377
373
  enumerable: true,
378
- get: function () { return chunkRLC2BE3D_cjs.parseKeyMap; }
374
+ get: function () { return chunkATANWEXA_cjs.parseKeyMap; }
379
375
  });
380
376
  Object.defineProperty(exports, "parsePath", {
381
377
  enumerable: true,
382
- get: function () { return chunkRLC2BE3D_cjs.parsePath; }
378
+ get: function () { return chunkATANWEXA_cjs.parsePath; }
383
379
  });
384
380
  Object.defineProperty(exports, "pathToString", {
385
381
  enumerable: true,
386
- get: function () { return chunkRLC2BE3D_cjs.pathToString; }
382
+ get: function () { return chunkATANWEXA_cjs.pathToString; }
387
383
  });
388
384
  Object.defineProperty(exports, "resolveKeyRule", {
389
385
  enumerable: true,
390
- get: function () { return chunkRLC2BE3D_cjs.resolveKeyRule; }
386
+ get: function () { return chunkATANWEXA_cjs.resolveKeyRule; }
391
387
  });
392
388
  Object.defineProperty(exports, "typeMatches", {
393
389
  enumerable: true,
394
- get: function () { return chunkRLC2BE3D_cjs.typeMatches; }
390
+ get: function () { return chunkATANWEXA_cjs.typeMatches; }
395
391
  });
396
392
  Object.defineProperty(exports, "Input", {
397
393
  enumerable: true,
398
- get: function () { return chunk2QIGXSSZ_cjs.Input; }
394
+ get: function () { return chunk7ZDJPHLJ_cjs.Input; }
399
395
  });
400
396
  Object.defineProperty(exports, "Select", {
401
397
  enumerable: true,
@@ -423,7 +419,7 @@ Object.defineProperty(exports, "Kbd", {
423
419
  });
424
420
  Object.defineProperty(exports, "MagicWand", {
425
421
  enumerable: true,
426
- get: function () { return chunkI6XHZ3S2_cjs.MagicWand; }
422
+ get: function () { return chunkSAPOYAGN_cjs.MagicWand; }
427
423
  });
428
424
  Object.defineProperty(exports, "Textarea", {
429
425
  enumerable: true,
@@ -507,35 +503,35 @@ Object.defineProperty(exports, "IndexList", {
507
503
  });
508
504
  Object.defineProperty(exports, "ContextMenu", {
509
505
  enumerable: true,
510
- get: function () { return chunkPV5WDIGM_cjs.ContextMenu; }
506
+ get: function () { return chunkFVG3YXXM_cjs.ContextMenu; }
511
507
  });
512
508
  Object.defineProperty(exports, "useContextMenu", {
513
509
  enumerable: true,
514
- get: function () { return chunkPV5WDIGM_cjs.useContextMenu; }
510
+ get: function () { return chunkFVG3YXXM_cjs.useContextMenu; }
515
511
  });
516
512
  Object.defineProperty(exports, "Drawer", {
517
513
  enumerable: true,
518
- get: function () { return chunkZ43BI7CQ_cjs.Drawer; }
514
+ get: function () { return chunkGU5BYZTR_cjs.Drawer; }
519
515
  });
520
516
  Object.defineProperty(exports, "useDrawer", {
521
517
  enumerable: true,
522
- get: function () { return chunkZ43BI7CQ_cjs.useDrawer; }
518
+ get: function () { return chunkGU5BYZTR_cjs.useDrawer; }
523
519
  });
524
520
  Object.defineProperty(exports, "Dropdown", {
525
521
  enumerable: true,
526
- get: function () { return chunkT5OCRKPD_cjs.Dropdown; }
522
+ get: function () { return chunk23PAOCQQ_cjs.Dropdown; }
527
523
  });
528
524
  Object.defineProperty(exports, "useDropdown", {
529
525
  enumerable: true,
530
- get: function () { return chunkT5OCRKPD_cjs.useDropdown; }
526
+ get: function () { return chunk23PAOCQQ_cjs.useDropdown; }
531
527
  });
532
528
  Object.defineProperty(exports, "Editor", {
533
529
  enumerable: true,
534
- get: function () { return chunkODAPI4QJ_cjs.Editor; }
530
+ get: function () { return chunkM52IS5SO_cjs.Editor; }
535
531
  });
536
532
  Object.defineProperty(exports, "useEditor", {
537
533
  enumerable: true,
538
- get: function () { return chunkODAPI4QJ_cjs.useEditor; }
534
+ get: function () { return chunkM52IS5SO_cjs.useEditor; }
539
535
  });
540
536
  Object.defineProperty(exports, "THEME_STORAGE_KEY", {
541
537
  enumerable: true,
@@ -579,15 +575,19 @@ Object.defineProperty(exports, "usePanZoom", {
579
575
  });
580
576
  Object.defineProperty(exports, "ContentRenderer", {
581
577
  enumerable: true,
582
- get: function () { return chunkFNYUUVOK_cjs.ContentRenderer; }
578
+ get: function () { return chunkMFQ5NBSV_cjs.ContentRenderer; }
583
579
  });
584
580
  Object.defineProperty(exports, "registerExtension", {
585
581
  enumerable: true,
586
- get: function () { return chunkFNYUUVOK_cjs.registerExtension; }
582
+ get: function () { return chunkMFQ5NBSV_cjs.registerExtension; }
587
583
  });
588
584
  Object.defineProperty(exports, "registerExtensions", {
589
585
  enumerable: true,
590
- get: function () { return chunkFNYUUVOK_cjs.registerExtensions; }
586
+ get: function () { return chunkMFQ5NBSV_cjs.registerExtensions; }
587
+ });
588
+ Object.defineProperty(exports, "renderMarkdown", {
589
+ enumerable: true,
590
+ get: function () { return chunkMFQ5NBSV_cjs.renderMarkdown; }
591
591
  });
592
592
  Object.defineProperty(exports, "Emoji", {
593
593
  enumerable: true,
@@ -611,7 +611,7 @@ Object.defineProperty(exports, "useCarousel", {
611
611
  });
612
612
  Object.defineProperty(exports, "Chart", {
613
613
  enumerable: true,
614
- get: function () { return chunk7B3HK6TY_cjs.Chart; }
614
+ get: function () { return chunkB6CQ4KK7_cjs.Chart; }
615
615
  });
616
616
  Object.defineProperty(exports, "ChatDrawer", {
617
617
  enumerable: true,
@@ -627,11 +627,11 @@ Object.defineProperty(exports, "ColorPicker", {
627
627
  });
628
628
  Object.defineProperty(exports, "Command", {
629
629
  enumerable: true,
630
- get: function () { return chunkW7IP6RT3_cjs.Command; }
630
+ get: function () { return chunkWBVWV2V7_cjs.Command; }
631
631
  });
632
632
  Object.defineProperty(exports, "useCommand", {
633
633
  enumerable: true,
634
- get: function () { return chunkW7IP6RT3_cjs.useCommand; }
634
+ get: function () { return chunkWBVWV2V7_cjs.useCommand; }
635
635
  });
636
636
  Object.defineProperty(exports, "useFocusTrap", {
637
637
  enumerable: true,
@@ -639,35 +639,39 @@ Object.defineProperty(exports, "useFocusTrap", {
639
639
  });
640
640
  Object.defineProperty(exports, "useAnimation", {
641
641
  enumerable: true,
642
- get: function () { return chunk3WGRVDQR_cjs.useAnimation; }
642
+ get: function () { return chunkFQZE5N2N_cjs.useAnimation; }
643
643
  });
644
644
  Object.defineProperty(exports, "Composer", {
645
645
  enumerable: true,
646
- get: function () { return chunkBR27AXFE_cjs.Composer; }
646
+ get: function () { return chunkSYVOGYJG_cjs.Composer; }
647
647
  });
648
648
  Object.defineProperty(exports, "InlinePasteEditor", {
649
649
  enumerable: true,
650
- get: function () { return chunkMSRYJETY_cjs.InlinePasteEditor; }
650
+ get: function () { return chunkR3UG6PVX_cjs.InlinePasteEditor; }
651
651
  });
652
652
  Object.defineProperty(exports, "PastedFilesInput", {
653
653
  enumerable: true,
654
- get: function () { return chunkMSRYJETY_cjs.PastedFilesInput; }
654
+ get: function () { return chunkR3UG6PVX_cjs.PastedFilesInput; }
655
655
  });
656
656
  Object.defineProperty(exports, "pasteMarker", {
657
657
  enumerable: true,
658
- get: function () { return chunkMSRYJETY_cjs.pasteMarker; }
658
+ get: function () { return chunkR3UG6PVX_cjs.pasteMarker; }
659
659
  });
660
660
  Object.defineProperty(exports, "useInlinePaste", {
661
661
  enumerable: true,
662
- get: function () { return chunkMSRYJETY_cjs.useInlinePaste; }
662
+ get: function () { return chunkR3UG6PVX_cjs.useInlinePaste; }
663
663
  });
664
664
  Object.defineProperty(exports, "usePastePills", {
665
665
  enumerable: true,
666
- get: function () { return chunkMSRYJETY_cjs.usePastePills; }
666
+ get: function () { return chunkR3UG6PVX_cjs.usePastePills; }
667
667
  });
668
- Object.defineProperty(exports, "Tooltip", {
668
+ Object.defineProperty(exports, "Popover", {
669
669
  enumerable: true,
670
- get: function () { return chunkX7H75WVP_cjs.Tooltip; }
670
+ get: function () { return chunkWKNVZUWZ_cjs.Popover; }
671
+ });
672
+ Object.defineProperty(exports, "usePopover", {
673
+ enumerable: true,
674
+ get: function () { return chunkWKNVZUWZ_cjs.usePopover; }
671
675
  });
672
676
  Object.defineProperty(exports, "Container", {
673
677
  enumerable: true,
@@ -695,19 +699,19 @@ Object.defineProperty(exports, "Breadcrumbs", {
695
699
  });
696
700
  Object.defineProperty(exports, "Action", {
697
701
  enumerable: true,
698
- get: function () { return chunk3XJKJQSY_cjs.Action; }
702
+ get: function () { return chunkFWA4PCW7_cjs.Action; }
699
703
  });
700
704
  Object.defineProperty(exports, "Button", {
701
705
  enumerable: true,
702
- get: function () { return chunk3XJKJQSY_cjs.Button; }
706
+ get: function () { return chunkFWA4PCW7_cjs.Button; }
703
707
  });
704
708
  Object.defineProperty(exports, "sanitizeHref", {
705
709
  enumerable: true,
706
- get: function () { return chunkLRNWD26Z_cjs.sanitizeHref; }
710
+ get: function () { return chunkX2FC7ODX_cjs.sanitizeHref; }
707
711
  });
708
712
  Object.defineProperty(exports, "sanitizeHtml", {
709
713
  enumerable: true,
710
- get: function () { return chunkLRNWD26Z_cjs.sanitizeHtml; }
714
+ get: function () { return chunkX2FC7ODX_cjs.sanitizeHtml; }
711
715
  });
712
716
  Object.defineProperty(exports, "EMOJI_CATEGORY_ORDER", {
713
717
  enumerable: true,
package/dist/index.d.cts CHANGED
@@ -91,7 +91,7 @@ export { ReasonTag, ReasonTagProps, ReasonTagSource, ReasonTagTheme } from './re
91
91
  export { MoodMeter, MoodMeterProps } from './mood-meter.cjs';
92
92
  export { ChatDrawer, ChatDrawerProps, ChatDrawerTab } from './chat-drawer.cjs';
93
93
  export { ControlledAdapterHandle, InputTag, InputTagAdapter, InputTagAdapterState, InputTagProps, InputTagTrigger, InputTagTriggers, contentEditableAdapter, controlledAdapter, inputAdapter, textareaAdapter } from './input-tag.cjs';
94
- export { MagicWand, MagicWandAction, MagicWandAppearance, MagicWandProps, MagicWandSelection } from './magic-wand.cjs';
94
+ export { MagicWand, MagicWandAction, MagicWandAppearance, MagicWandProps, MagicWandRect, MagicWandSelection, MagicWandTarget, MagicWandTargetAdapter } from './magic-wand.cjs';
95
95
  export { ImageViewer } from './image-viewer.cjs';
96
96
  export { I as ImageViewerProps, a as ImageViewerViewport } from './ImageViewer.types-CtqaA6KV.cjs';
97
97
  export { VideoViewer } from './video-viewer.cjs';
@@ -131,14 +131,81 @@ declare function cn(...inputs: ClassValue[]): string;
131
131
  */
132
132
  declare function sanitizeHref(href: string | undefined | null): string | undefined;
133
133
  /**
134
- * Sanitize an HTML string by removing dangerous tags (script, iframe, etc.),
135
- * event-handler attributes (`onclick`, `onerror`, ...), and dangerous URI
136
- * schemes in `href`/`src` attributes.
134
+ * Allowlist options for {@link sanitizeHtml}. Passing ANY options object
135
+ * (even `{}`) switches from the default blocklist to allowlist mode, where
136
+ * everything not listed is removed.
137
+ */
138
+ interface SanitizeHtmlOptions {
139
+ /**
140
+ * Tags to keep, e.g. `["p", "a", "strong"]`. A tag that is not listed is
141
+ * removed but its text and (cleaned) children are kept. Default: none, so
142
+ * only text survives.
143
+ *
144
+ * Some tags are removed WITH their content even when listed, because no
145
+ * attribute filtering makes them safe: `script`, `style`, `iframe`, `frame`,
146
+ * `frameset`, `object`, `embed`, `applet`, `link`, `meta`, `base`, `form`,
147
+ * `title`, `template`, `noscript`, `noembed`, `noframes`, `xmp`,
148
+ * `plaintext`, `svg` and `math`.
149
+ */
150
+ allowedTags?: readonly string[];
151
+ /**
152
+ * Attributes to keep. Either one list for every allowed tag, or a map from
153
+ * tag name to its list, where the key `"*"` applies to every tag. A trailing
154
+ * `*` matches a prefix (`"data-*"`, `"aria-*"`). Default: none.
155
+ *
156
+ * Never kept, even when listed: event handlers (`on*`), `srcdoc` and
157
+ * `srcset`.
158
+ */
159
+ allowedAttributes?: readonly string[] | Readonly<Record<string, readonly string[]>>;
160
+ /**
161
+ * URL schemes allowed in URL attributes (`href`, `src`, `action`,
162
+ * `formaction`, `cite`, `poster`, `background`, `ping`, `xlink:href`), with
163
+ * the colon: `["https:", "mailto:"]`. A URL attribute whose scheme is not
164
+ * listed is removed. Default: `["http:", "https:", "mailto:"]`.
165
+ *
166
+ * `javascript:` and `vbscript:` are never kept, even when listed.
167
+ */
168
+ allowedSchemes?: readonly string[];
169
+ /**
170
+ * Keep URLs with no scheme that stay on this site: `/x`, `x/y`, `../x`,
171
+ * `?q`, `#frag`. Protocol-relative URLs (`//host/x`, and the backslash
172
+ * spellings a browser treats the same way) leave the site and are always
173
+ * removed. Default: `false`.
174
+ */
175
+ allowRelative?: boolean;
176
+ }
177
+ /**
178
+ * Sanitize an HTML string.
179
+ *
180
+ * **With no options** (the default blocklist): removes dangerous tags (script,
181
+ * iframe, etc.), event-handler attributes (`onclick`, `onerror`, ...), and
182
+ * dangerous URI schemes in `href`/`src` attributes. Everything else is kept.
183
+ * In non-browser environments returns the input unchanged — sanitize on the
184
+ * server in those cases.
137
185
  *
138
- * Uses the browser's `DOMParser`. In non-browser environments returns the
139
- * input unchanged — sanitize on the server in those cases.
186
+ * **With options** (allowlist mode): keeps ONLY the listed tags, attributes and
187
+ * URL schemes; see {@link SanitizeHtmlOptions}. The allowlist can only narrow:
188
+ * event handlers, `javascript:` URLs and script-capable tags never survive,
189
+ * even when listed. In non-browser environments the input is returned as
190
+ * escaped text (fail closed).
191
+ *
192
+ * Uses the browser's `DOMParser`.
140
193
  */
141
- declare function sanitizeHtml(html: string): string;
194
+ declare function sanitizeHtml(html: string, options?: SanitizeHtmlOptions): string;
195
+
196
+ /**
197
+ * Render markdown (GitHub-flavoured) to sanitised HTML — the same parser and
198
+ * output `ContentRenderer` uses, so a host never has to import the parser
199
+ * itself.
200
+ *
201
+ * With no `sanitize` options the default blocklist of {@link sanitizeHtml} is
202
+ * applied; pass allowlist options to keep only what you list:
203
+ *
204
+ * ```ts
205
+ * renderMarkdown(md, { allowedTags: ["p", "strong", "a"], allowedAttributes: ["href"] })
206
+ * ```
207
+ */
208
+ declare function renderMarkdown(markdown: string, sanitize?: SanitizeHtmlOptions): string;
142
209
 
143
210
  /**
144
211
  * One state slot that works controlled or uncontrolled.
@@ -203,6 +270,16 @@ interface UseAnimationReturn {
203
270
  className: string;
204
271
  ref: React.RefObject<HTMLElement | null>;
205
272
  }
273
+ /**
274
+ * Mount on open, play `exitClass` on close, then unmount.
275
+ *
276
+ * The unmount used to happen ONLY on `animationend`. With no animation running —
277
+ * an app that does not load Fancy's stylesheet, jsdom, an `exitClass` that
278
+ * resolves to nothing — the event never fires and the closed panel stayed in the
279
+ * DOM forever. So the exit is measured: nothing running unmounts at once,
280
+ * something running unmounts on its own `animationend` or after its measured
281
+ * duration, whichever comes first.
282
+ */
206
283
  declare function useAnimation({ open, enterClass, exitClass, }: UseAnimationOptions): UseAnimationReturn;
207
284
 
208
285
  declare function useId(prefix?: string): string;
@@ -316,4 +393,4 @@ type UseThemeResult = {
316
393
  */
317
394
  declare function useTheme(): UseThemeResult;
318
395
 
319
- export { type NodeRect, Placement, type ResolvedTheme, THEME_STORAGE_KEY, type ThemePreference, type UseThemeResult, cn, getThemePreference, initTheme, resolveTheme, sanitizeHref, sanitizeHtml, setThemePreference, subscribeTheme, useAnimation, useControllableState, useEscapeKey, useFloatingPosition, useFocusTrap, useId, useNodeRegistry, useOutsideClick, usePanZoom, useTheme };
396
+ export { type NodeRect, Placement, type ResolvedTheme, type SanitizeHtmlOptions, THEME_STORAGE_KEY, type ThemePreference, type UseThemeResult, cn, getThemePreference, initTheme, renderMarkdown, resolveTheme, sanitizeHref, sanitizeHtml, setThemePreference, subscribeTheme, useAnimation, useControllableState, useEscapeKey, useFloatingPosition, useFocusTrap, useId, useNodeRegistry, useOutsideClick, usePanZoom, useTheme };
package/dist/index.d.ts CHANGED
@@ -91,7 +91,7 @@ export { ReasonTag, ReasonTagProps, ReasonTagSource, ReasonTagTheme } from './re
91
91
  export { MoodMeter, MoodMeterProps } from './mood-meter.js';
92
92
  export { ChatDrawer, ChatDrawerProps, ChatDrawerTab } from './chat-drawer.js';
93
93
  export { ControlledAdapterHandle, InputTag, InputTagAdapter, InputTagAdapterState, InputTagProps, InputTagTrigger, InputTagTriggers, contentEditableAdapter, controlledAdapter, inputAdapter, textareaAdapter } from './input-tag.js';
94
- export { MagicWand, MagicWandAction, MagicWandAppearance, MagicWandProps, MagicWandSelection } from './magic-wand.js';
94
+ export { MagicWand, MagicWandAction, MagicWandAppearance, MagicWandProps, MagicWandRect, MagicWandSelection, MagicWandTarget, MagicWandTargetAdapter } from './magic-wand.js';
95
95
  export { ImageViewer } from './image-viewer.js';
96
96
  export { I as ImageViewerProps, a as ImageViewerViewport } from './ImageViewer.types-BDTxBYEN.js';
97
97
  export { VideoViewer } from './video-viewer.js';
@@ -131,14 +131,81 @@ declare function cn(...inputs: ClassValue[]): string;
131
131
  */
132
132
  declare function sanitizeHref(href: string | undefined | null): string | undefined;
133
133
  /**
134
- * Sanitize an HTML string by removing dangerous tags (script, iframe, etc.),
135
- * event-handler attributes (`onclick`, `onerror`, ...), and dangerous URI
136
- * schemes in `href`/`src` attributes.
134
+ * Allowlist options for {@link sanitizeHtml}. Passing ANY options object
135
+ * (even `{}`) switches from the default blocklist to allowlist mode, where
136
+ * everything not listed is removed.
137
+ */
138
+ interface SanitizeHtmlOptions {
139
+ /**
140
+ * Tags to keep, e.g. `["p", "a", "strong"]`. A tag that is not listed is
141
+ * removed but its text and (cleaned) children are kept. Default: none, so
142
+ * only text survives.
143
+ *
144
+ * Some tags are removed WITH their content even when listed, because no
145
+ * attribute filtering makes them safe: `script`, `style`, `iframe`, `frame`,
146
+ * `frameset`, `object`, `embed`, `applet`, `link`, `meta`, `base`, `form`,
147
+ * `title`, `template`, `noscript`, `noembed`, `noframes`, `xmp`,
148
+ * `plaintext`, `svg` and `math`.
149
+ */
150
+ allowedTags?: readonly string[];
151
+ /**
152
+ * Attributes to keep. Either one list for every allowed tag, or a map from
153
+ * tag name to its list, where the key `"*"` applies to every tag. A trailing
154
+ * `*` matches a prefix (`"data-*"`, `"aria-*"`). Default: none.
155
+ *
156
+ * Never kept, even when listed: event handlers (`on*`), `srcdoc` and
157
+ * `srcset`.
158
+ */
159
+ allowedAttributes?: readonly string[] | Readonly<Record<string, readonly string[]>>;
160
+ /**
161
+ * URL schemes allowed in URL attributes (`href`, `src`, `action`,
162
+ * `formaction`, `cite`, `poster`, `background`, `ping`, `xlink:href`), with
163
+ * the colon: `["https:", "mailto:"]`. A URL attribute whose scheme is not
164
+ * listed is removed. Default: `["http:", "https:", "mailto:"]`.
165
+ *
166
+ * `javascript:` and `vbscript:` are never kept, even when listed.
167
+ */
168
+ allowedSchemes?: readonly string[];
169
+ /**
170
+ * Keep URLs with no scheme that stay on this site: `/x`, `x/y`, `../x`,
171
+ * `?q`, `#frag`. Protocol-relative URLs (`//host/x`, and the backslash
172
+ * spellings a browser treats the same way) leave the site and are always
173
+ * removed. Default: `false`.
174
+ */
175
+ allowRelative?: boolean;
176
+ }
177
+ /**
178
+ * Sanitize an HTML string.
179
+ *
180
+ * **With no options** (the default blocklist): removes dangerous tags (script,
181
+ * iframe, etc.), event-handler attributes (`onclick`, `onerror`, ...), and
182
+ * dangerous URI schemes in `href`/`src` attributes. Everything else is kept.
183
+ * In non-browser environments returns the input unchanged — sanitize on the
184
+ * server in those cases.
137
185
  *
138
- * Uses the browser's `DOMParser`. In non-browser environments returns the
139
- * input unchanged — sanitize on the server in those cases.
186
+ * **With options** (allowlist mode): keeps ONLY the listed tags, attributes and
187
+ * URL schemes; see {@link SanitizeHtmlOptions}. The allowlist can only narrow:
188
+ * event handlers, `javascript:` URLs and script-capable tags never survive,
189
+ * even when listed. In non-browser environments the input is returned as
190
+ * escaped text (fail closed).
191
+ *
192
+ * Uses the browser's `DOMParser`.
140
193
  */
141
- declare function sanitizeHtml(html: string): string;
194
+ declare function sanitizeHtml(html: string, options?: SanitizeHtmlOptions): string;
195
+
196
+ /**
197
+ * Render markdown (GitHub-flavoured) to sanitised HTML — the same parser and
198
+ * output `ContentRenderer` uses, so a host never has to import the parser
199
+ * itself.
200
+ *
201
+ * With no `sanitize` options the default blocklist of {@link sanitizeHtml} is
202
+ * applied; pass allowlist options to keep only what you list:
203
+ *
204
+ * ```ts
205
+ * renderMarkdown(md, { allowedTags: ["p", "strong", "a"], allowedAttributes: ["href"] })
206
+ * ```
207
+ */
208
+ declare function renderMarkdown(markdown: string, sanitize?: SanitizeHtmlOptions): string;
142
209
 
143
210
  /**
144
211
  * One state slot that works controlled or uncontrolled.
@@ -203,6 +270,16 @@ interface UseAnimationReturn {
203
270
  className: string;
204
271
  ref: React.RefObject<HTMLElement | null>;
205
272
  }
273
+ /**
274
+ * Mount on open, play `exitClass` on close, then unmount.
275
+ *
276
+ * The unmount used to happen ONLY on `animationend`. With no animation running —
277
+ * an app that does not load Fancy's stylesheet, jsdom, an `exitClass` that
278
+ * resolves to nothing — the event never fires and the closed panel stayed in the
279
+ * DOM forever. So the exit is measured: nothing running unmounts at once,
280
+ * something running unmounts on its own `animationend` or after its measured
281
+ * duration, whichever comes first.
282
+ */
206
283
  declare function useAnimation({ open, enterClass, exitClass, }: UseAnimationOptions): UseAnimationReturn;
207
284
 
208
285
  declare function useId(prefix?: string): string;
@@ -316,4 +393,4 @@ type UseThemeResult = {
316
393
  */
317
394
  declare function useTheme(): UseThemeResult;
318
395
 
319
- export { type NodeRect, Placement, type ResolvedTheme, THEME_STORAGE_KEY, type ThemePreference, type UseThemeResult, cn, getThemePreference, initTheme, resolveTheme, sanitizeHref, sanitizeHtml, setThemePreference, subscribeTheme, useAnimation, useControllableState, useEscapeKey, useFloatingPosition, useFocusTrap, useId, useNodeRegistry, useOutsideClick, usePanZoom, useTheme };
396
+ export { type NodeRect, Placement, type ResolvedTheme, type SanitizeHtmlOptions, THEME_STORAGE_KEY, type ThemePreference, type UseThemeResult, cn, getThemePreference, initTheme, renderMarkdown, resolveTheme, sanitizeHref, sanitizeHtml, setThemePreference, subscribeTheme, useAnimation, useControllableState, useEscapeKey, useFloatingPosition, useFocusTrap, useId, useNodeRegistry, useOutsideClick, usePanZoom, useTheme };