@brightspot/ui 6.1.2-pr.275 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/action-bar/ActionBar.d.ts +1 -0
- package/dist/components/action-bar/ActionBar.d.ts.map +1 -1
- package/dist/components/action-bar/ActionBar.js +6 -2
- package/dist/components/action-bar/ActionBar.js.map +1 -1
- package/dist/components/avatar/Avatar.d.ts +1 -0
- package/dist/components/avatar/Avatar.d.ts.map +1 -1
- package/dist/components/avatar/Avatar.js +6 -2
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/avatar/AvatarGroup.d.ts +1 -0
- package/dist/components/avatar/AvatarGroup.d.ts.map +1 -1
- package/dist/components/avatar/AvatarGroup.js +6 -2
- package/dist/components/avatar/AvatarGroup.js.map +1 -1
- package/dist/components/badge/Badge.d.ts +1 -0
- package/dist/components/badge/Badge.d.ts.map +1 -1
- package/dist/components/badge/Badge.js +6 -2
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/button-group/ButtonGroup.d.ts +1 -0
- package/dist/components/button-group/ButtonGroup.d.ts.map +1 -1
- package/dist/components/button-group/ButtonGroup.js +6 -2
- package/dist/components/button-group/ButtonGroup.js.map +1 -1
- package/dist/components/card/Card.d.ts.map +1 -1
- package/dist/components/card/Card.js +4 -2
- package/dist/components/card/Card.js.map +1 -1
- package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/Checkbox.js +4 -2
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/circular-progress/CircularProgress.d.ts +2 -0
- package/dist/components/circular-progress/CircularProgress.d.ts.map +1 -1
- package/dist/components/circular-progress/CircularProgress.js +9 -3
- package/dist/components/circular-progress/CircularProgress.js.map +1 -1
- package/dist/components/icon/Icon.d.ts +1 -0
- package/dist/components/icon/Icon.d.ts.map +1 -1
- package/dist/components/icon/Icon.js +6 -2
- package/dist/components/icon/Icon.js.map +1 -1
- package/dist/components/linear-progress/LinearProgress.d.ts +2 -0
- package/dist/components/linear-progress/LinearProgress.d.ts.map +1 -1
- package/dist/components/linear-progress/LinearProgress.js +9 -3
- package/dist/components/linear-progress/LinearProgress.js.map +1 -1
- package/dist/components/pagination/Pagination.d.ts +1 -0
- package/dist/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.js +6 -2
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/popover/Popover.d.ts +1 -0
- package/dist/components/popover/Popover.d.ts.map +1 -1
- package/dist/components/popover/Popover.js +6 -2
- package/dist/components/popover/Popover.js.map +1 -1
- package/dist/components/switch/Switch.d.ts.map +1 -1
- package/dist/components/switch/Switch.js +4 -2
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/tabs/Tab.d.ts +1 -0
- package/dist/components/tabs/Tab.d.ts.map +1 -1
- package/dist/components/tabs/Tab.js +6 -2
- package/dist/components/tabs/Tab.js.map +1 -1
- package/dist/components/tabs/Tabs.d.ts +1 -0
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.js +6 -2
- package/dist/components/tabs/Tabs.js.map +1 -1
- package/dist/custom-elements.json +90 -0
- package/dist/storybook/assets/{ActionBar.stories-Q_bdek_N.js → ActionBar.stories-CgkvHW27.js} +1 -1
- package/dist/storybook/assets/{ActionItem.stories-Ccyot7vj.js → ActionItem.stories-CyxwhrvR.js} +1 -1
- package/dist/storybook/assets/{AiSparkle.stories-Ccapqzcw.js → AiSparkle.stories-h2LSw10e.js} +1 -1
- package/dist/storybook/assets/{Avatar.stories-CPcQWZtG.js → Avatar.stories-CQ3eFTbI.js} +1 -1
- package/dist/storybook/assets/{AvatarGroup.stories-Bws-izJt.js → AvatarGroup.stories-CIyZOd7R.js} +1 -1
- package/dist/storybook/assets/{Badge.stories-xck9Ke5e.js → Badge.stories-CwPkYUuY.js} +1 -1
- package/dist/storybook/assets/{Banner.stories-D3ieqG7F.js → Banner.stories-B7AhWymc.js} +1 -1
- package/dist/storybook/assets/{Button-CQ2ZvHGM.js → Button-fLz-Mqji.js} +1 -1
- package/dist/storybook/assets/{Button.stories-BkGox6QF.js → Button.stories-Bj_cB5Tr.js} +1 -1
- package/dist/storybook/assets/{ButtonGroup.stories-BxDNL7ej.js → ButtonGroup.stories-DMAr8q3A.js} +1 -1
- package/dist/storybook/assets/{Card.stories-BrzAwQwE.js → Card.stories-CouVkvTr.js} +1 -1
- package/dist/storybook/assets/{Celebrate.stories-BFqqbYhp.js → Celebrate.stories-Cai7aITx.js} +1 -1
- package/dist/storybook/assets/{Checkbox.stories-yNb9DH9g.js → Checkbox.stories-BTzuHih7.js} +1 -1
- package/dist/storybook/assets/{CircularProgress.stories--KSA2X4d.js → CircularProgress.stories-DwiMDCrW.js} +1 -1
- package/dist/storybook/assets/{ClipboardMixin.stories-DT0symyW.js → ClipboardMixin.stories-BTzKKsAG.js} +1 -1
- package/dist/storybook/assets/{Color-6BZIO3FS-CEpjJcuB.js → Color-6BZIO3FS-z5x4axZs.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-BEtjS3CS.js → Colors.stories-LjQN3QJP.js} +1 -1
- package/dist/storybook/assets/{CombinedEffects.stories-DZsO6E1c.js → CombinedEffects.stories-CcWkxBPD.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin-C-G6neuB.js → ComponentStatesMixin-6JmalSeW.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin.stories-D4B2eXzV.js → ComponentStatesMixin.stories-wr7wl9D5.js} +1 -1
- package/dist/storybook/assets/{CopyToClipboard.stories-C1wxRcNr.js → CopyToClipboard.stories-CBL_GlzJ.js} +1 -1
- package/dist/storybook/assets/{Debounce.stories-CEXdiU_4.js → Debounce.stories-DDW0347e.js} +1 -1
- package/dist/storybook/assets/{DocsRenderer-LL677BLK-iD6uwWm0.js → DocsRenderer-LL677BLK-LHrG4h5r.js} +3 -3
- package/dist/storybook/assets/{Dropdown.stories-DzgAKuev.js → Dropdown.stories-BixGKdVC.js} +1 -1
- package/dist/storybook/assets/{EmptyState.stories-8IezRmLe.js → EmptyState.stories-DYCizkT5.js} +1 -1
- package/dist/storybook/assets/{EscaAvatar.stories-CFRMImDC.js → EscaAvatar.stories-IV0FybUu.js} +1 -1
- package/dist/storybook/assets/{Events.stories-wc_WlNNX.js → Events.stories-9X1B5LFU.js} +1 -1
- package/dist/storybook/assets/{Heading.stories-CBopc-Ov.js → Heading.stories-BWFKyeYP.js} +1 -1
- package/dist/storybook/assets/{HueRipple.stories-B1BLaONM.js → HueRipple.stories-KJySD4yc.js} +1 -1
- package/dist/storybook/assets/{Icon.stories-Bul1n2nN.js → Icon.stories-n4-_RBwe.js} +1 -1
- package/dist/storybook/assets/{IconButton.stories-DDCBKBqw.js → IconButton.stories--cc9Az0q.js} +1 -1
- package/dist/storybook/assets/{LinearProgress.stories-DWroemrV.js → LinearProgress.stories-CXISMQqr.js} +1 -1
- package/dist/storybook/assets/{Message.stories-CfWo8uqR.js → Message.stories-DCgZ9H2r.js} +1 -1
- package/dist/storybook/assets/{OnFindMixin.stories-DRr67PU5.js → OnFindMixin.stories-DwYEl4q4.js} +1 -1
- package/dist/storybook/assets/{Pagination.stories-CJ0dmE6y.js → Pagination.stories-B8AqV3jI.js} +1 -1
- package/dist/storybook/assets/{Popover.stories-CFFe2utX.js → Popover.stories-Dj8TUysk.js} +1 -1
- package/dist/storybook/assets/{ReadyMixin-euHV5BrF.js → ReadyMixin-B1y8EBLz.js} +1 -1
- package/dist/storybook/assets/{RovingTabindexMixin.stories-CcKn8eYu.js → RovingTabindexMixin.stories-BTYV78Cy.js} +1 -1
- package/dist/storybook/assets/{Rtc.stories-B_26leBQ.js → Rtc.stories-CiQ4OgEf.js} +1 -1
- package/dist/storybook/assets/{ScrollShadow.stories-COcTqDYx.js → ScrollShadow.stories-BRpbl9WU.js} +1 -1
- package/dist/storybook/assets/{Switch.stories-fZAYVOXQ.js → Switch.stories-Dfw56-LB.js} +1 -1
- package/dist/storybook/assets/{Tab.stories-ChmYj35a.js → Tab.stories-DCIPSPwr.js} +1 -1
- package/dist/storybook/assets/{Tabs.stories-Bgb-44oF.js → Tabs.stories-DrT2D2oW.js} +1 -1
- package/dist/storybook/assets/{Throttle.stories-BP21CM6q.js → Throttle.stories-B5Y8K9s3.js} +1 -1
- package/dist/storybook/assets/{Tooltip.stories-Ck7XsJKW.js → Tooltip.stories-CUjm8cuW.js} +1 -1
- package/dist/storybook/assets/{Upload.stories-DMedgAwp.js → Upload.stories-Dt7V8qIe.js} +1 -1
- package/dist/storybook/assets/{UploadItem.stories-D1rV5quQ.js → UploadItem.stories-DSXxGs8M.js} +1 -1
- package/dist/storybook/assets/{Welcome.stories-DDEhWqOY.js → Welcome.stories-BDFQb8oF.js} +1 -1
- package/dist/storybook/assets/{Widget.stories-iTycJQkv.js → Widget.stories-CQnE1dST.js} +1 -1
- package/dist/storybook/assets/{WithTooltip-65CFNBJE-BDmGdT_q.js → WithTooltip-65CFNBJE-D1OYJPzp.js} +1 -1
- package/dist/storybook/assets/{blocks-45GMe9mP.js → blocks-Z0quNc1U.js} +5 -5
- package/dist/storybook/assets/{formatter-EIJCOSYU-Dvxzfjid.js → formatter-EIJCOSYU-DwWzDvJC.js} +1 -1
- package/dist/storybook/assets/if-defined-Dl8MuiCE.js +1 -0
- package/dist/storybook/assets/iframe-HDp5BmO_.css +1 -0
- package/dist/storybook/assets/{iframe-CemlMLl9.js → iframe-WTEmYHJj.js} +4 -4
- package/dist/storybook/assets/{index-Ei3bFG4y.js → index-BvPCa7_B.js} +1 -1
- package/dist/storybook/assets/{onFind-96dPwZGj.js → onFind-CqIRRMTv.js} +1 -1
- package/dist/storybook/assets/{onFind.stories-DwMmvzD8.js → onFind.stories-C4PPQTaQ.js} +1 -1
- package/dist/storybook/assets/{onRemove.stories-Bw8nC3q8.js → onRemove.stories-BGFCh6DN.js} +1 -1
- package/dist/storybook/assets/{onVisible.stories-BZyJ5si2.js → onVisible.stories-4ni7syfJ.js} +1 -1
- package/dist/storybook/assets/{style-map-BZ1BR1yx.js → style-map-BhvFBtuB.js} +1 -1
- package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-B4dajqNJ.js → syntaxhighlighter-ED5Y7EFY-D_cJwnoJ.js} +1 -1
- package/dist/storybook/iframe.html +2 -2
- package/dist/storybook/project.json +1 -1
- package/dist/tailwind-plugin-button.js +2 -0
- package/dist/tailwind-plugin-button.js.map +1 -1
- package/dist/tailwind-plugin-button.ts +2 -0
- package/package.json +4 -1
- package/src/legacy/tool-ui/src/Admin.css +2 -6
- package/src/legacy/tool-ui/src/CIGCluster.css +9 -1
- package/src/legacy/tool-ui/src/ChartCompat.ts +1 -1
- package/src/legacy/tool-ui/src/Compat.css +11 -0
- package/src/legacy/tool-ui/src/ContentEdit.css +19 -12
- package/src/legacy/tool-ui/src/ContentEditPanel.ts +26 -12
- package/src/legacy/tool-ui/src/ContentInputGroup.css +12 -10
- package/src/legacy/tool-ui/src/Conversation.css +19 -7
- package/src/legacy/tool-ui/src/DashboardWidget.css +4 -0
- package/src/legacy/tool-ui/src/Dialog.css +83 -26
- package/src/legacy/tool-ui/src/EmbeddedInputGroup/index.ts +20 -50
- package/src/legacy/tool-ui/src/Enhancement.css +3 -2
- package/src/legacy/tool-ui/src/Entry.ts +11 -0
- package/src/legacy/tool-ui/src/FileInput.css +1 -1
- package/src/legacy/tool-ui/src/Global.d.ts +3 -0
- package/src/legacy/tool-ui/src/Guide.css +5 -5
- package/src/legacy/tool-ui/src/ImageEditor.css +1 -1
- package/src/legacy/tool-ui/src/LinkTable.css +4 -0
- package/src/legacy/tool-ui/src/LiveBlog.css +2 -2
- package/src/legacy/tool-ui/src/MenuView.css +13 -7
- package/src/legacy/tool-ui/src/Message.css +4 -9
- package/src/legacy/tool-ui/src/Page.css +32 -9
- package/src/legacy/tool-ui/src/Popup.css +18 -1
- package/src/legacy/tool-ui/src/ProseMirror.css +1 -1
- package/src/legacy/tool-ui/src/RepeatableContentInputGroup.css +5 -5
- package/src/legacy/tool-ui/src/Revisions.css +8 -4
- package/src/legacy/tool-ui/src/SearchFields.css +2 -2
- package/src/legacy/tool-ui/src/SearchWidgetAdvanced.css +4 -13
- package/src/legacy/tool-ui/src/TabBar.css +2 -2
- package/src/legacy/tool-ui/src/Widget.css +29 -2
- package/src/legacy/tool-ui/src/dialog/index.ts +10 -18
- package/src/legacy/tool-ui/src/form/FormFilter/index.ts +2 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/2111.5d43fec84fea624d6371.css +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/5598.315afb3723a27880f87c.js +2 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/6086.82620005e5673191c44f.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/7718.5d43fec84fea624d6371.css +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{9360.41a5ba8d859d49f86811.js → 9360.22bc0127e04bc73d5261.js} +2 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/{9360.41a5ba8d859d49f86811.js.LICENSE.txt → 9360.22bc0127e04bc73d5261.js.LICENSE.txt} +1 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/ChartCompat.c7121ea8407d80ee5abe.js +1 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.1407c7815b605e9c9e5c.js +500 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/{v4.1074f0affb38bd0dd492.js → v4.447a0e68294d13059714.js} +8 -8
- package/src/legacy/tool-ui/src/main/webapp/dist/v4.b1e9f6ac0449331711fc.css +3 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/v5.4b881dc40345f5053736.js +92 -0
- package/src/legacy/tool-ui/src/main/webapp/dist/v5.c4249c5b01957c28ff92.css +5 -0
- package/src/legacy/tool-ui/src/main/webapp/v4/CIGCluster.less +9 -0
- package/src/legacy/tool-ui/src/main/webapp/v4/TabBar.less +4 -0
- package/src/legacy/tool-ui/src/theme/Theme.ts +28 -0
- package/src/legacy/tool-ui/src/v5.ts +61 -13
- package/dist/storybook/assets/if-defined-C-mi5lcR.js +0 -1
- package/dist/storybook/assets/iframe-abUCrGGI.css +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/011a678e3efe41981754.png +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/194137260531ee29a5f2.svg +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/1e8408af1a34bdf61457.png +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/2111.8f1e08a5cc223fd14542.css +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/44b38a404dec4643c46b.png +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/4a4ee777ddc0d4cedee4.png +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/5598.d84773ca53126661bdca.js +0 -2
- package/src/legacy/tool-ui/src/main/webapp/dist/6086.7ca02b827506f29db590.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/7718.8f1e08a5cc223fd14542.css +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/ChartCompat.4dd096dd030942227ec6.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.55a2d6ccdce502c79815.js +0 -500
- package/src/legacy/tool-ui/src/main/webapp/dist/c6e9c007f41bd4d26c20.png +0 -1
- package/src/legacy/tool-ui/src/main/webapp/dist/v4.477ad1936f8c04d7b232.css +0 -3
- package/src/legacy/tool-ui/src/main/webapp/dist/v5.b49d2d7615d030b68f89.js +0 -92
- package/src/legacy/tool-ui/src/main/webapp/dist/v5.f9baf26a8d24e59e7af0.css +0 -5
- /package/src/legacy/tool-ui/src/main/webapp/dist/{5598.d84773ca53126661bdca.js.LICENSE.txt → 5598.315afb3723a27880f87c.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.55a2d6ccdce502c79815.js.LICENSE.txt → RTEProseMirror.1407c7815b605e9c9e5c.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{v4.1074f0affb38bd0dd492.js.LICENSE.txt → v4.447a0e68294d13059714.js.LICENSE.txt} +0 -0
- /package/src/legacy/tool-ui/src/main/webapp/dist/{v5.b49d2d7615d030b68f89.js.LICENSE.txt → v5.4b881dc40345f5053736.js.LICENSE.txt} +0 -0
|
@@ -90,6 +90,8 @@ module.exports = plugin(function ({ addComponents, addUtilities, theme }) {
|
|
|
90
90
|
'&:disabled': disabledStyle,
|
|
91
91
|
'&[disabled]': disabledStyle,
|
|
92
92
|
textDecoration: 'none',
|
|
93
|
+
// Explicit so re-applying btu-button clears an outline, as it already does background/color.
|
|
94
|
+
outline: 'none',
|
|
93
95
|
transition: 'scale 150ms ease',
|
|
94
96
|
'&:hover': {
|
|
95
97
|
color: 'var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brightspot/ui",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"description": "A UI library for building Brightspot CMS components.",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"build-storybook": "yarn cem && storybook build -o ./dist/storybook",
|
|
28
28
|
"test:storybook": "vitest --project=storybook",
|
|
29
29
|
"test:css-bloat": "vitest run --project=css-bloat",
|
|
30
|
+
"test:combo-input": "vitest run --project=combo-input",
|
|
30
31
|
"check:conventions": "yarn cem && node scripts/check-conventions-all.mjs",
|
|
31
32
|
"check:conventions:fast": "node scripts/check-conventions.mjs",
|
|
32
33
|
"prepare": "husky && (cd src/legacy/tool-ui && yarn install)",
|
|
@@ -54,7 +55,9 @@
|
|
|
54
55
|
"eslint-plugin-prettier": "^5.5.4",
|
|
55
56
|
"eslint-plugin-storybook": "^10.0.7",
|
|
56
57
|
"globals": "^16.0.0",
|
|
58
|
+
"happy-dom": "^20.11.1",
|
|
57
59
|
"husky": "^9.1.7",
|
|
60
|
+
"js-cookie": "^3.0.1",
|
|
58
61
|
"lint-staged": "^16.2.6",
|
|
59
62
|
"lit": "^3.3.0",
|
|
60
63
|
"mini-css-extract-plugin": "^2.6.1",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/* Admin areas side nav styling */
|
|
16
|
-
.Admin-nav {
|
|
16
|
+
.Admin .Admin-nav {
|
|
17
17
|
@apply bg-gray-50;
|
|
18
18
|
|
|
19
19
|
> h2,
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/* These content selectors should just appear as normal ComboInputs */
|
|
46
|
-
> form > .
|
|
46
|
+
> form > .ComboInput {
|
|
47
47
|
@apply rounded-lg px-4;
|
|
48
48
|
|
|
49
49
|
&:not([aria-expanded='true'], :focus-visible) {
|
|
@@ -135,10 +135,6 @@
|
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
&:not(:first-child) {
|
|
139
|
-
@apply mt-2;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
138
|
a:hover {
|
|
143
139
|
@apply text-gray-900;
|
|
144
140
|
}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
btu-cig-cluster {
|
|
2
|
-
|
|
2
|
+
--gap: calc(2 * var(--CIG-padding));
|
|
3
|
+
|
|
4
|
+
/* Flex (not block) so narrow .CIG-row children pair up like they do in .CIG. */
|
|
5
|
+
@apply flex flex-grow flex-wrap basis-full gap-x-[--gap] contain-layout contain-style;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* Children run the full row; the narrow modifiers (.is-half etc.) override this to pair up. */
|
|
9
|
+
btu-cig-cluster > * {
|
|
10
|
+
@apply basis-full;
|
|
3
11
|
}
|
|
4
12
|
|
|
5
13
|
btu-cig-cluster:state(btu-error) {
|
|
@@ -247,7 +247,7 @@ Highcharts.theme = {
|
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
Highcharts.setOptions(Highcharts.theme)
|
|
250
|
-
Highcharts.setOptions({ lang: { noData: 'No Data to Display' } })
|
|
250
|
+
Highcharts.setOptions({ lang: { noData: window.BRIGHTSPOT?.ui?.tooltips?.chartNoData ?? 'No Data to Display' } })
|
|
251
251
|
|
|
252
252
|
const createLabels = (table: HTMLTableElement): string[] => {
|
|
253
253
|
const labels = []
|
|
@@ -202,6 +202,12 @@
|
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
+
/* btu-button is colorless without a variant. :where() keeps this at one class of specificity so
|
|
206
|
+
context rules (ActionBar, etc.) still win. */
|
|
207
|
+
.Button:not(:where(.is-dominant, .is-green, .is-yellow, .Link)) {
|
|
208
|
+
@apply btu-button-gray btu-button-fill-none btu-button-outline;
|
|
209
|
+
}
|
|
210
|
+
|
|
205
211
|
.Button.is-dominant {
|
|
206
212
|
@apply btu-button-primary;
|
|
207
213
|
}
|
|
@@ -379,6 +385,11 @@ suggests. Example use case "pin" icon button in live blog posts */
|
|
|
379
385
|
}
|
|
380
386
|
}
|
|
381
387
|
|
|
388
|
+
/* Collapse edit-top-html container when empty so it doesn't reserve space above tabs. */
|
|
389
|
+
.bsp-edit-top-html {
|
|
390
|
+
@apply empty:hidden;
|
|
391
|
+
}
|
|
392
|
+
|
|
382
393
|
/* v4 things which shouldn't appear in v5 */
|
|
383
394
|
.v4-only {
|
|
384
395
|
@apply hidden;
|
|
@@ -760,18 +760,29 @@
|
|
|
760
760
|
@apply flex flex-nowrap gap-2;
|
|
761
761
|
}
|
|
762
762
|
|
|
763
|
+
/* Lives in the edit grid, not the scrolling form, so a space-taking scrollbar
|
|
764
|
+
can't push the hit target off the panel edge. */
|
|
763
765
|
.ContentEdit-resizeWrapper {
|
|
764
|
-
--resize-hitbox-w:
|
|
765
|
-
|
|
766
|
+
--resize-hitbox-w: 16px;
|
|
767
|
+
margin-inline-end: calc(-1 * var(--resize-hitbox-w));
|
|
768
|
+
@apply pointer-events-none hidden w-[--resize-hitbox-w] justify-self-end bg-transparent [grid-area:left] md:pointer-events-auto md:relative md:z-20 md:cursor-col-resize md:touch-none;
|
|
766
769
|
}
|
|
767
770
|
|
|
768
|
-
|
|
771
|
+
/* Laid out only in the edit grid, since other popups are grids with no `left` area. */
|
|
772
|
+
:is(.Page.is-editing .Page-content, .Popup-content.is-editing)
|
|
773
|
+
> .ContentEdit-resizeWrapper {
|
|
774
|
+
@apply md:blokk;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
.ContentEdit-resizeWrapper:hover .ContentEdit-resizeHandle,
|
|
778
|
+
.ContentEdit-resizeWrapper:active .ContentEdit-resizeHandle {
|
|
769
779
|
@apply bg-primary-500;
|
|
770
780
|
}
|
|
771
781
|
|
|
772
782
|
.ContentEdit-resizeHandle {
|
|
773
783
|
--resize-handle-w: 2px;
|
|
774
|
-
|
|
784
|
+
/* Persistently visible so it's discoverable on touch devices (no :hover). */
|
|
785
|
+
@apply pointer-events-none absolute inset-y-0 start-0 w-[var(--resize-handle-w)] bg-primary-100 transition-colors;
|
|
775
786
|
}
|
|
776
787
|
|
|
777
788
|
/* Banners / Messages styling in Content edit form */
|
|
@@ -884,14 +895,10 @@
|
|
|
884
895
|
}
|
|
885
896
|
|
|
886
897
|
.ContentEdit-revisionActions {
|
|
887
|
-
@apply text-[--Revision-revisionEmphasisColor] max-md:mt-3;
|
|
898
|
+
@apply flex flex-wrap gap-4 text-[--Revision-revisionEmphasisColor] max-md:mt-3;
|
|
888
899
|
|
|
889
900
|
> a {
|
|
890
|
-
|
|
891
|
-
}
|
|
892
|
-
|
|
893
|
-
> a:not(:first-child) {
|
|
894
|
-
margin-left: var(--gap-l);
|
|
901
|
+
@apply whitespace-nowrap;
|
|
895
902
|
}
|
|
896
903
|
}
|
|
897
904
|
|
|
@@ -1015,11 +1022,11 @@
|
|
|
1015
1022
|
}
|
|
1016
1023
|
|
|
1017
1024
|
button.ContentEdit-workflowLink {
|
|
1018
|
-
@apply btu-button btu-button-fill-none btu-button-primary m-6 !ms-auto btu-button-container-none after:btu-icon after:btu-icon-arrow-right after:
|
|
1025
|
+
@apply btu-button btu-button-fill-none btu-button-primary m-6 !ms-auto btu-button-container-none after:btu-icon after:btu-icon-arrow-right rtl:after:btu-icon-arrow-left after:ms-2;
|
|
1019
1026
|
}
|
|
1020
1027
|
|
|
1021
1028
|
[data-name='publishOverride'] button.ContentEdit-workflowLink {
|
|
1022
|
-
@apply !me-auto !ms-6 before:btu-icon before:btu-icon-arrow-left before:
|
|
1029
|
+
@apply !me-auto !ms-6 before:btu-icon before:btu-icon-arrow-left rtl:before:btu-icon-arrow-right before:me-2 after:hidden;
|
|
1023
1030
|
}
|
|
1024
1031
|
|
|
1025
1032
|
/* Hide workflow link when not in publish override mode */
|
|
@@ -13,9 +13,9 @@ let panelData: PanelData | null
|
|
|
13
13
|
let pointerIsDown = false
|
|
14
14
|
let pdOriginX = 0 // Pointer down origin x position
|
|
15
15
|
let gtcOrigin: number[] = [] // Origin Grid Template Columns in pixels
|
|
16
|
-
let ogTransProp: undefined | string
|
|
17
16
|
let isRTL = false // Whether the container has RTL direction
|
|
18
17
|
let container: HTMLElement | null // The target Page
|
|
18
|
+
let grid: HTMLElement | null // The grid whose columns the drag resizes
|
|
19
19
|
let panel: HTMLElement | null // The target Panel
|
|
20
20
|
|
|
21
21
|
const updateWidth = (length: string) => {
|
|
@@ -47,6 +47,8 @@ const onPointerDown = (e: PointerEvent) => {
|
|
|
47
47
|
if (e.target.classList.contains('ContentEdit-resizeWrapper')) {
|
|
48
48
|
container = e.target.closest<HTMLElement>('.Page-content, .Popup')
|
|
49
49
|
if (!container) return
|
|
50
|
+
// Capture so a touch/trackpad drag isn't stolen by scroll and lost mid-drag.
|
|
51
|
+
e.target.setPointerCapture(e.pointerId)
|
|
50
52
|
pointerIsDown = true
|
|
51
53
|
const isPopup = container.classList.contains('Popup')
|
|
52
54
|
if (isPopup) {
|
|
@@ -57,15 +59,15 @@ const onPointerDown = (e: PointerEvent) => {
|
|
|
57
59
|
document.body.style.userSelect = 'none'
|
|
58
60
|
}
|
|
59
61
|
pdOriginX = e.screenX
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
isRTL = computedStyle.direction === 'rtl'
|
|
63
|
-
container.style.transitionProperty = 'none'
|
|
64
|
-
const grid = isPopup
|
|
62
|
+
isRTL = getComputedStyle(container).direction === 'rtl'
|
|
63
|
+
grid = isPopup
|
|
65
64
|
? container.querySelector<HTMLElement>('.Popup-content')
|
|
66
65
|
: container
|
|
67
66
|
if (!grid) return
|
|
68
67
|
|
|
68
|
+
// The transition belongs to the grid, which in a popup is not the container.
|
|
69
|
+
grid.style.transitionProperty = 'none'
|
|
70
|
+
|
|
69
71
|
gtcOrigin = window
|
|
70
72
|
.getComputedStyle(grid)
|
|
71
73
|
.gridTemplateColumns.split(' ')
|
|
@@ -101,15 +103,16 @@ const onPointerDown = (e: PointerEvent) => {
|
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
|
|
104
|
-
const onPointerUp = (e: PointerEvent) => {
|
|
106
|
+
const onPointerUp = (e: PointerEvent, save = true) => {
|
|
105
107
|
panel = null
|
|
106
108
|
pointerIsDown = false
|
|
109
|
+
if (grid) {
|
|
110
|
+
grid.style.removeProperty('transition-property')
|
|
111
|
+
grid = null
|
|
112
|
+
}
|
|
107
113
|
if (e.target instanceof HTMLElement) {
|
|
108
114
|
container = e.target.closest<HTMLElement>('.Page-content, .Popup')
|
|
109
115
|
}
|
|
110
|
-
if (container && ogTransProp) {
|
|
111
|
-
container.style.transitionProperty = ogTransProp
|
|
112
|
-
}
|
|
113
116
|
if (container?.classList.contains('Popup')) {
|
|
114
117
|
container.style.cursor = 'initial'
|
|
115
118
|
container.style.userSelect = 'unset'
|
|
@@ -128,7 +131,9 @@ const onPointerUp = (e: PointerEvent) => {
|
|
|
128
131
|
}
|
|
129
132
|
|
|
130
133
|
if (panelData && panelData.width) {
|
|
131
|
-
|
|
134
|
+
// A cancelled drag (scroll gesture stealing the pointer) shouldn't persist its
|
|
135
|
+
// interrupted width.
|
|
136
|
+
if (save) savePreferredWidth(panelData)
|
|
132
137
|
panelData = null
|
|
133
138
|
}
|
|
134
139
|
}
|
|
@@ -156,7 +161,11 @@ const onPointerMove = (e: PointerEvent) => {
|
|
|
156
161
|
|
|
157
162
|
const initResizablePanel = () => {
|
|
158
163
|
onFind('.ContentEdit-main', (cl) => {
|
|
159
|
-
|
|
164
|
+
// Appended to the grid, not the scrolling form: see ContentEdit.css.
|
|
165
|
+
const grid = cl.closest<HTMLElement>('.Page-content, .Popup-content')
|
|
166
|
+
if (!grid || grid.querySelector(':scope > .ContentEdit-resizeWrapper'))
|
|
167
|
+
return
|
|
168
|
+
grid.append(
|
|
160
169
|
create(
|
|
161
170
|
'div',
|
|
162
171
|
{ className: 'ContentEdit-resizeWrapper' },
|
|
@@ -167,6 +176,11 @@ const initResizablePanel = () => {
|
|
|
167
176
|
|
|
168
177
|
document.body.addEventListener('pointerdown', onPointerDown, false)
|
|
169
178
|
document.body.addEventListener('pointerup', onPointerUp, false)
|
|
179
|
+
document.body.addEventListener(
|
|
180
|
+
'pointercancel',
|
|
181
|
+
(e) => onPointerUp(e, false),
|
|
182
|
+
false,
|
|
183
|
+
)
|
|
170
184
|
document.body.addEventListener('pointermove', onPointerMove, false)
|
|
171
185
|
|
|
172
186
|
// Check if there's a preferred width for the content form
|
|
@@ -171,12 +171,6 @@
|
|
|
171
171
|
@apply w-full;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
/* min() replaces a @[312px]/CIG gate. Pixel-identical only while .CIG-row keeps
|
|
175
|
-
contain:inline-size - otherwise the 100% inflates intrinsic widths. */
|
|
176
|
-
> .CIG-small.inputSmall:not(.is-grid) {
|
|
177
|
-
@apply min-w-[min(312px,100%)] max-w-[540px] basis-1/2;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
174
|
/* Inside a layout with columns, unset the min width to prevent fields from
|
|
181
175
|
overlapping on smaller viewports. Set flex basis back to full so that the fields are not
|
|
182
176
|
really small here. These will still get the max width of 540px. */
|
|
@@ -190,6 +184,10 @@
|
|
|
190
184
|
}
|
|
191
185
|
}
|
|
192
186
|
|
|
187
|
+
.CIG .CIG-row:not([data-type="file"]) > .CIG-small.inputSmall:not(.is-grid) {
|
|
188
|
+
@apply min-w-[min(312px,100%)] max-w-[540px] basis-1/2;
|
|
189
|
+
}
|
|
190
|
+
|
|
193
191
|
.CIG-large,
|
|
194
192
|
.CIG-small {
|
|
195
193
|
--CIG-space: 0.375rem;
|
|
@@ -515,6 +513,14 @@
|
|
|
515
513
|
@apply pointer-events-auto;
|
|
516
514
|
}
|
|
517
515
|
|
|
516
|
+
.CIG-note :where(a, button, [role='button'], btu-copy-to-clipboard) {
|
|
517
|
+
@apply pointer-events-auto cursor-pointer;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.CIG-note a {
|
|
521
|
+
@apply text-primary-600;
|
|
522
|
+
}
|
|
523
|
+
|
|
518
524
|
.MultiSortable:hover {
|
|
519
525
|
@apply cursor-[unset];
|
|
520
526
|
}
|
|
@@ -684,10 +690,6 @@
|
|
|
684
690
|
@apply !pointer-events-auto !opacity-100;
|
|
685
691
|
}
|
|
686
692
|
|
|
687
|
-
.CIG-row.is-unlabeled > .AIChatButton {
|
|
688
|
-
@apply absolute right-0 top-[calc(-1_*_var(--button-size-md))] ms-0 ![display:initial];
|
|
689
|
-
}
|
|
690
|
-
|
|
691
693
|
/* Focus state for CIG-small in read-only rows */
|
|
692
694
|
:is(.CIG-row.is-readOnly, .CIG.is-readOnly) .CIG-small:focus-within {
|
|
693
695
|
@apply rounded-lg outline-dashed outline-[4px] outline-gray-300;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
.Conversation {
|
|
2
|
-
--post-form-h:
|
|
2
|
+
--post-form-h: 136px; /* this magic number is the approx height of the post form to reduce the jittering of the height while the RTE renders. */
|
|
3
3
|
@apply !col-[fullbleed-start_/_fullbleed-end] grid min-h-0 grid-rows-[minmax(0px,1fr)_minmax(var(--post-form-h),auto)];
|
|
4
4
|
}
|
|
5
5
|
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
.Conversation-workflowStateIcon {
|
|
97
|
-
@apply flex before:btu-icon before:btu-icon-arrow-right before:font-semibold before:text-gray-500 before:btu-icon-xs;
|
|
97
|
+
@apply flex before:btu-icon before:btu-icon-arrow-right rtl:before:btu-icon-arrow-left before:font-semibold before:text-gray-500 before:btu-icon-xs;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
.Conversation-text {
|
|
@@ -128,11 +128,19 @@
|
|
|
128
128
|
|
|
129
129
|
/* TODO: revisit newPost when ProseMirror is styled */
|
|
130
130
|
.Conversation-newPost {
|
|
131
|
-
@apply flex flex-
|
|
131
|
+
@apply flex flex-row items-end gap-3 border-t border-t-gray-200 p-4;
|
|
132
|
+
|
|
133
|
+
.CIG-small {
|
|
134
|
+
@apply mt-0;
|
|
135
|
+
}
|
|
132
136
|
}
|
|
133
137
|
|
|
134
138
|
.Conversation-newPost .ProseMirrorContainer {
|
|
135
139
|
@apply bg-white;
|
|
140
|
+
|
|
141
|
+
.ProseMirror {
|
|
142
|
+
@apply py-4;
|
|
143
|
+
}
|
|
136
144
|
}
|
|
137
145
|
|
|
138
146
|
.Conversation-newPostButton {
|
|
@@ -181,6 +189,10 @@
|
|
|
181
189
|
}
|
|
182
190
|
}
|
|
183
191
|
|
|
192
|
+
.Conversation-newPost {
|
|
193
|
+
@apply flex-col;
|
|
194
|
+
}
|
|
195
|
+
|
|
184
196
|
.Conversation-posts {
|
|
185
197
|
@apply max-h-[calc(100vh-3.3rem)] overflow-y-auto;
|
|
186
198
|
}
|
|
@@ -212,10 +224,6 @@
|
|
|
212
224
|
@apply blokk max-h-[300px] overflow-y-auto;
|
|
213
225
|
}
|
|
214
226
|
}
|
|
215
|
-
|
|
216
|
-
.Conversation {
|
|
217
|
-
@apply flex min-h-max flex-col;
|
|
218
|
-
}
|
|
219
227
|
}
|
|
220
228
|
|
|
221
229
|
.Popup[name='conversation-reply'] {
|
|
@@ -225,6 +233,10 @@
|
|
|
225
233
|
.Conversation-posts {
|
|
226
234
|
@apply overflow-y-visible;
|
|
227
235
|
}
|
|
236
|
+
|
|
237
|
+
.Conversation-newPost {
|
|
238
|
+
@apply flex-col;
|
|
239
|
+
}
|
|
228
240
|
}
|
|
229
241
|
}
|
|
230
242
|
|
|
@@ -194,7 +194,13 @@ dialog:modal > .QueryField-frame > .Popup:where(:not([popover])) {
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
/* Fix the ActionBar to the bottom of the modal.
|
|
197
|
+
/* Fix the ActionBar to the bottom of the modal.
|
|
198
|
+
One layout for every popup body: the frame scrolls, the wrappers between
|
|
199
|
+
it and the ActionBar (has-ActionBarContent) stretch as plain columns, and
|
|
200
|
+
the bar pins to the bottom with mt-auto while staying visible during
|
|
201
|
+
scroll (sticky). This works for any child count or nesting depth, unlike
|
|
202
|
+
the row subgrid it replaces. SearchFields, SearchWidgetAdvanced, and
|
|
203
|
+
PostPublish own their internal layouts and only join the outer column. */
|
|
198
204
|
&:where(
|
|
199
205
|
:not(
|
|
200
206
|
[name='toolUserTfa'],
|
|
@@ -204,38 +210,79 @@ dialog:modal > .QueryField-frame > .Popup:where(:not([popover])) {
|
|
|
204
210
|
)
|
|
205
211
|
)
|
|
206
212
|
.Popup-content:where(.has-ActionBar:not(.has-AdminNav, .is-editing)) {
|
|
207
|
-
@apply grid-rows-[[title]_max-content_[main]
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
213
|
+
@apply grid-rows-[[title]_max-content_[main]_minmax(0,1fr)];
|
|
214
|
+
|
|
215
|
+
.has-ActionBarContent:not(
|
|
216
|
+
.SearchFields,
|
|
217
|
+
.SearchFields *,
|
|
218
|
+
.SearchWidgetAdvanced,
|
|
219
|
+
.SearchWidgetAdvanced *,
|
|
220
|
+
.PostPublish-form,
|
|
221
|
+
.PostPublish-form *
|
|
222
|
+
) {
|
|
223
|
+
@apply flex grow flex-col row-[main];
|
|
224
|
+
|
|
225
|
+
/* Body content lines up with the popup inset; wrappers and full-bleed
|
|
226
|
+
elements are exempt. */
|
|
227
|
+
> :not(
|
|
228
|
+
.ActionBar,
|
|
229
|
+
.Message,
|
|
230
|
+
.TabBar,
|
|
231
|
+
.has-ActionBarContent,
|
|
232
|
+
.AIChat-wrapper,
|
|
233
|
+
.DT-wrapper,
|
|
234
|
+
table
|
|
235
|
+
) {
|
|
236
|
+
@apply mx-[--space];
|
|
237
|
+
}
|
|
218
238
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
239
|
+
/* A form that is a sibling of the ActionBar is plain content here;
|
|
240
|
+
without this it keeps the Widget grid's subgrid columns, which
|
|
241
|
+
collapse inside this flex column. */
|
|
242
|
+
> form:not(.has-ActionBarContent) {
|
|
243
|
+
@apply flex flex-col;
|
|
222
244
|
}
|
|
223
245
|
|
|
224
|
-
|
|
225
|
-
|
|
246
|
+
/* Same hazard for a fixedScrollable holding the fields before the bar
|
|
247
|
+
(e.g. the Profile popup): Widget.css turns it into a subgrid when it
|
|
248
|
+
holds a TC/CIG, which orphans inside this flex column and shoves the
|
|
249
|
+
fields into a phantom second column. */
|
|
250
|
+
> .fixedScrollable.before-ActionBar {
|
|
251
|
+
@apply flex flex-col;
|
|
226
252
|
}
|
|
227
253
|
}
|
|
228
254
|
|
|
229
|
-
|
|
230
|
-
|
|
255
|
+
/* Gap between the last content element and the bar. */
|
|
256
|
+
.before-ActionBar {
|
|
257
|
+
@apply mb-6;
|
|
231
258
|
}
|
|
232
259
|
|
|
233
|
-
|
|
234
|
-
|
|
260
|
+
/* Chat log keeps its own scroll pane. */
|
|
261
|
+
.AIChat-wrapper.before-ActionBar {
|
|
262
|
+
@apply grow overflow-y-auto px-[--space];
|
|
235
263
|
}
|
|
236
264
|
|
|
237
265
|
.ActionBar {
|
|
238
|
-
@apply mt-
|
|
266
|
+
@apply mt-auto;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* SearchFields keeps its legacy two-pane grid, with or without tabs
|
|
270
|
+
(Select Fields vs Show/Hide Filters). */
|
|
271
|
+
.SearchFields {
|
|
272
|
+
@apply grid h-full grow grid-rows-[[main]_1fr_max-content_[action-bar]] row-[main];
|
|
273
|
+
|
|
274
|
+
&.has-tabs {
|
|
275
|
+
@apply grid-rows-[auto_[main]_1fr_max-content_[action-bar]];
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
> form.has-ActionBarContent {
|
|
279
|
+
@apply grid grid-rows-[subgrid] row-[main/action-bar];
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/* Self-managed widgets still fill the body column. */
|
|
284
|
+
:is(.Widget.SearchWidgetAdvanced, .PostPublish-form) {
|
|
285
|
+
@apply grow;
|
|
239
286
|
}
|
|
240
287
|
}
|
|
241
288
|
|
|
@@ -255,6 +302,12 @@ dialog:modal > .QueryField-frame > .Popup:where(:not([popover])) {
|
|
|
255
302
|
.Popup-content .Popup-close {
|
|
256
303
|
@apply first:ms-auto;
|
|
257
304
|
}
|
|
305
|
+
|
|
306
|
+
/* Same when the only element before it is the legacy heading, which is
|
|
307
|
+
always hidden (e.g. objectId-edit popups without a cloned title). */
|
|
308
|
+
.Popup-content > .Popup-heading + .Popup-close {
|
|
309
|
+
@apply ms-auto;
|
|
310
|
+
}
|
|
258
311
|
}
|
|
259
312
|
|
|
260
313
|
/* Content Edit workflow popup — v4 lifecycle does not always remove [open]
|
|
@@ -400,9 +453,10 @@ dialog dialog > .PrePublishPopup {
|
|
|
400
453
|
--popup-w: initial;
|
|
401
454
|
}
|
|
402
455
|
|
|
403
|
-
/* Post Publish Actions modal
|
|
456
|
+
/* Post Publish Actions modal. The named columns mirror the Widget grid,
|
|
457
|
+
which no longer reaches here via subgrid. */
|
|
404
458
|
dialog:modal .PostPublish-form > div {
|
|
405
|
-
@apply h-full;
|
|
459
|
+
@apply grid h-full [grid-template-columns:[fullbleed-start]_var(--space)_[content-start]_1fr_auto_[content-end]_var(--space)_[fullbleed-end]];
|
|
406
460
|
|
|
407
461
|
> * {
|
|
408
462
|
@apply col-[content-start/content-end];
|
|
@@ -416,8 +470,11 @@ dialog:modal .PostPublish-form > div {
|
|
|
416
470
|
@apply relative mb-12 mt-1.5 after:absolute after:-bottom-6 after:-left-[var(--space)] after:-right-[var(--space)] after:h-px after:bg-gray-200;
|
|
417
471
|
}
|
|
418
472
|
|
|
419
|
-
|
|
420
|
-
|
|
473
|
+
/* Content area(s) before the ActionBar scroll. The ActionBar is always the
|
|
474
|
+
last child, so div:not(.ActionBar) matches the content divs; .before-ActionBar
|
|
475
|
+
(stamped by dialog/index.ts) covers a non-div immediately before the bar. */
|
|
476
|
+
> div:not(.ActionBar),
|
|
477
|
+
> .before-ActionBar {
|
|
421
478
|
@apply relative col-[fullbleed-start/fullbleed-end] max-h-full overflow-y-auto px-[--space] pb-6;
|
|
422
479
|
}
|
|
423
480
|
|
|
@@ -13,11 +13,7 @@ export default class EmbeddedInputGroup extends EventEmitterMixin(LitElement) {
|
|
|
13
13
|
@queryAsync('.EIG-item')
|
|
14
14
|
_eigItem?: Promise<HTMLElement>
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
_title?: Promise<HTMLElement>
|
|
18
|
-
|
|
19
|
-
@queryAsync('.removeButton')
|
|
20
|
-
_removeButton?: Promise<HTMLElement>
|
|
16
|
+
private _watchingItems = false
|
|
21
17
|
|
|
22
18
|
connectedCallback(): void {
|
|
23
19
|
super.connectedCallback()
|
|
@@ -25,29 +21,6 @@ export default class EmbeddedInputGroup extends EventEmitterMixin(LitElement) {
|
|
|
25
21
|
this.initializeEigItem()
|
|
26
22
|
}
|
|
27
23
|
|
|
28
|
-
disconnectedCallback(): void {
|
|
29
|
-
super.disconnectedCallback()
|
|
30
|
-
|
|
31
|
-
this._removeButton?.then((removeButton) => {
|
|
32
|
-
removeButton?.removeEventListener('click', (evt) => {
|
|
33
|
-
this._removeItem(evt)
|
|
34
|
-
})
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
this._title?.then((title) => {
|
|
38
|
-
title?.removeEventListener('click', () => {
|
|
39
|
-
this._eigToggle()
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
title?.removeEventListener('keydown', ({ key }) => {
|
|
43
|
-
if (key === 'Enter' || key === 'Space' || key === ' ') {
|
|
44
|
-
event?.preventDefault()
|
|
45
|
-
this._eigToggle()
|
|
46
|
-
}
|
|
47
|
-
})
|
|
48
|
-
})
|
|
49
|
-
}
|
|
50
|
-
|
|
51
24
|
private _eigToggle = () => {
|
|
52
25
|
this._eigItem?.then((eigItem) => {
|
|
53
26
|
if (eigItem) {
|
|
@@ -101,6 +74,9 @@ export default class EmbeddedInputGroup extends EventEmitterMixin(LitElement) {
|
|
|
101
74
|
if (eigLiveRegion) eigLiveRegion.textContent = tooltips?.restore
|
|
102
75
|
}
|
|
103
76
|
}
|
|
77
|
+
|
|
78
|
+
// Fire a change event so the content-state pipeline recomputes and the live preview reflects the removed/restored item.
|
|
79
|
+
eigItem.dispatchEvent(new Event('change', { bubbles: true }))
|
|
104
80
|
}
|
|
105
81
|
})
|
|
106
82
|
}
|
|
@@ -114,43 +90,36 @@ export default class EmbeddedInputGroup extends EventEmitterMixin(LitElement) {
|
|
|
114
90
|
}
|
|
115
91
|
|
|
116
92
|
initializeEigItem() {
|
|
93
|
+
// Register the watcher once; onFind then binds each .EIG-item's controls exactly once — on initial load, on Add, and when the item is swapped.
|
|
94
|
+
if (!this._watchingItems) {
|
|
95
|
+
this._watchingItems = true
|
|
96
|
+
onFind(this, '.EIG-item', (eigItem: HTMLElement) => {
|
|
97
|
+
const title = eigItem.querySelector<HTMLElement>('.EIG-title')
|
|
98
|
+
const removeButton = eigItem.querySelector<HTMLElement>('.removeButton')
|
|
99
|
+
this.titleAddEventListeners(title)
|
|
100
|
+
this.removeButtonAddEventListeners(removeButton)
|
|
101
|
+
})
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Restore the previously-collapsed state.
|
|
117
105
|
this._eigItem?.then((eigItem) => {
|
|
118
106
|
if (eigItem) {
|
|
119
107
|
const associatedDataField = eigItem.closest<HTMLElement>('[data-field]')
|
|
120
|
-
const itemClassList = eigItem.classList
|
|
121
|
-
let key = null
|
|
122
108
|
|
|
123
|
-
// Check if item is collapsed previously
|
|
124
109
|
if (associatedDataField) {
|
|
125
|
-
key = getComponentKey(associatedDataField, 'data-field')
|
|
110
|
+
const key = getComponentKey(associatedDataField, 'data-field')
|
|
126
111
|
if (key && ls.getItem(key)) {
|
|
127
|
-
|
|
112
|
+
eigItem.classList.add('is-collapsed')
|
|
128
113
|
eigItem.querySelector('.CIG-large')?.setAttribute('hidden', '')
|
|
129
114
|
}
|
|
130
115
|
}
|
|
131
|
-
} else {
|
|
132
|
-
// No EIG item has been added yet (i.e., Add Module) so monitor for it.
|
|
133
|
-
onFind(this, '.EIG-item', (eigItem: HTMLElement) => {
|
|
134
|
-
const title = eigItem.querySelector<HTMLElement>('.EIG-title')
|
|
135
|
-
const removeButton =
|
|
136
|
-
eigItem.querySelector<HTMLElement>('.removeButton')
|
|
137
|
-
this.titleAddEventListeners(title)
|
|
138
|
-
this.removeButtonAddEventListeners(removeButton)
|
|
139
|
-
})
|
|
140
116
|
}
|
|
141
117
|
})
|
|
142
|
-
|
|
143
|
-
this._title?.then((title) => {
|
|
144
|
-
this.titleAddEventListeners(title)
|
|
145
|
-
})
|
|
146
|
-
|
|
147
|
-
this._removeButton?.then((removeButton) => {
|
|
148
|
-
this.removeButtonAddEventListeners(removeButton)
|
|
149
|
-
})
|
|
150
118
|
}
|
|
151
119
|
|
|
152
120
|
titleAddEventListeners(title: HTMLElement | null) {
|
|
153
121
|
if (!title) return
|
|
122
|
+
|
|
154
123
|
title.addEventListener('click', () => {
|
|
155
124
|
this._eigToggle()
|
|
156
125
|
})
|
|
@@ -166,6 +135,7 @@ export default class EmbeddedInputGroup extends EventEmitterMixin(LitElement) {
|
|
|
166
135
|
|
|
167
136
|
removeButtonAddEventListeners(removeButton: HTMLElement | null) {
|
|
168
137
|
if (!removeButton) return
|
|
138
|
+
|
|
169
139
|
const eigLiveRegion = create('span', {
|
|
170
140
|
class: 'screen-reader-only',
|
|
171
141
|
'aria-live': 'polite',
|