newspack-components 4.3.0 → 4.4.0-epic-editor-refactor.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/DEVELOPMENT.md +868 -0
- package/copy-styles.js +3 -2
- package/dist/cjs/accordion/index.js +17 -12
- package/dist/cjs/action-card/index.js +176 -139
- package/dist/cjs/autocomplete-tokenfield/index.js +254 -234
- package/dist/cjs/autocomplete-with-latest-posts/index.js +172 -110
- package/dist/cjs/autocomplete-with-suggestions/index.js +229 -126
- package/dist/cjs/badge/index.js +7 -7
- package/dist/cjs/box-contrast/index.js +19 -15
- package/dist/cjs/button/index.js +41 -26
- package/dist/cjs/button-props/button-props.js +5 -5
- package/dist/cjs/button-props/index.js +2 -2
- package/dist/cjs/card/core-card.js +110 -52
- package/dist/cjs/card/index.js +74 -67
- package/dist/cjs/card/style-core.scss +93 -25
- package/dist/cjs/card/style.scss +2 -2
- package/dist/cjs/card-feature/index.js +141 -0
- package/dist/cjs/card-feature/style.scss +75 -0
- package/dist/cjs/card-form/index.js +144 -0
- package/dist/cjs/card-form/style.scss +20 -0
- package/dist/cjs/card-settings-group/index.js +36 -16
- package/dist/cjs/card-sortable-list/index.js +176 -140
- package/dist/cjs/category-autocomplete/index.js +175 -155
- package/dist/cjs/color-picker/index.js +41 -23
- package/dist/cjs/color-picker/index.test.js +82 -0
- package/dist/cjs/color-picker/style.scss +11 -13
- package/dist/cjs/confirm-dialog/index.js +86 -22
- package/dist/cjs/consts.js +1 -1
- package/dist/cjs/custom-select-control/index.js +39 -28
- package/dist/cjs/dataviews/index.js +38 -0
- package/dist/cjs/dataviews/style.scss +9 -0
- package/dist/cjs/divider/index.js +26 -21
- package/dist/cjs/footer/index.js +36 -30
- package/dist/cjs/form-token-field/index.js +51 -40
- package/dist/cjs/global-notices/index.js +5 -5
- package/dist/cjs/grid/index.js +25 -19
- package/dist/cjs/grid/style.scss +6 -1
- package/dist/cjs/handoff/index.js +204 -156
- package/dist/cjs/handoff-message/index.js +12 -7
- package/dist/cjs/hooks/index.js +10 -8
- package/dist/cjs/hooks/use-confirm-dialog.js +79 -0
- package/dist/cjs/hooks/use-unsaved-changes-dialog.js +144 -0
- package/dist/cjs/hooks/useObjectState.js +21 -12
- package/dist/cjs/hooks/useObjectState.test.js +55 -33
- package/dist/cjs/hooks/useOnClickOutside.js +6 -6
- package/dist/cjs/hooks/usePrompt.js +10 -13
- package/dist/cjs/image-upload/index.js +114 -123
- package/dist/cjs/image-upload/index.test.js +11 -13
- package/dist/cjs/image-upload/style.scss +12 -40
- package/dist/cjs/index.js +136 -104
- package/dist/cjs/info-button/index.js +43 -32
- package/dist/cjs/integration-icons/active-campaign.js +22 -0
- package/dist/cjs/integration-icons/constant-contact.js +28 -0
- package/dist/cjs/integration-icons/fundraise-up.js +25 -0
- package/dist/cjs/integration-icons/index.js +48 -0
- package/dist/cjs/integration-icons/mailchimp.js +19 -0
- package/dist/cjs/integration-icons/salesforce.js +17 -0
- package/dist/cjs/integration-icons/wisepops.js +20 -0
- package/dist/cjs/modal/index.js +22 -19
- package/dist/cjs/modal/style.scss +4 -0
- package/dist/cjs/newspack-icon/index.js +45 -38
- package/dist/cjs/notice/index.js +64 -55
- package/dist/cjs/plugin-installer/index.js +259 -253
- package/dist/cjs/plugin-settings/SettingsSection.js +66 -60
- package/dist/cjs/plugin-settings/index.js +217 -200
- package/dist/cjs/plugin-toggle/index.js +192 -199
- package/dist/cjs/popover/index.js +41 -28
- package/dist/cjs/position-control/index.js +24 -23
- package/dist/cjs/progress-bar/index.js +71 -59
- package/dist/cjs/progress-bar/index.test.js +62 -68
- package/dist/cjs/proxied-imports/router.js +3 -3
- package/dist/cjs/radio-control/index.js +40 -27
- package/dist/cjs/section-header/index.js +103 -58
- package/dist/cjs/section-header/style.scss +31 -11
- package/dist/cjs/select-control/ButtonGroupControl.js +26 -21
- package/dist/cjs/select-control/GroupedSelectControl.js +41 -35
- package/dist/cjs/select-control/index.js +52 -40
- package/dist/cjs/settings/MinMaxSetting.js +30 -20
- package/dist/cjs/settings/SettingsCard.js +20 -17
- package/dist/cjs/settings/SettingsSection.js +22 -21
- package/dist/cjs/settings/index.js +5 -5
- package/dist/cjs/sortable-newsletter-list-control/index.js +78 -57
- package/dist/cjs/steps-list/index.js +44 -34
- package/dist/cjs/steps-list-item/index.js +47 -39
- package/dist/cjs/style-card/index.js +70 -63
- package/dist/cjs/tabbed-navigation/index.js +38 -36
- package/dist/cjs/text-control/index.js +27 -25
- package/dist/cjs/utils/color.js +4 -4
- package/dist/cjs/utils/editor-toolbar-back-button.js +61 -0
- package/dist/cjs/utils/index.js +31 -19
- package/dist/cjs/utils/style.scss +8 -0
- package/dist/cjs/waiting/index.js +48 -37
- package/dist/cjs/web-preview/index.js +217 -211
- package/dist/cjs/with-wizard/index.js +362 -364
- package/dist/cjs/with-wizard/style.scss +4 -54
- package/dist/cjs/with-wizard-screen/index.js +54 -58
- package/dist/cjs/with-wizard-screen/style.scss +41 -3
- package/dist/cjs/wizard/components/WizardError.js +20 -18
- package/dist/cjs/wizard/components/WizardSnackbar.js +26 -23
- package/dist/cjs/wizard/index.js +176 -114
- package/dist/cjs/wizard/store/index.js +171 -123
- package/dist/cjs/wizard/store/utils.js +13 -8
- package/dist/esm/accordion/index.js +14 -9
- package/dist/esm/action-card/index.js +168 -123
- package/dist/esm/autocomplete-tokenfield/index.js +248 -222
- package/dist/esm/autocomplete-with-latest-posts/index.js +169 -103
- package/dist/esm/autocomplete-with-suggestions/index.js +226 -119
- package/dist/esm/badge/index.js +5 -5
- package/dist/esm/box-contrast/index.js +15 -11
- package/dist/esm/button/index.js +39 -21
- package/dist/esm/button-props/button-props.js +1 -1
- package/dist/esm/card/core-card.js +109 -47
- package/dist/esm/card/index.js +69 -54
- package/dist/esm/card/style-core.scss +93 -25
- package/dist/esm/card/style.scss +2 -2
- package/dist/esm/card-feature/index.js +131 -0
- package/dist/esm/card-feature/style.scss +75 -0
- package/dist/esm/card-form/index.js +134 -0
- package/dist/esm/card-form/style.scss +20 -0
- package/dist/esm/card-settings-group/index.js +33 -14
- package/dist/esm/card-sortable-list/index.js +170 -126
- package/dist/esm/category-autocomplete/index.js +168 -140
- package/dist/esm/color-picker/index.js +39 -21
- package/dist/esm/color-picker/index.test.js +78 -0
- package/dist/esm/color-picker/style.scss +11 -13
- package/dist/esm/confirm-dialog/index.js +85 -18
- package/dist/esm/consts.js +1 -1
- package/dist/esm/custom-select-control/index.js +34 -15
- package/dist/esm/dataviews/index.js +34 -0
- package/dist/esm/dataviews/style.scss +9 -0
- package/dist/esm/divider/index.js +24 -16
- package/dist/esm/footer/index.js +34 -28
- package/dist/esm/form-token-field/index.js +46 -27
- package/dist/esm/global-notices/index.js +3 -3
- package/dist/esm/grid/index.js +23 -14
- package/dist/esm/grid/style.scss +6 -1
- package/dist/esm/handoff/index.js +199 -143
- package/dist/esm/handoff-message/index.js +10 -6
- package/dist/esm/hooks/index.js +8 -6
- package/dist/esm/hooks/use-confirm-dialog.js +73 -0
- package/dist/esm/hooks/use-unsaved-changes-dialog.js +136 -0
- package/dist/esm/hooks/useObjectState.js +19 -9
- package/dist/esm/hooks/useObjectState.test.js +54 -32
- package/dist/esm/hooks/useOnClickOutside.js +4 -4
- package/dist/esm/hooks/usePrompt.js +9 -11
- package/dist/esm/image-upload/index.js +110 -111
- package/dist/esm/image-upload/index.test.js +11 -13
- package/dist/esm/image-upload/style.scss +12 -40
- package/dist/esm/index.js +7 -1
- package/dist/esm/info-button/index.js +38 -19
- package/dist/esm/integration-icons/active-campaign.js +16 -0
- package/dist/esm/integration-icons/constant-contact.js +22 -0
- package/dist/esm/integration-icons/fundraise-up.js +19 -0
- package/dist/esm/integration-icons/index.js +6 -0
- package/dist/esm/integration-icons/mailchimp.js +13 -0
- package/dist/esm/integration-icons/salesforce.js +11 -0
- package/dist/esm/integration-icons/wisepops.js +14 -0
- package/dist/esm/modal/index.js +20 -13
- package/dist/esm/modal/style.scss +4 -0
- package/dist/esm/newspack-icon/index.js +40 -25
- package/dist/esm/notice/index.js +59 -42
- package/dist/esm/plugin-installer/index.js +255 -243
- package/dist/esm/plugin-settings/SettingsSection.js +61 -50
- package/dist/esm/plugin-settings/index.js +212 -189
- package/dist/esm/plugin-toggle/index.js +187 -190
- package/dist/esm/popover/index.js +35 -16
- package/dist/esm/position-control/index.js +22 -18
- package/dist/esm/progress-bar/index.js +66 -49
- package/dist/esm/progress-bar/index.test.js +61 -67
- package/dist/esm/radio-control/index.js +34 -15
- package/dist/esm/section-header/index.js +102 -57
- package/dist/esm/section-header/style.scss +31 -11
- package/dist/esm/select-control/ButtonGroupControl.js +23 -18
- package/dist/esm/select-control/GroupedSelectControl.js +38 -30
- package/dist/esm/select-control/index.js +47 -27
- package/dist/esm/settings/MinMaxSetting.js +27 -16
- package/dist/esm/settings/SettingsCard.js +18 -13
- package/dist/esm/settings/SettingsSection.js +20 -19
- package/dist/esm/settings/index.js +3 -3
- package/dist/esm/sortable-newsletter-list-control/index.js +74 -53
- package/dist/esm/steps-list/index.js +39 -21
- package/dist/esm/steps-list-item/index.js +42 -26
- package/dist/esm/style-card/index.js +65 -50
- package/dist/esm/tabbed-navigation/index.js +35 -33
- package/dist/esm/text-control/index.js +25 -19
- package/dist/esm/utils/color.js +4 -4
- package/dist/esm/utils/editor-toolbar-back-button.js +53 -0
- package/dist/esm/utils/index.js +29 -16
- package/dist/esm/utils/style.scss +8 -0
- package/dist/esm/waiting/index.js +43 -24
- package/dist/esm/web-preview/index.js +213 -201
- package/dist/esm/with-wizard/index.js +360 -358
- package/dist/esm/with-wizard/style.scss +4 -54
- package/dist/esm/with-wizard-screen/index.js +48 -46
- package/dist/esm/with-wizard-screen/style.scss +41 -3
- package/dist/esm/wizard/components/WizardError.js +18 -16
- package/dist/esm/wizard/components/WizardSnackbar.js +23 -17
- package/dist/esm/wizard/index.js +171 -103
- package/dist/esm/wizard/store/index.js +169 -116
- package/dist/esm/wizard/store/utils.js +13 -6
- package/package.json +30 -16
- package/release.config.js +1 -0
- package/shared/hooks/use-coauthors.js +195 -27
- package/shared/hooks/use-coauthors.test.js +232 -6
- package/shared/scss/_mixins.scss +13 -5
- package/src/accordion/index.js +8 -7
- package/src/action-card/index.js +15 -1
- package/src/badge/index.tsx +3 -1
- package/src/card/core-card.js +95 -18
- package/src/card/index.js +1 -0
- package/src/card/style-core.scss +93 -25
- package/src/card/style.scss +2 -2
- package/src/card-feature/README.md +188 -0
- package/src/card-feature/index.tsx +186 -0
- package/src/card-feature/style.scss +75 -0
- package/src/card-form/README.md +113 -0
- package/src/card-form/index.tsx +128 -0
- package/src/card-form/style.scss +20 -0
- package/src/card-settings-group/index.tsx +28 -3
- package/src/card-sortable-list/index.tsx +27 -4
- package/src/color-picker/index.js +15 -8
- package/src/color-picker/index.test.js +52 -0
- package/src/color-picker/style.scss +11 -13
- package/src/confirm-dialog/README.md +128 -0
- package/src/confirm-dialog/index.tsx +74 -6
- package/src/dataviews/index.tsx +34 -0
- package/src/dataviews/style.scss +9 -0
- package/src/grid/style.scss +6 -1
- package/src/handoff/README.md +93 -0
- package/src/handoff/index.js +46 -8
- package/src/hooks/index.ts +2 -1
- package/src/hooks/use-confirm-dialog.tsx +80 -0
- package/src/hooks/use-unsaved-changes-dialog.tsx +140 -0
- package/src/image-upload/index.js +10 -15
- package/src/image-upload/style.scss +12 -40
- package/src/index.js +7 -1
- package/src/integration-icons/active-campaign.js +14 -0
- package/src/integration-icons/constant-contact.js +22 -0
- package/src/integration-icons/fundraise-up.js +18 -0
- package/src/integration-icons/index.js +6 -0
- package/src/integration-icons/mailchimp.js +10 -0
- package/src/integration-icons/salesforce.js +10 -0
- package/src/integration-icons/wisepops.js +14 -0
- package/src/modal/style.scss +4 -0
- package/src/plugin-installer/index.js +30 -19
- package/src/section-header/index.js +56 -24
- package/src/section-header/style.scss +31 -11
- package/src/select-control/index.js +4 -0
- package/src/utils/editor-toolbar-back-button.tsx +48 -0
- package/src/utils/index.js +6 -0
- package/src/utils/style.scss +8 -0
- package/src/with-wizard/style.scss +4 -54
- package/src/with-wizard-screen/style.scss +41 -3
- package/src/wizard/index.js +90 -53
- package/src/wizard/store/index.js +2 -2
- package/dist/cjs/button-card/index.js +0 -72
- package/dist/cjs/button-card/style.scss +0 -180
- package/dist/esm/button-card/index.js +0 -64
- package/dist/esm/button-card/style.scss +0 -180
- package/src/button-card/index.js +0 -52
- package/src/button-card/style.scss +0 -180
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1
6
|
/**
|
|
2
7
|
* Card - Sortable list component.
|
|
3
8
|
*/
|
|
@@ -18,36 +23,56 @@ import './style.scss';
|
|
|
18
23
|
* External dependencies
|
|
19
24
|
*/
|
|
20
25
|
import classNames from 'classnames';
|
|
21
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
27
|
+
var DROP_ANIMATION_DURATION = 400; // ms — must match $drop-duration in style.scss
|
|
28
|
+
var BUTTON_MOVE_DURATION = 200; // ms — must match $shift-duration in style.scss
|
|
24
29
|
|
|
25
|
-
|
|
26
|
-
disabled =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
var CardSortableList = function CardSortableList(_ref) {
|
|
31
|
+
var _ref$disabled = _ref.disabled,
|
|
32
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
33
|
+
_ref$items = _ref.items,
|
|
34
|
+
items = _ref$items === void 0 ? [] : _ref$items,
|
|
35
|
+
_ref$onDragCallback = _ref.onDragCallback,
|
|
36
|
+
onDragCallback = _ref$onDragCallback === void 0 ? function () {} : _ref$onDragCallback;
|
|
37
|
+
var _useState = useState(items),
|
|
38
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
39
|
+
sortedItems = _useState2[0],
|
|
40
|
+
setSortedItems = _useState2[1];
|
|
41
|
+
var _useState3 = useState(null),
|
|
42
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
43
|
+
draggingIndex = _useState4[0],
|
|
44
|
+
setDraggingIndex = _useState4[1];
|
|
45
|
+
var _useState5 = useState(null),
|
|
46
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
47
|
+
hoverIndex = _useState6[0],
|
|
48
|
+
setHoverIndex = _useState6[1];
|
|
49
|
+
var _useState7 = useState(null),
|
|
50
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
51
|
+
droppedIndex = _useState8[0],
|
|
52
|
+
setDroppedIndex = _useState8[1];
|
|
53
|
+
var _useState9 = useState(null),
|
|
54
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
55
|
+
measurements = _useState0[0],
|
|
56
|
+
setMeasurements = _useState0[1];
|
|
57
|
+
var listRef = useRef(null);
|
|
58
|
+
var itemRefs = useRef([]);
|
|
59
|
+
var dropAnimationTimer = useRef(null);
|
|
60
|
+
var buttonMoveTimer = useRef(null);
|
|
61
|
+
var buttonFlipRef = useRef(null);
|
|
62
|
+
var _useState1 = useState(0),
|
|
63
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
64
|
+
buttonMoveId = _useState10[0],
|
|
65
|
+
setButtonMoveId = _useState10[1];
|
|
66
|
+
var documentDragOverRef = useRef(null);
|
|
42
67
|
|
|
43
68
|
// Keep sortedItems in sync when the items prop changes externally (e.g. after a save).
|
|
44
|
-
useEffect(()
|
|
69
|
+
useEffect(function () {
|
|
45
70
|
setSortedItems(items);
|
|
46
71
|
}, [items]);
|
|
47
72
|
|
|
48
73
|
// Clean up any pending animation timer on unmount.
|
|
49
|
-
useEffect(()
|
|
50
|
-
return ()
|
|
74
|
+
useEffect(function () {
|
|
75
|
+
return function () {
|
|
51
76
|
if (dropAnimationTimer.current) {
|
|
52
77
|
clearTimeout(dropAnimationTimer.current);
|
|
53
78
|
}
|
|
@@ -64,28 +89,32 @@ const CardSortableList = ({
|
|
|
64
89
|
* Handle a chevron-button move. Records item positions before the reorder so
|
|
65
90
|
* the FLIP animation can play after React commits the new DOM order.
|
|
66
91
|
*/
|
|
67
|
-
|
|
92
|
+
var handleButtonMove = function handleButtonMove(fromIndex, toIndex) {
|
|
68
93
|
if (toIndex < 0 || toIndex >= sortedItems.length) {
|
|
69
94
|
return;
|
|
70
95
|
}
|
|
71
|
-
|
|
72
|
-
|
|
96
|
+
var fromEl = itemRefs.current[fromIndex];
|
|
97
|
+
var toEl = itemRefs.current[toIndex];
|
|
73
98
|
if (!fromEl || !toEl) {
|
|
74
99
|
return;
|
|
75
100
|
}
|
|
76
|
-
|
|
77
|
-
|
|
101
|
+
var stride = Math.abs(toEl.getBoundingClientRect().top - fromEl.getBoundingClientRect().top);
|
|
102
|
+
var direction = toIndex > fromIndex ? 1 : -1;
|
|
78
103
|
buttonFlipRef.current = {
|
|
79
|
-
fromIndex,
|
|
80
|
-
toIndex,
|
|
81
|
-
stride,
|
|
82
|
-
direction
|
|
104
|
+
fromIndex: fromIndex,
|
|
105
|
+
toIndex: toIndex,
|
|
106
|
+
stride: stride,
|
|
107
|
+
direction: direction
|
|
83
108
|
};
|
|
84
|
-
|
|
85
|
-
|
|
109
|
+
var reordered = _toConsumableArray(sortedItems);
|
|
110
|
+
var _reordered$splice = reordered.splice(fromIndex, 1),
|
|
111
|
+
_reordered$splice2 = _slicedToArray(_reordered$splice, 1),
|
|
112
|
+
moved = _reordered$splice2[0];
|
|
86
113
|
reordered.splice(toIndex, 0, moved);
|
|
87
114
|
setSortedItems(reordered);
|
|
88
|
-
setButtonMoveId(
|
|
115
|
+
setButtonMoveId(function (id) {
|
|
116
|
+
return id + 1;
|
|
117
|
+
});
|
|
89
118
|
};
|
|
90
119
|
|
|
91
120
|
/**
|
|
@@ -94,30 +123,28 @@ const CardSortableList = ({
|
|
|
94
123
|
* using inline CSS transitions (no CSS classes, to avoid creating a new
|
|
95
124
|
* containing block that would break position:fixed on the Draggable clone).
|
|
96
125
|
*/
|
|
97
|
-
useLayoutEffect(()
|
|
98
|
-
|
|
126
|
+
useLayoutEffect(function () {
|
|
127
|
+
var flipData = buttonFlipRef.current;
|
|
99
128
|
if (!flipData) {
|
|
100
129
|
return;
|
|
101
130
|
}
|
|
102
131
|
buttonFlipRef.current = null;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
} = flipData;
|
|
109
|
-
const startAnimation = (el, startY) => {
|
|
132
|
+
var fromIndex = flipData.fromIndex,
|
|
133
|
+
toIndex = flipData.toIndex,
|
|
134
|
+
stride = flipData.stride,
|
|
135
|
+
direction = flipData.direction;
|
|
136
|
+
var startAnimation = function startAnimation(el, startY) {
|
|
110
137
|
if (!el) {
|
|
111
138
|
return;
|
|
112
139
|
}
|
|
113
140
|
// Snap to the starting position with no transition.
|
|
114
141
|
el.style.transition = 'none';
|
|
115
|
-
el.style.transform =
|
|
142
|
+
el.style.transform = "translateY(".concat(startY, "px)");
|
|
116
143
|
// Force a reflow so the browser registers the starting position
|
|
117
144
|
// before we switch to the animated transition.
|
|
118
145
|
el.getBoundingClientRect();
|
|
119
146
|
// Animate from startY back to 0 (its new natural position).
|
|
120
|
-
el.style.transition =
|
|
147
|
+
el.style.transition = "transform ".concat(BUTTON_MOVE_DURATION, "ms ease-out");
|
|
121
148
|
el.style.transform = '';
|
|
122
149
|
};
|
|
123
150
|
|
|
@@ -128,11 +155,11 @@ const CardSortableList = ({
|
|
|
128
155
|
if (buttonMoveTimer.current) {
|
|
129
156
|
clearTimeout(buttonMoveTimer.current);
|
|
130
157
|
}
|
|
131
|
-
buttonMoveTimer.current = setTimeout(()
|
|
158
|
+
buttonMoveTimer.current = setTimeout(function () {
|
|
132
159
|
// Clear inline animation styles before calling the external callback so
|
|
133
160
|
// the subsequent React re-render doesn't fight a live animation.
|
|
134
|
-
[fromIndex, toIndex].forEach(i
|
|
135
|
-
|
|
161
|
+
[fromIndex, toIndex].forEach(function (i) {
|
|
162
|
+
var el = itemRefs.current[i];
|
|
136
163
|
if (el) {
|
|
137
164
|
el.style.transition = '';
|
|
138
165
|
el.style.transform = '';
|
|
@@ -141,13 +168,13 @@ const CardSortableList = ({
|
|
|
141
168
|
|
|
142
169
|
// Move focus to the matching chevron button on the card at toIndex.
|
|
143
170
|
// Focus before onDragCallback so a parent rerender can't steal focus.
|
|
144
|
-
|
|
171
|
+
var targetEl = itemRefs.current[toIndex];
|
|
145
172
|
if (targetEl) {
|
|
146
|
-
|
|
173
|
+
var moveButtons = targetEl.querySelectorAll('.newspack-card--core__header__draggable-controls__move-buttons button');
|
|
147
174
|
// direction > 0 = moved down → prefer the down button (index 1).
|
|
148
175
|
// direction < 0 = moved up → prefer the up button (index 0).
|
|
149
|
-
|
|
150
|
-
|
|
176
|
+
var preferred = direction > 0 ? moveButtons[1] : moveButtons[0];
|
|
177
|
+
var fallback = direction > 0 ? moveButtons[0] : moveButtons[1];
|
|
151
178
|
if (preferred && !preferred.disabled) {
|
|
152
179
|
preferred.focus();
|
|
153
180
|
} else if (fallback && !fallback.disabled) {
|
|
@@ -159,7 +186,7 @@ const CardSortableList = ({
|
|
|
159
186
|
}, BUTTON_MOVE_DURATION);
|
|
160
187
|
}, [buttonMoveId]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
161
188
|
|
|
162
|
-
|
|
189
|
+
var handleDragStart = function handleDragStart(index) {
|
|
163
190
|
// Cancel any in-progress button-move animation so no item wrapper keeps
|
|
164
191
|
// an inline transform. A transformed ancestor breaks position:fixed on
|
|
165
192
|
// the Draggable clone (CSS spec: fixed positioning is relative to the
|
|
@@ -167,46 +194,50 @@ const CardSortableList = ({
|
|
|
167
194
|
if (buttonMoveTimer.current) {
|
|
168
195
|
clearTimeout(buttonMoveTimer.current);
|
|
169
196
|
buttonMoveTimer.current = null;
|
|
170
|
-
itemRefs.current.forEach(el
|
|
197
|
+
itemRefs.current.forEach(function (el) {
|
|
171
198
|
if (el) {
|
|
172
199
|
el.style.transition = '';
|
|
173
200
|
el.style.transform = '';
|
|
174
201
|
}
|
|
175
202
|
});
|
|
176
203
|
}
|
|
177
|
-
|
|
204
|
+
var listEl = listRef.current;
|
|
178
205
|
if (listEl) {
|
|
179
|
-
var _rects$index$height;
|
|
180
|
-
|
|
181
|
-
|
|
206
|
+
var _rects$index$height, _rects$index;
|
|
207
|
+
var itemEls = itemRefs.current;
|
|
208
|
+
var rects = itemEls.map(function (el) {
|
|
209
|
+
return el === null || el === void 0 ? void 0 : el.getBoundingClientRect();
|
|
210
|
+
});
|
|
182
211
|
|
|
183
212
|
// Stride = item height + gap to next item (difference between consecutive tops).
|
|
184
|
-
|
|
213
|
+
var itemStrides = rects.map(function (rect, i) {
|
|
185
214
|
if (!rect) {
|
|
186
215
|
return 0;
|
|
187
216
|
}
|
|
188
|
-
|
|
217
|
+
var nextRect = rects[i + 1];
|
|
189
218
|
return nextRect ? nextRect.top - rect.top : rect.height;
|
|
190
219
|
});
|
|
191
220
|
setMeasurements({
|
|
192
221
|
lockedHeight: listEl.getBoundingClientRect().height,
|
|
193
|
-
sourceHeight: (_rects$index$height = rects[index]
|
|
194
|
-
itemStrides,
|
|
195
|
-
itemTops: rects.map(rect
|
|
222
|
+
sourceHeight: (_rects$index$height = (_rects$index = rects[index]) === null || _rects$index === void 0 ? void 0 : _rects$index.height) !== null && _rects$index$height !== void 0 ? _rects$index$height : 0,
|
|
223
|
+
itemStrides: itemStrides,
|
|
224
|
+
itemTops: rects.map(function (rect) {
|
|
196
225
|
var _rect$top;
|
|
197
|
-
return (_rect$top = rect
|
|
226
|
+
return (_rect$top = rect === null || rect === void 0 ? void 0 : rect.top) !== null && _rect$top !== void 0 ? _rect$top : 0;
|
|
198
227
|
})
|
|
199
228
|
});
|
|
200
229
|
}
|
|
201
230
|
// Make the entire document a valid drop target so the browser skips
|
|
202
231
|
// its snap-back animation when the cursor is released outside the list.
|
|
203
|
-
|
|
232
|
+
var preventSnapback = function preventSnapback(e) {
|
|
233
|
+
return e.preventDefault();
|
|
234
|
+
};
|
|
204
235
|
document.addEventListener('dragover', preventSnapback);
|
|
205
236
|
documentDragOverRef.current = preventSnapback;
|
|
206
237
|
setDraggingIndex(index);
|
|
207
238
|
setDroppedIndex(null);
|
|
208
239
|
};
|
|
209
|
-
|
|
240
|
+
var clearDragState = function clearDragState() {
|
|
210
241
|
if (documentDragOverRef.current) {
|
|
211
242
|
document.removeEventListener('dragover', documentDragOverRef.current);
|
|
212
243
|
documentDragOverRef.current = null;
|
|
@@ -221,39 +252,39 @@ const CardSortableList = ({
|
|
|
221
252
|
* top positions snapshotted at drag start. Mirrors the midpoint logic
|
|
222
253
|
* previously used in getDropIndex but works without a live event target.
|
|
223
254
|
*/
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
const movingDown = sourceIndex > i;
|
|
232
|
-
const midpoint = itemTops[i] + (movingDown ? itemStrides[i] : itemStrides[i] - sourceHeight);
|
|
255
|
+
var getDropIndexFromCursor = function getDropIndexFromCursor(clientY, m, sourceIndex) {
|
|
256
|
+
var itemTops = m.itemTops,
|
|
257
|
+
itemStrides = m.itemStrides,
|
|
258
|
+
sourceHeight = m.sourceHeight;
|
|
259
|
+
for (var i = 0; i < itemTops.length; i++) {
|
|
260
|
+
var movingDown = sourceIndex > i;
|
|
261
|
+
var midpoint = itemTops[i] + (movingDown ? itemStrides[i] : itemStrides[i] - sourceHeight);
|
|
233
262
|
if (clientY < midpoint) {
|
|
234
263
|
return i;
|
|
235
264
|
}
|
|
236
265
|
}
|
|
237
266
|
return itemTops.length; // below all items
|
|
238
267
|
};
|
|
239
|
-
|
|
268
|
+
var handleDragEnd = function handleDragEnd(event) {
|
|
240
269
|
// Take a local copy of measurements before clearDragState nulls it.
|
|
241
|
-
|
|
242
|
-
|
|
270
|
+
var m = measurements;
|
|
271
|
+
var sourceIndex = draggingIndex;
|
|
243
272
|
clearDragState();
|
|
244
273
|
if (m === null || sourceIndex === null) {
|
|
245
274
|
return;
|
|
246
275
|
}
|
|
247
|
-
|
|
276
|
+
var dropIndex = getDropIndexFromCursor(event.clientY, m, sourceIndex);
|
|
248
277
|
|
|
249
278
|
// Compute the destination index in the post-removal array.
|
|
250
279
|
// After splicing out the dragged item, indices above it shift down by one.
|
|
251
|
-
|
|
280
|
+
var insertIndex = dropIndex > sourceIndex ? dropIndex - 1 : dropIndex;
|
|
252
281
|
if (insertIndex === sourceIndex) {
|
|
253
282
|
return;
|
|
254
283
|
}
|
|
255
|
-
|
|
256
|
-
|
|
284
|
+
var reordered = _toConsumableArray(sortedItems);
|
|
285
|
+
var _reordered$splice3 = reordered.splice(sourceIndex, 1),
|
|
286
|
+
_reordered$splice4 = _slicedToArray(_reordered$splice3, 1),
|
|
287
|
+
moved = _reordered$splice4[0];
|
|
257
288
|
reordered.splice(insertIndex, 0, moved);
|
|
258
289
|
|
|
259
290
|
// First render: show items in their new order with no animation.
|
|
@@ -263,21 +294,21 @@ const CardSortableList = ({
|
|
|
263
294
|
|
|
264
295
|
// Next frame: trigger the drop animation on the newly-positioned item,
|
|
265
296
|
// then call onDragCallback after the animation completes.
|
|
266
|
-
requestAnimationFrame(()
|
|
297
|
+
requestAnimationFrame(function () {
|
|
267
298
|
setDroppedIndex(insertIndex);
|
|
268
|
-
dropAnimationTimer.current = setTimeout(()
|
|
299
|
+
dropAnimationTimer.current = setTimeout(function () {
|
|
269
300
|
setDroppedIndex(null);
|
|
270
301
|
onDragCallback(sourceIndex, insertIndex);
|
|
271
302
|
}, DROP_ANIMATION_DURATION);
|
|
272
303
|
});
|
|
273
304
|
};
|
|
274
|
-
|
|
305
|
+
var handleDragOver = function handleDragOver(event, index) {
|
|
275
306
|
event.preventDefault();
|
|
276
307
|
if (!measurements) {
|
|
277
308
|
return;
|
|
278
309
|
}
|
|
279
|
-
|
|
280
|
-
|
|
310
|
+
var rect = event.currentTarget.getBoundingClientRect();
|
|
311
|
+
var midpoint = rect.top + rect.height / 2;
|
|
281
312
|
setHoverIndex(event.clientY < midpoint ? index : index + 1);
|
|
282
313
|
};
|
|
283
314
|
|
|
@@ -291,7 +322,7 @@ const CardSortableList = ({
|
|
|
291
322
|
* item's stride (height + gap) to either fill the vacated source slot or make
|
|
292
323
|
* room for the incoming gap at the hover position.
|
|
293
324
|
*/
|
|
294
|
-
|
|
325
|
+
var getTranslateY = function getTranslateY(index) {
|
|
295
326
|
var _itemStrides$dragging;
|
|
296
327
|
if (draggingIndex === null || hoverIndex === null || !measurements) {
|
|
297
328
|
return 0;
|
|
@@ -299,11 +330,9 @@ const CardSortableList = ({
|
|
|
299
330
|
if (index === draggingIndex) {
|
|
300
331
|
return 0;
|
|
301
332
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
} = measurements;
|
|
306
|
-
const sourceStride = (_itemStrides$dragging = itemStrides[draggingIndex]) !== null && _itemStrides$dragging !== void 0 ? _itemStrides$dragging : sourceHeight;
|
|
333
|
+
var itemStrides = measurements.itemStrides,
|
|
334
|
+
sourceHeight = measurements.sourceHeight;
|
|
335
|
+
var sourceStride = (_itemStrides$dragging = itemStrides[draggingIndex]) !== null && _itemStrides$dragging !== void 0 ? _itemStrides$dragging : sourceHeight;
|
|
307
336
|
if (hoverIndex > draggingIndex) {
|
|
308
337
|
// Dragging downward: items strictly between source and hover position slide up.
|
|
309
338
|
if (index > draggingIndex && index < hoverIndex) {
|
|
@@ -315,7 +344,7 @@ const CardSortableList = ({
|
|
|
315
344
|
}
|
|
316
345
|
return 0;
|
|
317
346
|
};
|
|
318
|
-
|
|
347
|
+
var isDragging = draggingIndex !== null;
|
|
319
348
|
return /*#__PURE__*/_jsx(VStack, {
|
|
320
349
|
ref: listRef,
|
|
321
350
|
className: classNames('newspack-card--core--sortable-list', disabled && 'newspack-card--core--sortable-list__is-disabled', isDragging && 'newspack-card--core--sortable-list__is-dragging'),
|
|
@@ -323,12 +352,12 @@ const CardSortableList = ({
|
|
|
323
352
|
height: measurements.lockedHeight
|
|
324
353
|
} : undefined,
|
|
325
354
|
spacing: 4,
|
|
326
|
-
children: sortedItems.map((item, index)
|
|
327
|
-
|
|
355
|
+
children: sortedItems.map(function (item, index) {
|
|
356
|
+
var translateY = getTranslateY(index);
|
|
328
357
|
return /*#__PURE__*/_jsx(Disabled, {
|
|
329
358
|
isDisabled: disabled,
|
|
330
359
|
children: /*#__PURE__*/_jsx("div", {
|
|
331
|
-
ref: el
|
|
360
|
+
ref: function ref(el) {
|
|
332
361
|
itemRefs.current[index] = el;
|
|
333
362
|
},
|
|
334
363
|
className: classNames('newspack-card--core--sortable-list__item', {
|
|
@@ -336,42 +365,57 @@ const CardSortableList = ({
|
|
|
336
365
|
'is-dropped': droppedIndex === index
|
|
337
366
|
}),
|
|
338
367
|
style: translateY ? {
|
|
339
|
-
transform:
|
|
368
|
+
transform: "translateY(".concat(translateY, "px)")
|
|
340
369
|
} : {
|
|
341
370
|
transition: !isDragging ? 'none' : undefined
|
|
342
371
|
},
|
|
343
|
-
id:
|
|
344
|
-
onDragOver:
|
|
372
|
+
id: "draggable-card-".concat(index),
|
|
373
|
+
onDragOver: function onDragOver(e) {
|
|
374
|
+
return handleDragOver(e, index);
|
|
375
|
+
},
|
|
345
376
|
children: /*#__PURE__*/_jsx(Draggable, {
|
|
346
377
|
transferData: {},
|
|
347
378
|
cloneClassname: "newspack-card--core--sortable-list__item__clone",
|
|
348
|
-
elementId:
|
|
349
|
-
onDragStart: ()
|
|
379
|
+
elementId: "draggable-card-".concat(index),
|
|
380
|
+
onDragStart: function onDragStart() {
|
|
381
|
+
return handleDragStart(index);
|
|
382
|
+
},
|
|
350
383
|
onDragEnd: handleDragEnd,
|
|
351
384
|
appendToOwnerDocument: true,
|
|
352
|
-
children: ({
|
|
353
|
-
onDraggableStart,
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
385
|
+
children: function children(_ref2) {
|
|
386
|
+
var onDraggableStart = _ref2.onDraggableStart,
|
|
387
|
+
onDraggableEnd = _ref2.onDraggableEnd;
|
|
388
|
+
return /*#__PURE__*/_jsx(Card, {
|
|
389
|
+
isSmall: true,
|
|
390
|
+
draggable: true,
|
|
391
|
+
onDragStart: onDraggableStart,
|
|
392
|
+
onDragEnd: onDraggableEnd,
|
|
393
|
+
__experimentalCoreCard: true,
|
|
394
|
+
__experimentalCoreProps: _objectSpread(_objectSpread({
|
|
395
|
+
header: /*#__PURE__*/_jsxs(_Fragment, {
|
|
396
|
+
children: [/*#__PURE__*/_jsxs("h3", {
|
|
397
|
+
children: [item.title, /*#__PURE__*/_jsx(Badge, {
|
|
398
|
+
level: item.badgeLevel,
|
|
399
|
+
text: item.badgeText
|
|
400
|
+
})]
|
|
401
|
+
}), item.description && /*#__PURE__*/_jsx("p", {
|
|
402
|
+
children: item.description
|
|
403
|
+
})]
|
|
404
|
+
}),
|
|
405
|
+
isDraggable: true,
|
|
406
|
+
isFirstTarget: index === 0,
|
|
407
|
+
isLastTarget: index === sortedItems.length - 1,
|
|
408
|
+
dragIndex: index,
|
|
409
|
+
onDragCallback: handleButtonMove
|
|
410
|
+
}, item.onToggleChange !== undefined && {
|
|
411
|
+
actionType: 'toggle',
|
|
412
|
+
isActive: item.toggleChecked,
|
|
413
|
+
onToggle: item.onToggleChange
|
|
414
|
+
}), item.actions !== undefined && {
|
|
415
|
+
actions: item.actions
|
|
416
|
+
})
|
|
417
|
+
});
|
|
418
|
+
}
|
|
375
419
|
})
|
|
376
420
|
})
|
|
377
421
|
}, item.id);
|