@brightspot/ui 6.8.1 → 6.8.3-rc.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 (197) hide show
  1. package/CHANGELOG.md +680 -0
  2. package/README.md +18 -2
  3. package/dist/storybook/CHANGELOG.md +680 -0
  4. package/dist/storybook/README.md +195 -0
  5. package/dist/storybook/assets/{ActionBar.stories-BOXYJYXy.js → ActionBar.stories-TlhuCumU.js} +1 -1
  6. package/dist/storybook/assets/{ActionItem-WoDvowFu.js → ActionItem-CjtyGLd5.js} +1 -1
  7. package/dist/storybook/assets/{ActionItem.stories-CVFoWP54.js → ActionItem.stories-BVlNQvfP.js} +1 -1
  8. package/dist/storybook/assets/{AiSparkle.stories-Psv9jNpy.js → AiSparkle.stories-DMzc8JUe.js} +2 -2
  9. package/dist/storybook/assets/{Avatar-CIQcHS8b.js → Avatar-C6Li1sPI.js} +1 -1
  10. package/dist/storybook/assets/{Avatar.stories-BE2Xn8fx.js → Avatar.stories-COj6XrPn.js} +1 -1
  11. package/dist/storybook/assets/{AvatarGroup-Chs0VKPg.js → AvatarGroup-DgxRTZBe.js} +1 -1
  12. package/dist/storybook/assets/{AvatarGroup.stories-2ar6gCeX.js → AvatarGroup.stories-Dh3e7iN2.js} +1 -1
  13. package/dist/storybook/assets/{Badge-AV20mCMJ.js → Badge-bWrvpEgX.js} +1 -1
  14. package/dist/storybook/assets/{Badge.stories-w9LqNw0A.js → Badge.stories-KXpmEXpt.js} +1 -1
  15. package/dist/storybook/assets/{Banner.stories-Clhh1bBs.js → Banner.stories-Cnhm3dXK.js} +1 -1
  16. package/dist/storybook/assets/{Button-B7fn_wd5.js → Button-DE0s-gat.js} +1 -1
  17. package/dist/storybook/assets/{Button.stories-5h4M8nd2.js → Button.stories-Cwg1YZEb.js} +1 -1
  18. package/dist/storybook/assets/{ButtonGroup-BmndBsBy.js → ButtonGroup-CoLI5nGO.js} +1 -1
  19. package/dist/storybook/assets/{ButtonGroup.stories-CR1H4H7u.js → ButtonGroup.stories-VhnKPP1n.js} +1 -1
  20. package/dist/storybook/assets/{Card.stories-Bz5vXq5y.js → Card.stories-BgpL90zB.js} +1 -1
  21. package/dist/storybook/assets/{Celebrate.stories-Bu3CNw0k.js → Celebrate.stories-D3NJgYcX.js} +1 -1
  22. package/dist/storybook/assets/{Checkbox-BALsanB1.js → Checkbox-BC1T_KxW.js} +1 -1
  23. package/dist/storybook/assets/{Checkbox.stories-BdvCht5c.js → Checkbox.stories-AFQNz7dQ.js} +1 -1
  24. package/dist/storybook/assets/{CircularProgress-BeE2fWON.js → CircularProgress-eqVb2jUD.js} +1 -1
  25. package/dist/storybook/assets/{CircularProgress.stories-CL8Lc6eU.js → CircularProgress.stories-B6t8VhmJ.js} +1 -1
  26. package/dist/storybook/assets/{ClipboardMixin-C6wcbXIO.js → ClipboardMixin-DcxrOy5B.js} +1 -1
  27. package/dist/storybook/assets/{ClipboardMixin.stories-BsjzC7wd.js → ClipboardMixin.stories-BqtQMjmS.js} +1 -1
  28. package/dist/storybook/assets/{Color-6BZIO3FS-Dsd6EVV9.js → Color-6BZIO3FS-CDluohEc.js} +1 -1
  29. package/dist/storybook/assets/{Colors.stories-CkCdNN9Y.js → Colors.stories-CqTniDIa.js} +1 -1
  30. package/dist/storybook/assets/{CombinedEffects.stories-QG78pIiG.js → CombinedEffects.stories-FwW0chy5.js} +1 -1
  31. package/dist/storybook/assets/{ComponentStatesMixin-CG-Dx_Vk.js → ComponentStatesMixin-hUqOL2aW.js} +1 -1
  32. package/dist/storybook/assets/{ComponentStatesMixin.stories-B1yuAqua.js → ComponentStatesMixin.stories-CwGoq685.js} +1 -1
  33. package/dist/storybook/assets/{CopyToClipboard.stories-CyKcumJ9.js → CopyToClipboard.stories-DUGjgtQx.js} +1 -1
  34. package/dist/storybook/assets/{Debounce.stories-BuNskQ33.js → Debounce.stories-CrWfXhKS.js} +1 -1
  35. package/dist/storybook/assets/{DocsRenderer-LL677BLK-BrPyc8XX.js → DocsRenderer-LL677BLK-9e51z9Xc.js} +3 -3
  36. package/dist/storybook/assets/{Dropdown.stories-DHXeP07z.js → Dropdown.stories-BsBxV0wp.js} +1 -1
  37. package/dist/storybook/assets/{DropdownMenu-WoWnJiQk.js → DropdownMenu-B-LvOIGj.js} +1 -1
  38. package/dist/storybook/assets/{EmptyState.stories-BRoVusey.js → EmptyState.stories-CJ1w8Tp2.js} +1 -1
  39. package/dist/storybook/assets/{EscaAvatar.stories-CWAE-4Uz.js → EscaAvatar.stories-BoLLSj9q.js} +2 -2
  40. package/dist/storybook/assets/{Events.stories-D-npDwlx.js → Events.stories-C3sTBwPJ.js} +1 -1
  41. package/dist/storybook/assets/{Heading.stories-D7hmvFEN.js → Heading.stories-jmXDRBmM.js} +1 -1
  42. package/dist/storybook/assets/{HueRipple.stories-Dx3ozdHi.js → HueRipple.stories-BPx5aSYd.js} +1 -1
  43. package/dist/storybook/assets/{Icon-DPQKiWDz.js → Icon-CWyJRQf7.js} +1 -1
  44. package/dist/storybook/assets/{Icon.stories-CVsQvcwd.js → Icon.stories-iYBxmv2x.js} +1 -1
  45. package/dist/storybook/assets/{IconButton-Dp4Z06bL.js → IconButton-Di5Rgs7F.js} +1 -1
  46. package/dist/storybook/assets/{IconButton.stories-DTbfHfcQ.js → IconButton.stories-DENLoxVk.js} +1 -1
  47. package/dist/storybook/assets/{LinearProgress-DG3tPlGH.js → LinearProgress-D9ngIVlv.js} +1 -1
  48. package/dist/storybook/assets/{LinearProgress.stories-VIU6OqYd.js → LinearProgress.stories-u90B_VJR.js} +1 -1
  49. package/dist/storybook/assets/{Message-BzkpGg8z.js → Message-nFAa55c_.js} +1 -1
  50. package/dist/storybook/assets/{Message.stories-C9bzoQes.js → Message.stories-B4rpz5rI.js} +1 -1
  51. package/dist/storybook/assets/{OnFindMixin-CeeYfx9k.js → OnFindMixin-oL1bvTFj.js} +1 -1
  52. package/dist/storybook/assets/{OnFindMixin.stories-Dq06nuVf.js → OnFindMixin.stories-CdeS5sFA.js} +1 -1
  53. package/dist/storybook/assets/{Pagination-CnWa6AX5.js → Pagination-CSWcjuDU.js} +1 -1
  54. package/dist/storybook/assets/{Pagination.stories-BsH2eN2W.js → Pagination.stories-Da2WzJkv.js} +1 -1
  55. package/dist/storybook/assets/{Popover.stories-CLnzpgEE.js → Popover.stories-CVljlVHc.js} +1 -1
  56. package/dist/storybook/assets/{ProgressMixin-D1atDw3n.js → ProgressMixin-CeSrn0_P.js} +1 -1
  57. package/dist/storybook/assets/{Radio-B6Aq6K0V.js → Radio-rvfGhZwK.js} +1 -1
  58. package/dist/storybook/assets/{Radio.stories-BCVbISmb.js → Radio.stories-B0wHdJuc.js} +1 -1
  59. package/dist/storybook/assets/{RadioGroup.stories-B-TGP_-v.js → RadioGroup.stories-D8krOSlP.js} +1 -1
  60. package/dist/storybook/assets/{ReadyMixin-C8HW2nGE.js → ReadyMixin-CvX_eidU.js} +1 -1
  61. package/dist/storybook/assets/{RovingTabindexMixin-DI5rmyR7.js → RovingTabindexMixin-9z8lwaM9.js} +1 -1
  62. package/dist/storybook/assets/{RovingTabindexMixin.stories-DVKCC_R7.js → RovingTabindexMixin.stories-Y8vBWjJp.js} +1 -1
  63. package/dist/storybook/assets/{Rtc.stories-bBYHOszW.js → Rtc.stories-D3Y-z8y_.js} +1 -1
  64. package/dist/storybook/assets/{ScrollShadow.stories-BIK8YINt.js → ScrollShadow.stories-1KD0lWHX.js} +1 -1
  65. package/dist/storybook/assets/{Switch.stories-COEk74kM.js → Switch.stories-Bsqvm_HE.js} +1 -1
  66. package/dist/storybook/assets/{Tab.stories-Dbt9JvSx.js → Tab.stories-CzcTisNs.js} +1 -1
  67. package/dist/storybook/assets/{Tabs-BIScOPS0.js → Tabs-DdpYNZSW.js} +1 -1
  68. package/dist/storybook/assets/{Tabs.stories-CodKgVf2.js → Tabs.stories-UOS3V0J4.js} +1 -1
  69. package/dist/storybook/assets/{Throttle.stories-BhIqWWrQ.js → Throttle.stories-C8jgzh6e.js} +1 -1
  70. package/dist/storybook/assets/{Tooltip.stories-DKD8nBM1.js → Tooltip.stories-B5BoI0cH.js} +1 -1
  71. package/dist/storybook/assets/{TooltipMixin-CRNNusJ7.js → TooltipMixin-CVKslCDt.js} +1 -1
  72. package/dist/storybook/assets/{Upload.stories-WTO15ST1.js → Upload.stories-BsQDCDqo.js} +1 -1
  73. package/dist/storybook/assets/{UploadItem-DejgZ5A0.js → UploadItem-CYQqNwUF.js} +1 -1
  74. package/dist/storybook/assets/{UploadItem.stories-Pk3ghOcI.js → UploadItem.stories-_le7XBTV.js} +1 -1
  75. package/dist/storybook/assets/{Welcome.stories-DrNnxvt9.js → Welcome.stories-rramKkhd.js} +33 -3
  76. package/dist/storybook/assets/{Widget.stories-CYC5Qdac.js → Widget.stories-DtbAaklk.js} +1 -1
  77. package/dist/storybook/assets/{WithTooltip-65CFNBJE-DK6PZNaa.js → WithTooltip-65CFNBJE-DK6GcBuR.js} +1 -1
  78. package/dist/storybook/assets/{blocks-Dzcxb014.js → blocks-DHnzPh43.js} +5 -5
  79. package/dist/storybook/assets/{formatter-EIJCOSYU-PioIuXjk.js → formatter-EIJCOSYU-qig-qWlG.js} +1 -1
  80. package/dist/storybook/assets/if-defined-DerKRcyC.js +1 -0
  81. package/dist/storybook/assets/{iframe-Byo_x5o2.js → iframe-DlBK9Drk.js} +3 -3
  82. package/dist/storybook/assets/{index-gox-Wle0.js → index-CItQyB37.js} +1 -1
  83. package/dist/storybook/assets/{lottie_svg-3t2UJxjZ.js → lottie_svg-C3v6xdng.js} +1 -1
  84. package/dist/storybook/assets/{onFind-BWiaccUj.js → onFind-Ci35eu2y.js} +1 -1
  85. package/dist/storybook/assets/{onFind.stories-CC_XTN2G.js → onFind.stories-BmbwWWo1.js} +1 -1
  86. package/dist/storybook/assets/{onRemove.stories-CXxpL4ud.js → onRemove.stories-DFWCIgE4.js} +1 -1
  87. package/dist/storybook/assets/{onVisible.stories-DKA9cexx.js → onVisible.stories-B-onpgE-.js} +1 -1
  88. package/dist/storybook/assets/{property-_few0Xe5.js → property-Bmq4RTSP.js} +1 -1
  89. package/dist/storybook/assets/{ref-BaIdO8Sk.js → ref-BhKk4SDh.js} +1 -1
  90. package/dist/storybook/assets/state-DVIUS0Gf.js +1 -0
  91. package/dist/storybook/assets/{style-map-DxZm5Cj7.js → style-map-DE4G47KD.js} +1 -1
  92. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-B0_bSGZz.js → syntaxhighlighter-ED5Y7EFY-Dfgnal1d.js} +1 -1
  93. package/dist/storybook/custom-elements.json +11835 -0
  94. package/dist/storybook/docs/components/ActionBar.md +55 -0
  95. package/dist/storybook/docs/components/ActionItem.md +50 -0
  96. package/dist/storybook/docs/components/AiSparkle.md +33 -0
  97. package/dist/storybook/docs/components/Avatar.md +45 -0
  98. package/dist/storybook/docs/components/AvatarGroup.md +34 -0
  99. package/dist/storybook/docs/components/Badge.md +47 -0
  100. package/dist/storybook/docs/components/Banner.md +35 -0
  101. package/dist/storybook/docs/components/ButtonGroup.md +65 -0
  102. package/dist/storybook/docs/components/Card.md +67 -0
  103. package/dist/storybook/docs/components/Checkbox.md +49 -0
  104. package/dist/storybook/docs/components/CircularProgress.md +40 -0
  105. package/dist/storybook/docs/components/CopyToClipboard.md +51 -0
  106. package/dist/storybook/docs/components/Dropdown.md +74 -0
  107. package/dist/storybook/docs/components/DropdownItem.md +45 -0
  108. package/dist/storybook/docs/components/DropdownMenu.md +41 -0
  109. package/dist/storybook/docs/components/EmptyState.md +62 -0
  110. package/dist/storybook/docs/components/EscaAvatar.md +40 -0
  111. package/dist/storybook/docs/components/Icon.md +40 -0
  112. package/dist/storybook/docs/components/IconButton.md +36 -0
  113. package/dist/storybook/docs/components/LinearProgress.md +37 -0
  114. package/dist/storybook/docs/components/Message.md +50 -0
  115. package/dist/storybook/docs/components/Pagination.md +70 -0
  116. package/dist/storybook/docs/components/Popover.md +59 -0
  117. package/dist/storybook/docs/components/README.md +48 -0
  118. package/dist/storybook/docs/components/Radio.md +55 -0
  119. package/dist/storybook/docs/components/RadioGroup.md +34 -0
  120. package/dist/storybook/docs/components/Switch.md +48 -0
  121. package/dist/storybook/docs/components/Tab.md +40 -0
  122. package/dist/storybook/docs/components/Tabs.md +49 -0
  123. package/dist/storybook/docs/components/Upload.md +63 -0
  124. package/dist/storybook/docs/components/UploadItem.md +30 -0
  125. package/dist/storybook/docs/components/Widget.md +88 -0
  126. package/dist/storybook/docs/dari-elements.md +55 -0
  127. package/dist/storybook/iframe.html +1 -1
  128. package/dist/storybook/index.html +29 -2
  129. package/dist/storybook/llms-full.txt +1721 -0
  130. package/dist/storybook/llms.txt +65 -0
  131. package/dist/storybook/project.json +1 -1
  132. package/dist/storybook/robots.txt +7 -0
  133. package/dist/storybook/sb-addons/storybook-3/manager-bundle.js +1 -1
  134. package/dist/storybook/sitemap.xml +90 -0
  135. package/docs/components/ActionBar.md +41 -64
  136. package/docs/components/ActionItem.md +50 -96
  137. package/docs/components/AiSparkle.md +23 -60
  138. package/docs/components/Avatar.md +45 -88
  139. package/docs/components/AvatarGroup.md +24 -44
  140. package/docs/components/Badge.md +34 -62
  141. package/docs/components/Banner.md +25 -39
  142. package/docs/components/ButtonGroup.md +65 -99
  143. package/docs/components/Card.md +67 -83
  144. package/docs/components/Checkbox.md +49 -91
  145. package/docs/components/CircularProgress.md +40 -84
  146. package/docs/components/CopyToClipboard.md +35 -40
  147. package/docs/components/Dropdown.md +74 -120
  148. package/docs/components/DropdownItem.md +45 -81
  149. package/docs/components/DropdownMenu.md +30 -70
  150. package/docs/components/EmptyState.md +45 -62
  151. package/docs/components/EscaAvatar.md +30 -61
  152. package/docs/components/Icon.md +29 -62
  153. package/docs/components/IconButton.md +36 -83
  154. package/docs/components/LinearProgress.md +28 -70
  155. package/docs/components/Message.md +38 -63
  156. package/docs/components/Pagination.md +70 -100
  157. package/docs/components/Popover.md +46 -79
  158. package/docs/components/README.md +34 -40
  159. package/docs/components/Radio.md +55 -105
  160. package/docs/components/RadioGroup.md +26 -55
  161. package/docs/components/Switch.md +48 -84
  162. package/docs/components/Tab.md +30 -70
  163. package/docs/components/Tabs.md +49 -86
  164. package/docs/components/Upload.md +63 -112
  165. package/docs/components/UploadItem.md +22 -53
  166. package/docs/components/Widget.md +66 -67
  167. package/llms.txt +63 -0
  168. package/package.json +8 -6
  169. package/src/legacy/tool-ui/src/Avatar.css +9 -0
  170. package/src/legacy/tool-ui/src/ContentInputGroup.css +12 -0
  171. package/src/legacy/tool-ui/src/ContentSummary.css +11 -1
  172. package/src/legacy/tool-ui/src/ContentSummary.ts +24 -0
  173. package/src/legacy/tool-ui/src/Dialog.css +15 -4
  174. package/src/legacy/tool-ui/src/Diff.css +16 -0
  175. package/src/legacy/tool-ui/src/Diff.ts +76 -45
  176. package/src/legacy/tool-ui/src/MenuView.css +9 -4
  177. package/src/legacy/tool-ui/src/ProseMirrorEnhancementMenu.css +9 -1
  178. package/src/legacy/tool-ui/src/SearchResult.css +3 -3
  179. package/src/legacy/tool-ui/src/TimedContent.css +5 -1
  180. package/src/legacy/tool-ui/src/ViewPreview.css +11 -0
  181. package/src/legacy/tool-ui/src/ViewWatchers.css +1 -1
  182. package/src/legacy/tool-ui/src/Viewers.css +10 -1
  183. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.bad66c5f4a7498accca1.js +504 -0
  184. package/src/legacy/tool-ui/src/main/webapp/dist/v4.0cdcad634e3e9cc66dd3.css +3 -0
  185. package/src/legacy/tool-ui/src/main/webapp/dist/{v4.5311585e2e77268a6386.js → v4.fe59d96d43251aa03766.js} +5 -5
  186. package/src/legacy/tool-ui/src/main/webapp/dist/v5.268d53cadab4ed4b68a8.css +140 -0
  187. package/src/legacy/tool-ui/src/main/webapp/dist/{v5.c96a164f24a2a102bde0.js → v5.3eb7662648c301f10aff.js} +5 -5
  188. package/src/legacy/tool-ui/src/main/webapp/v4/Diff.less +17 -0
  189. package/src/legacy/tool-ui/src/v5.ts +6 -0
  190. package/dist/storybook/assets/if-defined-DL7cQU7O.js +0 -1
  191. package/dist/storybook/assets/state-BBcPmYaV.js +0 -1
  192. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.8773fe3756519d83608e.js +0 -504
  193. package/src/legacy/tool-ui/src/main/webapp/dist/v4.19a7871e6043c2ea6433.css +0 -3
  194. package/src/legacy/tool-ui/src/main/webapp/dist/v5.990bf181d01e0cbb18e8.css +0 -140
  195. /package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.8773fe3756519d83608e.js.LICENSE.txt → RTEProseMirror.bad66c5f4a7498accca1.js.LICENSE.txt} +0 -0
  196. /package/src/legacy/tool-ui/src/main/webapp/dist/{v4.5311585e2e77268a6386.js.LICENSE.txt → v4.fe59d96d43251aa03766.js.LICENSE.txt} +0 -0
  197. /package/src/legacy/tool-ui/src/main/webapp/dist/{v5.c96a164f24a2a102bde0.js.LICENSE.txt → v5.3eb7662648c301f10aff.js.LICENSE.txt} +0 -0
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@brightspot/ui",
3
- "version": "6.8.1",
3
+ "version": "6.8.3-rc.1",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "description": "A UI library for building Brightspot CMS components.",
7
+ "homepage": "https://ui.brightspot.com",
7
8
  "main": "./dist/tailwind.config.js",
8
9
  "customElements": "dist/custom-elements.json",
9
10
  "exports": {
@@ -22,9 +23,9 @@
22
23
  "cem:docs": "yarn cem && node scripts/generate-docs.mjs",
23
24
  "build": "yarn clean && tsc --noEmitOnError && yarn cem && node scripts/copy-component-css.mjs && shx cp ./src/*.ts ./dist && shx rm ./dist/tailwind.storybook.config* && shx rm -Rf ./dist/stories && node scripts/check-dist-imports.mjs",
24
25
  "build:cms-ui": "yarn build && (cd src/legacy/tool-ui && yarn install --frozen-lockfile && yarn build) && (cd tool-ui && yarn install && yarn build)",
25
- "prepack": "yarn build && yarn build-storybook && (cd src/legacy/tool-ui && yarn build)",
26
+ "prepack": "yarn build && node scripts/generate-docs.mjs && yarn build-storybook && (cd src/legacy/tool-ui && yarn build)",
26
27
  "storybook": "yarn cem && storybook dev -p 6006",
27
- "build-storybook": "yarn cem && storybook build -o ./dist/storybook",
28
+ "build-storybook": "yarn cem && storybook build -o ./dist/storybook && node scripts/generate-docs.mjs --site dist/storybook",
28
29
  "test:storybook": "vitest --project=storybook",
29
30
  "test:css-bloat": "vitest run --project=css-bloat",
30
31
  "test:combo-input": "vitest run --project=combo-input",
@@ -40,7 +41,6 @@
40
41
  "@commitlint/cli": "^20.1.0",
41
42
  "@commitlint/config-conventional": "^20.0.0",
42
43
  "@custom-elements-manifest/analyzer": "^0.11.0",
43
- "@custom-elements-manifest/to-markdown": "^0.1.0",
44
44
  "@eslint/js": "^9.23.0",
45
45
  "@storybook/addon-docs": "10.2.12",
46
46
  "@storybook/addon-themes": "10.2.12",
@@ -104,6 +104,8 @@
104
104
  "files": [
105
105
  "dist/**/*",
106
106
  "docs/**/*",
107
+ "llms.txt",
108
+ "CHANGELOG.md",
107
109
  "src/legacy/tool-ui/src/**/*",
108
110
  "!src/legacy/tool-ui/src/main/webapp/WEB-INF",
109
111
  "!src/legacy/tool-ui/src/main/webapp/v4/__mocks__",
@@ -120,10 +122,10 @@
120
122
  "!src/legacy/tool-ui/src/main/webapp/script/**/*.d.ts"
121
123
  ],
122
124
  "lint-staged": {
123
- "src/components/**/*.ts": [
125
+ "{src/components/**/*.ts,src/util/**/*.ts,src/stories/*.stories.ts,src/tailwind-plugin-*.ts,scripts/generate-docs.mjs}": [
124
126
  "node scripts/run-cem.cjs",
125
127
  "node scripts/generate-docs.mjs",
126
- "git add docs/components/"
128
+ "git add docs/components/ llms.txt"
127
129
  ],
128
130
  "*": "prettier --write --ignore-unknown"
129
131
  }
@@ -29,3 +29,12 @@
29
29
  .ToolUserAvatar {
30
30
  @apply avatar shrink-0;
31
31
  }
32
+
33
+ /* Uploaded images can have transparency, so drop the initials and background that would show through. */
34
+ .ToolUserAvatar--image {
35
+ @apply bg-transparent hover:bg-transparent;
36
+
37
+ > span {
38
+ @apply hidden;
39
+ }
40
+ }
@@ -574,6 +574,18 @@
574
574
  @apply pointer-events-auto;
575
575
  }
576
576
 
577
+ /* A media preview in a note isn't the field's value: its seek and volume
578
+ sliders must stay usable. Locked content blocks the whole .CIG-note, so
579
+ restore the frame itself. The sliders inherit rather than force auto so
580
+ the player can still disable its hidden controls. */
581
+ .TimedContentPlayerNote-player-frame {
582
+ @apply pointer-events-auto;
583
+ }
584
+
585
+ .TimedContentPlayerNote-player-frame input[type] {
586
+ pointer-events: inherit;
587
+ }
588
+
577
589
  .CIG-note :where(a, button, [role='button'], btu-legacy-copy-to-clipboard) {
578
590
  @apply pointer-events-auto cursor-pointer;
579
591
  }
@@ -137,7 +137,7 @@ a.is-active + .ContentSummary-info {
137
137
  }
138
138
 
139
139
  .ContentSummary-preview {
140
- @apply bg-gray-100 p-1 [grid-area:preview];
140
+ @apply overflow-hidden bg-gray-100 p-1 [grid-area:preview];
141
141
  }
142
142
 
143
143
  @scope (.ContentSummary-preview) {
@@ -149,6 +149,16 @@ a.is-active + .ContentSummary-info {
149
149
  .PreviewFrame-types {
150
150
  @apply hidden;
151
151
  }
152
+
153
+ /* Size the frame to its reported content height so the wrapper scrolls it
154
+ (keyboard-accessible) instead of scrolling inside the cross-origin frame. */
155
+ & .PreviewFrame-typeDisplay {
156
+ @apply overflow-y-auto overflow-x-hidden;
157
+ }
158
+
159
+ & .PreviewFrame-typeDisplay > iframe[name^='PreviewFrame-preview'] {
160
+ @apply h-[var(--PreviewFrame-height,100%)] w-full;
161
+ }
152
162
  }
153
163
 
154
164
  @media (min-width: theme(screens.sm)) {
@@ -221,3 +221,27 @@ function iframePostMessage(node: HTMLIFrameElement) {
221
221
  )
222
222
  }
223
223
  }
224
+
225
+ // The summary preview (cross-origin, inert) reports its content height so the
226
+ // frame can be sized to it and the wrapper — not the frame — becomes the
227
+ // keyboard scroll container (see ContentSummary.css / ViewPreview.js).
228
+ window.addEventListener('message', ({ data, source }) => {
229
+ if (
230
+ typeof data !== 'object' ||
231
+ data?.type !== 'BSP.Preview.ContentSummaryHeight' ||
232
+ typeof data.height !== 'number' ||
233
+ !isFinite(data.height)
234
+ ) {
235
+ return
236
+ }
237
+ document
238
+ .querySelectorAll<HTMLIFrameElement>(
239
+ ".ContentSummary-preview iframe[name^='PreviewFrame-preview']",
240
+ )
241
+ .forEach((frame) => {
242
+ if (frame.contentWindow !== source) return
243
+ frame
244
+ .closest<HTMLElement>('.PreviewFrame-typeDisplay')
245
+ ?.style.setProperty('--PreviewFrame-height', `${data.height}px`)
246
+ })
247
+ })
@@ -89,11 +89,13 @@ dialog:modal {
89
89
  --padding: ; /* no padding for right-aligned popups. margin is necessary here. */
90
90
  @apply [margin-inline-start:auto] [transition:_display_0.3s_allow-discrete,_overlay_0.3s_allow-discrete,_opacity_0.25s_0.3s,_translate_0.25s_cubic-bezier(0.9,0,0.1,1)_0.3s] [translate:0_0] md:[inline-size:70vw] md:[margin-inline-end:0] [@starting-style]:[translate:45dvw_0];
91
91
 
92
- /* Dropdown lists inside of right-aligned modals need to be shifted over. */
92
+ /* scale/translate make this modal the containing block for fixed
93
+ dropdowns, so shift them by the modal's offset, which only exists while
94
+ it is 70vw wide (md and up). */
93
95
  .Dropdown,
94
96
  .ComboInput-list {
95
97
  &[data-tether-rx='l'] {
96
- @apply /*rtl:ignore*/ left-[calc(var(--Tether-rl)-30vw)];
98
+ @apply /*rtl:ignore*/ md:left-[calc(var(--Tether-rl)-30vw)];
97
99
  }
98
100
  }
99
101
  }
@@ -140,9 +142,11 @@ dialog:modal > .QueryField-frame > .Popup:where(:not([popover])) {
140
142
  > .Popup-content > :where(.frame.is-transitioned, .ContentSummary.is-open)
141
143
  ),
142
144
  &.PrePublish.is-visible,
145
+ &.popup-show.is-diff,
143
146
  &.popup-show[data-popup-source-class^='rte2'],
144
147
  &.popup-show[name='queryfield' i],
145
- &.popup-show:has(.Paste-popup) {
148
+ &.popup-show:has(.Paste-popup),
149
+ &.popup-show.is-diff {
146
150
  @apply before:scale-[2] before:opacity-0;
147
151
  }
148
152
 
@@ -290,6 +294,12 @@ dialog:modal > .QueryField-frame > .Popup:where(:not([popover])) {
290
294
  @apply btu-heading-4 col-start-1 flex min-w-0 content-center items-center gap-2 border-b-0 py-[.88rem] ps-6 text-gray-900;
291
295
  }
292
296
 
297
+ /* The object picker heading includes the edited object's label, which can be
298
+ long enough to push the results out of view. Block so the ellipsis renders. */
299
+ .Popup-content > .SearchWidget-title {
300
+ @apply blokk truncate;
301
+ }
302
+
293
303
  .Popup-close {
294
304
  @apply my-[.88rem] me-6 ms-2;
295
305
  }
@@ -358,7 +368,8 @@ dialog:modal > {
358
368
  .Popup[name^='contentEnhancement'],
359
369
  .Popup.ContentSummary-popup,
360
370
  .Popup[name='searchFields'],
361
- .Popup[name='edit-guide'] {
371
+ .Popup[name='edit-guide'],
372
+ .Popup.is-diff {
362
373
  @apply __modal-popup-lg;
363
374
  }
364
375
  }
@@ -42,11 +42,21 @@
42
42
  @apply w-1/2 min-w-[400px] overflow-clip bg-white;
43
43
  }
44
44
 
45
+ /* Span the diff popup content under the close button column too */
46
+ .Popup.is-diff > .Popup-content > .plugin-popup {
47
+ @apply col-span-full;
48
+ }
49
+
45
50
  /* Hide full-width "Back" bar in favor of the close popup "X" icon */
46
51
  .Diff-title {
47
52
  @apply hidden;
48
53
  }
49
54
 
55
+ /* Rich text enhancement diff popup: the body spans the dialog grid like a popup frame does */
56
+ #rtediff {
57
+ @apply col-span-full;
58
+ }
59
+
50
60
  .Diff-container {
51
61
  @apply max-h-[calc(100cqh_-_var(--page-header-h,_68px)_+_3px)] overflow-auto;
52
62
  }
@@ -278,3 +288,9 @@
278
288
  .Diff-row .CIG-label {
279
289
  @apply mb-2 text-xs font-medium text-gray-500;
280
290
  }
291
+
292
+ /* Save conflict "Compare Changes" button in the error message */
293
+ .ContentConflict-compare.Link {
294
+ /* Inline, not flex, so the underline skips the icon */
295
+ @apply ms-4 inline whitespace-nowrap before:me-1 before:align-middle before:btu-icon before:btu-icon-git-compare before:btu-icon-xs;
296
+ }
@@ -1,14 +1,63 @@
1
1
  import Cookies from 'js-cookie'
2
2
  import create from './dom/create'
3
3
  import onFind from './dom/onFind'
4
- type DiffFormPostFields = 'left' | 'right'
5
-
6
- interface DiffFormPostData extends FormData {
7
- append(
8
- name: DiffFormPostFields,
9
- value: string | Blob,
10
- fileName?: string,
11
- ): void
4
+ type DiffFormPostFields =
5
+ | 'left'
6
+ | 'right'
7
+ | 'leftLabel'
8
+ | 'rightLabel'
9
+ | 'conflictId'
10
+ | 'conflictChanges'
11
+
12
+ // Posts the given parameters to the diff page and shows the result in a popup.
13
+ async function openDiffPopup(
14
+ parameters: Partial<Record<DiffFormPostFields, string>>,
15
+ title?: string,
16
+ ) {
17
+ // Closing the diff popup if one is already open to prevent close button weirdness
18
+ $('.is-diff').popup('close')
19
+ const headers = new Headers()
20
+ const cookie = Cookies.get('bsp.csrf')
21
+
22
+ if (cookie) {
23
+ headers.append('Brightspot-CSRF', cookie)
24
+ }
25
+
26
+ const body = new FormData()
27
+
28
+ Object.entries(parameters).forEach(([name, value]) => {
29
+ if (value) body.append(name, value)
30
+ })
31
+
32
+ try {
33
+ const response = await fetch('/cms/diffRevision', {
34
+ method: 'POST',
35
+ headers,
36
+ body,
37
+ })
38
+ const itemHtml = await response.text()
39
+
40
+ document.getElementById('rtediff')?.remove()
41
+
42
+ const container = create('div')
43
+ container.id = 'rtediff'
44
+ document.body.appendChild(container)
45
+ container.innerHTML = itemHtml
46
+
47
+ // Leads the column headings so it's the one shown as the popup title.
48
+ if (title) {
49
+ const heading = create('h1')
50
+ heading.textContent = title
51
+ container.prepend(heading)
52
+ }
53
+
54
+ const jqueryContainer = $(container).popup()
55
+ // Attaching marker class to popup for cleanup if the user clicks on a clickable diff field
56
+ jqueryContainer.popup('container').addClass('is-diff')
57
+ jqueryContainer.popup('open')
58
+ } catch (err) {
59
+ console.error(err)
60
+ }
12
61
  }
13
62
 
14
63
  // Closes Diff popup when clicking title
@@ -47,43 +96,25 @@ onFind('[data-diff-state-id]', (element: HTMLElement) => {
47
96
  return
48
97
  }
49
98
 
50
- element.addEventListener('click', async (evt) => {
51
- // Closing the diff popup if one is already open to prevent close button weirdness
52
- $('.is-diff').popup('close')
53
- // If one side has no change the diffs array value can be undefined. We are checking for that here.
54
- const headers = new Headers()
55
- const cookie = Cookies.get('bsp.csrf')
56
-
57
- if (cookie) {
58
- headers.append('Brightspot-CSRF', cookie)
59
- }
60
-
61
- const body: DiffFormPostData = new FormData()
62
- body.append('left', diffLeftState)
63
- body.append('right', diffRightState)
64
-
65
- try {
66
- const response = await fetch('/cms/diffRevision', {
67
- method: 'POST',
68
- headers,
69
- body,
70
- })
71
- const itemHtml = await response.text()
72
-
73
- document.getElementById('rtediff')?.remove()
74
-
75
- const container = create('div')
76
- container.id = 'rtediff'
77
- document.body.appendChild(container)
78
- container.innerHTML = itemHtml
79
-
80
- const jqueryContainer = $(container).popup()
81
- // Attaching marker class to popup for cleanup if the user clicks on a clickable diff field
82
- jqueryContainer.popup('container').addClass('is-diff')
83
- jqueryContainer.popup('open')
84
- } catch (err) {
85
- console.error(err)
86
- }
99
+ element.addEventListener('click', () => {
100
+ openDiffPopup({ left: diffLeftState, right: diffRightState })
87
101
  })
88
102
  }
89
103
  })
104
+
105
+ // Save conflict: shows what saving again would change in the latest saved version
106
+ onFind('[data-conflict-diff-id]', (element: HTMLElement) => {
107
+ element.addEventListener('click', () => {
108
+ const { dataset } = element
109
+
110
+ openDiffPopup(
111
+ {
112
+ conflictId: dataset.conflictDiffId,
113
+ conflictChanges: dataset.conflictDiffChanges,
114
+ leftLabel: dataset.conflictDiffLeftLabel,
115
+ rightLabel: dataset.conflictDiffRightLabel,
116
+ },
117
+ element.textContent?.trim(),
118
+ )
119
+ })
120
+ })
@@ -7,14 +7,19 @@
7
7
  }
8
8
 
9
9
  .ProseMirrorToolbar {
10
+ /* Must match the word-count inset for the same icon count, or content lays out under it. */
10
11
  --ProseMirrorToolbar-rightControls: 3.75rem;
11
12
 
12
- &:has(+ .ProseMirror:focus) {
13
- @apply border-primary-600;
13
+ &[data-sidebar-icon-count='2'] {
14
+ --ProseMirrorToolbar-rightControls: 5.75rem;
14
15
  }
15
16
 
16
- &:has(.rte2-toolbar-find) {
17
- --ProseMirrorToolbar-rightControls: 5.75rem;
17
+ &[data-sidebar-icon-count='3'] {
18
+ --ProseMirrorToolbar-rightControls: 8rem;
19
+ }
20
+
21
+ &:has(+ .ProseMirror:focus) {
22
+ @apply border-primary-600;
18
23
  }
19
24
 
20
25
  > ul {
@@ -1,9 +1,17 @@
1
1
  .ProsemirrorEnhancementMenuContainer {
2
2
  @apply absolute hidden;
3
3
 
4
- &.open {
4
+ /* A popover's visibility follows its popover state, which the browser
5
+ clears when the editor is moved (e.g. into fullscreen). */
6
+ &.open:not([popover]) {
5
7
  @apply blokk;
6
8
  }
9
+
10
+ /* Top layer escapes the clipping .ProseMirrorContainer; anchor positioning
11
+ flips it above the enhancement when there is no room below. */
12
+ &:popover-open {
13
+ @apply blokk inset-auto m-0 mt-1 overflow-visible border-0 bg-transparent p-0 text-inherit [position-area:bottom_span-right] [position-try-fallbacks:flip-block,flip-inline] [position-visibility:anchors-visible];
14
+ }
7
15
  }
8
16
 
9
17
  .ProsemirrorEnhancementMenu-container {
@@ -7,7 +7,7 @@
7
7
  --pagination-h: 80px;
8
8
  --actions-button-w: 0px;
9
9
 
10
- @apply relative grid h-full w-full grid-cols-[auto_auto_auto_auto_minmax(0px,1fr)_auto_auto_var(--actions-button-w)_12px] grid-rows-[var(--search-controls-h)_minmax(0px,1fr)_var(--pagination-h)] items-center overflow-hidden bg-gray-50 [grid-area:results] [grid-template-areas:'toggle_sorts_fields_watching_._size-toggle_views_actions_.''results_results_results_results_results_results_results_results_results''limit_limit_limit_limit_pagination_pagination_pagination_pagination_pagination'];
10
+ @apply relative grid h-full w-full grid-cols-[auto_auto_auto_auto_minmax(0px,1fr)_auto_auto_var(--actions-button-w)_12px] grid-rows-[var(--search-controls-h)_minmax(0px,1fr)_var(--pagination-h)] items-center overflow-hidden bg-gray-50 [grid-area:results] [grid-template-areas:'toggle_sorts_fields_query-restrictions_._size-toggle_views_actions_.''results_results_results_results_results_results_results_results_results''limit_limit_limit_limit_pagination_pagination_pagination_pagination_pagination'];
11
11
 
12
12
  &:has(.SearchResult-pagination) {
13
13
  @apply after:absolute after:z-0 after:col-span-full after:row-[3/4] after:h-full after:w-full after:bg-white;
@@ -43,7 +43,7 @@
43
43
  .SearchResult {
44
44
  --fullscreen-button-w: calc(36px + 4px + 12px);
45
45
 
46
- @apply grid-cols-[auto_auto_auto_minmax(0px,1fr)_auto_auto_var(--actions-button-w)_var(--fullscreen-button-w)_var(--popup-close-w)] [grid-template-areas:'toggle_sorts_fields_._size-toggle_views_actions_fullscreen_close''results_results_results_results_results_results_results_results_results''limit_limit_limit_pagination_pagination_pagination_pagination_pagination_pagination'];
46
+ @apply grid-cols-[auto_auto_auto_auto_minmax(0px,1fr)_auto_auto_var(--actions-button-w)_var(--fullscreen-button-w)_var(--popup-close-w)] [grid-template-areas:'toggle_sorts_fields_query-restrictions_._size-toggle_views_actions_fullscreen_close''results_results_results_results_results_results_results_results_results_results''limit_limit_limit_pagination_pagination_pagination_pagination_pagination_pagination_pagination'];
47
47
  }
48
48
  }
49
49
 
@@ -377,7 +377,7 @@
377
377
 
378
378
  /* "Watching?" checkbox appears on some Search Widgets */
379
379
  .SearchResult-query {
380
- @apply mx-1 opacity-[var(--controls-opacity,_1)] transition-opacity [grid-area:watching];
380
+ @apply mx-1 opacity-[var(--controls-opacity,_1)] transition-opacity [grid-area:query-restrictions];
381
381
  }
382
382
 
383
383
  /* Allows image height controls */
@@ -24,13 +24,17 @@
24
24
  }
25
25
 
26
26
  .TimedContentPlayerNote-player-frame {
27
- @apply flex h-[250px] w-[350px] max-w-full items-center justify-center overflow-hidden rounded-lg border border-gray-300 bg-gray-50;
27
+ @apply flex h-[250px] w-[350px] max-w-full items-center justify-center overflow-hidden rounded-lg border border-gray-300 bg-gray-50 [container-type:size];
28
28
  }
29
29
 
30
30
  .TimedContentPlayerNote-player-frame .frame {
31
31
  @apply flex-grow;
32
32
  }
33
33
 
34
+ .TimedContentPlayerNote-player-frame video:not(:fullscreen, :fullscreen *) {
35
+ @apply max-h-[100cqh] object-contain;
36
+ }
37
+
34
38
  .TimedContentPlayerNote-player-close {
35
39
  @apply btu-button btu-button-text-hidden btu-button-outline btu-button-fill-none btu-button-gray btu-button-xs absolute -top-[34px] right-0 cursor-pointer before:btu-icon before:btu-icon-x;
36
40
  }
@@ -38,6 +38,17 @@
38
38
  @apply inset-0 z-10 size-full;
39
39
  }
40
40
 
41
+ .PreviewFrame-typeDisplay:focus {
42
+ @apply outline-none;
43
+ }
44
+
45
+ /* The wrapper is the keyboard focus + scroll target in both the edit page and
46
+ the Quick View popup. Outset outline, not an inset ring: the iframe fills the
47
+ wrapper and would paint over anything drawn inside it. */
48
+ .PreviewFrame-typeDisplay:focus-visible {
49
+ @apply outline-2 outline-offset-2 outline-primary-600;
50
+ }
51
+
41
52
  .PreviewFrame-previewToEditToggle {
42
53
  @apply me-auto mt-4 flex whitespace-nowrap;
43
54
 
@@ -56,7 +56,7 @@
56
56
  }
57
57
 
58
58
  /* Keeps default bg color on hover of non-interactive avatar */
59
- .ViewWatchers-item-avatar .ToolUserAvatar {
59
+ .ViewWatchers-item-avatar .ToolUserAvatar:not(.ToolUserAvatar--image) {
60
60
  @apply hover:bg-purple-600;
61
61
  }
62
62
 
@@ -11,7 +11,16 @@
11
11
 
12
12
  .Avatar {
13
13
  --avatar-size: theme('avatar.size.xs');
14
- @apply border-[1.5px] border-white dark:bg-[oklch(from_var(--avatar-bg-color)_calc(l_*_1.6)_c_h)];
14
+ @apply border-[1.5px] border-white;
15
+ }
16
+
17
+ .Avatar:not(.ToolUserAvatar--image) {
18
+ @apply dark:bg-[oklch(from_var(--avatar-bg-color)_calc(l_*_1.6)_c_h)];
19
+ }
20
+
21
+ /* Match the surface instead of staying transparent, so an overlapped avatar can't show through the image. */
22
+ .Avatar.ToolUserAvatar--image {
23
+ @apply bg-white;
15
24
  }
16
25
 
17
26
  &:where([data-editing], [data-locked]) .Avatar {