@brightspot/ui 6.0.4 → 6.0.5-pr.212.1
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/dist/storybook/assets/{ActionBar.stories-BSwwf2PX.js → ActionBar.stories-Yu6hLS-7.js} +1 -1
- package/dist/storybook/assets/{ActionItem.stories-SCIA5Rt0.js → ActionItem.stories-HDUuT_Y3.js} +1 -1
- package/dist/storybook/assets/{AiSparkle.stories-ByeiNU3G.js → AiSparkle.stories--LwneJIF.js} +1 -1
- package/dist/storybook/assets/{Avatar.stories-1EUJytBr.js → Avatar.stories-7nYYV75H.js} +1 -1
- package/dist/storybook/assets/{AvatarGroup.stories-Bstlt4go.js → AvatarGroup.stories-DxxDFJiA.js} +1 -1
- package/dist/storybook/assets/{Badge.stories-X7m0Vl2G.js → Badge.stories-D8fmfms-.js} +1 -1
- package/dist/storybook/assets/{Banner.stories-ljxjOtEc.js → Banner.stories-hlnDeqi6.js} +1 -1
- package/dist/storybook/assets/{Button-Dbpmp5Ih.js → Button-PG1zeey_.js} +1 -1
- package/dist/storybook/assets/{Button.stories-C5qS3rIw.js → Button.stories-D8OLuiQW.js} +1 -1
- package/dist/storybook/assets/{ButtonGroup.stories-Bl1Ko9jX.js → ButtonGroup.stories-Dz1B5l88.js} +1 -1
- package/dist/storybook/assets/{Card.stories-CfFIzXg5.js → Card.stories-Orbf7wd5.js} +1 -1
- package/dist/storybook/assets/{Celebrate.stories-TSJrIQR8.js → Celebrate.stories-BpTW_6sa.js} +1 -1
- package/dist/storybook/assets/{Checkbox.stories-DUpT9Iwh.js → Checkbox.stories-DZM4MMCD.js} +1 -1
- package/dist/storybook/assets/{CircularProgress.stories-usNosiIU.js → CircularProgress.stories-DWB5hxZv.js} +1 -1
- package/dist/storybook/assets/{ClipboardMixin.stories-0jnZ0Drs.js → ClipboardMixin.stories-BGanP3Ar.js} +1 -1
- package/dist/storybook/assets/{Color-6BZIO3FS-C6ecAOER.js → Color-6BZIO3FS-B2u7xxz5.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-DcbIlkPs.js → Colors.stories-xHX6CHCh.js} +1 -1
- package/dist/storybook/assets/{CombinedEffects.stories-CU-hwRPT.js → CombinedEffects.stories-D10WQ6NJ.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin-Dcz-J-hg.js → ComponentStatesMixin-BACZA29L.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin.stories-orhdmIUX.js → ComponentStatesMixin.stories-Cz2QMyPD.js} +1 -1
- package/dist/storybook/assets/{CopyToClipboard.stories-D1R2yCQL.js → CopyToClipboard.stories-D81eKI8H.js} +1 -1
- package/dist/storybook/assets/{Debounce.stories-6z8aEn7O.js → Debounce.stories-C2WIJZtd.js} +1 -1
- package/dist/storybook/assets/{DocsRenderer-LL677BLK-B-fTNYB5.js → DocsRenderer-LL677BLK-CEUT7l9O.js} +3 -3
- package/dist/storybook/assets/{Dropdown.stories-CeVpVPrP.js → Dropdown.stories-DosyK4Xp.js} +1 -1
- package/dist/storybook/assets/{EmptyState.stories-DdCyApUP.js → EmptyState.stories-l8M0yROT.js} +1 -1
- package/dist/storybook/assets/{EscaAvatar.stories-DNK85ssI.js → EscaAvatar.stories-jSs4xDDT.js} +1 -1
- package/dist/storybook/assets/{Events.stories-B1qeq2wy.js → Events.stories-BPJUevWD.js} +1 -1
- package/dist/storybook/assets/{Heading.stories-DRu5hUyJ.js → Heading.stories-BwQNsNCD.js} +1 -1
- package/dist/storybook/assets/{HueRipple.stories-D3zqVZWM.js → HueRipple.stories-r24GQTwM.js} +1 -1
- package/dist/storybook/assets/{Icon.stories-CKG5fIIH.js → Icon.stories-C13rAqjc.js} +1 -1
- package/dist/storybook/assets/{IconButton.stories-B3RZKBqV.js → IconButton.stories-o6SQ3i0y.js} +1 -1
- package/dist/storybook/assets/{LinearProgress.stories-BPvFKGi0.js → LinearProgress.stories-DXQQsuwf.js} +1 -1
- package/dist/storybook/assets/{Message.stories-Dq3YDccT.js → Message.stories-BvivAs2E.js} +1 -1
- package/dist/storybook/assets/{OnFindMixin.stories-qKTooUKN.js → OnFindMixin.stories-DpFUP67v.js} +1 -1
- package/dist/storybook/assets/{Pagination.stories-BaFWcckS.js → Pagination.stories-BQIZcpxs.js} +1 -1
- package/dist/storybook/assets/{Popover.stories-DlHlfWrk.js → Popover.stories-DW_ME7-J.js} +1 -1
- package/dist/storybook/assets/{ReadyMixin-BQ-q8NO4.js → ReadyMixin-SsbjGIAN.js} +1 -1
- package/dist/storybook/assets/{RovingTabindexMixin.stories-CQkteE6h.js → RovingTabindexMixin.stories--7ZT92XF.js} +1 -1
- package/dist/storybook/assets/{Rtc.stories-BWBDrPM8.js → Rtc.stories-Jg3rW19u.js} +1 -1
- package/dist/storybook/assets/{ScrollShadow.stories-BtM7Q6Ys.js → ScrollShadow.stories-DugbXzyD.js} +1 -1
- package/dist/storybook/assets/{Switch.stories-Ys6MzOf7.js → Switch.stories-DULTCvm6.js} +1 -1
- package/dist/storybook/assets/{Tab.stories-CNIDOscR.js → Tab.stories-rQrDfwi4.js} +1 -1
- package/dist/storybook/assets/{Tabs.stories-oAxuRqKE.js → Tabs.stories-BF6JfaUj.js} +1 -1
- package/dist/storybook/assets/{Throttle.stories-D2nPrZEL.js → Throttle.stories-BTXPUD_9.js} +1 -1
- package/dist/storybook/assets/{Tooltip.stories-DJhjWYNV.js → Tooltip.stories-CC5jtR6l.js} +1 -1
- package/dist/storybook/assets/{Upload.stories-DBveASQF.js → Upload.stories-BcPWDJ9v.js} +1 -1
- package/dist/storybook/assets/{UploadItem.stories-Co5bGJs6.js → UploadItem.stories-CbBUmeMS.js} +1 -1
- package/dist/storybook/assets/{Welcome.stories-Cls_kv8A.js → Welcome.stories-LMHGYSp6.js} +1 -1
- package/dist/storybook/assets/{Widget.stories-CXpqw5z8.js → Widget.stories-C7SRQn3o.js} +1 -1
- package/dist/storybook/assets/{WithTooltip-65CFNBJE-Ik6o5Ygb.js → WithTooltip-65CFNBJE-Cp1Cy3oy.js} +1 -1
- package/dist/storybook/assets/{blocks-DjXAnVrm.js → blocks-BxdX04XX.js} +5 -5
- package/dist/storybook/assets/{formatter-EIJCOSYU-CQXaWVan.js → formatter-EIJCOSYU--pzeRzQ9.js} +1 -1
- package/dist/storybook/assets/if-defined-D53b_oJ7.js +1 -0
- package/dist/storybook/assets/{iframe-D43T7JCn.js → iframe-ComXXBv4.js} +3 -3
- package/dist/storybook/assets/{index-DIk8fbbl.js → index-DlomlmQt.js} +1 -1
- package/dist/storybook/assets/onFind-I2sK1i6b.js +1 -0
- package/dist/storybook/assets/{onFind.stories-DgxMtTTG.js → onFind.stories-BMm3A2oE.js} +20 -20
- package/dist/storybook/assets/{onRemove.stories-DltMfNLX.js → onRemove.stories-CellKu-r.js} +1 -1
- package/dist/storybook/assets/{onVisible.stories-x3VhGAuF.js → onVisible.stories-CrnqbcYv.js} +1 -1
- package/dist/storybook/assets/{style-map-C5J-rKx9.js → style-map-DPWIvyMv.js} +1 -1
- package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CphVNry2.js → syntaxhighlighter-ED5Y7EFY-Bl3HCk9S.js} +1 -1
- package/dist/storybook/iframe.html +1 -1
- package/dist/storybook/project.json +1 -1
- package/dist/util/onFind.d.ts.map +1 -1
- package/dist/util/onFind.js +137 -66
- package/dist/util/onFind.js.map +1 -1
- package/package.json +1 -1
- package/src/legacy/tool-ui/src/ContentEdit.css +1 -1
- package/src/legacy/tool-ui/src/ContentInputGroup.css +15 -13
- package/src/legacy/tool-ui/src/Entry.ts +35 -0
- package/src/legacy/tool-ui/src/Page.css +4 -2
- package/src/legacy/tool-ui/src/Widget.css +2 -2
- package/src/legacy/tool-ui/src/dom/onFind.ts +29 -270
- package/src/legacy/tool-ui/src/main/webapp/dist/{6086.7ca02b827506f29db590.js → 1478.b8f12bb302ba4337da4c.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{7033.4cd6efbe12e7aaa35745.js → 1536.9b3398bf3ebc2f20f009.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{2111.3956b5196a514b2c0131.js → 2111.efb40a1ab7d6b02913dd.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{2456.5bcfb782c2ec27de32ed.js → 2456.2c20c3564647ca071b26.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{2537.e8f1359bedd328bf57f4.js → 2537.a4d0a358f9c1a60ebc68.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{270.3011484ff80f3093083a.js → 270.8fb1c93bc009582a32cd.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{2825.c1342ac2662d11fd4125.js → 2825.9c2b897f2a3799dcbd19.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{2947.f96d21c44c05980974ef.js → 2947.52cb126b0e2ab4415189.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/3409.8e764d5fa8e2c2cf4d00.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{3532.c358dfbb2cde0f802c7f.js → 3532.ed7716198932139a4fb1.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{3543.2d704cf9e170322468e7.js → 3543.c62d88fc2904cccc7e64.js} +2 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/{3611.61837ffa933f74502094.js → 3611.5466757310c53bea4b6e.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{4374.37147747a254da8f5f8a.js → 4374.a2ea1952e2daf222dc20.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{4450.16dd5684292fd0a7ea7f.js → 4450.9eaca48c71e3dfb64a45.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{4478.93f64e6a6ccb35a6c6d4.js → 4478.3c6e9704ad67996b53a8.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{4790.10d75f7c7f8e54ce83a1.js → 4790.ff3be0fd92b8d7422ae0.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/4795.d4ba3cc84dbf7e58fecb.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{5098.33613009827cfc80aafb.js → 5098.36bb17ff636e87930c6c.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/5306.b41630da0d1df3453bc0.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{5385.6656501b67424994820b.js → 5385.a7d0efb64a5e06173012.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{5598.d84773ca53126661bdca.js → 5598.2f1f3ddbbaefdc2fce5a.js} +2 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/{5617.c81ecb679371ca302f1f.js → 5617.96a2611314c9148efa9c.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{6216.2d532054fcb8e634f96b.js → 6216.3ad86a4e1c11cd87b2cc.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{6497.b7d8dcbf0e7c8d8d538d.js → 6497.17547f58bb12eb6df22d.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{6565.0e5abc3bd344c53ae154.js → 6565.9abec7b54647bee08edc.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{7361.793163ca71dfac69d9eb.js → 6664.ec6ef73e3bb33125bd4c.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/6996.f0fbe667259b36548b69.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{5718.449113ae2463a3bb8a83.js → 7175.43f44b9e832f6734d8ea.js} +2 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/{7202.1e5b8f21215ea6eae20a.js → 7202.237027436f4c50941edf.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{7524.2990be869cf0a2988d17.js → 7524.ae0837d4dafc92523de7.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{7741.0b2789c4e783af835763.js → 7741.84e705c31c3ebc66db92.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{7863.2a1d1fd229778a47e10b.js → 7863.043ee730e243753af268.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/8430.0e134152362fff9ad9d0.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{8752.3d02a0f42ec39786fdf0.js → 8752.3e4315bdb4ad40297406.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{8897.bfeed19f2a4acbb6d67c.js → 8897.b12d749c9564eaa0c945.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{8934.e90ceca8169fc25e4e1b.js → 8934.9f3371f510334b7bae6d.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{9277.88b2d89b3ba1c24e7f93.js → 9277.385ca94e4e3722d25e81.js} +2 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/{9360.bb0352313d610cae11de.js → 9360.269cf0d9b358dcf52f55.js} +2 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/{9576.174d6a99544d17e7416d.js → 9576.18cf577b8886dd85372e.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/Appetizeio.47287ce7992dc52bcb47.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/CISpectrum.45b362ff7dbae9d80cd9.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{CodeMirror.5ddffe054374f883d6f8.js → CodeMirror.2fda1e731cfcb7bec629.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/{ImageEditor.14e3b3035666436f53a5.js → ImageEditor.a6da6e88cc958354ec68.js} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.5a8f4754ee77adc85db2.js +500 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/TimedContent.2d0ed03e8d1c994ecfb2.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{VideoEditor.11c89dda5cf125738a33.js → VideoEditor.c183998c7b2b0dae98f6.js} +2 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/{v4.e496a62fb1d4be0544d4.js → v4.3fe1a9cf9f56fbaf9b14.js} +9 -9
- package/src/legacy/tool-ui/src/main/webapp/dist/v5.177f4913df46d4960d57.js +92 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/v5.5eac97ec93d474fa6085.css +5 -0
- package/src/legacy/tool-ui/src/v5.ts +5 -0
- package/dist/storybook/assets/if-defined-BVO6TNCy.js +0 -1
- package/dist/storybook/assets/onFind-CamigPPi.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/4114.57fe159e416e716f8cbc.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/4582.243dbaa3d8a8648f6f40.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/4795.034ebc93a67b7a3d6536.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/Appetizeio.185641211f7c0e42a455.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/CISpectrum.74db7dc80b3a6797a167.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.24cbb57c0030725925a0.js +0 -500
- package/src/legacy/tool-ui/src/main/webapp/dist/TimedContent.4bb4dc83ffbe4019dd7b.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/v5.1711204aaf6c5fa01b1b.js +0 -92
- package/src/legacy/tool-ui/src/main/webapp/dist/v5.cb6c1a38c5ba7fa9ea93.css +0 -5
- /package/src/legacy/tool-ui/src/main/webapp/dist/{3543.2d704cf9e170322468e7.js.LICENSE.txt → 3543.c62d88fc2904cccc7e64.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{5598.d84773ca53126661bdca.js.LICENSE.txt → 5598.2f1f3ddbbaefdc2fce5a.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{5718.449113ae2463a3bb8a83.js.LICENSE.txt → 7175.43f44b9e832f6734d8ea.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{9277.88b2d89b3ba1c24e7f93.js.LICENSE.txt → 9277.385ca94e4e3722d25e81.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{9360.bb0352313d610cae11de.js.LICENSE.txt → 9360.269cf0d9b358dcf52f55.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.24cbb57c0030725925a0.js.LICENSE.txt → RTEProseMirror.5a8f4754ee77adc85db2.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{VideoEditor.11c89dda5cf125738a33.js.LICENSE.txt → VideoEditor.c183998c7b2b0dae98f6.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{v4.e496a62fb1d4be0544d4.js.LICENSE.txt → v4.3fe1a9cf9f56fbaf9b14.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{v5.1711204aaf6c5fa01b1b.js.LICENSE.txt → v5.177f4913df46d4960d57.js.LICENSE.txt} +0 -0
package/dist/util/onFind.js
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import log from 'loglevel';
|
|
2
|
-
|
|
2
|
+
// Versioned so that a page mixing this version with an older bundled copy
|
|
3
|
+
// degrades to two independent engines instead of an older engine reading
|
|
4
|
+
// state fields it doesn't understand. On such mixed pages, elements already
|
|
5
|
+
// processed by the older copy aren't marked for this one, so callbacks can
|
|
6
|
+
// re-fire for them and must stay idempotent during the rollout window.
|
|
7
|
+
const KEY = Symbol.for('brightspot.onFind.v2');
|
|
8
|
+
// The marker attribute prefix contains a dash so names can never collide
|
|
9
|
+
// with the `data-ofc<n>` names generated by older copies sharing the page.
|
|
10
|
+
const CALLED_ATTR_PREFIX = 'data-ofc2-';
|
|
11
|
+
// Above this many recorded elements in one batch, a single full scan is
|
|
12
|
+
// cheaper than matching each element's subtree separately.
|
|
13
|
+
const MAX_PENDING_ELEMENTS = 500;
|
|
14
|
+
// When this many recorded elements share a parent (e.g. a burst of sibling
|
|
15
|
+
// inserts into one list), one scan of the parent is cheaper than scanning
|
|
16
|
+
// each sibling separately, and its cost is amortized by the group size.
|
|
17
|
+
const SIBLING_COALESCE_THRESHOLD = 50;
|
|
18
|
+
// Selectors that can't be evaluated against just the mutated subtrees:
|
|
19
|
+
// sibling combinators and positional or relational pseudo-classes can change
|
|
20
|
+
// which elements outside those subtrees match. Callbacks with these
|
|
21
|
+
// selectors do a full scan on every trigger instead.
|
|
22
|
+
const NON_SCOPABLE_SELECTOR_RE = /[+~]|:(first|last|only|nth|has)/;
|
|
3
23
|
let _state;
|
|
4
24
|
function getState() {
|
|
5
25
|
if (_state)
|
|
@@ -10,10 +30,12 @@ function getState() {
|
|
|
10
30
|
calledIndex: 0,
|
|
11
31
|
callbacks: [],
|
|
12
32
|
blacklist: [],
|
|
33
|
+
blacklistSelector: null,
|
|
13
34
|
triggerPaused: false,
|
|
14
35
|
triggerOnResume: false,
|
|
15
36
|
triggerAll: false,
|
|
16
|
-
|
|
37
|
+
pendingElements: new Set(),
|
|
38
|
+
pendingRemovals: false,
|
|
17
39
|
triggerFrame: 0,
|
|
18
40
|
initialized: false,
|
|
19
41
|
};
|
|
@@ -26,46 +48,56 @@ class Callback {
|
|
|
26
48
|
#called;
|
|
27
49
|
#selectors;
|
|
28
50
|
#fn;
|
|
29
|
-
#
|
|
51
|
+
#scopable;
|
|
30
52
|
constructor(root, selectors, fn) {
|
|
31
53
|
this.#root = root;
|
|
32
|
-
this.#called =
|
|
54
|
+
this.#called = `${CALLED_ATTR_PREFIX}${getState().calledIndex++}`;
|
|
33
55
|
if (!Array.isArray(selectors)) {
|
|
34
56
|
selectors = [selectors];
|
|
35
57
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (matches.length === selectors.length) {
|
|
42
|
-
this.#matches = matches;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
addTriggerElements(triggerElements, element) {
|
|
46
|
-
if (this.#root.contains(element)) {
|
|
47
|
-
if (element.matches(this.#selectors)) {
|
|
48
|
-
triggerElements.push(element);
|
|
58
|
+
// :is() parses forgivingly, so an invalid selector would otherwise just
|
|
59
|
+
// silently never match; fail loudly here instead.
|
|
60
|
+
for (const s of selectors) {
|
|
61
|
+
try {
|
|
62
|
+
document.querySelector(s);
|
|
49
63
|
}
|
|
50
|
-
|
|
51
|
-
|
|
64
|
+
catch {
|
|
65
|
+
log.error('onFind: invalid selector!', s);
|
|
52
66
|
}
|
|
53
67
|
}
|
|
68
|
+
// :is() keeps the :not() filter attached to every comma-separated part.
|
|
69
|
+
this.#selectors = selectors.map(s => `:is(${s}):not([${this.#called}])`).join(',');
|
|
70
|
+
this.#scopable = !selectors.some(s => NON_SCOPABLE_SELECTOR_RE.test(s));
|
|
71
|
+
this.#fn = fn;
|
|
54
72
|
}
|
|
55
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Runs the callback on new matches. Without `roots`, scans the whole
|
|
75
|
+
* registration root; with `roots`, looks only at those elements and their
|
|
76
|
+
* subtrees (ancestor combinators still match against the whole document).
|
|
77
|
+
*/
|
|
78
|
+
trigger(roots) {
|
|
56
79
|
if (document.readyState === 'loading') {
|
|
57
80
|
return;
|
|
58
81
|
}
|
|
59
|
-
if (this.#
|
|
60
|
-
for (const element of
|
|
61
|
-
|
|
82
|
+
if (!roots || !this.#scopable) {
|
|
83
|
+
for (const element of this.#root.querySelectorAll(this.#selectors)) {
|
|
84
|
+
this.#callCallback(element);
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
for (const root of roots) {
|
|
89
|
+
if (this.#root.contains(root)) {
|
|
90
|
+
if (root.matches(this.#selectors)) {
|
|
91
|
+
this.#callCallback(root);
|
|
92
|
+
}
|
|
93
|
+
for (const element of root.querySelectorAll(this.#selectors)) {
|
|
62
94
|
this.#callCallback(element);
|
|
63
95
|
}
|
|
64
96
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
97
|
+
else if (this.#root instanceof Node && root.contains(this.#root)) {
|
|
98
|
+
// The registration root itself is inside a mutated subtree.
|
|
99
|
+
this.trigger();
|
|
100
|
+
return;
|
|
69
101
|
}
|
|
70
102
|
}
|
|
71
103
|
}
|
|
@@ -87,20 +119,63 @@ class Callback {
|
|
|
87
119
|
function inBlacklist(node) {
|
|
88
120
|
if (!(node instanceof Element))
|
|
89
121
|
return false;
|
|
90
|
-
const
|
|
91
|
-
|
|
122
|
+
const state = getState();
|
|
123
|
+
if (state.blacklist.length === 0)
|
|
124
|
+
return false;
|
|
125
|
+
if (state.blacklistSelector === null) {
|
|
126
|
+
state.blacklistSelector = state.blacklist.join(',');
|
|
127
|
+
}
|
|
128
|
+
return node.closest(state.blacklistSelector) !== null;
|
|
92
129
|
}
|
|
93
130
|
const every = Array.prototype.every;
|
|
94
131
|
const isText = (node) => node.nodeType === Node.TEXT_NODE;
|
|
132
|
+
// Replaces large same-parent groups with their parent. Scanning the parent
|
|
133
|
+
// can also visit elements that were not recorded, but the marker attribute
|
|
134
|
+
// makes that harmless.
|
|
135
|
+
function coalesceSiblings(elements) {
|
|
136
|
+
if (elements.length <= SIBLING_COALESCE_THRESHOLD)
|
|
137
|
+
return elements;
|
|
138
|
+
const byParent = new Map();
|
|
139
|
+
const roots = [];
|
|
140
|
+
for (const element of elements) {
|
|
141
|
+
const parent = element.parentElement;
|
|
142
|
+
if (parent) {
|
|
143
|
+
let group = byParent.get(parent);
|
|
144
|
+
if (!group)
|
|
145
|
+
byParent.set(parent, (group = []));
|
|
146
|
+
group.push(element);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
roots.push(element);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
for (const [parent, group] of byParent) {
|
|
153
|
+
if (group.length > SIBLING_COALESCE_THRESHOLD) {
|
|
154
|
+
roots.push(parent);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
roots.push(...group);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// A pending element that is also a promoted parent would appear twice.
|
|
161
|
+
return [...new Set(roots)];
|
|
162
|
+
}
|
|
163
|
+
function recordElement(state, element) {
|
|
164
|
+
if (state.triggerAll)
|
|
165
|
+
return;
|
|
166
|
+
state.pendingElements.add(element);
|
|
167
|
+
if (state.pendingElements.size > MAX_PENDING_ELEMENTS) {
|
|
168
|
+
state.triggerAll = true;
|
|
169
|
+
state.pendingElements.clear();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
95
172
|
function triggerCallbacks(mutations) {
|
|
96
173
|
const state = getState();
|
|
97
174
|
if (state.triggerPaused) {
|
|
98
175
|
state.triggerOnResume = true;
|
|
99
176
|
return;
|
|
100
177
|
}
|
|
101
|
-
|
|
102
|
-
const validMutations = [];
|
|
103
|
-
if (checkMutations) {
|
|
178
|
+
if (Array.isArray(mutations)) {
|
|
104
179
|
for (const mutation of mutations) {
|
|
105
180
|
const target = mutation.target;
|
|
106
181
|
if (inBlacklist(target)) {
|
|
@@ -109,50 +184,45 @@ function triggerCallbacks(mutations) {
|
|
|
109
184
|
switch (mutation.type) {
|
|
110
185
|
case 'attributes':
|
|
111
186
|
if (mutation.oldValue !== target.getAttribute(mutation.attributeName)) {
|
|
112
|
-
|
|
187
|
+
// An attribute change can affect matching of the element itself
|
|
188
|
+
// and, for combinator selectors, of its descendants, so record
|
|
189
|
+
// it as a subtree to scan.
|
|
190
|
+
recordElement(state, target);
|
|
113
191
|
}
|
|
114
192
|
break;
|
|
115
193
|
case 'childList':
|
|
116
|
-
|
|
117
|
-
|
|
194
|
+
for (const node of mutation.addedNodes) {
|
|
195
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
196
|
+
recordElement(state, node);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Removals can only change matching for non-scopable selectors
|
|
200
|
+
// (e.g. positional pseudo-classes on the remaining siblings).
|
|
201
|
+
if (!every.call(mutation.removedNodes, isText)) {
|
|
202
|
+
state.pendingRemovals = true;
|
|
118
203
|
}
|
|
119
204
|
break;
|
|
120
205
|
}
|
|
121
206
|
}
|
|
122
|
-
if (validMutations.length === 0) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
207
|
}
|
|
126
|
-
|
|
208
|
+
else {
|
|
127
209
|
state.triggerAll = true;
|
|
128
210
|
}
|
|
129
|
-
if (
|
|
130
|
-
if (checkMutations) {
|
|
131
|
-
for (const mutation of validMutations) {
|
|
132
|
-
const element = mutation.target;
|
|
133
|
-
switch (mutation.type) {
|
|
134
|
-
case 'attributes':
|
|
135
|
-
state.triggerElements.push(element);
|
|
136
|
-
break;
|
|
137
|
-
case 'childList':
|
|
138
|
-
for (const callback of state.callbacks) {
|
|
139
|
-
callback.addTriggerElements(state.triggerElements, element);
|
|
140
|
-
}
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
state.triggerAll = true;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
if ((state.triggerAll || state.triggerElements.length > 0) && !state.triggerFrame) {
|
|
211
|
+
if ((state.triggerAll || state.pendingElements.size > 0 || state.pendingRemovals) && !state.triggerFrame) {
|
|
150
212
|
state.triggerFrame = window.requestAnimationFrame(() => {
|
|
151
|
-
const
|
|
213
|
+
const all = state.triggerAll;
|
|
214
|
+
const removals = state.pendingRemovals;
|
|
215
|
+
const roots = all ? undefined : coalesceSiblings(Array.from(state.pendingElements).filter(e => e.isConnected));
|
|
152
216
|
state.triggerAll = false;
|
|
153
|
-
state.
|
|
217
|
+
state.pendingElements.clear();
|
|
218
|
+
state.pendingRemovals = false;
|
|
154
219
|
state.triggerFrame = 0;
|
|
155
|
-
|
|
220
|
+
if (!all && roots && roots.length === 0 && !removals) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
// With an empty roots array (removal-only batch), scopable callbacks
|
|
224
|
+
// do nothing and non-scopable ones fall back to a full scan.
|
|
225
|
+
state.callbacks.forEach(callback => callback.trigger(roots));
|
|
156
226
|
});
|
|
157
227
|
}
|
|
158
228
|
}
|
|
@@ -230,7 +300,7 @@ onFind.resume = () => {
|
|
|
230
300
|
}
|
|
231
301
|
};
|
|
232
302
|
onFind.ignore = (...selectors) => {
|
|
233
|
-
const
|
|
303
|
+
const state = getState();
|
|
234
304
|
for (const s of selectors) {
|
|
235
305
|
try {
|
|
236
306
|
document.querySelector(s);
|
|
@@ -238,8 +308,9 @@ onFind.ignore = (...selectors) => {
|
|
|
238
308
|
catch {
|
|
239
309
|
continue;
|
|
240
310
|
}
|
|
241
|
-
if (!blacklist.includes(s)) {
|
|
242
|
-
blacklist.push(s);
|
|
311
|
+
if (!state.blacklist.includes(s)) {
|
|
312
|
+
state.blacklist.push(s);
|
|
313
|
+
state.blacklistSelector = null;
|
|
243
314
|
}
|
|
244
315
|
}
|
|
245
316
|
};
|
package/dist/util/onFind.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onFind.js","sourceRoot":"","sources":["../../src/util/onFind.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAA;AAK1B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"onFind.js","sourceRoot":"","sources":["../../src/util/onFind.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
/* CIG */
|
|
3
3
|
/* -------------- */
|
|
4
4
|
.CIG {
|
|
5
|
-
|
|
5
|
+
/* Not a query container: nested .CIG chains cost 13,158ms/layout. See min() note below. */
|
|
6
|
+
@apply relative flex flex-wrap p-0 [--CIG-padding:theme(spacing.6)];
|
|
6
7
|
|
|
7
8
|
&.is-empty {
|
|
8
9
|
@apply hidden;
|
|
@@ -161,9 +162,10 @@
|
|
|
161
162
|
@apply w-full;
|
|
162
163
|
}
|
|
163
164
|
|
|
164
|
-
/*
|
|
165
|
+
/* min() replaces a @[312px]/CIG gate. Pixel-identical only while .CIG-row keeps
|
|
166
|
+
contain:inline-size - otherwise the 100% inflates intrinsic widths. */
|
|
165
167
|
> .CIG-small.inputSmall:not(.is-grid) {
|
|
166
|
-
@apply
|
|
168
|
+
@apply min-w-[min(312px,100%)] max-w-[540px] basis-1/2;
|
|
167
169
|
}
|
|
168
170
|
|
|
169
171
|
/* Inside a layout with columns, unset the min width to prevent fields from
|
|
@@ -195,7 +197,10 @@
|
|
|
195
197
|
.CIG-row {
|
|
196
198
|
--CIG-row-space: 1.5rem;
|
|
197
199
|
|
|
198
|
-
|
|
200
|
+
/* contain:inline-size, NOT @container. The containment is load-bearing: it stops
|
|
201
|
+
descendant min-content widths propagating up, else .Admin-main scrolls sideways.
|
|
202
|
+
The query container is what was slow - 13,158ms/layout vs 44ms for containment alone. */
|
|
203
|
+
@apply relative flex max-h-min min-w-[200px] basis-full flex-row flex-wrap content-start [contain:inline-size];
|
|
199
204
|
|
|
200
205
|
/* The colored vertical "thread" to the side of each row.
|
|
201
206
|
The 1px left offset is to stay true to the design so that there is a slight gap betweem the thread and container.
|
|
@@ -239,15 +244,8 @@
|
|
|
239
244
|
|
|
240
245
|
/*
|
|
241
246
|
Fades out the surrounding buttons when the user focuses the input. */
|
|
242
|
-
.CIG-row
|
|
243
|
-
|
|
244
|
-
input:focus,
|
|
245
|
-
a:focus,
|
|
246
|
-
button:focus,
|
|
247
|
-
.ComboInput:focus,
|
|
248
|
-
.ProseMirror:focus,
|
|
249
|
-
.is-highlighted
|
|
250
|
-
) {
|
|
247
|
+
.CIG-row.is-inputFocused,
|
|
248
|
+
.CIG-row:has(.is-highlighted) {
|
|
251
249
|
> .CIG-label .CIG-guide:not(:hover),
|
|
252
250
|
> .CIG-label .CIG-help:not(:hover),
|
|
253
251
|
> .CIG-label .CIG-comments:not(:hover),
|
|
@@ -260,6 +258,10 @@
|
|
|
260
258
|
@apply opacity-100;
|
|
261
259
|
}
|
|
262
260
|
|
|
261
|
+
.RCIG-item.is-collapsed {
|
|
262
|
+
contain: layout style;
|
|
263
|
+
}
|
|
264
|
+
|
|
263
265
|
/* Fade in the surrounding buttons when the user interacts with the input. */
|
|
264
266
|
.CIG-row:where(.is-openPopup, :hover, :focus-within) > .CIG-label > *,
|
|
265
267
|
.CIG-row:where(.is-openPopup, :hover, :focus-within) > .AIChatButton {
|
|
@@ -869,6 +869,8 @@ onFind('.ContentEdit-left', (leftPane: HTMLElement) => {
|
|
|
869
869
|
if (!contentEdit) return
|
|
870
870
|
|
|
871
871
|
const topBar = contentEdit.querySelector<HTMLElement>('.ContentEdit-top')
|
|
872
|
+
const pageContent = contentEdit.closest<HTMLElement>('.Page-content')
|
|
873
|
+
pageContent?.classList.remove('is-editScrolled')
|
|
872
874
|
|
|
873
875
|
leftPane.addEventListener(
|
|
874
876
|
'scroll',
|
|
@@ -878,9 +880,11 @@ onFind('.ContentEdit-left', (leftPane: HTMLElement) => {
|
|
|
878
880
|
const maxScroll = leftPane.scrollHeight - leftPane.clientHeight
|
|
879
881
|
if (maxScroll > (topBar?.offsetHeight ?? 0)) {
|
|
880
882
|
contentEdit.classList.add('is-scrolled')
|
|
883
|
+
pageContent?.classList.add('is-editScrolled')
|
|
881
884
|
}
|
|
882
885
|
} else if (leftPane.scrollTop === 0) {
|
|
883
886
|
contentEdit.classList.remove('is-scrolled')
|
|
887
|
+
pageContent?.classList.remove('is-editScrolled')
|
|
884
888
|
}
|
|
885
889
|
}),
|
|
886
890
|
)
|
|
@@ -892,3 +896,34 @@ onFind('.ContentEdit-left', (leftPane: HTMLElement) => {
|
|
|
892
896
|
leftPane.scrollTo({ top: 0, behavior: 'smooth' })
|
|
893
897
|
})
|
|
894
898
|
})
|
|
899
|
+
|
|
900
|
+
// Replaces the focus-keyed :has() on .CIG-row, which forced full-row style re-evaluation on every focus change.
|
|
901
|
+
let focusedCigRow: HTMLElement | null = null
|
|
902
|
+
|
|
903
|
+
document.addEventListener('focusin', (event) => {
|
|
904
|
+
const row =
|
|
905
|
+
(event.target as HTMLElement).closest?.<HTMLElement>('.CIG-row') ?? null
|
|
906
|
+
if (row === focusedCigRow) return
|
|
907
|
+
focusedCigRow?.classList.remove('is-inputFocused')
|
|
908
|
+
focusedCigRow = row
|
|
909
|
+
focusedCigRow?.classList.add('is-inputFocused')
|
|
910
|
+
})
|
|
911
|
+
|
|
912
|
+
document.addEventListener('focusout', (event) => {
|
|
913
|
+
if (event.relatedTarget) return
|
|
914
|
+
focusedCigRow?.classList.remove('is-inputFocused')
|
|
915
|
+
focusedCigRow = null
|
|
916
|
+
})
|
|
917
|
+
|
|
918
|
+
onFind('.ProfileDropdown-items', (items: HTMLElement) => {
|
|
919
|
+
items.closest('.Widget')?.classList.add('has-profileDropdown')
|
|
920
|
+
})
|
|
921
|
+
|
|
922
|
+
onFind('.Widget-controls', (controls: HTMLElement) => {
|
|
923
|
+
const widget = controls.closest<HTMLElement>('.Widget')
|
|
924
|
+
if (!widget) return
|
|
925
|
+
const update = () =>
|
|
926
|
+
widget.classList.toggle('has-widgetControls', controls.childNodes.length > 0)
|
|
927
|
+
update()
|
|
928
|
+
new MutationObserver(update).observe(controls, { childList: true })
|
|
929
|
+
})
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
--pageNav-w: var(--pageNav-expanded, var(--pageNav-w-sm));
|
|
20
20
|
--page-title-h: 68px;
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
/* Only the nav-rail slide. Not transition-all: this is 100vw/100dvh, so `all`
|
|
23
|
+
animates width/height on every resize - ~60 layouts instead of one. */
|
|
24
|
+
@apply fixed grid w-full overflow-hidden bg-gray-200 text-gray-600 transition-[grid-template-columns] duration-250 ease-linear [column-gap:1px] [grid-template:'broadcast'_minmax(0,_auto)_'stack'_1fr] max-md:h-full md:h-dvh md:min-h-dvh md:w-[100vw] md:[--pageNav-w-sm:68px];
|
|
23
25
|
|
|
24
26
|
.Page-askAiLink {
|
|
25
27
|
@apply hidden;
|
|
@@ -304,7 +306,7 @@
|
|
|
304
306
|
.Page-main:has(> .Page-header.mobile) {
|
|
305
307
|
@apply transition-[grid-template-rows] duration-300 ease-spring-stiff;
|
|
306
308
|
|
|
307
|
-
|
|
309
|
+
&.is-headerScrolled {
|
|
308
310
|
@apply grid-rows-[0px_1fr];
|
|
309
311
|
}
|
|
310
312
|
}
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
.Widget:not(.is-collapsible) {
|
|
45
|
-
|
|
45
|
+
&.has-widgetControls > .Widget-title {
|
|
46
46
|
@apply pe-0 [grid-column:fullbleed-start_/_span_2];
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
}
|
|
230
230
|
|
|
231
231
|
/* Profile Dropdown popup widget */
|
|
232
|
-
.Widget
|
|
232
|
+
.Widget.has-profileDropdown {
|
|
233
233
|
--space: theme(spacing.4);
|
|
234
234
|
|
|
235
235
|
> .ProfileDropdown-items {
|