@particle-academy/react-fancy 5.71.2 → 5.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/dist/button.cjs +3 -3
- package/dist/button.js +1 -1
- package/dist/chat-thread.cjs +5 -5
- package/dist/chat-thread.js +3 -3
- package/dist/{chunk-NAYXNVNU.js → chunk-2MDU3W7E.js} +3 -3
- package/dist/{chunk-NAYXNVNU.js.map → chunk-2MDU3W7E.js.map} +1 -1
- package/dist/{chunk-OXERDFFF.js → chunk-3KF3OYWS.js} +34 -6
- package/dist/chunk-3KF3OYWS.js.map +1 -0
- package/dist/{chunk-5IE65DIH.cjs → chunk-5WVEW3Q5.cjs} +10 -10
- package/dist/chunk-5WVEW3Q5.cjs.map +1 -0
- package/dist/{chunk-FGOFG2UZ.cjs → chunk-7DSHA4CL.cjs} +15 -15
- package/dist/{chunk-FGOFG2UZ.cjs.map → chunk-7DSHA4CL.cjs.map} +1 -1
- package/dist/{chunk-R3EJNGJV.cjs → chunk-A5CACIHR.cjs} +9 -9
- package/dist/{chunk-R3EJNGJV.cjs.map → chunk-A5CACIHR.cjs.map} +1 -1
- package/dist/{chunk-WFR7HKJL.js → chunk-B6AIHYOP.js} +3 -3
- package/dist/{chunk-WFR7HKJL.js.map → chunk-B6AIHYOP.js.map} +1 -1
- package/dist/{chunk-PS7C6GKI.cjs → chunk-C2LVHAIG.cjs} +6 -6
- package/dist/{chunk-PS7C6GKI.cjs.map → chunk-C2LVHAIG.cjs.map} +1 -1
- package/dist/{chunk-BL5IKSB3.js → chunk-EWE4TOG7.js} +3 -3
- package/dist/{chunk-BL5IKSB3.js.map → chunk-EWE4TOG7.js.map} +1 -1
- package/dist/{chunk-3U7PUZLI.cjs → chunk-FBGCSGCE.cjs} +34 -5
- package/dist/chunk-FBGCSGCE.cjs.map +1 -0
- package/dist/{chunk-UWYSJARZ.js → chunk-GUCUYDFB.js} +5 -5
- package/dist/chunk-GUCUYDFB.js.map +1 -0
- package/dist/{chunk-RALJMI7C.cjs → chunk-KDISJ64Q.cjs} +4 -4
- package/dist/{chunk-RALJMI7C.cjs.map → chunk-KDISJ64Q.cjs.map} +1 -1
- package/dist/{chunk-5YRSYS2F.cjs → chunk-L6TFJIFB.cjs} +12 -12
- package/dist/{chunk-5YRSYS2F.cjs.map → chunk-L6TFJIFB.cjs.map} +1 -1
- package/dist/{chunk-S3NB6LDV.cjs → chunk-NWB6YCZY.cjs} +4 -4
- package/dist/{chunk-S3NB6LDV.cjs.map → chunk-NWB6YCZY.cjs.map} +1 -1
- package/dist/{chunk-OPDHSOUN.js → chunk-QIH7DDRO.js} +3 -3
- package/dist/{chunk-OPDHSOUN.js.map → chunk-QIH7DDRO.js.map} +1 -1
- package/dist/{chunk-FYUEDPST.js → chunk-TW52N55D.js} +3 -3
- package/dist/{chunk-FYUEDPST.js.map → chunk-TW52N55D.js.map} +1 -1
- package/dist/{chunk-F4GMOMUT.js → chunk-VIQEWB6M.js} +4 -4
- package/dist/{chunk-F4GMOMUT.js.map → chunk-VIQEWB6M.js.map} +1 -1
- package/dist/content-renderer.cjs +5 -5
- package/dist/content-renderer.js +2 -2
- package/dist/editor.cjs +5 -5
- package/dist/editor.js +3 -3
- package/dist/index.cjs +40 -40
- package/dist/index.d.cts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +8 -8
- package/dist/json-editor.cjs +13 -13
- package/dist/json-editor.js +2 -2
- package/dist/magic-wand.cjs +3 -3
- package/dist/magic-wand.js +2 -2
- package/dist/prompt-input.cjs +5 -5
- package/dist/prompt-input.js +2 -2
- package/dist/reason-tag.cjs +3 -3
- package/dist/reason-tag.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-3U7PUZLI.cjs.map +0 -1
- package/dist/chunk-5IE65DIH.cjs.map +0 -1
- package/dist/chunk-OXERDFFF.js.map +0 -1
- package/dist/chunk-UWYSJARZ.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,64 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [5.72.0] - 2026-11-01
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **`blob:` hrefs are accepted** (reported by Genie). A `URL.createObjectURL`
|
|
19
|
+
URL for an in-memory file was refused by `sanitizeHref` without a word, so
|
|
20
|
+
`<Button href="blob:...">` rendered a plain `<button>` and the link was
|
|
21
|
+
dead. `blob:` is accepted in the form a browser mints it,
|
|
22
|
+
`blob:<origin>/<id>` with an `http(s)://`, `null` or `file://` origin;
|
|
23
|
+
`blob:javascript:...`, `blob:data:...` and other wrappers stay refused. The
|
|
24
|
+
allow-list is shared, so this reaches every caller of it:
|
|
25
|
+
- `Button` (`href`, anchor mode)
|
|
26
|
+
- `ChatThread` / `ChatMessage` attachment links (`attachment.url`)
|
|
27
|
+
- `ContentRenderer` extension-tag attributes (`href`, `src`, `action`,
|
|
28
|
+
`formaction`, `xlink:href`)
|
|
29
|
+
- `sanitizeHtml` in its default (blocklist) mode, and so `ContentRenderer`,
|
|
30
|
+
`Editor` and `renderMarkdown` without `sanitize` options. Allowlist mode
|
|
31
|
+
(`sanitizeHtml(html, options)`) is unchanged: it keeps only the schemes
|
|
32
|
+
you list.
|
|
33
|
+
- the exported `sanitizeHref` itself
|
|
34
|
+
- **A development warning when a component drops an href.** `Button` and
|
|
35
|
+
`ChatMessage` now `console.warn` once per distinct href when a non-empty
|
|
36
|
+
href is refused, naming the component and the scheme and showing only a
|
|
37
|
+
short prefix of the URL. Nothing is logged in production
|
|
38
|
+
(`NODE_ENV === "production"`), for an empty or missing href, or when
|
|
39
|
+
sanitising content (markdown, HTML, extension tags), where refusing hostile
|
|
40
|
+
markup is the job rather than a mistake.
|
|
41
|
+
|
|
42
|
+
### Security
|
|
43
|
+
|
|
44
|
+
- **`data:` remains refused, by decision**, for every media type and with or
|
|
45
|
+
without `download`: a navigable `data:text/html` is the risky case. Now
|
|
46
|
+
pinned by tests, together with `javascript:`, `vbscript:`, `file:` and the
|
|
47
|
+
obfuscated spellings (leading control characters, mixed case, whitespace
|
|
48
|
+
inside the scheme, entity and percent-encoded colons).
|
|
49
|
+
|
|
50
|
+
**Consumer action: none.** An href that was silently dropped now works if it
|
|
51
|
+
is `blob:`, and otherwise warns in development.
|
|
52
|
+
|
|
53
|
+
## [5.71.3] - 2026-11-01
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- **`Button` shows a pointer cursor when enabled.** Tailwind v4's preflight
|
|
58
|
+
sets `cursor: default` on `<button>`, and Button added no cursor of its own,
|
|
59
|
+
so every enabled Button showed the arrow (reported by Genie). Button now
|
|
60
|
+
carries `cursor-pointer`; `disabled:cursor-not-allowed` is unchanged, so a
|
|
61
|
+
disabled or `loading` Button still shows not-allowed. A cursor class in
|
|
62
|
+
`className` (e.g. `cursor-wait`) still wins via twMerge. Anchor mode gets the
|
|
63
|
+
same class, matching what the `<a>` already did.
|
|
64
|
+
- **`Button` sets `aria-busy="true"` while `loading`**, on both the `<button>`
|
|
65
|
+
and anchor (`href`) modes. The attribute is omitted entirely when not loading
|
|
66
|
+
(never `aria-busy="false"`), and an `aria-busy` you pass yourself still wins.
|
|
67
|
+
|
|
68
|
+
**Consumer action: none.** If you added your own
|
|
69
|
+
`[data-react-fancy-button] { cursor: pointer }` rule to work around the arrow,
|
|
70
|
+
you can remove it.
|
|
71
|
+
|
|
14
72
|
## [5.71.2] - 2026-10-30
|
|
15
73
|
|
|
16
74
|
### Fixed
|
package/dist/button.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
require('./chunk-M5MUGSON.cjs');
|
|
4
|
-
var
|
|
4
|
+
var chunkFBGCSGCE_cjs = require('./chunk-FBGCSGCE.cjs');
|
|
5
5
|
require('./chunk-XCZZVRBY.cjs');
|
|
6
6
|
require('./chunk-MXWR3T3N.cjs');
|
|
7
7
|
require('./chunk-ZU5Q77OT.cjs');
|
|
@@ -10,11 +10,11 @@ require('./chunk-ZU5Q77OT.cjs');
|
|
|
10
10
|
|
|
11
11
|
Object.defineProperty(exports, "Action", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
13
|
+
get: function () { return chunkFBGCSGCE_cjs.Action; }
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "Button", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkFBGCSGCE_cjs.Button; }
|
|
18
18
|
});
|
|
19
19
|
//# sourceMappingURL=button.cjs.map
|
|
20
20
|
//# sourceMappingURL=button.cjs.map
|
package/dist/button.js
CHANGED
package/dist/chat-thread.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk5WVEW3Q5_cjs = require('./chunk-5WVEW3Q5.cjs');
|
|
4
4
|
require('./chunk-S3TRSECD.cjs');
|
|
5
|
-
require('./chunk-
|
|
5
|
+
require('./chunk-A5CACIHR.cjs');
|
|
6
6
|
require('./chunk-2C64OVOZ.cjs');
|
|
7
7
|
require('./chunk-BJL3VDRK.cjs');
|
|
8
8
|
require('./chunk-VBWRH4UW.cjs');
|
|
9
9
|
require('./chunk-MOU6O324.cjs');
|
|
10
10
|
require('./chunk-M5MUGSON.cjs');
|
|
11
|
-
require('./chunk-
|
|
11
|
+
require('./chunk-FBGCSGCE.cjs');
|
|
12
12
|
require('./chunk-XCZZVRBY.cjs');
|
|
13
13
|
require('./chunk-MXWR3T3N.cjs');
|
|
14
14
|
require('./chunk-ZU5Q77OT.cjs');
|
|
@@ -17,11 +17,11 @@ require('./chunk-ZU5Q77OT.cjs');
|
|
|
17
17
|
|
|
18
18
|
Object.defineProperty(exports, "ChatMessage", {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: function () { return
|
|
20
|
+
get: function () { return chunk5WVEW3Q5_cjs.ChatMessage; }
|
|
21
21
|
});
|
|
22
22
|
Object.defineProperty(exports, "ChatThread", {
|
|
23
23
|
enumerable: true,
|
|
24
|
-
get: function () { return
|
|
24
|
+
get: function () { return chunk5WVEW3Q5_cjs.ChatThread; }
|
|
25
25
|
});
|
|
26
26
|
//# sourceMappingURL=chat-thread.cjs.map
|
|
27
27
|
//# sourceMappingURL=chat-thread.cjs.map
|
package/dist/chat-thread.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export { ChatMessage, ChatThread } from './chunk-
|
|
1
|
+
export { ChatMessage, ChatThread } from './chunk-GUCUYDFB.js';
|
|
2
2
|
import './chunk-AUTW5O4W.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-2MDU3W7E.js';
|
|
4
4
|
import './chunk-I3LAFKJU.js';
|
|
5
5
|
import './chunk-UZCR7DK5.js';
|
|
6
6
|
import './chunk-IQ4KQJAO.js';
|
|
7
7
|
import './chunk-6FCQD2KQ.js';
|
|
8
8
|
import './chunk-LQ4ICCN2.js';
|
|
9
|
-
import './chunk-
|
|
9
|
+
import './chunk-3KF3OYWS.js';
|
|
10
10
|
import './chunk-45BBNJQD.js';
|
|
11
11
|
import './chunk-J3A4Z2P7.js';
|
|
12
12
|
import './chunk-MMW2JGKZ.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { visuallyHidden } from './chunk-I3LAFKJU.js';
|
|
2
|
-
import { sanitizeHtml, sanitizeHref, Button } from './chunk-
|
|
2
|
+
import { sanitizeHtml, sanitizeHref, Button } from './chunk-3KF3OYWS.js';
|
|
3
3
|
import { cn } from './chunk-MMW2JGKZ.js';
|
|
4
4
|
import { marked } from 'marked';
|
|
5
5
|
import { createContext, useMemo, useRef, useState, useCallback, useContext, useLayoutEffect, useEffect } from 'react';
|
|
@@ -1400,5 +1400,5 @@ function ContentRenderer({
|
|
|
1400
1400
|
ContentRenderer.displayName = "ContentRenderer";
|
|
1401
1401
|
|
|
1402
1402
|
export { ContentRenderer, detectFormat, extensionEditorClasses, htmlToMarkdown, markdownToEditorHtml, mergeExtensions, proseClasses, registerExtension, registerExtensions, renderMarkdown };
|
|
1403
|
-
//# sourceMappingURL=chunk-
|
|
1404
|
-
//# sourceMappingURL=chunk-
|
|
1403
|
+
//# sourceMappingURL=chunk-2MDU3W7E.js.map
|
|
1404
|
+
//# sourceMappingURL=chunk-2MDU3W7E.js.map
|