@brightspot/ui 6.0.3 → 6.0.4-pr.228.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 (135) hide show
  1. package/dist/custom-elements.json +237 -237
  2. package/dist/storybook/assets/{ActionBar.stories-BSwwf2PX.js → ActionBar.stories-B3W9l3sW.js} +1 -1
  3. package/dist/storybook/assets/{ActionItem.stories-SCIA5Rt0.js → ActionItem.stories-Bgq9Si14.js} +1 -1
  4. package/dist/storybook/assets/{AiSparkle.stories-ByeiNU3G.js → AiSparkle.stories-BvZZGCv0.js} +1 -1
  5. package/dist/storybook/assets/{Avatar.stories-1EUJytBr.js → Avatar.stories-DKefO8vf.js} +1 -1
  6. package/dist/storybook/assets/{AvatarGroup.stories-Bstlt4go.js → AvatarGroup.stories-DLU0xm5i.js} +1 -1
  7. package/dist/storybook/assets/{Badge.stories-X7m0Vl2G.js → Badge.stories-DYf4buS2.js} +1 -1
  8. package/dist/storybook/assets/{Banner.stories-ljxjOtEc.js → Banner.stories-kvxGWQ8i.js} +1 -1
  9. package/dist/storybook/assets/{Button-Dbpmp5Ih.js → Button-QbHhnaex.js} +1 -1
  10. package/dist/storybook/assets/{Button.stories-C5qS3rIw.js → Button.stories-Cbc2kacG.js} +1 -1
  11. package/dist/storybook/assets/{ButtonGroup.stories-Bl1Ko9jX.js → ButtonGroup.stories-BlMr_i2l.js} +1 -1
  12. package/dist/storybook/assets/{Card.stories-CfFIzXg5.js → Card.stories-CXgpz0_-.js} +1 -1
  13. package/dist/storybook/assets/{Celebrate.stories-TSJrIQR8.js → Celebrate.stories-DGuheVhJ.js} +1 -1
  14. package/dist/storybook/assets/{Checkbox.stories-DUpT9Iwh.js → Checkbox.stories-D5gjg3gd.js} +1 -1
  15. package/dist/storybook/assets/{CircularProgress.stories-usNosiIU.js → CircularProgress.stories-BtEajA8s.js} +1 -1
  16. package/dist/storybook/assets/{ClipboardMixin.stories-0jnZ0Drs.js → ClipboardMixin.stories-CVWhGXfx.js} +1 -1
  17. package/dist/storybook/assets/{Color-6BZIO3FS-C6ecAOER.js → Color-6BZIO3FS-Cy2iWC0B.js} +1 -1
  18. package/dist/storybook/assets/{Colors.stories-DcbIlkPs.js → Colors.stories-lMKhdwtD.js} +1 -1
  19. package/dist/storybook/assets/{CombinedEffects.stories-CU-hwRPT.js → CombinedEffects.stories-GYFjehaD.js} +1 -1
  20. package/dist/storybook/assets/{ComponentStatesMixin-Dcz-J-hg.js → ComponentStatesMixin-Cxyscq1q.js} +1 -1
  21. package/dist/storybook/assets/{ComponentStatesMixin.stories-orhdmIUX.js → ComponentStatesMixin.stories-Czvdt00v.js} +1 -1
  22. package/dist/storybook/assets/{CopyToClipboard.stories-D1R2yCQL.js → CopyToClipboard.stories-EYf9o4P1.js} +1 -1
  23. package/dist/storybook/assets/{Debounce.stories-6z8aEn7O.js → Debounce.stories-B4zKKGEF.js} +1 -1
  24. package/dist/storybook/assets/{DocsRenderer-LL677BLK-B-fTNYB5.js → DocsRenderer-LL677BLK-BTEtWPBs.js} +3 -3
  25. package/dist/storybook/assets/{Dropdown.stories-CeVpVPrP.js → Dropdown.stories-WQFH9gjF.js} +1 -1
  26. package/dist/storybook/assets/{EmptyState.stories-DdCyApUP.js → EmptyState.stories-CtZTgOyf.js} +1 -1
  27. package/dist/storybook/assets/{EscaAvatar.stories-DNK85ssI.js → EscaAvatar.stories-PJbKYuIx.js} +1 -1
  28. package/dist/storybook/assets/{Events.stories-B1qeq2wy.js → Events.stories-CED0yKoW.js} +1 -1
  29. package/dist/storybook/assets/{Heading.stories-DRu5hUyJ.js → Heading.stories-Yo84UBrv.js} +1 -1
  30. package/dist/storybook/assets/{HueRipple.stories-D3zqVZWM.js → HueRipple.stories-DQaK4bfx.js} +1 -1
  31. package/dist/storybook/assets/{Icon.stories-CKG5fIIH.js → Icon.stories-BLBUeiJt.js} +1 -1
  32. package/dist/storybook/assets/{IconButton.stories-B3RZKBqV.js → IconButton.stories-DE-AWDCu.js} +1 -1
  33. package/dist/storybook/assets/{LinearProgress.stories-BPvFKGi0.js → LinearProgress.stories-BMOO9ziw.js} +1 -1
  34. package/dist/storybook/assets/{Message.stories-Dq3YDccT.js → Message.stories-CQ4FeNtL.js} +1 -1
  35. package/dist/storybook/assets/{OnFindMixin.stories-qKTooUKN.js → OnFindMixin.stories-BgF86VyY.js} +1 -1
  36. package/dist/storybook/assets/{Pagination.stories-BaFWcckS.js → Pagination.stories-BQz3D7WR.js} +1 -1
  37. package/dist/storybook/assets/{Popover.stories-DlHlfWrk.js → Popover.stories-BySl8X_V.js} +1 -1
  38. package/dist/storybook/assets/{ReadyMixin-BQ-q8NO4.js → ReadyMixin-ZKicHfUd.js} +1 -1
  39. package/dist/storybook/assets/{RovingTabindexMixin.stories-CQkteE6h.js → RovingTabindexMixin.stories-DSHo6CDn.js} +1 -1
  40. package/dist/storybook/assets/{Rtc.stories-BWBDrPM8.js → Rtc.stories-k6JRiPH-.js} +1 -1
  41. package/dist/storybook/assets/{ScrollShadow.stories-BtM7Q6Ys.js → ScrollShadow.stories-DC0FuAGC.js} +1 -1
  42. package/dist/storybook/assets/{Switch.stories-Ys6MzOf7.js → Switch.stories-wOpKQIoZ.js} +1 -1
  43. package/dist/storybook/assets/{Tab.stories-CNIDOscR.js → Tab.stories-48kIvcjq.js} +1 -1
  44. package/dist/storybook/assets/{Tabs.stories-oAxuRqKE.js → Tabs.stories-BOy2M1hf.js} +1 -1
  45. package/dist/storybook/assets/{Throttle.stories-D2nPrZEL.js → Throttle.stories-nWsWmaUP.js} +1 -1
  46. package/dist/storybook/assets/{Tooltip.stories-DJhjWYNV.js → Tooltip.stories-lw4S0OCL.js} +1 -1
  47. package/dist/storybook/assets/{Upload.stories-DBveASQF.js → Upload.stories-CT96w70S.js} +1 -1
  48. package/dist/storybook/assets/{UploadItem.stories-Co5bGJs6.js → UploadItem.stories-DAQ0uKRd.js} +1 -1
  49. package/dist/storybook/assets/{Welcome.stories-Cls_kv8A.js → Welcome.stories-D_tWLJfQ.js} +1 -1
  50. package/dist/storybook/assets/{Widget.stories-CXpqw5z8.js → Widget.stories-Vklgd-HE.js} +1 -1
  51. package/dist/storybook/assets/{WithTooltip-65CFNBJE-Ik6o5Ygb.js → WithTooltip-65CFNBJE-CkTzfxlJ.js} +1 -1
  52. package/dist/storybook/assets/{blocks-DjXAnVrm.js → blocks-Dcu5vb5v.js} +5 -5
  53. package/dist/storybook/assets/{formatter-EIJCOSYU-CQXaWVan.js → formatter-EIJCOSYU-Dv3UXZl_.js} +1 -1
  54. package/dist/storybook/assets/if-defined-Ct57L3GT.js +1 -0
  55. package/dist/storybook/assets/{iframe-D43T7JCn.js → iframe-DUPD-I_r.js} +4 -4
  56. package/dist/storybook/assets/{index-DIk8fbbl.js → index-DonibaDQ.js} +1 -1
  57. package/dist/storybook/assets/onFind-BCF79WfX.js +1 -0
  58. package/dist/storybook/assets/{onFind.stories-DgxMtTTG.js → onFind.stories-CUNfMRDo.js} +20 -20
  59. package/dist/storybook/assets/{onRemove.stories-DltMfNLX.js → onRemove.stories-SA3czp21.js} +1 -1
  60. package/dist/storybook/assets/{onVisible.stories-x3VhGAuF.js → onVisible.stories-BaKmrATX.js} +1 -1
  61. package/dist/storybook/assets/{style-map-C5J-rKx9.js → style-map-DcmF1KuF.js} +1 -1
  62. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CphVNry2.js → syntaxhighlighter-ED5Y7EFY-CgbdQuEL.js} +1 -1
  63. package/dist/storybook/iframe.html +1 -1
  64. package/dist/storybook/project.json +1 -1
  65. package/dist/util/onFind.d.ts.map +1 -1
  66. package/dist/util/onFind.js +137 -66
  67. package/dist/util/onFind.js.map +1 -1
  68. package/package.json +1 -1
  69. package/src/legacy/tool-ui/src/dom/onFind.ts +29 -270
  70. package/src/legacy/tool-ui/src/main/webapp/dist/{6086.7ca02b827506f29db590.js → 1478.b8f12bb302ba4337da4c.js} +1 -1
  71. package/src/legacy/tool-ui/src/main/webapp/dist/{7033.4cd6efbe12e7aaa35745.js → 1536.9b3398bf3ebc2f20f009.js} +1 -1
  72. package/src/legacy/tool-ui/src/main/webapp/dist/{2111.3956b5196a514b2c0131.js → 2111.efb40a1ab7d6b02913dd.js} +1 -1
  73. package/src/legacy/tool-ui/src/main/webapp/dist/{2456.5bcfb782c2ec27de32ed.js → 2456.2c20c3564647ca071b26.js} +1 -1
  74. package/src/legacy/tool-ui/src/main/webapp/dist/{2537.e8f1359bedd328bf57f4.js → 2537.a4d0a358f9c1a60ebc68.js} +1 -1
  75. package/src/legacy/tool-ui/src/main/webapp/dist/{270.3011484ff80f3093083a.js → 270.8fb1c93bc009582a32cd.js} +1 -1
  76. package/src/legacy/tool-ui/src/main/webapp/dist/{2825.c1342ac2662d11fd4125.js → 2825.9c2b897f2a3799dcbd19.js} +1 -1
  77. package/src/legacy/tool-ui/src/main/webapp/dist/{2947.f96d21c44c05980974ef.js → 2947.52cb126b0e2ab4415189.js} +1 -1
  78. package/src/legacy/tool-ui/src/main/webapp/dist/3409.8e764d5fa8e2c2cf4d00.js +1 -0
  79. package/src/legacy/tool-ui/src/main/webapp/dist/{3532.c358dfbb2cde0f802c7f.js → 3532.ed7716198932139a4fb1.js} +1 -1
  80. package/src/legacy/tool-ui/src/main/webapp/dist/{3543.2d704cf9e170322468e7.js → 3543.c62d88fc2904cccc7e64.js} +2 -2
  81. package/src/legacy/tool-ui/src/main/webapp/dist/{3611.61837ffa933f74502094.js → 3611.5466757310c53bea4b6e.js} +1 -1
  82. package/src/legacy/tool-ui/src/main/webapp/dist/{4374.37147747a254da8f5f8a.js → 4374.a2ea1952e2daf222dc20.js} +1 -1
  83. package/src/legacy/tool-ui/src/main/webapp/dist/{4450.16dd5684292fd0a7ea7f.js → 4450.9eaca48c71e3dfb64a45.js} +1 -1
  84. package/src/legacy/tool-ui/src/main/webapp/dist/{4478.93f64e6a6ccb35a6c6d4.js → 4478.3c6e9704ad67996b53a8.js} +1 -1
  85. package/src/legacy/tool-ui/src/main/webapp/dist/{4790.10d75f7c7f8e54ce83a1.js → 4790.ff3be0fd92b8d7422ae0.js} +1 -1
  86. package/src/legacy/tool-ui/src/main/webapp/dist/4795.d4ba3cc84dbf7e58fecb.js +1 -0
  87. package/src/legacy/tool-ui/src/main/webapp/dist/{5098.33613009827cfc80aafb.js → 5098.36bb17ff636e87930c6c.js} +1 -1
  88. package/src/legacy/tool-ui/src/main/webapp/dist/5306.b41630da0d1df3453bc0.js +1 -0
  89. package/src/legacy/tool-ui/src/main/webapp/dist/{5385.6656501b67424994820b.js → 5385.a7d0efb64a5e06173012.js} +1 -1
  90. package/src/legacy/tool-ui/src/main/webapp/dist/{5598.d84773ca53126661bdca.js → 5598.2f1f3ddbbaefdc2fce5a.js} +2 -2
  91. package/src/legacy/tool-ui/src/main/webapp/dist/{5617.c81ecb679371ca302f1f.js → 5617.96a2611314c9148efa9c.js} +1 -1
  92. package/src/legacy/tool-ui/src/main/webapp/dist/{6216.2d532054fcb8e634f96b.js → 6216.3ad86a4e1c11cd87b2cc.js} +1 -1
  93. package/src/legacy/tool-ui/src/main/webapp/dist/{6497.b7d8dcbf0e7c8d8d538d.js → 6497.17547f58bb12eb6df22d.js} +1 -1
  94. package/src/legacy/tool-ui/src/main/webapp/dist/{6565.0e5abc3bd344c53ae154.js → 6565.9abec7b54647bee08edc.js} +1 -1
  95. package/src/legacy/tool-ui/src/main/webapp/dist/{7361.793163ca71dfac69d9eb.js → 6664.ec6ef73e3bb33125bd4c.js} +1 -1
  96. package/src/legacy/tool-ui/src/main/webapp/dist/6996.f0fbe667259b36548b69.js +1 -0
  97. package/src/legacy/tool-ui/src/main/webapp/dist/{5718.449113ae2463a3bb8a83.js → 7175.43f44b9e832f6734d8ea.js} +2 -2
  98. package/src/legacy/tool-ui/src/main/webapp/dist/{7202.1e5b8f21215ea6eae20a.js → 7202.237027436f4c50941edf.js} +1 -1
  99. package/src/legacy/tool-ui/src/main/webapp/dist/{7524.2990be869cf0a2988d17.js → 7524.ae0837d4dafc92523de7.js} +1 -1
  100. package/src/legacy/tool-ui/src/main/webapp/dist/{7741.0b2789c4e783af835763.js → 7741.84e705c31c3ebc66db92.js} +1 -1
  101. package/src/legacy/tool-ui/src/main/webapp/dist/{7863.2a1d1fd229778a47e10b.js → 7863.043ee730e243753af268.js} +1 -1
  102. package/src/legacy/tool-ui/src/main/webapp/dist/8430.0e134152362fff9ad9d0.js +1 -0
  103. package/src/legacy/tool-ui/src/main/webapp/dist/{8752.3d02a0f42ec39786fdf0.js → 8752.3e4315bdb4ad40297406.js} +1 -1
  104. package/src/legacy/tool-ui/src/main/webapp/dist/{8897.bfeed19f2a4acbb6d67c.js → 8897.b12d749c9564eaa0c945.js} +1 -1
  105. package/src/legacy/tool-ui/src/main/webapp/dist/{8934.e90ceca8169fc25e4e1b.js → 8934.9f3371f510334b7bae6d.js} +1 -1
  106. package/src/legacy/tool-ui/src/main/webapp/dist/{9277.88b2d89b3ba1c24e7f93.js → 9277.385ca94e4e3722d25e81.js} +2 -2
  107. package/src/legacy/tool-ui/src/main/webapp/dist/{9360.bb0352313d610cae11de.js → 9360.269cf0d9b358dcf52f55.js} +2 -2
  108. package/src/legacy/tool-ui/src/main/webapp/dist/{9576.174d6a99544d17e7416d.js → 9576.18cf577b8886dd85372e.js} +1 -1
  109. package/src/legacy/tool-ui/src/main/webapp/dist/Appetizeio.47287ce7992dc52bcb47.js +1 -0
  110. package/src/legacy/tool-ui/src/main/webapp/dist/CISpectrum.45b362ff7dbae9d80cd9.js +1 -0
  111. package/src/legacy/tool-ui/src/main/webapp/dist/{CodeMirror.5ddffe054374f883d6f8.js → CodeMirror.2fda1e731cfcb7bec629.js} +1 -1
  112. package/src/legacy/tool-ui/src/main/webapp/dist/{ImageEditor.14e3b3035666436f53a5.js → ImageEditor.a6da6e88cc958354ec68.js} +1 -1
  113. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.5a8f4754ee77adc85db2.js +500 -0
  114. package/src/legacy/tool-ui/src/main/webapp/dist/TimedContent.2d0ed03e8d1c994ecfb2.js +1 -0
  115. package/src/legacy/tool-ui/src/main/webapp/dist/{VideoEditor.11c89dda5cf125738a33.js → VideoEditor.c183998c7b2b0dae98f6.js} +2 -2
  116. package/src/legacy/tool-ui/src/main/webapp/dist/{v4.e496a62fb1d4be0544d4.js → v4.18729ea4f861ad351303.js} +9 -9
  117. package/src/legacy/tool-ui/src/main/webapp/dist/{v5.1711204aaf6c5fa01b1b.js → v5.beb4fdae5f572ba09fa3.js} +8 -8
  118. package/dist/storybook/assets/if-defined-BVO6TNCy.js +0 -1
  119. package/dist/storybook/assets/onFind-CamigPPi.js +0 -1
  120. package/src/legacy/tool-ui/src/main/webapp/dist/4114.57fe159e416e716f8cbc.js +0 -1
  121. package/src/legacy/tool-ui/src/main/webapp/dist/4582.243dbaa3d8a8648f6f40.js +0 -1
  122. package/src/legacy/tool-ui/src/main/webapp/dist/4795.034ebc93a67b7a3d6536.js +0 -1
  123. package/src/legacy/tool-ui/src/main/webapp/dist/Appetizeio.185641211f7c0e42a455.js +0 -1
  124. package/src/legacy/tool-ui/src/main/webapp/dist/CISpectrum.74db7dc80b3a6797a167.js +0 -1
  125. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.24cbb57c0030725925a0.js +0 -500
  126. package/src/legacy/tool-ui/src/main/webapp/dist/TimedContent.4bb4dc83ffbe4019dd7b.js +0 -1
  127. /package/src/legacy/tool-ui/src/main/webapp/dist/{3543.2d704cf9e170322468e7.js.LICENSE.txt → 3543.c62d88fc2904cccc7e64.js.LICENSE.txt} +0 -0
  128. /package/src/legacy/tool-ui/src/main/webapp/dist/{5598.d84773ca53126661bdca.js.LICENSE.txt → 5598.2f1f3ddbbaefdc2fce5a.js.LICENSE.txt} +0 -0
  129. /package/src/legacy/tool-ui/src/main/webapp/dist/{5718.449113ae2463a3bb8a83.js.LICENSE.txt → 7175.43f44b9e832f6734d8ea.js.LICENSE.txt} +0 -0
  130. /package/src/legacy/tool-ui/src/main/webapp/dist/{9277.88b2d89b3ba1c24e7f93.js.LICENSE.txt → 9277.385ca94e4e3722d25e81.js.LICENSE.txt} +0 -0
  131. /package/src/legacy/tool-ui/src/main/webapp/dist/{9360.bb0352313d610cae11de.js.LICENSE.txt → 9360.269cf0d9b358dcf52f55.js.LICENSE.txt} +0 -0
  132. /package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.24cbb57c0030725925a0.js.LICENSE.txt → RTEProseMirror.5a8f4754ee77adc85db2.js.LICENSE.txt} +0 -0
  133. /package/src/legacy/tool-ui/src/main/webapp/dist/{VideoEditor.11c89dda5cf125738a33.js.LICENSE.txt → VideoEditor.c183998c7b2b0dae98f6.js.LICENSE.txt} +0 -0
  134. /package/src/legacy/tool-ui/src/main/webapp/dist/{v4.e496a62fb1d4be0544d4.js.LICENSE.txt → v4.18729ea4f861ad351303.js.LICENSE.txt} +0 -0
  135. /package/src/legacy/tool-ui/src/main/webapp/dist/{v5.1711204aaf6c5fa01b1b.js.LICENSE.txt → v5.beb4fdae5f572ba09fa3.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.3",
3
+ "version": "6.0.4-pr.228.1",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "description": "A UI library for building Brightspot CMS components.",
@@ -1,277 +1,36 @@
1
- import log from 'loglevel'
2
-
3
- export type CallbackFunction<E extends Element> = (element: E) => void
4
- export type Selectors = string | string[]
5
-
6
- let calledIndex = 0
7
-
8
- class Callback<E extends Element> {
9
- #root
10
- #called
11
- #selectors
12
- #fn
13
- #matches
14
-
15
- constructor(root: ParentNode, selectors: Selectors, fn: CallbackFunction<E>) {
16
- this.#root = root
17
- this.#called = `data-ofc${calledIndex++}`
18
-
19
- if (!Array.isArray(selectors)) {
20
- selectors = [selectors]
21
- }
22
-
23
- this.#selectors = selectors
24
- .map(
25
- selectors.some((s) => s.indexOf(',') > -1)
26
- ? (s) => s
27
- : (s) => `${s}:not([${this.#called}])`,
28
- )
29
- .join(',')
30
-
31
- this.#fn = fn
32
-
33
- const matches = selectors
34
- .map((s) => s.trim())
35
- .filter((s) => s.indexOf(' ') < 0 && s.indexOf(',') < 0)
36
-
37
- if (matches.length === selectors.length) {
38
- this.#matches = matches
39
- }
40
- }
41
-
42
- addTriggerElements(triggerElements: Element[], element: Element) {
43
- if (this.#root.contains(element)) {
44
- if (element.matches(this.#selectors)) {
45
- triggerElements.push(element)
46
- }
47
-
48
- for (const e of element.querySelectorAll(this.#selectors)) {
49
- triggerElements.push(e)
50
- }
51
- }
52
- }
53
-
54
- trigger(elements?: E[]) {
55
- if (document.readyState === 'loading') {
56
- return
57
- }
58
-
59
- if (this.#matches && Array.isArray(elements)) {
60
- for (const element of elements) {
61
- if (this.#matches.some((m) => element.matches(m))) {
62
- this.#callCallback(element)
63
- }
64
- }
65
- } else {
66
- for (const element of this.#root.querySelectorAll<E>(this.#selectors)) {
67
- this.#callCallback(element)
68
- }
69
- }
70
- }
71
-
72
- #callCallback(element: E) {
73
- if (inBlacklist(element)) {
74
- return
75
- }
76
-
77
- if (!element.hasAttribute(this.#called)) {
78
- element.setAttribute(this.#called, '')
79
-
80
- try {
81
- this.#fn(element)
82
- } catch (error) {
83
- log.error('Failed callback!', element, error)
84
- }
85
- }
86
- }
87
- }
88
-
89
- let triggerPaused = false
90
- let triggerOnResume = false
91
- let triggerAll = false
92
- let triggerElements: Element[] = []
93
- let triggerFrame: number
94
- const callbacks: Callback<Element>[] = []
95
-
96
- function inBlacklist(node: Node) {
97
- if (!(node instanceof Element)) return false
98
-
99
- return (
100
- node.closest('.CIG-wordCount') !== null ||
101
- node.closest('.ContentEdit-previewDisplay') !== null ||
102
- node.closest('.ContentLabel') !== null ||
103
- node.closest('.PreviewFrame-typeDisplay') !== null ||
104
- node.closest('.ProseMirrorToolbar') !== null ||
105
- node.closest('.ProseMirror') !== null ||
106
- node.closest('.ProseMirrorContainer') !== null ||
107
- node.closest('.ProseMirror-fullscreen-container') !== null ||
108
- node.closest('.ProseMirror-comments') !== null ||
109
- node.closest('.RichTextEditor') !== null ||
110
- node.closest('.WorkInProgressSaveStatus') !== null ||
111
- node.closest('#aria-live-container') !== null ||
112
- node.closest('.widget-urlsAutomatic') !== null
113
- )
114
- }
115
-
116
- const every = Array.prototype.every
117
- const isText = (node: Node) => node.nodeType === Node.TEXT_NODE
118
-
119
- function triggerCallbacks(mutations?: MutationRecord[]) {
120
- if (triggerPaused) {
121
- triggerOnResume = true
122
- return
123
- }
124
-
125
- const checkMutations = Array.isArray(mutations)
126
- const validMutations = []
127
-
128
- if (checkMutations) {
129
- for (const mutation of mutations) {
130
- const target = mutation.target
131
-
132
- if (inBlacklist(target)) {
133
- continue
134
- }
135
-
136
- switch (mutation.type) {
137
- case 'attributes':
138
- if (
139
- mutation.oldValue !==
140
- (target as Element).getAttribute(mutation.attributeName as string)
141
- ) {
142
- validMutations.push(mutation)
143
- }
144
- break
145
- case 'childList':
146
- if (
147
- !every.call(mutation.addedNodes, isText) ||
148
- !every.call(mutation.removedNodes, isText)
149
- ) {
150
- validMutations.push(mutation)
151
- }
152
- break
153
- }
154
- }
155
-
156
- if (validMutations.length === 0) {
157
- return
158
- }
159
- }
160
-
161
- if (validMutations.length > 500) {
162
- triggerAll = true
163
- }
164
-
165
- if (!triggerAll) {
166
- if (checkMutations) {
167
- for (const mutation of validMutations) {
168
- const element = mutation.target as Element
169
-
170
- switch (mutation.type) {
171
- case 'attributes':
172
- triggerElements.push(element)
173
- break
174
- case 'childList':
175
- for (const callback of callbacks) {
176
- callback.addTriggerElements(triggerElements, element)
177
- }
178
- break
179
- }
180
- }
181
- } else {
182
- triggerAll = true
183
- }
184
- }
185
-
186
- if ((triggerAll || triggerElements.length > 0) && !triggerFrame) {
187
- triggerFrame = window.requestAnimationFrame(() => {
188
- const elements = triggerAll ? undefined : triggerElements
189
- triggerAll = false
190
- triggerElements = []
191
- triggerFrame = 0
192
-
193
- callbacks.forEach((callback) => callback.trigger(elements))
194
- })
195
- }
196
- }
197
-
198
- function initialize() {
199
- document.documentElement.hidden = false
200
- triggerCallbacks()
201
-
202
- new MutationObserver(triggerCallbacks).observe(document, {
203
- attributes: true,
204
- attributeFilter: [
205
- 'class',
206
- 'data-bsp-autosubmit',
207
- 'data-chart-type',
208
- 'data-code-type',
209
- 'data-internal-name',
210
- 'data-tab',
211
- 'name',
212
- 'rel',
213
- 'target',
214
- ],
215
- attributeOldValue: true,
216
- childList: true,
217
- subtree: true,
218
- })
219
- }
220
-
1
+ import onFind from '../../../../util/onFind'
2
+
3
+ export type { CallbackFunction, Selectors } from '../../../../util/onFind'
4
+
5
+ // CMS zones whose internal DOM churn must never trigger or receive onFind
6
+ // callbacks (rich text editors, live displays, and other high-frequency
7
+ // mutation sources).
8
+ onFind.ignore(
9
+ '.CIG-wordCount',
10
+ '.ContentEdit-previewDisplay',
11
+ '.ContentLabel',
12
+ '.PreviewFrame-typeDisplay',
13
+ '.ProseMirrorToolbar',
14
+ '.ProseMirror',
15
+ '.ProseMirrorContainer',
16
+ '.ProseMirror-fullscreen-container',
17
+ '.ProseMirror-comments',
18
+ '.RichTextEditor',
19
+ '.WorkInProgressSaveStatus',
20
+ '#aria-live-container',
21
+ '.widget-urlsAutomatic',
22
+ )
23
+
24
+ // Hide the document until DOMContentLoaded, when the first full onFind pass
25
+ // is scheduled, to prevent a flash of unenhanced UI.
221
26
  document.documentElement.hidden = true
222
27
 
223
28
  if (document.readyState === 'loading') {
224
- document.addEventListener('DOMContentLoaded', initialize)
29
+ document.addEventListener('DOMContentLoaded', () => {
30
+ document.documentElement.hidden = false
31
+ })
225
32
  } else {
226
- initialize()
227
- }
228
-
229
- function onFind<E extends Element>(
230
- root: ParentNode,
231
- selectors: Selectors,
232
- fn: CallbackFunction<E>,
233
- ): void
234
-
235
- function onFind<E extends Element>(
236
- selectors: Selectors,
237
- fn: CallbackFunction<E>,
238
- ): void
239
-
240
- function onFind<E extends Element>(
241
- rootOrSelectors: ParentNode | Selectors,
242
- selectorsOrFn: Selectors | CallbackFunction<E>,
243
- fn?: CallbackFunction<E>,
244
- ): void {
245
- let root: ParentNode
246
- let selectors: Selectors
247
-
248
- if (typeof fn !== 'undefined') {
249
- root = rootOrSelectors as Element
250
- selectors = selectorsOrFn as Selectors
251
- } else {
252
- root = document
253
- selectors = rootOrSelectors as Selectors
254
- fn = selectorsOrFn as CallbackFunction<E>
255
- }
256
-
257
- const callback = new Callback(root, selectors, fn)
258
- callback.trigger()
259
- callbacks.push(callback as Callback<Element>)
260
- }
261
-
262
- onFind.triggerCallbacks = triggerCallbacks
263
-
264
- onFind.pause = () => {
265
- triggerPaused = true
266
- }
267
-
268
- onFind.resume = () => {
269
- triggerPaused = false
270
-
271
- if (triggerOnResume) {
272
- triggerOnResume = false
273
- setTimeout(triggerCallbacks, 100)
274
- }
33
+ document.documentElement.hidden = false
275
34
  }
276
35
 
277
36
  export default onFind