@wordpress/components 28.8.1 → 28.8.3
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 +9 -0
- package/build/guide/index.js +1 -0
- package/build/guide/index.js.map +1 -1
- package/build/navigator/navigator-provider/component.js +3 -4
- package/build/navigator/navigator-provider/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
- package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
- package/build/tools-panel/tools-panel/hook.js +183 -109
- package/build/tools-panel/tools-panel/hook.js.map +1 -1
- package/build/utils/config-values.js +1 -12
- package/build/utils/config-values.js.map +1 -1
- package/build-module/guide/index.js +1 -0
- package/build-module/guide/index.js.map +1 -1
- package/build-module/navigator/navigator-provider/component.js +3 -4
- package/build-module/navigator/navigator-provider/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
- package/build-module/tools-panel/tools-panel/hook.js +184 -110
- package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
- package/build-module/utils/config-values.js +1 -12
- package/build-module/utils/config-values.js.map +1 -1
- package/build-types/guide/index.d.ts.map +1 -1
- package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
- package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
- package/build-types/utils/config-values.d.ts +0 -10
- package/package.json +12 -12
- package/src/guide/index.tsx +1 -0
- package/src/navigator/navigator-provider/component.tsx +3 -2
- package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +1 -1
- package/src/tools-panel/tools-panel/hook.ts +221 -163
- package/src/utils/config-values.js +1 -15
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -19,20 +19,27 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
const DEFAULT_COLUMNS = 2;
|
|
22
|
+
function emptyMenuItems() {
|
|
23
|
+
return {
|
|
24
|
+
default: {},
|
|
25
|
+
optional: {}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function emptyState() {
|
|
29
|
+
return {
|
|
30
|
+
panelItems: [],
|
|
31
|
+
menuItemOrder: [],
|
|
32
|
+
menuItems: emptyMenuItems()
|
|
33
|
+
};
|
|
34
|
+
}
|
|
22
35
|
const generateMenuItems = ({
|
|
23
36
|
panelItems,
|
|
24
37
|
shouldReset,
|
|
25
38
|
currentMenuItems,
|
|
26
39
|
menuItemOrder
|
|
27
40
|
}) => {
|
|
28
|
-
const newMenuItems =
|
|
29
|
-
|
|
30
|
-
optional: {}
|
|
31
|
-
};
|
|
32
|
-
const menuItems = {
|
|
33
|
-
default: {},
|
|
34
|
-
optional: {}
|
|
35
|
-
};
|
|
41
|
+
const newMenuItems = emptyMenuItems();
|
|
42
|
+
const menuItems = emptyMenuItems();
|
|
36
43
|
panelItems.forEach(({
|
|
37
44
|
hasValue,
|
|
38
45
|
isShownByDefault,
|
|
@@ -71,7 +78,128 @@ const generateMenuItems = ({
|
|
|
71
78
|
});
|
|
72
79
|
return menuItems;
|
|
73
80
|
};
|
|
74
|
-
|
|
81
|
+
function panelItemsReducer(panelItems, action) {
|
|
82
|
+
switch (action.type) {
|
|
83
|
+
case 'REGISTER_PANEL':
|
|
84
|
+
{
|
|
85
|
+
const newItems = [...panelItems];
|
|
86
|
+
// If an item with this label has already been registered, remove it
|
|
87
|
+
// first. This can happen when an item is moved between the default
|
|
88
|
+
// and optional groups.
|
|
89
|
+
const existingIndex = newItems.findIndex(oldItem => oldItem.label === action.item.label);
|
|
90
|
+
if (existingIndex !== -1) {
|
|
91
|
+
newItems.splice(existingIndex, 1);
|
|
92
|
+
}
|
|
93
|
+
newItems.push(action.item);
|
|
94
|
+
return newItems;
|
|
95
|
+
}
|
|
96
|
+
case 'UNREGISTER_PANEL':
|
|
97
|
+
{
|
|
98
|
+
const index = panelItems.findIndex(item => item.label === action.label);
|
|
99
|
+
if (index !== -1) {
|
|
100
|
+
const newItems = [...panelItems];
|
|
101
|
+
newItems.splice(index, 1);
|
|
102
|
+
return newItems;
|
|
103
|
+
}
|
|
104
|
+
return panelItems;
|
|
105
|
+
}
|
|
106
|
+
default:
|
|
107
|
+
return panelItems;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function menuItemOrderReducer(menuItemOrder, action) {
|
|
111
|
+
switch (action.type) {
|
|
112
|
+
case 'REGISTER_PANEL':
|
|
113
|
+
{
|
|
114
|
+
// Track the initial order of item registration. This is used for
|
|
115
|
+
// maintaining menu item order later.
|
|
116
|
+
if (menuItemOrder.includes(action.item.label)) {
|
|
117
|
+
return menuItemOrder;
|
|
118
|
+
}
|
|
119
|
+
return [...menuItemOrder, action.item.label];
|
|
120
|
+
}
|
|
121
|
+
default:
|
|
122
|
+
return menuItemOrder;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function menuItemsReducer(state, action) {
|
|
126
|
+
switch (action.type) {
|
|
127
|
+
case 'REGISTER_PANEL':
|
|
128
|
+
case 'UNREGISTER_PANEL':
|
|
129
|
+
// generate new menu items from original `menuItems` and updated `panelItems` and `menuItemOrder`
|
|
130
|
+
return generateMenuItems({
|
|
131
|
+
currentMenuItems: state.menuItems,
|
|
132
|
+
panelItems: state.panelItems,
|
|
133
|
+
menuItemOrder: state.menuItemOrder,
|
|
134
|
+
shouldReset: false
|
|
135
|
+
});
|
|
136
|
+
case 'RESET_ALL':
|
|
137
|
+
return generateMenuItems({
|
|
138
|
+
panelItems: state.panelItems,
|
|
139
|
+
menuItemOrder: state.menuItemOrder,
|
|
140
|
+
shouldReset: true
|
|
141
|
+
});
|
|
142
|
+
case 'UPDATE_VALUE':
|
|
143
|
+
{
|
|
144
|
+
const oldValue = state.menuItems[action.group][action.label];
|
|
145
|
+
if (action.value === oldValue) {
|
|
146
|
+
return state.menuItems;
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
...state.menuItems,
|
|
150
|
+
[action.group]: {
|
|
151
|
+
...state.menuItems[action.group],
|
|
152
|
+
[action.label]: action.value
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
case 'TOGGLE_VALUE':
|
|
157
|
+
{
|
|
158
|
+
const currentItem = state.panelItems.find(item => item.label === action.label);
|
|
159
|
+
if (!currentItem) {
|
|
160
|
+
return state.menuItems;
|
|
161
|
+
}
|
|
162
|
+
const menuGroup = currentItem.isShownByDefault ? 'default' : 'optional';
|
|
163
|
+
const newMenuItems = {
|
|
164
|
+
...state.menuItems,
|
|
165
|
+
[menuGroup]: {
|
|
166
|
+
...state.menuItems[menuGroup],
|
|
167
|
+
[action.label]: !state.menuItems[menuGroup][action.label]
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
return newMenuItems;
|
|
171
|
+
}
|
|
172
|
+
default:
|
|
173
|
+
return state.menuItems;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function panelReducer(state, action) {
|
|
177
|
+
const panelItems = panelItemsReducer(state.panelItems, action);
|
|
178
|
+
const menuItemOrder = menuItemOrderReducer(state.menuItemOrder, action);
|
|
179
|
+
// `menuItemsReducer` is a bit unusual because it generates new state from original `menuItems`
|
|
180
|
+
// and the updated `panelItems` and `menuItemOrder`.
|
|
181
|
+
const menuItems = menuItemsReducer({
|
|
182
|
+
panelItems,
|
|
183
|
+
menuItemOrder,
|
|
184
|
+
menuItems: state.menuItems
|
|
185
|
+
}, action);
|
|
186
|
+
return {
|
|
187
|
+
panelItems,
|
|
188
|
+
menuItemOrder,
|
|
189
|
+
menuItems
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function resetAllFiltersReducer(filters, action) {
|
|
193
|
+
switch (action.type) {
|
|
194
|
+
case 'REGISTER':
|
|
195
|
+
return [...filters, action.filter];
|
|
196
|
+
case 'UNREGISTER':
|
|
197
|
+
return filters.filter(f => f !== action.filter);
|
|
198
|
+
default:
|
|
199
|
+
return filters;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const isMenuItemTypeEmpty = obj => Object.keys(obj).length === 0;
|
|
75
203
|
function useToolsPanel(props) {
|
|
76
204
|
const {
|
|
77
205
|
className,
|
|
@@ -98,32 +226,18 @@ function useToolsPanel(props) {
|
|
|
98
226
|
}, [wasResetting]);
|
|
99
227
|
|
|
100
228
|
// Allow panel items to register themselves.
|
|
101
|
-
const [
|
|
102
|
-
|
|
103
|
-
|
|
229
|
+
const [{
|
|
230
|
+
panelItems,
|
|
231
|
+
menuItems
|
|
232
|
+
}, panelDispatch] = (0, _element.useReducer)(panelReducer, undefined, emptyState);
|
|
233
|
+
const [resetAllFilters, dispatchResetAllFilters] = (0, _element.useReducer)(resetAllFiltersReducer, []);
|
|
104
234
|
const registerPanelItem = (0, _element.useCallback)(item => {
|
|
105
235
|
// Add item to panel items.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// first. This can happen when an item is moved between the default
|
|
110
|
-
// and optional groups.
|
|
111
|
-
const existingIndex = newItems.findIndex(oldItem => oldItem.label === item.label);
|
|
112
|
-
if (existingIndex !== -1) {
|
|
113
|
-
newItems.splice(existingIndex, 1);
|
|
114
|
-
}
|
|
115
|
-
return [...newItems, item];
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// Track the initial order of item registration. This is used for
|
|
119
|
-
// maintaining menu item order later.
|
|
120
|
-
setMenuItemOrder(items => {
|
|
121
|
-
if (items.includes(item.label)) {
|
|
122
|
-
return items;
|
|
123
|
-
}
|
|
124
|
-
return [...items, item.label];
|
|
236
|
+
panelDispatch({
|
|
237
|
+
type: 'REGISTER_PANEL',
|
|
238
|
+
item
|
|
125
239
|
});
|
|
126
|
-
}, [
|
|
240
|
+
}, []);
|
|
127
241
|
|
|
128
242
|
// Panels need to deregister on unmount to avoid orphans in menu state.
|
|
129
243
|
// This is an issue when panel items are being injected via SlotFills.
|
|
@@ -132,96 +246,58 @@ function useToolsPanel(props) {
|
|
|
132
246
|
// controls, e.g. both panels have a "padding" control, the
|
|
133
247
|
// deregistration of the first panel doesn't occur until after the
|
|
134
248
|
// registration of the next.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (index !== -1) {
|
|
139
|
-
newItems.splice(index, 1);
|
|
140
|
-
}
|
|
141
|
-
return newItems;
|
|
142
|
-
});
|
|
143
|
-
}, [setPanelItems]);
|
|
144
|
-
const registerResetAllFilter = (0, _element.useCallback)(newFilter => {
|
|
145
|
-
setResetAllFilters(filters => {
|
|
146
|
-
return [...filters, newFilter];
|
|
249
|
+
panelDispatch({
|
|
250
|
+
type: 'UNREGISTER_PANEL',
|
|
251
|
+
label
|
|
147
252
|
});
|
|
148
|
-
}, [
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
253
|
+
}, []);
|
|
254
|
+
const registerResetAllFilter = (0, _element.useCallback)(filter => {
|
|
255
|
+
dispatchResetAllFilters({
|
|
256
|
+
type: 'REGISTER',
|
|
257
|
+
filter
|
|
152
258
|
});
|
|
153
|
-
}, [
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
optional: {}
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
// Setup menuItems state as panel items register themselves.
|
|
162
|
-
(0, _element.useEffect)(() => {
|
|
163
|
-
setMenuItems(prevState => {
|
|
164
|
-
const items = generateMenuItems({
|
|
165
|
-
panelItems,
|
|
166
|
-
shouldReset: false,
|
|
167
|
-
currentMenuItems: prevState,
|
|
168
|
-
menuItemOrder
|
|
169
|
-
});
|
|
170
|
-
return items;
|
|
259
|
+
}, []);
|
|
260
|
+
const deregisterResetAllFilter = (0, _element.useCallback)(filter => {
|
|
261
|
+
dispatchResetAllFilters({
|
|
262
|
+
type: 'UNREGISTER',
|
|
263
|
+
filter
|
|
171
264
|
});
|
|
172
|
-
}, [
|
|
265
|
+
}, []);
|
|
173
266
|
|
|
174
267
|
// Updates the status of the panel’s menu items. For default items the
|
|
175
268
|
// value represents whether it differs from the default and for optional
|
|
176
269
|
// items whether the item is shown.
|
|
177
270
|
const flagItemCustomization = (0, _element.useCallback)((value, label, group = 'default') => {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
[label]: value
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
return newState;
|
|
271
|
+
panelDispatch({
|
|
272
|
+
type: 'UPDATE_VALUE',
|
|
273
|
+
group,
|
|
274
|
+
label,
|
|
275
|
+
value
|
|
187
276
|
});
|
|
188
|
-
}, [
|
|
277
|
+
}, []);
|
|
189
278
|
|
|
190
279
|
// Whether all optional menu items are hidden or not must be tracked
|
|
191
280
|
// in order to later determine if the panel display is empty and handle
|
|
192
281
|
// conditional display of a plus icon to indicate the presence of further
|
|
193
282
|
// menu items.
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const allControlsHidden = !Object.entries(menuItems.optional).some(([, isSelected]) => isSelected);
|
|
198
|
-
setAreAllOptionalControlsHidden(allControlsHidden);
|
|
199
|
-
}
|
|
200
|
-
}, [menuItems, setAreAllOptionalControlsHidden]);
|
|
283
|
+
const areAllOptionalControlsHidden = (0, _element.useMemo)(() => {
|
|
284
|
+
return isMenuItemTypeEmpty(menuItems.default) && !isMenuItemTypeEmpty(menuItems.optional) && Object.values(menuItems.optional).every(isSelected => !isSelected);
|
|
285
|
+
}, [menuItems]);
|
|
201
286
|
const cx = (0, _useCx.useCx)();
|
|
202
287
|
const classes = (0, _element.useMemo)(() => {
|
|
203
288
|
const wrapperStyle = hasInnerWrapper && styles.ToolsPanelWithInnerWrapper(DEFAULT_COLUMNS);
|
|
204
|
-
const emptyStyle =
|
|
289
|
+
const emptyStyle = areAllOptionalControlsHidden && styles.ToolsPanelHiddenInnerWrapper;
|
|
205
290
|
return cx(styles.ToolsPanel(DEFAULT_COLUMNS), wrapperStyle, emptyStyle, className);
|
|
206
|
-
}, [areAllOptionalControlsHidden, className, cx, hasInnerWrapper
|
|
291
|
+
}, [areAllOptionalControlsHidden, className, cx, hasInnerWrapper]);
|
|
207
292
|
|
|
208
293
|
// Toggle the checked state of a menu item which is then used to determine
|
|
209
294
|
// display of the item within the panel.
|
|
210
295
|
const toggleItem = (0, _element.useCallback)(label => {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
const newMenuItems = {
|
|
217
|
-
...menuItems,
|
|
218
|
-
[menuGroup]: {
|
|
219
|
-
...menuItems[menuGroup],
|
|
220
|
-
[label]: !menuItems[menuGroup][label]
|
|
221
|
-
}
|
|
222
|
-
};
|
|
223
|
-
setMenuItems(newMenuItems);
|
|
224
|
-
}, [menuItems, panelItems, setMenuItems]);
|
|
296
|
+
panelDispatch({
|
|
297
|
+
type: 'TOGGLE_VALUE',
|
|
298
|
+
label
|
|
299
|
+
});
|
|
300
|
+
}, []);
|
|
225
301
|
|
|
226
302
|
// Resets display of children and executes resetAll callback if available.
|
|
227
303
|
const resetAllItems = (0, _element.useCallback)(() => {
|
|
@@ -231,30 +307,28 @@ function useToolsPanel(props) {
|
|
|
231
307
|
}
|
|
232
308
|
|
|
233
309
|
// Turn off display of all non-default items.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
menuItemOrder,
|
|
237
|
-
shouldReset: true
|
|
310
|
+
panelDispatch({
|
|
311
|
+
type: 'RESET_ALL'
|
|
238
312
|
});
|
|
239
|
-
|
|
240
|
-
}, [panelItems, resetAllFilters, resetAll, setMenuItems, menuItemOrder]);
|
|
313
|
+
}, [resetAllFilters, resetAll]);
|
|
241
314
|
|
|
242
315
|
// Assist ItemGroup styling when there are potentially hidden placeholder
|
|
243
316
|
// items by identifying first & last items that are toggled on for display.
|
|
244
317
|
const getFirstVisibleItemLabel = items => {
|
|
245
318
|
const optionalItems = menuItems.optional || {};
|
|
246
|
-
const firstItem = items.find(item => item.isShownByDefault ||
|
|
319
|
+
const firstItem = items.find(item => item.isShownByDefault || optionalItems[item.label]);
|
|
247
320
|
return firstItem?.label;
|
|
248
321
|
};
|
|
249
322
|
const firstDisplayedItem = getFirstVisibleItemLabel(panelItems);
|
|
250
323
|
const lastDisplayedItem = getFirstVisibleItemLabel([...panelItems].reverse());
|
|
324
|
+
const hasMenuItems = panelItems.length > 0;
|
|
251
325
|
const panelContext = (0, _element.useMemo)(() => ({
|
|
252
326
|
areAllOptionalControlsHidden,
|
|
253
327
|
deregisterPanelItem,
|
|
254
328
|
deregisterResetAllFilter,
|
|
255
329
|
firstDisplayedItem,
|
|
256
330
|
flagItemCustomization,
|
|
257
|
-
hasMenuItems
|
|
331
|
+
hasMenuItems,
|
|
258
332
|
isResetting: isResettingRef.current,
|
|
259
333
|
lastDisplayedItem,
|
|
260
334
|
menuItems,
|
|
@@ -264,7 +338,7 @@ function useToolsPanel(props) {
|
|
|
264
338
|
shouldRenderPlaceholderItems,
|
|
265
339
|
__experimentalFirstVisibleItemClass,
|
|
266
340
|
__experimentalLastVisibleItemClass
|
|
267
|
-
}), [areAllOptionalControlsHidden, deregisterPanelItem, deregisterResetAllFilter, firstDisplayedItem, flagItemCustomization, lastDisplayedItem, menuItems, panelId,
|
|
341
|
+
}), [areAllOptionalControlsHidden, deregisterPanelItem, deregisterResetAllFilter, firstDisplayedItem, flagItemCustomization, lastDisplayedItem, menuItems, panelId, hasMenuItems, registerResetAllFilter, registerPanelItem, shouldRenderPlaceholderItems, __experimentalFirstVisibleItemClass, __experimentalLastVisibleItemClass]);
|
|
268
342
|
return {
|
|
269
343
|
...otherProps,
|
|
270
344
|
headingLevel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_element","require","styles","_interopRequireWildcard","_context","_useCx","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DEFAULT_COLUMNS","generateMenuItems","panelItems","shouldReset","currentMenuItems","menuItemOrder","newMenuItems","optional","menuItems","forEach","hasValue","isShownByDefault","label","group","existingItemValue","value","key","keys","isMenuItemTypeEmpty","obj","length","useToolsPanel","props","className","headingLevel","resetAll","panelId","hasInnerWrapper","shouldRenderPlaceholderItems","__experimentalFirstVisibleItemClass","__experimentalLastVisibleItemClass","otherProps","useContextSystem","isResettingRef","useRef","wasResetting","current","useEffect","setPanelItems","useState","setMenuItemOrder","resetAllFilters","setResetAllFilters","registerPanelItem","useCallback","item","items","newItems","existingIndex","findIndex","oldItem","splice","includes","deregisterPanelItem","index","registerResetAllFilter","newFilter","filters","deregisterResetAllFilter","filterToRemove","filter","setMenuItems","prevState","flagItemCustomization","newState","areAllOptionalControlsHidden","setAreAllOptionalControlsHidden","allControlsHidden","entries","some","isSelected","cx","useCx","classes","useMemo","wrapperStyle","ToolsPanelWithInnerWrapper","emptyStyle","ToolsPanelHiddenInnerWrapper","ToolsPanel","toggleItem","currentItem","find","menuGroup","resetAllItems","resetMenuItems","getFirstVisibleItemLabel","optionalItems","firstItem","firstDisplayedItem","lastDisplayedItem","reverse","panelContext","hasMenuItems","isResetting"],"sources":["@wordpress/components/src/tools-panel/tools-panel/hook.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport * as styles from '../styles';\nimport type { WordPressComponentProps } from '../../context';\nimport { useContextSystem } from '../../context';\nimport { useCx } from '../../utils/hooks/use-cx';\nimport type {\n\tToolsPanelItem,\n\tToolsPanelMenuItemKey,\n\tToolsPanelMenuItems,\n\tToolsPanelMenuItemsConfig,\n\tToolsPanelProps,\n\tResetAllFilter,\n} from '../types';\n\nconst DEFAULT_COLUMNS = 2;\n\nconst generateMenuItems = ( {\n\tpanelItems,\n\tshouldReset,\n\tcurrentMenuItems,\n\tmenuItemOrder,\n}: ToolsPanelMenuItemsConfig ) => {\n\tconst newMenuItems: ToolsPanelMenuItems = { default: {}, optional: {} };\n\tconst menuItems: ToolsPanelMenuItems = { default: {}, optional: {} };\n\n\tpanelItems.forEach( ( { hasValue, isShownByDefault, label } ) => {\n\t\tconst group = isShownByDefault ? 'default' : 'optional';\n\n\t\t// If a menu item for this label has already been flagged as customized\n\t\t// (for default controls), or toggled on (for optional controls), do not\n\t\t// overwrite its value as those controls would lose that state.\n\t\tconst existingItemValue = currentMenuItems?.[ group ]?.[ label ];\n\t\tconst value = existingItemValue ? existingItemValue : hasValue();\n\n\t\tnewMenuItems[ group ][ label ] = shouldReset ? false : value;\n\t} );\n\n\t// Loop the known, previously registered items first to maintain menu order.\n\tmenuItemOrder.forEach( ( key ) => {\n\t\tif ( newMenuItems.default.hasOwnProperty( key ) ) {\n\t\t\tmenuItems.default[ key ] = newMenuItems.default[ key ];\n\t\t}\n\n\t\tif ( newMenuItems.optional.hasOwnProperty( key ) ) {\n\t\t\tmenuItems.optional[ key ] = newMenuItems.optional[ key ];\n\t\t}\n\t} );\n\n\t// Loop newMenuItems object adding any that aren't in the known items order.\n\tObject.keys( newMenuItems.default ).forEach( ( key ) => {\n\t\tif ( ! menuItems.default.hasOwnProperty( key ) ) {\n\t\t\tmenuItems.default[ key ] = newMenuItems.default[ key ];\n\t\t}\n\t} );\n\n\tObject.keys( newMenuItems.optional ).forEach( ( key ) => {\n\t\tif ( ! menuItems.optional.hasOwnProperty( key ) ) {\n\t\t\tmenuItems.optional[ key ] = newMenuItems.optional[ key ];\n\t\t}\n\t} );\n\n\treturn menuItems;\n};\n\nconst isMenuItemTypeEmpty = (\n\tobj?: ToolsPanelMenuItems[ ToolsPanelMenuItemKey ]\n) => obj && Object.keys( obj ).length === 0;\n\nexport function useToolsPanel(\n\tprops: WordPressComponentProps< ToolsPanelProps, 'div' >\n) {\n\tconst {\n\t\tclassName,\n\t\theadingLevel = 2,\n\t\tresetAll,\n\t\tpanelId,\n\t\thasInnerWrapper = false,\n\t\tshouldRenderPlaceholderItems = false,\n\t\t__experimentalFirstVisibleItemClass,\n\t\t__experimentalLastVisibleItemClass,\n\t\t...otherProps\n\t} = useContextSystem( props, 'ToolsPanel' );\n\n\tconst isResettingRef = useRef( false );\n\tconst wasResetting = isResettingRef.current;\n\n\t// `isResettingRef` is cleared via this hook to effectively batch together\n\t// the resetAll task. Without this, the flag is cleared after the first\n\t// control updates and forces a rerender with subsequent controls then\n\t// believing they need to reset, unfortunately using stale data.\n\tuseEffect( () => {\n\t\tif ( wasResetting ) {\n\t\t\tisResettingRef.current = false;\n\t\t}\n\t}, [ wasResetting ] );\n\n\t// Allow panel items to register themselves.\n\tconst [ panelItems, setPanelItems ] = useState< ToolsPanelItem[] >( [] );\n\tconst [ menuItemOrder, setMenuItemOrder ] = useState< string[] >( [] );\n\tconst [ resetAllFilters, setResetAllFilters ] = useState<\n\t\tResetAllFilter[]\n\t>( [] );\n\n\tconst registerPanelItem = useCallback(\n\t\t( item: ToolsPanelItem ) => {\n\t\t\t// Add item to panel items.\n\t\t\tsetPanelItems( ( items ) => {\n\t\t\t\tconst newItems = [ ...items ];\n\t\t\t\t// If an item with this label has already been registered, remove it\n\t\t\t\t// first. This can happen when an item is moved between the default\n\t\t\t\t// and optional groups.\n\t\t\t\tconst existingIndex = newItems.findIndex(\n\t\t\t\t\t( oldItem ) => oldItem.label === item.label\n\t\t\t\t);\n\t\t\t\tif ( existingIndex !== -1 ) {\n\t\t\t\t\tnewItems.splice( existingIndex, 1 );\n\t\t\t\t}\n\t\t\t\treturn [ ...newItems, item ];\n\t\t\t} );\n\n\t\t\t// Track the initial order of item registration. This is used for\n\t\t\t// maintaining menu item order later.\n\t\t\tsetMenuItemOrder( ( items ) => {\n\t\t\t\tif ( items.includes( item.label ) ) {\n\t\t\t\t\treturn items;\n\t\t\t\t}\n\n\t\t\t\treturn [ ...items, item.label ];\n\t\t\t} );\n\t\t},\n\t\t[ setPanelItems, setMenuItemOrder ]\n\t);\n\n\t// Panels need to deregister on unmount to avoid orphans in menu state.\n\t// This is an issue when panel items are being injected via SlotFills.\n\tconst deregisterPanelItem = useCallback(\n\t\t( label: string ) => {\n\t\t\t// When switching selections between components injecting matching\n\t\t\t// controls, e.g. both panels have a \"padding\" control, the\n\t\t\t// deregistration of the first panel doesn't occur until after the\n\t\t\t// registration of the next.\n\t\t\tsetPanelItems( ( items ) => {\n\t\t\t\tconst newItems = [ ...items ];\n\t\t\t\tconst index = newItems.findIndex(\n\t\t\t\t\t( item ) => item.label === label\n\t\t\t\t);\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\tnewItems.splice( index, 1 );\n\t\t\t\t}\n\t\t\t\treturn newItems;\n\t\t\t} );\n\t\t},\n\t\t[ setPanelItems ]\n\t);\n\n\tconst registerResetAllFilter = useCallback(\n\t\t( newFilter: ResetAllFilter ) => {\n\t\t\tsetResetAllFilters( ( filters ) => {\n\t\t\t\treturn [ ...filters, newFilter ];\n\t\t\t} );\n\t\t},\n\t\t[ setResetAllFilters ]\n\t);\n\n\tconst deregisterResetAllFilter = useCallback(\n\t\t( filterToRemove: ResetAllFilter ) => {\n\t\t\tsetResetAllFilters( ( filters ) => {\n\t\t\t\treturn filters.filter(\n\t\t\t\t\t( filter ) => filter !== filterToRemove\n\t\t\t\t);\n\t\t\t} );\n\t\t},\n\t\t[ setResetAllFilters ]\n\t);\n\n\t// Manage and share display state of menu items representing child controls.\n\tconst [ menuItems, setMenuItems ] = useState< ToolsPanelMenuItems >( {\n\t\tdefault: {},\n\t\toptional: {},\n\t} );\n\n\t// Setup menuItems state as panel items register themselves.\n\tuseEffect( () => {\n\t\tsetMenuItems( ( prevState ) => {\n\t\t\tconst items = generateMenuItems( {\n\t\t\t\tpanelItems,\n\t\t\t\tshouldReset: false,\n\t\t\t\tcurrentMenuItems: prevState,\n\t\t\t\tmenuItemOrder,\n\t\t\t} );\n\t\t\treturn items;\n\t\t} );\n\t}, [ panelItems, setMenuItems, menuItemOrder ] );\n\n\t// Updates the status of the panel’s menu items. For default items the\n\t// value represents whether it differs from the default and for optional\n\t// items whether the item is shown.\n\tconst flagItemCustomization = useCallback(\n\t\t(\n\t\t\tvalue: boolean,\n\t\t\tlabel: string,\n\t\t\tgroup: ToolsPanelMenuItemKey = 'default'\n\t\t) => {\n\t\t\tsetMenuItems( ( items ) => {\n\t\t\t\tconst newState = {\n\t\t\t\t\t...items,\n\t\t\t\t\t[ group ]: {\n\t\t\t\t\t\t...items[ group ],\n\t\t\t\t\t\t[ label ]: value,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn newState;\n\t\t\t} );\n\t\t},\n\t\t[ setMenuItems ]\n\t);\n\n\t// Whether all optional menu items are hidden or not must be tracked\n\t// in order to later determine if the panel display is empty and handle\n\t// conditional display of a plus icon to indicate the presence of further\n\t// menu items.\n\tconst [ areAllOptionalControlsHidden, setAreAllOptionalControlsHidden ] =\n\t\tuseState( false );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\tisMenuItemTypeEmpty( menuItems?.default ) &&\n\t\t\t! isMenuItemTypeEmpty( menuItems?.optional )\n\t\t) {\n\t\t\tconst allControlsHidden = ! Object.entries(\n\t\t\t\tmenuItems.optional\n\t\t\t).some( ( [ , isSelected ] ) => isSelected );\n\t\t\tsetAreAllOptionalControlsHidden( allControlsHidden );\n\t\t}\n\t}, [ menuItems, setAreAllOptionalControlsHidden ] );\n\n\tconst cx = useCx();\n\tconst classes = useMemo( () => {\n\t\tconst wrapperStyle =\n\t\t\thasInnerWrapper &&\n\t\t\tstyles.ToolsPanelWithInnerWrapper( DEFAULT_COLUMNS );\n\t\tconst emptyStyle =\n\t\t\tisMenuItemTypeEmpty( menuItems?.default ) &&\n\t\t\tareAllOptionalControlsHidden &&\n\t\t\tstyles.ToolsPanelHiddenInnerWrapper;\n\n\t\treturn cx(\n\t\t\tstyles.ToolsPanel( DEFAULT_COLUMNS ),\n\t\t\twrapperStyle,\n\t\t\temptyStyle,\n\t\t\tclassName\n\t\t);\n\t}, [\n\t\tareAllOptionalControlsHidden,\n\t\tclassName,\n\t\tcx,\n\t\thasInnerWrapper,\n\t\tmenuItems,\n\t] );\n\n\t// Toggle the checked state of a menu item which is then used to determine\n\t// display of the item within the panel.\n\tconst toggleItem = useCallback(\n\t\t( label: string ) => {\n\t\t\tconst currentItem = panelItems.find(\n\t\t\t\t( item ) => item.label === label\n\t\t\t);\n\n\t\t\tif ( ! currentItem ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst menuGroup = currentItem.isShownByDefault\n\t\t\t\t? 'default'\n\t\t\t\t: 'optional';\n\n\t\t\tconst newMenuItems = {\n\t\t\t\t...menuItems,\n\t\t\t\t[ menuGroup ]: {\n\t\t\t\t\t...menuItems[ menuGroup ],\n\t\t\t\t\t[ label ]: ! menuItems[ menuGroup ][ label ],\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tsetMenuItems( newMenuItems );\n\t\t},\n\t\t[ menuItems, panelItems, setMenuItems ]\n\t);\n\n\t// Resets display of children and executes resetAll callback if available.\n\tconst resetAllItems = useCallback( () => {\n\t\tif ( typeof resetAll === 'function' ) {\n\t\t\tisResettingRef.current = true;\n\t\t\tresetAll( resetAllFilters );\n\t\t}\n\n\t\t// Turn off display of all non-default items.\n\t\tconst resetMenuItems = generateMenuItems( {\n\t\t\tpanelItems,\n\t\t\tmenuItemOrder,\n\t\t\tshouldReset: true,\n\t\t} );\n\t\tsetMenuItems( resetMenuItems );\n\t}, [ panelItems, resetAllFilters, resetAll, setMenuItems, menuItemOrder ] );\n\n\t// Assist ItemGroup styling when there are potentially hidden placeholder\n\t// items by identifying first & last items that are toggled on for display.\n\tconst getFirstVisibleItemLabel = ( items: ToolsPanelItem[] ) => {\n\t\tconst optionalItems = menuItems.optional || {};\n\t\tconst firstItem = items.find(\n\t\t\t( item ) => item.isShownByDefault || !! optionalItems[ item.label ]\n\t\t);\n\n\t\treturn firstItem?.label;\n\t};\n\n\tconst firstDisplayedItem = getFirstVisibleItemLabel( panelItems );\n\tconst lastDisplayedItem = getFirstVisibleItemLabel(\n\t\t[ ...panelItems ].reverse()\n\t);\n\n\tconst panelContext = useMemo(\n\t\t() => ( {\n\t\t\tareAllOptionalControlsHidden,\n\t\t\tderegisterPanelItem,\n\t\t\tderegisterResetAllFilter,\n\t\t\tfirstDisplayedItem,\n\t\t\tflagItemCustomization,\n\t\t\thasMenuItems: !! panelItems.length,\n\t\t\tisResetting: isResettingRef.current,\n\t\t\tlastDisplayedItem,\n\t\t\tmenuItems,\n\t\t\tpanelId,\n\t\t\tregisterPanelItem,\n\t\t\tregisterResetAllFilter,\n\t\t\tshouldRenderPlaceholderItems,\n\t\t\t__experimentalFirstVisibleItemClass,\n\t\t\t__experimentalLastVisibleItemClass,\n\t\t} ),\n\t\t[\n\t\t\tareAllOptionalControlsHidden,\n\t\t\tderegisterPanelItem,\n\t\t\tderegisterResetAllFilter,\n\t\t\tfirstDisplayedItem,\n\t\t\tflagItemCustomization,\n\t\t\tlastDisplayedItem,\n\t\t\tmenuItems,\n\t\t\tpanelId,\n\t\t\tpanelItems,\n\t\t\tregisterResetAllFilter,\n\t\t\tregisterPanelItem,\n\t\t\tshouldRenderPlaceholderItems,\n\t\t\t__experimentalFirstVisibleItemClass,\n\t\t\t__experimentalLastVisibleItemClass,\n\t\t]\n\t);\n\n\treturn {\n\t\t...otherProps,\n\t\theadingLevel,\n\t\tpanelContext,\n\t\tresetAllItems,\n\t\ttoggleItem,\n\t\tclassName: classes,\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_element","require","styles","_interopRequireWildcard","_context","_useCx","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DEFAULT_COLUMNS","emptyMenuItems","optional","emptyState","panelItems","menuItemOrder","menuItems","generateMenuItems","shouldReset","currentMenuItems","newMenuItems","forEach","hasValue","isShownByDefault","label","group","existingItemValue","value","key","keys","panelItemsReducer","action","type","newItems","existingIndex","findIndex","oldItem","item","splice","push","index","menuItemOrderReducer","includes","menuItemsReducer","state","oldValue","currentItem","find","menuGroup","panelReducer","resetAllFiltersReducer","filters","filter","f","isMenuItemTypeEmpty","obj","length","useToolsPanel","props","className","headingLevel","resetAll","panelId","hasInnerWrapper","shouldRenderPlaceholderItems","__experimentalFirstVisibleItemClass","__experimentalLastVisibleItemClass","otherProps","useContextSystem","isResettingRef","useRef","wasResetting","current","useEffect","panelDispatch","useReducer","undefined","resetAllFilters","dispatchResetAllFilters","registerPanelItem","useCallback","deregisterPanelItem","registerResetAllFilter","deregisterResetAllFilter","flagItemCustomization","areAllOptionalControlsHidden","useMemo","values","every","isSelected","cx","useCx","classes","wrapperStyle","ToolsPanelWithInnerWrapper","emptyStyle","ToolsPanelHiddenInnerWrapper","ToolsPanel","toggleItem","resetAllItems","getFirstVisibleItemLabel","items","optionalItems","firstItem","firstDisplayedItem","lastDisplayedItem","reverse","hasMenuItems","panelContext","isResetting"],"sources":["@wordpress/components/src/tools-panel/tools-panel/hook.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseReducer,\n\tuseRef,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport * as styles from '../styles';\nimport type { WordPressComponentProps } from '../../context';\nimport { useContextSystem } from '../../context';\nimport { useCx } from '../../utils/hooks/use-cx';\nimport type {\n\tToolsPanelItem,\n\tToolsPanelMenuItemKey,\n\tToolsPanelMenuItems,\n\tToolsPanelMenuItemsConfig,\n\tToolsPanelProps,\n\tResetAllFilter,\n} from '../types';\n\nconst DEFAULT_COLUMNS = 2;\n\ntype PanelItemsState = {\n\tpanelItems: ToolsPanelItem[];\n\tmenuItemOrder: string[];\n\tmenuItems: ToolsPanelMenuItems;\n};\n\ntype PanelItemsAction =\n\t| { type: 'REGISTER_PANEL'; item: ToolsPanelItem }\n\t| { type: 'UNREGISTER_PANEL'; label: string }\n\t| {\n\t\t\ttype: 'UPDATE_VALUE';\n\t\t\tgroup: ToolsPanelMenuItemKey;\n\t\t\tlabel: string;\n\t\t\tvalue: boolean;\n\t }\n\t| { type: 'TOGGLE_VALUE'; label: string }\n\t| { type: 'RESET_ALL' };\n\nfunction emptyMenuItems(): ToolsPanelMenuItems {\n\treturn { default: {}, optional: {} };\n}\n\nfunction emptyState(): PanelItemsState {\n\treturn { panelItems: [], menuItemOrder: [], menuItems: emptyMenuItems() };\n}\n\nconst generateMenuItems = ( {\n\tpanelItems,\n\tshouldReset,\n\tcurrentMenuItems,\n\tmenuItemOrder,\n}: ToolsPanelMenuItemsConfig ) => {\n\tconst newMenuItems: ToolsPanelMenuItems = emptyMenuItems();\n\tconst menuItems: ToolsPanelMenuItems = emptyMenuItems();\n\n\tpanelItems.forEach( ( { hasValue, isShownByDefault, label } ) => {\n\t\tconst group = isShownByDefault ? 'default' : 'optional';\n\n\t\t// If a menu item for this label has already been flagged as customized\n\t\t// (for default controls), or toggled on (for optional controls), do not\n\t\t// overwrite its value as those controls would lose that state.\n\t\tconst existingItemValue = currentMenuItems?.[ group ]?.[ label ];\n\t\tconst value = existingItemValue ? existingItemValue : hasValue();\n\n\t\tnewMenuItems[ group ][ label ] = shouldReset ? false : value;\n\t} );\n\n\t// Loop the known, previously registered items first to maintain menu order.\n\tmenuItemOrder.forEach( ( key ) => {\n\t\tif ( newMenuItems.default.hasOwnProperty( key ) ) {\n\t\t\tmenuItems.default[ key ] = newMenuItems.default[ key ];\n\t\t}\n\n\t\tif ( newMenuItems.optional.hasOwnProperty( key ) ) {\n\t\t\tmenuItems.optional[ key ] = newMenuItems.optional[ key ];\n\t\t}\n\t} );\n\n\t// Loop newMenuItems object adding any that aren't in the known items order.\n\tObject.keys( newMenuItems.default ).forEach( ( key ) => {\n\t\tif ( ! menuItems.default.hasOwnProperty( key ) ) {\n\t\t\tmenuItems.default[ key ] = newMenuItems.default[ key ];\n\t\t}\n\t} );\n\n\tObject.keys( newMenuItems.optional ).forEach( ( key ) => {\n\t\tif ( ! menuItems.optional.hasOwnProperty( key ) ) {\n\t\t\tmenuItems.optional[ key ] = newMenuItems.optional[ key ];\n\t\t}\n\t} );\n\n\treturn menuItems;\n};\n\nfunction panelItemsReducer(\n\tpanelItems: ToolsPanelItem[],\n\taction: PanelItemsAction\n) {\n\tswitch ( action.type ) {\n\t\tcase 'REGISTER_PANEL': {\n\t\t\tconst newItems = [ ...panelItems ];\n\t\t\t// If an item with this label has already been registered, remove it\n\t\t\t// first. This can happen when an item is moved between the default\n\t\t\t// and optional groups.\n\t\t\tconst existingIndex = newItems.findIndex(\n\t\t\t\t( oldItem ) => oldItem.label === action.item.label\n\t\t\t);\n\t\t\tif ( existingIndex !== -1 ) {\n\t\t\t\tnewItems.splice( existingIndex, 1 );\n\t\t\t}\n\t\t\tnewItems.push( action.item );\n\t\t\treturn newItems;\n\t\t}\n\t\tcase 'UNREGISTER_PANEL': {\n\t\t\tconst index = panelItems.findIndex(\n\t\t\t\t( item ) => item.label === action.label\n\t\t\t);\n\t\t\tif ( index !== -1 ) {\n\t\t\t\tconst newItems = [ ...panelItems ];\n\t\t\t\tnewItems.splice( index, 1 );\n\t\t\t\treturn newItems;\n\t\t\t}\n\t\t\treturn panelItems;\n\t\t}\n\t\tdefault:\n\t\t\treturn panelItems;\n\t}\n}\n\nfunction menuItemOrderReducer(\n\tmenuItemOrder: string[],\n\taction: PanelItemsAction\n) {\n\tswitch ( action.type ) {\n\t\tcase 'REGISTER_PANEL': {\n\t\t\t// Track the initial order of item registration. This is used for\n\t\t\t// maintaining menu item order later.\n\t\t\tif ( menuItemOrder.includes( action.item.label ) ) {\n\t\t\t\treturn menuItemOrder;\n\t\t\t}\n\n\t\t\treturn [ ...menuItemOrder, action.item.label ];\n\t\t}\n\t\tdefault:\n\t\t\treturn menuItemOrder;\n\t}\n}\n\nfunction menuItemsReducer( state: PanelItemsState, action: PanelItemsAction ) {\n\tswitch ( action.type ) {\n\t\tcase 'REGISTER_PANEL':\n\t\tcase 'UNREGISTER_PANEL':\n\t\t\t// generate new menu items from original `menuItems` and updated `panelItems` and `menuItemOrder`\n\t\t\treturn generateMenuItems( {\n\t\t\t\tcurrentMenuItems: state.menuItems,\n\t\t\t\tpanelItems: state.panelItems,\n\t\t\t\tmenuItemOrder: state.menuItemOrder,\n\t\t\t\tshouldReset: false,\n\t\t\t} );\n\t\tcase 'RESET_ALL':\n\t\t\treturn generateMenuItems( {\n\t\t\t\tpanelItems: state.panelItems,\n\t\t\t\tmenuItemOrder: state.menuItemOrder,\n\t\t\t\tshouldReset: true,\n\t\t\t} );\n\t\tcase 'UPDATE_VALUE': {\n\t\t\tconst oldValue = state.menuItems[ action.group ][ action.label ];\n\t\t\tif ( action.value === oldValue ) {\n\t\t\t\treturn state.menuItems;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...state.menuItems,\n\t\t\t\t[ action.group ]: {\n\t\t\t\t\t...state.menuItems[ action.group ],\n\t\t\t\t\t[ action.label ]: action.value,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'TOGGLE_VALUE': {\n\t\t\tconst currentItem = state.panelItems.find(\n\t\t\t\t( item ) => item.label === action.label\n\t\t\t);\n\n\t\t\tif ( ! currentItem ) {\n\t\t\t\treturn state.menuItems;\n\t\t\t}\n\n\t\t\tconst menuGroup = currentItem.isShownByDefault\n\t\t\t\t? 'default'\n\t\t\t\t: 'optional';\n\n\t\t\tconst newMenuItems = {\n\t\t\t\t...state.menuItems,\n\t\t\t\t[ menuGroup ]: {\n\t\t\t\t\t...state.menuItems[ menuGroup ],\n\t\t\t\t\t[ action.label ]:\n\t\t\t\t\t\t! state.menuItems[ menuGroup ][ action.label ],\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn newMenuItems;\n\t\t}\n\n\t\tdefault:\n\t\t\treturn state.menuItems;\n\t}\n}\n\nfunction panelReducer( state: PanelItemsState, action: PanelItemsAction ) {\n\tconst panelItems = panelItemsReducer( state.panelItems, action );\n\tconst menuItemOrder = menuItemOrderReducer( state.menuItemOrder, action );\n\t// `menuItemsReducer` is a bit unusual because it generates new state from original `menuItems`\n\t// and the updated `panelItems` and `menuItemOrder`.\n\tconst menuItems = menuItemsReducer(\n\t\t{ panelItems, menuItemOrder, menuItems: state.menuItems },\n\t\taction\n\t);\n\n\treturn { panelItems, menuItemOrder, menuItems };\n}\n\nfunction resetAllFiltersReducer(\n\tfilters: ResetAllFilter[],\n\taction: { type: 'REGISTER' | 'UNREGISTER'; filter: ResetAllFilter }\n) {\n\tswitch ( action.type ) {\n\t\tcase 'REGISTER':\n\t\t\treturn [ ...filters, action.filter ];\n\t\tcase 'UNREGISTER':\n\t\t\treturn filters.filter( ( f ) => f !== action.filter );\n\t\tdefault:\n\t\t\treturn filters;\n\t}\n}\n\nconst isMenuItemTypeEmpty = (\n\tobj: ToolsPanelMenuItems[ ToolsPanelMenuItemKey ]\n) => Object.keys( obj ).length === 0;\n\nexport function useToolsPanel(\n\tprops: WordPressComponentProps< ToolsPanelProps, 'div' >\n) {\n\tconst {\n\t\tclassName,\n\t\theadingLevel = 2,\n\t\tresetAll,\n\t\tpanelId,\n\t\thasInnerWrapper = false,\n\t\tshouldRenderPlaceholderItems = false,\n\t\t__experimentalFirstVisibleItemClass,\n\t\t__experimentalLastVisibleItemClass,\n\t\t...otherProps\n\t} = useContextSystem( props, 'ToolsPanel' );\n\n\tconst isResettingRef = useRef( false );\n\tconst wasResetting = isResettingRef.current;\n\n\t// `isResettingRef` is cleared via this hook to effectively batch together\n\t// the resetAll task. Without this, the flag is cleared after the first\n\t// control updates and forces a rerender with subsequent controls then\n\t// believing they need to reset, unfortunately using stale data.\n\tuseEffect( () => {\n\t\tif ( wasResetting ) {\n\t\t\tisResettingRef.current = false;\n\t\t}\n\t}, [ wasResetting ] );\n\n\t// Allow panel items to register themselves.\n\tconst [ { panelItems, menuItems }, panelDispatch ] = useReducer(\n\t\tpanelReducer,\n\t\tundefined,\n\t\temptyState\n\t);\n\n\tconst [ resetAllFilters, dispatchResetAllFilters ] = useReducer(\n\t\tresetAllFiltersReducer,\n\t\t[]\n\t);\n\n\tconst registerPanelItem = useCallback( ( item: ToolsPanelItem ) => {\n\t\t// Add item to panel items.\n\t\tpanelDispatch( { type: 'REGISTER_PANEL', item } );\n\t}, [] );\n\n\t// Panels need to deregister on unmount to avoid orphans in menu state.\n\t// This is an issue when panel items are being injected via SlotFills.\n\tconst deregisterPanelItem = useCallback( ( label: string ) => {\n\t\t// When switching selections between components injecting matching\n\t\t// controls, e.g. both panels have a \"padding\" control, the\n\t\t// deregistration of the first panel doesn't occur until after the\n\t\t// registration of the next.\n\t\tpanelDispatch( { type: 'UNREGISTER_PANEL', label } );\n\t}, [] );\n\n\tconst registerResetAllFilter = useCallback( ( filter: ResetAllFilter ) => {\n\t\tdispatchResetAllFilters( { type: 'REGISTER', filter } );\n\t}, [] );\n\n\tconst deregisterResetAllFilter = useCallback(\n\t\t( filter: ResetAllFilter ) => {\n\t\t\tdispatchResetAllFilters( { type: 'UNREGISTER', filter } );\n\t\t},\n\t\t[]\n\t);\n\n\t// Updates the status of the panel’s menu items. For default items the\n\t// value represents whether it differs from the default and for optional\n\t// items whether the item is shown.\n\tconst flagItemCustomization = useCallback(\n\t\t(\n\t\t\tvalue: boolean,\n\t\t\tlabel: string,\n\t\t\tgroup: ToolsPanelMenuItemKey = 'default'\n\t\t) => {\n\t\t\tpanelDispatch( { type: 'UPDATE_VALUE', group, label, value } );\n\t\t},\n\t\t[]\n\t);\n\n\t// Whether all optional menu items are hidden or not must be tracked\n\t// in order to later determine if the panel display is empty and handle\n\t// conditional display of a plus icon to indicate the presence of further\n\t// menu items.\n\tconst areAllOptionalControlsHidden = useMemo( () => {\n\t\treturn (\n\t\t\tisMenuItemTypeEmpty( menuItems.default ) &&\n\t\t\t! isMenuItemTypeEmpty( menuItems.optional ) &&\n\t\t\tObject.values( menuItems.optional ).every(\n\t\t\t\t( isSelected ) => ! isSelected\n\t\t\t)\n\t\t);\n\t}, [ menuItems ] );\n\n\tconst cx = useCx();\n\tconst classes = useMemo( () => {\n\t\tconst wrapperStyle =\n\t\t\thasInnerWrapper &&\n\t\t\tstyles.ToolsPanelWithInnerWrapper( DEFAULT_COLUMNS );\n\t\tconst emptyStyle =\n\t\t\tareAllOptionalControlsHidden && styles.ToolsPanelHiddenInnerWrapper;\n\n\t\treturn cx(\n\t\t\tstyles.ToolsPanel( DEFAULT_COLUMNS ),\n\t\t\twrapperStyle,\n\t\t\temptyStyle,\n\t\t\tclassName\n\t\t);\n\t}, [ areAllOptionalControlsHidden, className, cx, hasInnerWrapper ] );\n\n\t// Toggle the checked state of a menu item which is then used to determine\n\t// display of the item within the panel.\n\tconst toggleItem = useCallback( ( label: string ) => {\n\t\tpanelDispatch( { type: 'TOGGLE_VALUE', label } );\n\t}, [] );\n\n\t// Resets display of children and executes resetAll callback if available.\n\tconst resetAllItems = useCallback( () => {\n\t\tif ( typeof resetAll === 'function' ) {\n\t\t\tisResettingRef.current = true;\n\t\t\tresetAll( resetAllFilters );\n\t\t}\n\n\t\t// Turn off display of all non-default items.\n\t\tpanelDispatch( { type: 'RESET_ALL' } );\n\t}, [ resetAllFilters, resetAll ] );\n\n\t// Assist ItemGroup styling when there are potentially hidden placeholder\n\t// items by identifying first & last items that are toggled on for display.\n\tconst getFirstVisibleItemLabel = ( items: ToolsPanelItem[] ) => {\n\t\tconst optionalItems = menuItems.optional || {};\n\t\tconst firstItem = items.find(\n\t\t\t( item ) => item.isShownByDefault || optionalItems[ item.label ]\n\t\t);\n\n\t\treturn firstItem?.label;\n\t};\n\n\tconst firstDisplayedItem = getFirstVisibleItemLabel( panelItems );\n\tconst lastDisplayedItem = getFirstVisibleItemLabel(\n\t\t[ ...panelItems ].reverse()\n\t);\n\n\tconst hasMenuItems = panelItems.length > 0;\n\n\tconst panelContext = useMemo(\n\t\t() => ( {\n\t\t\tareAllOptionalControlsHidden,\n\t\t\tderegisterPanelItem,\n\t\t\tderegisterResetAllFilter,\n\t\t\tfirstDisplayedItem,\n\t\t\tflagItemCustomization,\n\t\t\thasMenuItems,\n\t\t\tisResetting: isResettingRef.current,\n\t\t\tlastDisplayedItem,\n\t\t\tmenuItems,\n\t\t\tpanelId,\n\t\t\tregisterPanelItem,\n\t\t\tregisterResetAllFilter,\n\t\t\tshouldRenderPlaceholderItems,\n\t\t\t__experimentalFirstVisibleItemClass,\n\t\t\t__experimentalLastVisibleItemClass,\n\t\t} ),\n\t\t[\n\t\t\tareAllOptionalControlsHidden,\n\t\t\tderegisterPanelItem,\n\t\t\tderegisterResetAllFilter,\n\t\t\tfirstDisplayedItem,\n\t\t\tflagItemCustomization,\n\t\t\tlastDisplayedItem,\n\t\t\tmenuItems,\n\t\t\tpanelId,\n\t\t\thasMenuItems,\n\t\t\tregisterResetAllFilter,\n\t\t\tregisterPanelItem,\n\t\t\tshouldRenderPlaceholderItems,\n\t\t\t__experimentalFirstVisibleItemClass,\n\t\t\t__experimentalLastVisibleItemClass,\n\t\t]\n\t);\n\n\treturn {\n\t\t...otherProps,\n\t\theadingLevel,\n\t\tpanelContext,\n\t\tresetAllItems,\n\t\ttoggleItem,\n\t\tclassName: classes,\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,8 +12,6 @@ var _colorsValues = require("./colors-values");
|
|
|
12
12
|
|
|
13
13
|
const CONTROL_HEIGHT = '36px';
|
|
14
14
|
const CONTROL_PROPS = {
|
|
15
|
-
controlSurfaceColor: _colorsValues.COLORS.white,
|
|
16
|
-
controlTextActiveColor: _colorsValues.COLORS.theme.accent,
|
|
17
15
|
// These values should be shared with TextControl.
|
|
18
16
|
controlPaddingX: 12,
|
|
19
17
|
controlPaddingXSmall: 8,
|
|
@@ -21,26 +19,17 @@ const CONTROL_PROPS = {
|
|
|
21
19
|
// TODO: Deprecate
|
|
22
20
|
|
|
23
21
|
controlBackgroundColor: _colorsValues.COLORS.white,
|
|
24
|
-
controlBoxShadow: 'transparent',
|
|
25
22
|
controlBoxShadowFocus: `0 0 0 0.5px ${_colorsValues.COLORS.theme.accent}`,
|
|
26
|
-
controlDestructiveBorderColor: _colorsValues.COLORS.alert.red,
|
|
27
23
|
controlHeight: CONTROL_HEIGHT,
|
|
28
24
|
controlHeightXSmall: `calc( ${CONTROL_HEIGHT} * 0.6 )`,
|
|
29
25
|
controlHeightSmall: `calc( ${CONTROL_HEIGHT} * 0.8 )`,
|
|
30
26
|
controlHeightLarge: `calc( ${CONTROL_HEIGHT} * 1.2 )`,
|
|
31
27
|
controlHeightXLarge: `calc( ${CONTROL_HEIGHT} * 1.4 )`
|
|
32
28
|
};
|
|
33
|
-
const TOGGLE_GROUP_CONTROL_PROPS = {
|
|
34
|
-
toggleGroupControlBackgroundColor: CONTROL_PROPS.controlBackgroundColor,
|
|
35
|
-
toggleGroupControlBorderColor: _colorsValues.COLORS.ui.border,
|
|
36
|
-
toggleGroupControlBackdropBackgroundColor: CONTROL_PROPS.controlSurfaceColor,
|
|
37
|
-
toggleGroupControlBackdropBorderColor: _colorsValues.COLORS.ui.border,
|
|
38
|
-
toggleGroupControlButtonColorActive: CONTROL_PROPS.controlBackgroundColor
|
|
39
|
-
};
|
|
40
29
|
|
|
41
30
|
// Using Object.assign to avoid creating circular references when emitting
|
|
42
31
|
// TypeScript type declarations.
|
|
43
|
-
var _default = exports.default = Object.assign({}, CONTROL_PROPS,
|
|
32
|
+
var _default = exports.default = Object.assign({}, CONTROL_PROPS, {
|
|
44
33
|
colorDivider: 'rgba(0, 0, 0, 0.1)',
|
|
45
34
|
colorScrollbarThumb: 'rgba(0, 0, 0, 0.2)',
|
|
46
35
|
colorScrollbarThumbHover: 'rgba(0, 0, 0, 0.5)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_space","require","_colorsValues","CONTROL_HEIGHT","CONTROL_PROPS","
|
|
1
|
+
{"version":3,"names":["_space","require","_colorsValues","CONTROL_HEIGHT","CONTROL_PROPS","controlPaddingX","controlPaddingXSmall","controlPaddingXLarge","controlBackgroundColor","COLORS","white","controlBoxShadowFocus","theme","accent","controlHeight","controlHeightXSmall","controlHeightSmall","controlHeightLarge","controlHeightXLarge","_default","exports","default","Object","assign","colorDivider","colorScrollbarThumb","colorScrollbarThumbHover","colorScrollbarTrack","elevationIntensity","radiusXSmall","radiusSmall","radiusMedium","radiusLarge","radiusFull","radiusRound","borderWidth","borderWidthFocus","borderWidthTab","spinnerSize","fontSize","fontSizeH1","fontSizeH2","fontSizeH3","fontSizeH4","fontSizeH5","fontSizeH6","fontSizeInputMobile","fontSizeMobile","fontSizeSmall","fontSizeXSmall","fontLineHeightBase","fontWeight","fontWeightHeading","gridBase","cardPaddingXSmall","space","cardPaddingSmall","cardPaddingMedium","cardPaddingLarge","elevationXSmall","elevationSmall","elevationMedium","elevationLarge","surfaceBackgroundColor","surfaceBackgroundSubtleColor","surfaceBackgroundTintColor","surfaceBorderColor","surfaceBorderBoldColor","surfaceBorderSubtleColor","surfaceBackgroundTertiaryColor","surfaceColor","transitionDuration","transitionDurationFast","transitionDurationFaster","transitionDurationFastest","transitionTimingFunction","transitionTimingFunctionControl"],"sources":["@wordpress/components/src/utils/config-values.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { space } from './space';\nimport { COLORS } from './colors-values';\n\nconst CONTROL_HEIGHT = '36px';\n\nconst CONTROL_PROPS = {\n\t// These values should be shared with TextControl.\n\tcontrolPaddingX: 12,\n\tcontrolPaddingXSmall: 8,\n\tcontrolPaddingXLarge: 12 * 1.3334, // TODO: Deprecate\n\n\tcontrolBackgroundColor: COLORS.white,\n\tcontrolBoxShadowFocus: `0 0 0 0.5px ${ COLORS.theme.accent }`,\n\tcontrolHeight: CONTROL_HEIGHT,\n\tcontrolHeightXSmall: `calc( ${ CONTROL_HEIGHT } * 0.6 )`,\n\tcontrolHeightSmall: `calc( ${ CONTROL_HEIGHT } * 0.8 )`,\n\tcontrolHeightLarge: `calc( ${ CONTROL_HEIGHT } * 1.2 )`,\n\tcontrolHeightXLarge: `calc( ${ CONTROL_HEIGHT } * 1.4 )`,\n};\n\n// Using Object.assign to avoid creating circular references when emitting\n// TypeScript type declarations.\nexport default Object.assign( {}, CONTROL_PROPS, {\n\tcolorDivider: 'rgba(0, 0, 0, 0.1)',\n\tcolorScrollbarThumb: 'rgba(0, 0, 0, 0.2)',\n\tcolorScrollbarThumbHover: 'rgba(0, 0, 0, 0.5)',\n\tcolorScrollbarTrack: 'rgba(0, 0, 0, 0.04)',\n\televationIntensity: 1,\n\tradiusXSmall: '1px',\n\tradiusSmall: '2px',\n\tradiusMedium: '4px',\n\tradiusLarge: '8px',\n\tradiusFull: '9999px',\n\tradiusRound: '50%',\n\tborderWidth: '1px',\n\tborderWidthFocus: '1.5px',\n\tborderWidthTab: '4px',\n\tspinnerSize: 16,\n\tfontSize: '13px',\n\tfontSizeH1: 'calc(2.44 * 13px)',\n\tfontSizeH2: 'calc(1.95 * 13px)',\n\tfontSizeH3: 'calc(1.56 * 13px)',\n\tfontSizeH4: 'calc(1.25 * 13px)',\n\tfontSizeH5: '13px',\n\tfontSizeH6: 'calc(0.8 * 13px)',\n\tfontSizeInputMobile: '16px',\n\tfontSizeMobile: '15px',\n\tfontSizeSmall: 'calc(0.92 * 13px)',\n\tfontSizeXSmall: 'calc(0.75 * 13px)',\n\tfontLineHeightBase: '1.4',\n\tfontWeight: 'normal',\n\tfontWeightHeading: '600',\n\tgridBase: '4px',\n\tcardPaddingXSmall: `${ space( 2 ) }`,\n\tcardPaddingSmall: `${ space( 4 ) }`,\n\tcardPaddingMedium: `${ space( 4 ) } ${ space( 6 ) }`,\n\tcardPaddingLarge: `${ space( 6 ) } ${ space( 8 ) }`,\n\televationXSmall: `0 1px 1px rgba(0, 0, 0, 0.03), 0 1px 2px rgba(0, 0, 0, 0.02), 0 3px 3px rgba(0, 0, 0, 0.02), 0 4px 4px rgba(0, 0, 0, 0.01)`,\n\televationSmall: `0 1px 2px rgba(0, 0, 0, 0.05), 0 2px 3px rgba(0, 0, 0, 0.04), 0 6px 6px rgba(0, 0, 0, 0.03), 0 8px 8px rgba(0, 0, 0, 0.02)`,\n\televationMedium: `0 2px 3px rgba(0, 0, 0, 0.05), 0 4px 5px rgba(0, 0, 0, 0.04), 0 12px 12px rgba(0, 0, 0, 0.03), 0 16px 16px rgba(0, 0, 0, 0.02)`,\n\televationLarge: `0 5px 15px rgba(0, 0, 0, 0.08), 0 15px 27px rgba(0, 0, 0, 0.07), 0 30px 36px rgba(0, 0, 0, 0.04), 0 50px 43px rgba(0, 0, 0, 0.02)`,\n\tsurfaceBackgroundColor: COLORS.white,\n\tsurfaceBackgroundSubtleColor: '#F3F3F3',\n\tsurfaceBackgroundTintColor: '#F5F5F5',\n\tsurfaceBorderColor: 'rgba(0, 0, 0, 0.1)',\n\tsurfaceBorderBoldColor: 'rgba(0, 0, 0, 0.15)',\n\tsurfaceBorderSubtleColor: 'rgba(0, 0, 0, 0.05)',\n\tsurfaceBackgroundTertiaryColor: COLORS.white,\n\tsurfaceColor: COLORS.white,\n\ttransitionDuration: '200ms',\n\ttransitionDurationFast: '160ms',\n\ttransitionDurationFaster: '120ms',\n\ttransitionDurationFastest: '100ms',\n\ttransitionTimingFunction: 'cubic-bezier(0.08, 0.52, 0.52, 1)',\n\ttransitionTimingFunctionControl: 'cubic-bezier(0.12, 0.8, 0.32, 1)',\n} );\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["clsx","useState","useEffect","Children","useRef","deprecated","__","Modal","Button","PageControl","jsx","_jsx","jsxs","_jsxs","Guide","children","className","contentLabel","finishButtonText","onFinish","pages","ref","currentPage","setCurrentPage","frame","current","querySelector","HTMLElement","focus","count","since","alternative","_Children$map","map","child","content","canGoBack","canGoForward","length","goBack","goForward","isDismissible","onRequestClose","onKeyDown","event","code","preventDefault","image","numberOfPages","variant","onClick","__next40pxDefaultSize"],"sources":["@wordpress/components/src/guide/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, Children, useRef } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport Modal from '../modal';\nimport Button from '../button';\nimport PageControl from './page-control';\nimport type { GuideProps } from './types';\n\n/**\n * `Guide` is a React component that renders a _user guide_ in a modal. The guide consists of several pages which the user can step through one by one. The guide is finished when the modal is closed or when the user clicks _Finish_ on the last page of the guide.\n *\n * ```jsx\n * function MyTutorial() {\n * \tconst [ isOpen, setIsOpen ] = useState( true );\n *\n * \tif ( ! isOpen ) {\n * \t\treturn null;\n * \t}\n *\n * \treturn (\n * \t\t<Guide\n * \t\t\tonFinish={ () => setIsOpen( false ) }\n * \t\t\tpages={ [\n * \t\t\t\t{\n * \t\t\t\t\tcontent: <p>Welcome to the ACME Store!</p>,\n * \t\t\t\t},\n * \t\t\t\t{\n * \t\t\t\t\timage: <img src=\"https://acmestore.com/add-to-cart.png\" />,\n * \t\t\t\t\tcontent: (\n * \t\t\t\t\t\t<p>\n * \t\t\t\t\t\t\tClick <i>Add to Cart</i> to buy a product.\n * \t\t\t\t\t\t</p>\n * \t\t\t\t\t),\n * \t\t\t\t},\n * \t\t\t] }\n * \t\t/>\n * \t);\n * }\n * ```\n */\nfunction Guide( {\n\tchildren,\n\tclassName,\n\tcontentLabel,\n\tfinishButtonText = __( 'Finish' ),\n\tonFinish,\n\tpages = [],\n}: GuideProps ) {\n\tconst ref = useRef< HTMLDivElement >( null );\n\tconst [ currentPage, setCurrentPage ] = useState( 0 );\n\n\tuseEffect( () => {\n\t\t// Place focus at the top of the guide on mount and when the page changes.\n\t\tconst frame = ref.current?.querySelector( '.components-guide' );\n\t\tif ( frame instanceof HTMLElement ) {\n\t\t\tframe.focus();\n\t\t}\n\t}, [ currentPage ] );\n\n\tuseEffect( () => {\n\t\tif ( Children.count( children ) ) {\n\t\t\tdeprecated( 'Passing children to <Guide>', {\n\t\t\t\tsince: '5.5',\n\t\t\t\talternative: 'the `pages` prop',\n\t\t\t} );\n\t\t}\n\t}, [ children ] );\n\n\tif ( Children.count( children ) ) {\n\t\tpages =\n\t\t\tChildren.map( children, ( child ) => ( {\n\t\t\t\tcontent: child,\n\t\t\t} ) ) ?? [];\n\t}\n\n\tconst canGoBack = currentPage > 0;\n\tconst canGoForward = currentPage < pages.length - 1;\n\n\tconst goBack = () => {\n\t\tif ( canGoBack ) {\n\t\t\tsetCurrentPage( currentPage - 1 );\n\t\t}\n\t};\n\n\tconst goForward = () => {\n\t\tif ( canGoForward ) {\n\t\t\tsetCurrentPage( currentPage + 1 );\n\t\t}\n\t};\n\n\tif ( pages.length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName={ clsx( 'components-guide', className ) }\n\t\t\tcontentLabel={ contentLabel }\n\t\t\tisDismissible={ pages.length > 1 }\n\t\t\tonRequestClose={ onFinish }\n\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\tif ( event.code === 'ArrowLeft' ) {\n\t\t\t\t\tgoBack();\n\t\t\t\t\t// Do not scroll the modal's contents.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( event.code === 'ArrowRight' ) {\n\t\t\t\t\tgoForward();\n\t\t\t\t\t// Do not scroll the modal's contents.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} }\n\t\t\tref={ ref }\n\t\t>\n\t\t\t<div className=\"components-guide__container\">\n\t\t\t\t<div className=\"components-guide__page\">\n\t\t\t\t\t{ pages[ currentPage ].image }\n\n\t\t\t\t\t{ pages.length > 1 && (\n\t\t\t\t\t\t<PageControl\n\t\t\t\t\t\t\tcurrentPage={ currentPage }\n\t\t\t\t\t\t\tnumberOfPages={ pages.length }\n\t\t\t\t\t\t\tsetCurrentPage={ setCurrentPage }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ pages[ currentPage ].content }\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"components-guide__footer\">\n\t\t\t\t\t{ canGoBack && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"components-guide__back-button\"\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={ goBack }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Previous' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\t{ canGoForward && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"components-guide__forward-button\"\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ goForward }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Next' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! canGoForward && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"components-guide__finish-button\"\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ onFinish }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ finishButtonText }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n\nexport default Guide;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["clsx","useState","useEffect","Children","useRef","deprecated","__","Modal","Button","PageControl","jsx","_jsx","jsxs","_jsxs","Guide","children","className","contentLabel","finishButtonText","onFinish","pages","ref","currentPage","setCurrentPage","frame","current","querySelector","HTMLElement","focus","count","since","alternative","_Children$map","map","child","content","canGoBack","canGoForward","length","goBack","goForward","isDismissible","onRequestClose","onKeyDown","event","code","preventDefault","image","numberOfPages","variant","onClick","__next40pxDefaultSize"],"sources":["@wordpress/components/src/guide/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, Children, useRef } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport Modal from '../modal';\nimport Button from '../button';\nimport PageControl from './page-control';\nimport type { GuideProps } from './types';\n\n/**\n * `Guide` is a React component that renders a _user guide_ in a modal. The guide consists of several pages which the user can step through one by one. The guide is finished when the modal is closed or when the user clicks _Finish_ on the last page of the guide.\n *\n * ```jsx\n * function MyTutorial() {\n * \tconst [ isOpen, setIsOpen ] = useState( true );\n *\n * \tif ( ! isOpen ) {\n * \t\treturn null;\n * \t}\n *\n * \treturn (\n * \t\t<Guide\n * \t\t\tonFinish={ () => setIsOpen( false ) }\n * \t\t\tpages={ [\n * \t\t\t\t{\n * \t\t\t\t\tcontent: <p>Welcome to the ACME Store!</p>,\n * \t\t\t\t},\n * \t\t\t\t{\n * \t\t\t\t\timage: <img src=\"https://acmestore.com/add-to-cart.png\" />,\n * \t\t\t\t\tcontent: (\n * \t\t\t\t\t\t<p>\n * \t\t\t\t\t\t\tClick <i>Add to Cart</i> to buy a product.\n * \t\t\t\t\t\t</p>\n * \t\t\t\t\t),\n * \t\t\t\t},\n * \t\t\t] }\n * \t\t/>\n * \t);\n * }\n * ```\n */\nfunction Guide( {\n\tchildren,\n\tclassName,\n\tcontentLabel,\n\tfinishButtonText = __( 'Finish' ),\n\tonFinish,\n\tpages = [],\n}: GuideProps ) {\n\tconst ref = useRef< HTMLDivElement >( null );\n\tconst [ currentPage, setCurrentPage ] = useState( 0 );\n\n\tuseEffect( () => {\n\t\t// Place focus at the top of the guide on mount and when the page changes.\n\t\tconst frame = ref.current?.querySelector( '.components-guide' );\n\t\tif ( frame instanceof HTMLElement ) {\n\t\t\tframe.focus();\n\t\t}\n\t}, [ currentPage ] );\n\n\tuseEffect( () => {\n\t\tif ( Children.count( children ) ) {\n\t\t\tdeprecated( 'Passing children to <Guide>', {\n\t\t\t\tsince: '5.5',\n\t\t\t\talternative: 'the `pages` prop',\n\t\t\t} );\n\t\t}\n\t}, [ children ] );\n\n\tif ( Children.count( children ) ) {\n\t\tpages =\n\t\t\tChildren.map( children, ( child ) => ( {\n\t\t\t\tcontent: child,\n\t\t\t} ) ) ?? [];\n\t}\n\n\tconst canGoBack = currentPage > 0;\n\tconst canGoForward = currentPage < pages.length - 1;\n\n\tconst goBack = () => {\n\t\tif ( canGoBack ) {\n\t\t\tsetCurrentPage( currentPage - 1 );\n\t\t}\n\t};\n\n\tconst goForward = () => {\n\t\tif ( canGoForward ) {\n\t\t\tsetCurrentPage( currentPage + 1 );\n\t\t}\n\t};\n\n\tif ( pages.length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName={ clsx( 'components-guide', className ) }\n\t\t\tcontentLabel={ contentLabel }\n\t\t\tisDismissible={ pages.length > 1 }\n\t\t\tonRequestClose={ onFinish }\n\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\tif ( event.code === 'ArrowLeft' ) {\n\t\t\t\t\tgoBack();\n\t\t\t\t\t// Do not scroll the modal's contents.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( event.code === 'ArrowRight' ) {\n\t\t\t\t\tgoForward();\n\t\t\t\t\t// Do not scroll the modal's contents.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} }\n\t\t\tref={ ref }\n\t\t>\n\t\t\t<div className=\"components-guide__container\">\n\t\t\t\t<div className=\"components-guide__page\">\n\t\t\t\t\t{ pages[ currentPage ].image }\n\n\t\t\t\t\t{ pages.length > 1 && (\n\t\t\t\t\t\t<PageControl\n\t\t\t\t\t\t\tcurrentPage={ currentPage }\n\t\t\t\t\t\t\tnumberOfPages={ pages.length }\n\t\t\t\t\t\t\tsetCurrentPage={ setCurrentPage }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ pages[ currentPage ].content }\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"components-guide__footer\">\n\t\t\t\t\t{ canGoBack && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"components-guide__back-button\"\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={ goBack }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Previous' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\t{ canGoForward && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"components-guide__forward-button\"\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ goForward }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Next' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! canGoForward && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"components-guide__finish-button\"\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ onFinish }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ finishButtonText }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n\nexport default Guide;\n"],"mappings":"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","ignoreList":[]}
|