@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.
Files changed (143) hide show
  1. package/dist/storybook/assets/{ActionBar.stories-BSwwf2PX.js → ActionBar.stories-Yu6hLS-7.js} +1 -1
  2. package/dist/storybook/assets/{ActionItem.stories-SCIA5Rt0.js → ActionItem.stories-HDUuT_Y3.js} +1 -1
  3. package/dist/storybook/assets/{AiSparkle.stories-ByeiNU3G.js → AiSparkle.stories--LwneJIF.js} +1 -1
  4. package/dist/storybook/assets/{Avatar.stories-1EUJytBr.js → Avatar.stories-7nYYV75H.js} +1 -1
  5. package/dist/storybook/assets/{AvatarGroup.stories-Bstlt4go.js → AvatarGroup.stories-DxxDFJiA.js} +1 -1
  6. package/dist/storybook/assets/{Badge.stories-X7m0Vl2G.js → Badge.stories-D8fmfms-.js} +1 -1
  7. package/dist/storybook/assets/{Banner.stories-ljxjOtEc.js → Banner.stories-hlnDeqi6.js} +1 -1
  8. package/dist/storybook/assets/{Button-Dbpmp5Ih.js → Button-PG1zeey_.js} +1 -1
  9. package/dist/storybook/assets/{Button.stories-C5qS3rIw.js → Button.stories-D8OLuiQW.js} +1 -1
  10. package/dist/storybook/assets/{ButtonGroup.stories-Bl1Ko9jX.js → ButtonGroup.stories-Dz1B5l88.js} +1 -1
  11. package/dist/storybook/assets/{Card.stories-CfFIzXg5.js → Card.stories-Orbf7wd5.js} +1 -1
  12. package/dist/storybook/assets/{Celebrate.stories-TSJrIQR8.js → Celebrate.stories-BpTW_6sa.js} +1 -1
  13. package/dist/storybook/assets/{Checkbox.stories-DUpT9Iwh.js → Checkbox.stories-DZM4MMCD.js} +1 -1
  14. package/dist/storybook/assets/{CircularProgress.stories-usNosiIU.js → CircularProgress.stories-DWB5hxZv.js} +1 -1
  15. package/dist/storybook/assets/{ClipboardMixin.stories-0jnZ0Drs.js → ClipboardMixin.stories-BGanP3Ar.js} +1 -1
  16. package/dist/storybook/assets/{Color-6BZIO3FS-C6ecAOER.js → Color-6BZIO3FS-B2u7xxz5.js} +1 -1
  17. package/dist/storybook/assets/{Colors.stories-DcbIlkPs.js → Colors.stories-xHX6CHCh.js} +1 -1
  18. package/dist/storybook/assets/{CombinedEffects.stories-CU-hwRPT.js → CombinedEffects.stories-D10WQ6NJ.js} +1 -1
  19. package/dist/storybook/assets/{ComponentStatesMixin-Dcz-J-hg.js → ComponentStatesMixin-BACZA29L.js} +1 -1
  20. package/dist/storybook/assets/{ComponentStatesMixin.stories-orhdmIUX.js → ComponentStatesMixin.stories-Cz2QMyPD.js} +1 -1
  21. package/dist/storybook/assets/{CopyToClipboard.stories-D1R2yCQL.js → CopyToClipboard.stories-D81eKI8H.js} +1 -1
  22. package/dist/storybook/assets/{Debounce.stories-6z8aEn7O.js → Debounce.stories-C2WIJZtd.js} +1 -1
  23. package/dist/storybook/assets/{DocsRenderer-LL677BLK-B-fTNYB5.js → DocsRenderer-LL677BLK-CEUT7l9O.js} +3 -3
  24. package/dist/storybook/assets/{Dropdown.stories-CeVpVPrP.js → Dropdown.stories-DosyK4Xp.js} +1 -1
  25. package/dist/storybook/assets/{EmptyState.stories-DdCyApUP.js → EmptyState.stories-l8M0yROT.js} +1 -1
  26. package/dist/storybook/assets/{EscaAvatar.stories-DNK85ssI.js → EscaAvatar.stories-jSs4xDDT.js} +1 -1
  27. package/dist/storybook/assets/{Events.stories-B1qeq2wy.js → Events.stories-BPJUevWD.js} +1 -1
  28. package/dist/storybook/assets/{Heading.stories-DRu5hUyJ.js → Heading.stories-BwQNsNCD.js} +1 -1
  29. package/dist/storybook/assets/{HueRipple.stories-D3zqVZWM.js → HueRipple.stories-r24GQTwM.js} +1 -1
  30. package/dist/storybook/assets/{Icon.stories-CKG5fIIH.js → Icon.stories-C13rAqjc.js} +1 -1
  31. package/dist/storybook/assets/{IconButton.stories-B3RZKBqV.js → IconButton.stories-o6SQ3i0y.js} +1 -1
  32. package/dist/storybook/assets/{LinearProgress.stories-BPvFKGi0.js → LinearProgress.stories-DXQQsuwf.js} +1 -1
  33. package/dist/storybook/assets/{Message.stories-Dq3YDccT.js → Message.stories-BvivAs2E.js} +1 -1
  34. package/dist/storybook/assets/{OnFindMixin.stories-qKTooUKN.js → OnFindMixin.stories-DpFUP67v.js} +1 -1
  35. package/dist/storybook/assets/{Pagination.stories-BaFWcckS.js → Pagination.stories-BQIZcpxs.js} +1 -1
  36. package/dist/storybook/assets/{Popover.stories-DlHlfWrk.js → Popover.stories-DW_ME7-J.js} +1 -1
  37. package/dist/storybook/assets/{ReadyMixin-BQ-q8NO4.js → ReadyMixin-SsbjGIAN.js} +1 -1
  38. package/dist/storybook/assets/{RovingTabindexMixin.stories-CQkteE6h.js → RovingTabindexMixin.stories--7ZT92XF.js} +1 -1
  39. package/dist/storybook/assets/{Rtc.stories-BWBDrPM8.js → Rtc.stories-Jg3rW19u.js} +1 -1
  40. package/dist/storybook/assets/{ScrollShadow.stories-BtM7Q6Ys.js → ScrollShadow.stories-DugbXzyD.js} +1 -1
  41. package/dist/storybook/assets/{Switch.stories-Ys6MzOf7.js → Switch.stories-DULTCvm6.js} +1 -1
  42. package/dist/storybook/assets/{Tab.stories-CNIDOscR.js → Tab.stories-rQrDfwi4.js} +1 -1
  43. package/dist/storybook/assets/{Tabs.stories-oAxuRqKE.js → Tabs.stories-BF6JfaUj.js} +1 -1
  44. package/dist/storybook/assets/{Throttle.stories-D2nPrZEL.js → Throttle.stories-BTXPUD_9.js} +1 -1
  45. package/dist/storybook/assets/{Tooltip.stories-DJhjWYNV.js → Tooltip.stories-CC5jtR6l.js} +1 -1
  46. package/dist/storybook/assets/{Upload.stories-DBveASQF.js → Upload.stories-BcPWDJ9v.js} +1 -1
  47. package/dist/storybook/assets/{UploadItem.stories-Co5bGJs6.js → UploadItem.stories-CbBUmeMS.js} +1 -1
  48. package/dist/storybook/assets/{Welcome.stories-Cls_kv8A.js → Welcome.stories-LMHGYSp6.js} +1 -1
  49. package/dist/storybook/assets/{Widget.stories-CXpqw5z8.js → Widget.stories-C7SRQn3o.js} +1 -1
  50. package/dist/storybook/assets/{WithTooltip-65CFNBJE-Ik6o5Ygb.js → WithTooltip-65CFNBJE-Cp1Cy3oy.js} +1 -1
  51. package/dist/storybook/assets/{blocks-DjXAnVrm.js → blocks-BxdX04XX.js} +5 -5
  52. package/dist/storybook/assets/{formatter-EIJCOSYU-CQXaWVan.js → formatter-EIJCOSYU--pzeRzQ9.js} +1 -1
  53. package/dist/storybook/assets/if-defined-D53b_oJ7.js +1 -0
  54. package/dist/storybook/assets/{iframe-D43T7JCn.js → iframe-ComXXBv4.js} +3 -3
  55. package/dist/storybook/assets/{index-DIk8fbbl.js → index-DlomlmQt.js} +1 -1
  56. package/dist/storybook/assets/onFind-I2sK1i6b.js +1 -0
  57. package/dist/storybook/assets/{onFind.stories-DgxMtTTG.js → onFind.stories-BMm3A2oE.js} +20 -20
  58. package/dist/storybook/assets/{onRemove.stories-DltMfNLX.js → onRemove.stories-CellKu-r.js} +1 -1
  59. package/dist/storybook/assets/{onVisible.stories-x3VhGAuF.js → onVisible.stories-CrnqbcYv.js} +1 -1
  60. package/dist/storybook/assets/{style-map-C5J-rKx9.js → style-map-DPWIvyMv.js} +1 -1
  61. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CphVNry2.js → syntaxhighlighter-ED5Y7EFY-Bl3HCk9S.js} +1 -1
  62. package/dist/storybook/iframe.html +1 -1
  63. package/dist/storybook/project.json +1 -1
  64. package/dist/util/onFind.d.ts.map +1 -1
  65. package/dist/util/onFind.js +137 -66
  66. package/dist/util/onFind.js.map +1 -1
  67. package/package.json +1 -1
  68. package/src/legacy/tool-ui/src/ContentEdit.css +1 -1
  69. package/src/legacy/tool-ui/src/ContentInputGroup.css +15 -13
  70. package/src/legacy/tool-ui/src/Entry.ts +35 -0
  71. package/src/legacy/tool-ui/src/Page.css +4 -2
  72. package/src/legacy/tool-ui/src/Widget.css +2 -2
  73. package/src/legacy/tool-ui/src/dom/onFind.ts +29 -270
  74. package/src/legacy/tool-ui/src/main/webapp/dist/{6086.7ca02b827506f29db590.js → 1478.b8f12bb302ba4337da4c.js} +1 -1
  75. package/src/legacy/tool-ui/src/main/webapp/dist/{7033.4cd6efbe12e7aaa35745.js → 1536.9b3398bf3ebc2f20f009.js} +1 -1
  76. package/src/legacy/tool-ui/src/main/webapp/dist/{2111.3956b5196a514b2c0131.js → 2111.efb40a1ab7d6b02913dd.js} +1 -1
  77. package/src/legacy/tool-ui/src/main/webapp/dist/{2456.5bcfb782c2ec27de32ed.js → 2456.2c20c3564647ca071b26.js} +1 -1
  78. package/src/legacy/tool-ui/src/main/webapp/dist/{2537.e8f1359bedd328bf57f4.js → 2537.a4d0a358f9c1a60ebc68.js} +1 -1
  79. package/src/legacy/tool-ui/src/main/webapp/dist/{270.3011484ff80f3093083a.js → 270.8fb1c93bc009582a32cd.js} +1 -1
  80. package/src/legacy/tool-ui/src/main/webapp/dist/{2825.c1342ac2662d11fd4125.js → 2825.9c2b897f2a3799dcbd19.js} +1 -1
  81. package/src/legacy/tool-ui/src/main/webapp/dist/{2947.f96d21c44c05980974ef.js → 2947.52cb126b0e2ab4415189.js} +1 -1
  82. package/src/legacy/tool-ui/src/main/webapp/dist/3409.8e764d5fa8e2c2cf4d00.js +1 -0
  83. package/src/legacy/tool-ui/src/main/webapp/dist/{3532.c358dfbb2cde0f802c7f.js → 3532.ed7716198932139a4fb1.js} +1 -1
  84. package/src/legacy/tool-ui/src/main/webapp/dist/{3543.2d704cf9e170322468e7.js → 3543.c62d88fc2904cccc7e64.js} +2 -2
  85. package/src/legacy/tool-ui/src/main/webapp/dist/{3611.61837ffa933f74502094.js → 3611.5466757310c53bea4b6e.js} +1 -1
  86. package/src/legacy/tool-ui/src/main/webapp/dist/{4374.37147747a254da8f5f8a.js → 4374.a2ea1952e2daf222dc20.js} +1 -1
  87. package/src/legacy/tool-ui/src/main/webapp/dist/{4450.16dd5684292fd0a7ea7f.js → 4450.9eaca48c71e3dfb64a45.js} +1 -1
  88. package/src/legacy/tool-ui/src/main/webapp/dist/{4478.93f64e6a6ccb35a6c6d4.js → 4478.3c6e9704ad67996b53a8.js} +1 -1
  89. package/src/legacy/tool-ui/src/main/webapp/dist/{4790.10d75f7c7f8e54ce83a1.js → 4790.ff3be0fd92b8d7422ae0.js} +1 -1
  90. package/src/legacy/tool-ui/src/main/webapp/dist/4795.d4ba3cc84dbf7e58fecb.js +1 -0
  91. package/src/legacy/tool-ui/src/main/webapp/dist/{5098.33613009827cfc80aafb.js → 5098.36bb17ff636e87930c6c.js} +1 -1
  92. package/src/legacy/tool-ui/src/main/webapp/dist/5306.b41630da0d1df3453bc0.js +1 -0
  93. package/src/legacy/tool-ui/src/main/webapp/dist/{5385.6656501b67424994820b.js → 5385.a7d0efb64a5e06173012.js} +1 -1
  94. package/src/legacy/tool-ui/src/main/webapp/dist/{5598.d84773ca53126661bdca.js → 5598.2f1f3ddbbaefdc2fce5a.js} +2 -2
  95. package/src/legacy/tool-ui/src/main/webapp/dist/{5617.c81ecb679371ca302f1f.js → 5617.96a2611314c9148efa9c.js} +1 -1
  96. package/src/legacy/tool-ui/src/main/webapp/dist/{6216.2d532054fcb8e634f96b.js → 6216.3ad86a4e1c11cd87b2cc.js} +1 -1
  97. package/src/legacy/tool-ui/src/main/webapp/dist/{6497.b7d8dcbf0e7c8d8d538d.js → 6497.17547f58bb12eb6df22d.js} +1 -1
  98. package/src/legacy/tool-ui/src/main/webapp/dist/{6565.0e5abc3bd344c53ae154.js → 6565.9abec7b54647bee08edc.js} +1 -1
  99. package/src/legacy/tool-ui/src/main/webapp/dist/{7361.793163ca71dfac69d9eb.js → 6664.ec6ef73e3bb33125bd4c.js} +1 -1
  100. package/src/legacy/tool-ui/src/main/webapp/dist/6996.f0fbe667259b36548b69.js +1 -0
  101. package/src/legacy/tool-ui/src/main/webapp/dist/{5718.449113ae2463a3bb8a83.js → 7175.43f44b9e832f6734d8ea.js} +2 -2
  102. package/src/legacy/tool-ui/src/main/webapp/dist/{7202.1e5b8f21215ea6eae20a.js → 7202.237027436f4c50941edf.js} +1 -1
  103. package/src/legacy/tool-ui/src/main/webapp/dist/{7524.2990be869cf0a2988d17.js → 7524.ae0837d4dafc92523de7.js} +1 -1
  104. package/src/legacy/tool-ui/src/main/webapp/dist/{7741.0b2789c4e783af835763.js → 7741.84e705c31c3ebc66db92.js} +1 -1
  105. package/src/legacy/tool-ui/src/main/webapp/dist/{7863.2a1d1fd229778a47e10b.js → 7863.043ee730e243753af268.js} +1 -1
  106. package/src/legacy/tool-ui/src/main/webapp/dist/8430.0e134152362fff9ad9d0.js +1 -0
  107. package/src/legacy/tool-ui/src/main/webapp/dist/{8752.3d02a0f42ec39786fdf0.js → 8752.3e4315bdb4ad40297406.js} +1 -1
  108. package/src/legacy/tool-ui/src/main/webapp/dist/{8897.bfeed19f2a4acbb6d67c.js → 8897.b12d749c9564eaa0c945.js} +1 -1
  109. package/src/legacy/tool-ui/src/main/webapp/dist/{8934.e90ceca8169fc25e4e1b.js → 8934.9f3371f510334b7bae6d.js} +1 -1
  110. package/src/legacy/tool-ui/src/main/webapp/dist/{9277.88b2d89b3ba1c24e7f93.js → 9277.385ca94e4e3722d25e81.js} +2 -2
  111. package/src/legacy/tool-ui/src/main/webapp/dist/{9360.bb0352313d610cae11de.js → 9360.269cf0d9b358dcf52f55.js} +2 -2
  112. package/src/legacy/tool-ui/src/main/webapp/dist/{9576.174d6a99544d17e7416d.js → 9576.18cf577b8886dd85372e.js} +1 -1
  113. package/src/legacy/tool-ui/src/main/webapp/dist/Appetizeio.47287ce7992dc52bcb47.js +1 -0
  114. package/src/legacy/tool-ui/src/main/webapp/dist/CISpectrum.45b362ff7dbae9d80cd9.js +1 -0
  115. package/src/legacy/tool-ui/src/main/webapp/dist/{CodeMirror.5ddffe054374f883d6f8.js → CodeMirror.2fda1e731cfcb7bec629.js} +1 -1
  116. package/src/legacy/tool-ui/src/main/webapp/dist/{ImageEditor.14e3b3035666436f53a5.js → ImageEditor.a6da6e88cc958354ec68.js} +1 -1
  117. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.5a8f4754ee77adc85db2.js +500 -0
  118. package/src/legacy/tool-ui/src/main/webapp/dist/TimedContent.2d0ed03e8d1c994ecfb2.js +1 -0
  119. package/src/legacy/tool-ui/src/main/webapp/dist/{VideoEditor.11c89dda5cf125738a33.js → VideoEditor.c183998c7b2b0dae98f6.js} +2 -2
  120. package/src/legacy/tool-ui/src/main/webapp/dist/{v4.e496a62fb1d4be0544d4.js → v4.3fe1a9cf9f56fbaf9b14.js} +9 -9
  121. package/src/legacy/tool-ui/src/main/webapp/dist/v5.177f4913df46d4960d57.js +92 -0
  122. package/src/legacy/tool-ui/src/main/webapp/dist/v5.5eac97ec93d474fa6085.css +5 -0
  123. package/src/legacy/tool-ui/src/v5.ts +5 -0
  124. package/dist/storybook/assets/if-defined-BVO6TNCy.js +0 -1
  125. package/dist/storybook/assets/onFind-CamigPPi.js +0 -1
  126. package/src/legacy/tool-ui/src/main/webapp/dist/4114.57fe159e416e716f8cbc.js +0 -1
  127. package/src/legacy/tool-ui/src/main/webapp/dist/4582.243dbaa3d8a8648f6f40.js +0 -1
  128. package/src/legacy/tool-ui/src/main/webapp/dist/4795.034ebc93a67b7a3d6536.js +0 -1
  129. package/src/legacy/tool-ui/src/main/webapp/dist/Appetizeio.185641211f7c0e42a455.js +0 -1
  130. package/src/legacy/tool-ui/src/main/webapp/dist/CISpectrum.74db7dc80b3a6797a167.js +0 -1
  131. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.24cbb57c0030725925a0.js +0 -500
  132. package/src/legacy/tool-ui/src/main/webapp/dist/TimedContent.4bb4dc83ffbe4019dd7b.js +0 -1
  133. package/src/legacy/tool-ui/src/main/webapp/dist/v5.1711204aaf6c5fa01b1b.js +0 -92
  134. package/src/legacy/tool-ui/src/main/webapp/dist/v5.cb6c1a38c5ba7fa9ea93.css +0 -5
  135. /package/src/legacy/tool-ui/src/main/webapp/dist/{3543.2d704cf9e170322468e7.js.LICENSE.txt → 3543.c62d88fc2904cccc7e64.js.LICENSE.txt} +0 -0
  136. /package/src/legacy/tool-ui/src/main/webapp/dist/{5598.d84773ca53126661bdca.js.LICENSE.txt → 5598.2f1f3ddbbaefdc2fce5a.js.LICENSE.txt} +0 -0
  137. /package/src/legacy/tool-ui/src/main/webapp/dist/{5718.449113ae2463a3bb8a83.js.LICENSE.txt → 7175.43f44b9e832f6734d8ea.js.LICENSE.txt} +0 -0
  138. /package/src/legacy/tool-ui/src/main/webapp/dist/{9277.88b2d89b3ba1c24e7f93.js.LICENSE.txt → 9277.385ca94e4e3722d25e81.js.LICENSE.txt} +0 -0
  139. /package/src/legacy/tool-ui/src/main/webapp/dist/{9360.bb0352313d610cae11de.js.LICENSE.txt → 9360.269cf0d9b358dcf52f55.js.LICENSE.txt} +0 -0
  140. /package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.24cbb57c0030725925a0.js.LICENSE.txt → RTEProseMirror.5a8f4754ee77adc85db2.js.LICENSE.txt} +0 -0
  141. /package/src/legacy/tool-ui/src/main/webapp/dist/{VideoEditor.11c89dda5cf125738a33.js.LICENSE.txt → VideoEditor.c183998c7b2b0dae98f6.js.LICENSE.txt} +0 -0
  142. /package/src/legacy/tool-ui/src/main/webapp/dist/{v4.e496a62fb1d4be0544d4.js.LICENSE.txt → v4.3fe1a9cf9f56fbaf9b14.js.LICENSE.txt} +0 -0
  143. /package/src/legacy/tool-ui/src/main/webapp/dist/{v5.1711204aaf6c5fa01b1b.js.LICENSE.txt → v5.177f4913df46d4960d57.js.LICENSE.txt} +0 -0
@@ -1,5 +1,25 @@
1
1
  import log from 'loglevel';
2
- const KEY = Symbol.for('brightspot.onFind');
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
- triggerElements: [],
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
- #matches;
51
+ #scopable;
30
52
  constructor(root, selectors, fn) {
31
53
  this.#root = root;
32
- this.#called = `data-ofc${getState().calledIndex++}`;
54
+ this.#called = `${CALLED_ATTR_PREFIX}${getState().calledIndex++}`;
33
55
  if (!Array.isArray(selectors)) {
34
56
  selectors = [selectors];
35
57
  }
36
- this.#selectors = selectors
37
- .map(selectors.some(s => s.indexOf(',') > -1) ? s => s : s => `${s}:not([${this.#called}])`)
38
- .join(',');
39
- this.#fn = fn;
40
- const matches = selectors.map(s => s.trim()).filter(s => s.indexOf(' ') < 0 && s.indexOf(',') < 0);
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
- for (const e of element.querySelectorAll(this.#selectors)) {
51
- triggerElements.push(e);
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
- trigger(elements) {
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.#matches && Array.isArray(elements)) {
60
- for (const element of elements) {
61
- if (this.#matches.some(m => element.matches(m))) {
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
- else {
67
- for (const element of this.#root.querySelectorAll(this.#selectors)) {
68
- this.#callCallback(element);
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 { blacklist } = getState();
91
- return blacklist.length > 0 && blacklist.some(s => node.closest(s) !== null);
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
- const checkMutations = Array.isArray(mutations);
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
- validMutations.push(mutation);
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
- if (!every.call(mutation.addedNodes, isText) || !every.call(mutation.removedNodes, isText)) {
117
- validMutations.push(mutation);
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
- if (validMutations.length > 500) {
208
+ else {
127
209
  state.triggerAll = true;
128
210
  }
129
- if (!state.triggerAll) {
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 elements = state.triggerAll ? undefined : state.triggerElements;
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.triggerElements = [];
217
+ state.pendingElements.clear();
218
+ state.pendingRemovals = false;
154
219
  state.triggerFrame = 0;
155
- state.callbacks.forEach(callback => callback.trigger(elements));
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 { blacklist } = getState();
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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"onFind.js","sourceRoot":"","sources":["../../src/util/onFind.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onFind.js","sourceRoot":"","sources":["../../src/util/onFind.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspot/ui",
3
- "version": "6.0.4",
3
+ "version": "6.0.5-pr.212.1",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "description": "A UI library for building Brightspot CMS components.",
@@ -44,7 +44,7 @@
44
44
  }
45
45
 
46
46
  /* Hide title bar items when page is scrolled */
47
- .Page .Page-content:has(.ContentEdit.is-scrolled) {
47
+ .Page .Page-content.is-editScrolled {
48
48
  @apply [--edit-banner-h:0];
49
49
  }
50
50
 
@@ -2,7 +2,8 @@
2
2
  /* CIG */
3
3
  /* -------------- */
4
4
  .CIG {
5
- @apply relative flex flex-wrap p-0 @container/CIG [--CIG-padding:theme(spacing.6)];
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
- /* Only constrain the width when the CIG container is wide enough at over 312px */
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 @[312px]/CIG:min-w-[312px] @[312px]/CIG:max-w-[540px] @[312px]/CIG:basis-1/2;
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
- @apply relative flex max-h-min min-w-[200px] basis-full flex-row flex-wrap content-start @container/CIG-row;
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:has(
243
- textarea:focus,
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
- @apply fixed grid w-full overflow-hidden bg-gray-200 text-gray-600 transition-all 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];
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
- &:has(> .Page-header.mobile.is-scrolled) {
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
- &:has(.Widget-controls:not(:empty)) > .Widget-title {
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:has(.ProfileDropdown-items) {
232
+ .Widget.has-profileDropdown {
233
233
  --space: theme(spacing.4);
234
234
 
235
235
  > .ProfileDropdown-items {