@wordpress/customize-widgets 3.19.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.1.0 (2023-01-02)
6
+
7
+ ## 4.0.0 (2022-12-14)
8
+
9
+ ### Breaking Changes
10
+
11
+ - Updated dependencies to require React 18 ([45235](https://github.com/WordPress/gutenberg/pull/45235))
12
+
5
13
  ## 3.19.0 (2022-11-16)
6
14
 
7
15
  ## 3.18.0 (2022-11-02)
@@ -9,6 +9,8 @@ var _element = require("@wordpress/element");
9
9
 
10
10
  var _keyboardShortcuts = require("@wordpress/keyboard-shortcuts");
11
11
 
12
+ var _keycodes = require("@wordpress/keycodes");
13
+
12
14
  var _data = require("@wordpress/data");
13
15
 
14
16
  var _i18n = require("@wordpress/i18n");
@@ -59,7 +61,15 @@ function KeyboardShortcutsRegister() {
59
61
  keyCombination: {
60
62
  modifier: 'primaryShift',
61
63
  character: 'z'
62
- }
64
+ },
65
+ // Disable on Apple OS because it conflicts with the browser's
66
+ // history shortcut. It's a fine alias for both Windows and Linux.
67
+ // Since there's no conflict for Ctrl+Shift+Z on both Windows and
68
+ // Linux, we keep it as the default for consistency.
69
+ aliases: (0, _keycodes.isAppleOS)() ? [] : [{
70
+ modifier: 'primary',
71
+ character: 'y'
72
+ }]
63
73
  });
64
74
  registerShortcut({
65
75
  name: 'core/customize-widgets/save',
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/customize-widgets/src/components/keyboard-shortcuts/index.js"],"names":["KeyboardShortcuts","undo","redo","save","event","preventDefault","KeyboardShortcutsRegister","registerShortcut","unregisterShortcut","keyboardShortcutsStore","name","category","description","keyCombination","modifier","character","Register"],"mappings":";;;;;;;AAGA;;AACA;;AAIA;;AACA;;AATA;AACA;AACA;AASA,SAASA,iBAAT,OAAmD;AAAA,MAAvB;AAAEC,IAAAA,IAAF;AAAQC,IAAAA,IAAR;AAAcC,IAAAA;AAAd,GAAuB;AAClD,sCAAa,6BAAb,EAA8CC,KAAF,IAAa;AACxDH,IAAAA,IAAI;AACJG,IAAAA,KAAK,CAACC,cAAN;AACA,GAHD;AAKA,sCAAa,6BAAb,EAA8CD,KAAF,IAAa;AACxDF,IAAAA,IAAI;AACJE,IAAAA,KAAK,CAACC,cAAN;AACA,GAHD;AAKA,sCAAa,6BAAb,EAA8CD,KAAF,IAAa;AACxDA,IAAAA,KAAK,CAACC,cAAN;AACAF,IAAAA,IAAI;AACJ,GAHD;AAKA,SAAO,IAAP;AACA;;AAED,SAASG,yBAAT,GAAqC;AACpC,QAAM;AAAEC,IAAAA,gBAAF;AAAoBC,IAAAA;AAApB,MAA2C,uBAChDC,wBADgD,CAAjD;AAIA,0BAAW,MAAM;AAChBF,IAAAA,gBAAgB,CAAE;AACjBG,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAE,cAAI,yBAAJ,CAHI;AAIjBC,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUAR,IAAAA,gBAAgB,CAAE;AACjBG,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAE,cAAI,sBAAJ,CAHI;AAIjBC,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,cADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUAR,IAAAA,gBAAgB,CAAE;AACjBG,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAE,cAAI,oBAAJ,CAHI;AAIjBC,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUA,WAAO,MAAM;AACZP,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACAA,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACAA,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACA,KAJD;AAKA,GApCD,EAoCG,CAAED,gBAAF,CApCH;AAsCA,SAAO,IAAP;AACA;;AAEDP,iBAAiB,CAACgB,QAAlB,GAA6BV,yBAA7B;eACeN,iB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport {\n\tuseShortcut,\n\tstore as keyboardShortcutsStore,\n} from '@wordpress/keyboard-shortcuts';\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\nfunction KeyboardShortcuts( { undo, redo, save } ) {\n\tuseShortcut( 'core/customize-widgets/undo', ( event ) => {\n\t\tundo();\n\t\tevent.preventDefault();\n\t} );\n\n\tuseShortcut( 'core/customize-widgets/redo', ( event ) => {\n\t\tredo();\n\t\tevent.preventDefault();\n\t} );\n\n\tuseShortcut( 'core/customize-widgets/save', ( event ) => {\n\t\tevent.preventDefault();\n\t\tsave();\n\t} );\n\n\treturn null;\n}\n\nfunction KeyboardShortcutsRegister() {\n\tconst { registerShortcut, unregisterShortcut } = useDispatch(\n\t\tkeyboardShortcutsStore\n\t);\n\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/undo',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Undo your last changes.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/redo',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Redo your last undo.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryShift',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/save',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Save your changes.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 's',\n\t\t\t},\n\t\t} );\n\n\t\treturn () => {\n\t\t\tunregisterShortcut( 'core/customize-widgets/undo' );\n\t\t\tunregisterShortcut( 'core/customize-widgets/redo' );\n\t\t\tunregisterShortcut( 'core/customize-widgets/save' );\n\t\t};\n\t}, [ registerShortcut ] );\n\n\treturn null;\n}\n\nKeyboardShortcuts.Register = KeyboardShortcutsRegister;\nexport default KeyboardShortcuts;\n"]}
1
+ {"version":3,"sources":["@wordpress/customize-widgets/src/components/keyboard-shortcuts/index.js"],"names":["KeyboardShortcuts","undo","redo","save","event","preventDefault","KeyboardShortcutsRegister","registerShortcut","unregisterShortcut","keyboardShortcutsStore","name","category","description","keyCombination","modifier","character","aliases","Register"],"mappings":";;;;;;;AAGA;;AACA;;AAIA;;AACA;;AACA;;AAVA;AACA;AACA;AAUA,SAASA,iBAAT,OAAmD;AAAA,MAAvB;AAAEC,IAAAA,IAAF;AAAQC,IAAAA,IAAR;AAAcC,IAAAA;AAAd,GAAuB;AAClD,sCAAa,6BAAb,EAA8CC,KAAF,IAAa;AACxDH,IAAAA,IAAI;AACJG,IAAAA,KAAK,CAACC,cAAN;AACA,GAHD;AAKA,sCAAa,6BAAb,EAA8CD,KAAF,IAAa;AACxDF,IAAAA,IAAI;AACJE,IAAAA,KAAK,CAACC,cAAN;AACA,GAHD;AAKA,sCAAa,6BAAb,EAA8CD,KAAF,IAAa;AACxDA,IAAAA,KAAK,CAACC,cAAN;AACAF,IAAAA,IAAI;AACJ,GAHD;AAKA,SAAO,IAAP;AACA;;AAED,SAASG,yBAAT,GAAqC;AACpC,QAAM;AAAEC,IAAAA,gBAAF;AAAoBC,IAAAA;AAApB,MAA2C,uBAChDC,wBADgD,CAAjD;AAIA,0BAAW,MAAM;AAChBF,IAAAA,gBAAgB,CAAE;AACjBG,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAE,cAAI,yBAAJ,CAHI;AAIjBC,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUAR,IAAAA,gBAAgB,CAAE;AACjBG,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAE,cAAI,sBAAJ,CAHI;AAIjBC,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,cADK;AAEfC,QAAAA,SAAS,EAAE;AAFI,OAJC;AAQjB;AACA;AACA;AACA;AACAC,MAAAA,OAAO,EAAE,6BACN,EADM,GAEN,CACA;AACCF,QAAAA,QAAQ,EAAE,SADX;AAECC,QAAAA,SAAS,EAAE;AAFZ,OADA;AAdc,KAAF,CAAhB;AAsBAR,IAAAA,gBAAgB,CAAE;AACjBG,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAE,cAAI,oBAAJ,CAHI;AAIjBC,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUA,WAAO,MAAM;AACZP,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACAA,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACAA,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACA,KAJD;AAKA,GAhDD,EAgDG,CAAED,gBAAF,CAhDH;AAkDA,SAAO,IAAP;AACA;;AAEDP,iBAAiB,CAACiB,QAAlB,GAA6BX,yBAA7B;eACeN,iB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport {\n\tuseShortcut,\n\tstore as keyboardShortcutsStore,\n} from '@wordpress/keyboard-shortcuts';\nimport { isAppleOS } from '@wordpress/keycodes';\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\nfunction KeyboardShortcuts( { undo, redo, save } ) {\n\tuseShortcut( 'core/customize-widgets/undo', ( event ) => {\n\t\tundo();\n\t\tevent.preventDefault();\n\t} );\n\n\tuseShortcut( 'core/customize-widgets/redo', ( event ) => {\n\t\tredo();\n\t\tevent.preventDefault();\n\t} );\n\n\tuseShortcut( 'core/customize-widgets/save', ( event ) => {\n\t\tevent.preventDefault();\n\t\tsave();\n\t} );\n\n\treturn null;\n}\n\nfunction KeyboardShortcutsRegister() {\n\tconst { registerShortcut, unregisterShortcut } = useDispatch(\n\t\tkeyboardShortcutsStore\n\t);\n\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/undo',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Undo your last changes.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/redo',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Redo your last undo.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryShift',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t\t// Disable on Apple OS because it conflicts with the browser's\n\t\t\t// history shortcut. It's a fine alias for both Windows and Linux.\n\t\t\t// Since there's no conflict for Ctrl+Shift+Z on both Windows and\n\t\t\t// Linux, we keep it as the default for consistency.\n\t\t\taliases: isAppleOS()\n\t\t\t\t? []\n\t\t\t\t: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmodifier: 'primary',\n\t\t\t\t\t\t\tcharacter: 'y',\n\t\t\t\t\t\t},\n\t\t\t\t ],\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/save',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Save your changes.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 's',\n\t\t\t},\n\t\t} );\n\n\t\treturn () => {\n\t\t\tunregisterShortcut( 'core/customize-widgets/undo' );\n\t\t\tunregisterShortcut( 'core/customize-widgets/redo' );\n\t\t\tunregisterShortcut( 'core/customize-widgets/save' );\n\t\t};\n\t}, [ registerShortcut ] );\n\n\treturn null;\n}\n\nKeyboardShortcuts.Register = KeyboardShortcutsRegister;\nexport default KeyboardShortcuts;\n"]}
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = useSidebarBlockEditor;
9
9
 
10
- var _lodash = require("lodash");
10
+ var _es = _interopRequireDefault(require("fast-deep-equal/es6"));
11
11
 
12
12
  var _element = require("@wordpress/element");
13
13
 
@@ -72,7 +72,7 @@ function useSidebarBlockEditor(sidebar) {
72
72
  const prevWidget = sidebar.getWidget(widgetId); // Bail out updates by returning the previous widgets.
73
73
  // Deep equality is necessary until the block editor's internals changes.
74
74
 
75
- if ((0, _lodash.isEqual)(nextBlock, prevBlock) && prevWidget) {
75
+ if ((0, _es.default)(nextBlock, prevBlock) && prevWidget) {
76
76
  return prevWidget;
77
77
  }
78
78
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/customize-widgets/src/components/sidebar-block-editor/use-sidebar-block-editor.js"],"names":["widgetsToBlocks","widgets","map","widget","useSidebarBlockEditor","sidebar","blocks","setBlocks","getWidgets","subscribe","prevWidgets","nextWidgets","prevBlocks","prevWidgetsMap","Map","id","prevBlocksMap","block","nextBlocks","nextWidget","prevWidget","get","onChangeBlocks","nextBlock","widgetId","has","prevBlock","getWidget","addedWidgetIds","setWidgets","reduce","updatedNextBlocks","index","addedWidgetId","slice"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { isEqual } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { getWidgetIdFromBlock, addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Internal dependencies\n */\nimport { blockToWidget, widgetToBlock } from '../../utils';\n\nfunction widgetsToBlocks( widgets ) {\n\treturn widgets.map( ( widget ) => widgetToBlock( widget ) );\n}\n\nexport default function useSidebarBlockEditor( sidebar ) {\n\tconst [ blocks, setBlocks ] = useState( () =>\n\t\twidgetsToBlocks( sidebar.getWidgets() )\n\t);\n\n\tuseEffect( () => {\n\t\treturn sidebar.subscribe( ( prevWidgets, nextWidgets ) => {\n\t\t\tsetBlocks( ( prevBlocks ) => {\n\t\t\t\tconst prevWidgetsMap = new Map(\n\t\t\t\t\tprevWidgets.map( ( widget ) => [ widget.id, widget ] )\n\t\t\t\t);\n\t\t\t\tconst prevBlocksMap = new Map(\n\t\t\t\t\tprevBlocks.map( ( block ) => [\n\t\t\t\t\t\tgetWidgetIdFromBlock( block ),\n\t\t\t\t\t\tblock,\n\t\t\t\t\t] )\n\t\t\t\t);\n\n\t\t\t\tconst nextBlocks = nextWidgets.map( ( nextWidget ) => {\n\t\t\t\t\tconst prevWidget = prevWidgetsMap.get( nextWidget.id );\n\n\t\t\t\t\t// Bail out updates.\n\t\t\t\t\tif ( prevWidget && prevWidget === nextWidget ) {\n\t\t\t\t\t\treturn prevBlocksMap.get( nextWidget.id );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn widgetToBlock( nextWidget );\n\t\t\t\t} );\n\n\t\t\t\t// Bail out updates.\n\t\t\t\tif ( isShallowEqual( prevBlocks, nextBlocks ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\treturn nextBlocks;\n\t\t\t} );\n\t\t} );\n\t}, [ sidebar ] );\n\n\tconst onChangeBlocks = useCallback(\n\t\t( nextBlocks ) => {\n\t\t\tsetBlocks( ( prevBlocks ) => {\n\t\t\t\tif ( isShallowEqual( prevBlocks, nextBlocks ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\tconst prevBlocksMap = new Map(\n\t\t\t\t\tprevBlocks.map( ( block ) => [\n\t\t\t\t\t\tgetWidgetIdFromBlock( block ),\n\t\t\t\t\t\tblock,\n\t\t\t\t\t] )\n\t\t\t\t);\n\n\t\t\t\tconst nextWidgets = nextBlocks.map( ( nextBlock ) => {\n\t\t\t\t\tconst widgetId = getWidgetIdFromBlock( nextBlock );\n\n\t\t\t\t\t// Update existing widgets.\n\t\t\t\t\tif ( widgetId && prevBlocksMap.has( widgetId ) ) {\n\t\t\t\t\t\tconst prevBlock = prevBlocksMap.get( widgetId );\n\t\t\t\t\t\tconst prevWidget = sidebar.getWidget( widgetId );\n\n\t\t\t\t\t\t// Bail out updates by returning the previous widgets.\n\t\t\t\t\t\t// Deep equality is necessary until the block editor's internals changes.\n\t\t\t\t\t\tif ( isEqual( nextBlock, prevBlock ) && prevWidget ) {\n\t\t\t\t\t\t\treturn prevWidget;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn blockToWidget( nextBlock, prevWidget );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add a new widget.\n\t\t\t\t\treturn blockToWidget( nextBlock );\n\t\t\t\t} );\n\n\t\t\t\t// Bail out updates if the updated widgets are the same.\n\t\t\t\tif ( isShallowEqual( sidebar.getWidgets(), nextWidgets ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\tconst addedWidgetIds = sidebar.setWidgets( nextWidgets );\n\n\t\t\t\treturn nextBlocks.reduce(\n\t\t\t\t\t( updatedNextBlocks, nextBlock, index ) => {\n\t\t\t\t\t\tconst addedWidgetId = addedWidgetIds[ index ];\n\n\t\t\t\t\t\tif ( addedWidgetId !== null ) {\n\t\t\t\t\t\t\t// Only create a new instance if necessary to prevent\n\t\t\t\t\t\t\t// the whole editor from re-rendering on every edit.\n\t\t\t\t\t\t\tif ( updatedNextBlocks === nextBlocks ) {\n\t\t\t\t\t\t\t\tupdatedNextBlocks = nextBlocks.slice();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tupdatedNextBlocks[ index ] = addWidgetIdToBlock(\n\t\t\t\t\t\t\t\tnextBlock,\n\t\t\t\t\t\t\t\taddedWidgetId\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn updatedNextBlocks;\n\t\t\t\t\t},\n\t\t\t\t\tnextBlocks\n\t\t\t\t);\n\t\t\t} );\n\t\t},\n\t\t[ sidebar ]\n\t);\n\n\treturn [ blocks, onChangeBlocks, onChangeBlocks ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/customize-widgets/src/components/sidebar-block-editor/use-sidebar-block-editor.js"],"names":["widgetsToBlocks","widgets","map","widget","useSidebarBlockEditor","sidebar","blocks","setBlocks","getWidgets","subscribe","prevWidgets","nextWidgets","prevBlocks","prevWidgetsMap","Map","id","prevBlocksMap","block","nextBlocks","nextWidget","prevWidget","get","onChangeBlocks","nextBlock","widgetId","has","prevBlock","getWidget","addedWidgetIds","setWidgets","reduce","updatedNextBlocks","index","addedWidgetId","slice"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { getWidgetIdFromBlock, addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Internal dependencies\n */\nimport { blockToWidget, widgetToBlock } from '../../utils';\n\nfunction widgetsToBlocks( widgets ) {\n\treturn widgets.map( ( widget ) => widgetToBlock( widget ) );\n}\n\nexport default function useSidebarBlockEditor( sidebar ) {\n\tconst [ blocks, setBlocks ] = useState( () =>\n\t\twidgetsToBlocks( sidebar.getWidgets() )\n\t);\n\n\tuseEffect( () => {\n\t\treturn sidebar.subscribe( ( prevWidgets, nextWidgets ) => {\n\t\t\tsetBlocks( ( prevBlocks ) => {\n\t\t\t\tconst prevWidgetsMap = new Map(\n\t\t\t\t\tprevWidgets.map( ( widget ) => [ widget.id, widget ] )\n\t\t\t\t);\n\t\t\t\tconst prevBlocksMap = new Map(\n\t\t\t\t\tprevBlocks.map( ( block ) => [\n\t\t\t\t\t\tgetWidgetIdFromBlock( block ),\n\t\t\t\t\t\tblock,\n\t\t\t\t\t] )\n\t\t\t\t);\n\n\t\t\t\tconst nextBlocks = nextWidgets.map( ( nextWidget ) => {\n\t\t\t\t\tconst prevWidget = prevWidgetsMap.get( nextWidget.id );\n\n\t\t\t\t\t// Bail out updates.\n\t\t\t\t\tif ( prevWidget && prevWidget === nextWidget ) {\n\t\t\t\t\t\treturn prevBlocksMap.get( nextWidget.id );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn widgetToBlock( nextWidget );\n\t\t\t\t} );\n\n\t\t\t\t// Bail out updates.\n\t\t\t\tif ( isShallowEqual( prevBlocks, nextBlocks ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\treturn nextBlocks;\n\t\t\t} );\n\t\t} );\n\t}, [ sidebar ] );\n\n\tconst onChangeBlocks = useCallback(\n\t\t( nextBlocks ) => {\n\t\t\tsetBlocks( ( prevBlocks ) => {\n\t\t\t\tif ( isShallowEqual( prevBlocks, nextBlocks ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\tconst prevBlocksMap = new Map(\n\t\t\t\t\tprevBlocks.map( ( block ) => [\n\t\t\t\t\t\tgetWidgetIdFromBlock( block ),\n\t\t\t\t\t\tblock,\n\t\t\t\t\t] )\n\t\t\t\t);\n\n\t\t\t\tconst nextWidgets = nextBlocks.map( ( nextBlock ) => {\n\t\t\t\t\tconst widgetId = getWidgetIdFromBlock( nextBlock );\n\n\t\t\t\t\t// Update existing widgets.\n\t\t\t\t\tif ( widgetId && prevBlocksMap.has( widgetId ) ) {\n\t\t\t\t\t\tconst prevBlock = prevBlocksMap.get( widgetId );\n\t\t\t\t\t\tconst prevWidget = sidebar.getWidget( widgetId );\n\n\t\t\t\t\t\t// Bail out updates by returning the previous widgets.\n\t\t\t\t\t\t// Deep equality is necessary until the block editor's internals changes.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tfastDeepEqual( nextBlock, prevBlock ) &&\n\t\t\t\t\t\t\tprevWidget\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn prevWidget;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn blockToWidget( nextBlock, prevWidget );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add a new widget.\n\t\t\t\t\treturn blockToWidget( nextBlock );\n\t\t\t\t} );\n\n\t\t\t\t// Bail out updates if the updated widgets are the same.\n\t\t\t\tif ( isShallowEqual( sidebar.getWidgets(), nextWidgets ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\tconst addedWidgetIds = sidebar.setWidgets( nextWidgets );\n\n\t\t\t\treturn nextBlocks.reduce(\n\t\t\t\t\t( updatedNextBlocks, nextBlock, index ) => {\n\t\t\t\t\t\tconst addedWidgetId = addedWidgetIds[ index ];\n\n\t\t\t\t\t\tif ( addedWidgetId !== null ) {\n\t\t\t\t\t\t\t// Only create a new instance if necessary to prevent\n\t\t\t\t\t\t\t// the whole editor from re-rendering on every edit.\n\t\t\t\t\t\t\tif ( updatedNextBlocks === nextBlocks ) {\n\t\t\t\t\t\t\t\tupdatedNextBlocks = nextBlocks.slice();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tupdatedNextBlocks[ index ] = addWidgetIdToBlock(\n\t\t\t\t\t\t\t\tnextBlock,\n\t\t\t\t\t\t\t\taddedWidgetId\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn updatedNextBlocks;\n\t\t\t\t\t},\n\t\t\t\t\tnextBlocks\n\t\t\t\t);\n\t\t\t} );\n\t\t},\n\t\t[ sidebar ]\n\t);\n\n\treturn [ blocks, onChangeBlocks, onChangeBlocks ];\n}\n"]}
package/build/utils.js CHANGED
@@ -124,7 +124,9 @@ function widgetToBlock(_ref) {
124
124
  } = instance;
125
125
 
126
126
  if (idBase === 'block') {
127
- const parsedBlocks = (0, _blocks.parse)(raw.content, {
127
+ var _raw$content;
128
+
129
+ const parsedBlocks = (0, _blocks.parse)((_raw$content = raw.content) !== null && _raw$content !== void 0 ? _raw$content : '', {
128
130
  __unstableSkipAutop: true
129
131
  });
130
132
  block = parsedBlocks.length ? parsedBlocks[0] : (0, _blocks.createBlock)('core/paragraph', {});
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/customize-widgets/src/utils.js"],"names":["settingIdToWidgetId","settingId","matches","match","idBase","number","parseInt","blockToWidget","block","existingWidget","widget","isValidLegacyWidgetBlock","name","attributes","id","instance","encoded","hash","raw","rest","is_widget_customizer_js_value","encoded_serialized_instance","instance_hash_key","raw_instance","content","widgetClass","form","rendered","restExistingWidget","widgetToBlock","parsedBlocks","__unstableSkipAutop","length"],"mappings":"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","sourcesContent":["// @ts-check\n/**\n * WordPress dependencies\n */\nimport { serialize, parse, createBlock } from '@wordpress/blocks';\nimport { addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Convert settingId to widgetId.\n *\n * @param {string} settingId The setting id.\n * @return {string} The widget id.\n */\nexport function settingIdToWidgetId( settingId ) {\n\tconst matches = settingId.match( /^widget_(.+)(?:\\[(\\d+)\\])$/ );\n\n\tif ( matches ) {\n\t\tconst idBase = matches[ 1 ];\n\t\tconst number = parseInt( matches[ 2 ], 10 );\n\n\t\treturn `${ idBase }-${ number }`;\n\t}\n\n\treturn settingId;\n}\n\n/**\n * Transform a block to a customizable widget.\n *\n * @param {WPBlock} block The block to be transformed from.\n * @param {Object} existingWidget The widget to be extended from.\n * @return {Object} The transformed widget.\n */\nexport function blockToWidget( block, existingWidget = null ) {\n\tlet widget;\n\n\tconst isValidLegacyWidgetBlock =\n\t\tblock.name === 'core/legacy-widget' &&\n\t\t( block.attributes.id || block.attributes.instance );\n\n\tif ( isValidLegacyWidgetBlock ) {\n\t\tif ( block.attributes.id ) {\n\t\t\t// Widget that does not extend WP_Widget.\n\t\t\twidget = {\n\t\t\t\tid: block.attributes.id,\n\t\t\t};\n\t\t} else {\n\t\t\tconst { encoded, hash, raw, ...rest } = block.attributes.instance;\n\n\t\t\t// Widget that extends WP_Widget.\n\t\t\twidget = {\n\t\t\t\tidBase: block.attributes.idBase,\n\t\t\t\tinstance: {\n\t\t\t\t\t...existingWidget?.instance,\n\t\t\t\t\t// Required only for the customizer.\n\t\t\t\t\tis_widget_customizer_js_value: true,\n\t\t\t\t\tencoded_serialized_instance: encoded,\n\t\t\t\t\tinstance_hash_key: hash,\n\t\t\t\t\traw_instance: raw,\n\t\t\t\t\t...rest,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t} else {\n\t\tconst instance = {\n\t\t\tcontent: serialize( block ),\n\t\t};\n\t\twidget = {\n\t\t\tidBase: 'block',\n\t\t\twidgetClass: 'WP_Widget_Block',\n\t\t\tinstance: {\n\t\t\t\traw_instance: instance,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst { form, rendered, ...restExistingWidget } = existingWidget || {};\n\n\treturn {\n\t\t...restExistingWidget,\n\t\t...widget,\n\t};\n}\n\n/**\n * Transform a widget to a block.\n *\n * @param {Object} widget The widget to be transformed from.\n * @param {string} widget.id The widget id.\n * @param {string} widget.idBase The id base of the widget.\n * @param {number} widget.number The number/index of the widget.\n * @param {Object} widget.instance The instance of the widget.\n * @return {WPBlock} The transformed block.\n */\nexport function widgetToBlock( { id, idBase, number, instance } ) {\n\tlet block;\n\n\tconst {\n\t\tencoded_serialized_instance: encoded,\n\t\tinstance_hash_key: hash,\n\t\traw_instance: raw,\n\t\t...rest\n\t} = instance;\n\n\tif ( idBase === 'block' ) {\n\t\tconst parsedBlocks = parse( raw.content, {\n\t\t\t__unstableSkipAutop: true,\n\t\t} );\n\t\tblock = parsedBlocks.length\n\t\t\t? parsedBlocks[ 0 ]\n\t\t\t: createBlock( 'core/paragraph', {} );\n\t} else if ( number ) {\n\t\t// Widget that extends WP_Widget.\n\t\tblock = createBlock( 'core/legacy-widget', {\n\t\t\tidBase,\n\t\t\tinstance: {\n\t\t\t\tencoded,\n\t\t\t\thash,\n\t\t\t\traw,\n\t\t\t\t...rest,\n\t\t\t},\n\t\t} );\n\t} else {\n\t\t// Widget that does not extend WP_Widget.\n\t\tblock = createBlock( 'core/legacy-widget', {\n\t\t\tid,\n\t\t} );\n\t}\n\n\treturn addWidgetIdToBlock( block, id );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/customize-widgets/src/utils.js"],"names":["settingIdToWidgetId","settingId","matches","match","idBase","number","parseInt","blockToWidget","block","existingWidget","widget","isValidLegacyWidgetBlock","name","attributes","id","instance","encoded","hash","raw","rest","is_widget_customizer_js_value","encoded_serialized_instance","instance_hash_key","raw_instance","content","widgetClass","form","rendered","restExistingWidget","widgetToBlock","parsedBlocks","__unstableSkipAutop","length"],"mappings":"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","sourcesContent":["// @ts-check\n/**\n * WordPress dependencies\n */\nimport { serialize, parse, createBlock } from '@wordpress/blocks';\nimport { addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Convert settingId to widgetId.\n *\n * @param {string} settingId The setting id.\n * @return {string} The widget id.\n */\nexport function settingIdToWidgetId( settingId ) {\n\tconst matches = settingId.match( /^widget_(.+)(?:\\[(\\d+)\\])$/ );\n\n\tif ( matches ) {\n\t\tconst idBase = matches[ 1 ];\n\t\tconst number = parseInt( matches[ 2 ], 10 );\n\n\t\treturn `${ idBase }-${ number }`;\n\t}\n\n\treturn settingId;\n}\n\n/**\n * Transform a block to a customizable widget.\n *\n * @param {WPBlock} block The block to be transformed from.\n * @param {Object} existingWidget The widget to be extended from.\n * @return {Object} The transformed widget.\n */\nexport function blockToWidget( block, existingWidget = null ) {\n\tlet widget;\n\n\tconst isValidLegacyWidgetBlock =\n\t\tblock.name === 'core/legacy-widget' &&\n\t\t( block.attributes.id || block.attributes.instance );\n\n\tif ( isValidLegacyWidgetBlock ) {\n\t\tif ( block.attributes.id ) {\n\t\t\t// Widget that does not extend WP_Widget.\n\t\t\twidget = {\n\t\t\t\tid: block.attributes.id,\n\t\t\t};\n\t\t} else {\n\t\t\tconst { encoded, hash, raw, ...rest } = block.attributes.instance;\n\n\t\t\t// Widget that extends WP_Widget.\n\t\t\twidget = {\n\t\t\t\tidBase: block.attributes.idBase,\n\t\t\t\tinstance: {\n\t\t\t\t\t...existingWidget?.instance,\n\t\t\t\t\t// Required only for the customizer.\n\t\t\t\t\tis_widget_customizer_js_value: true,\n\t\t\t\t\tencoded_serialized_instance: encoded,\n\t\t\t\t\tinstance_hash_key: hash,\n\t\t\t\t\traw_instance: raw,\n\t\t\t\t\t...rest,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t} else {\n\t\tconst instance = {\n\t\t\tcontent: serialize( block ),\n\t\t};\n\t\twidget = {\n\t\t\tidBase: 'block',\n\t\t\twidgetClass: 'WP_Widget_Block',\n\t\t\tinstance: {\n\t\t\t\traw_instance: instance,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst { form, rendered, ...restExistingWidget } = existingWidget || {};\n\n\treturn {\n\t\t...restExistingWidget,\n\t\t...widget,\n\t};\n}\n\n/**\n * Transform a widget to a block.\n *\n * @param {Object} widget The widget to be transformed from.\n * @param {string} widget.id The widget id.\n * @param {string} widget.idBase The id base of the widget.\n * @param {number} widget.number The number/index of the widget.\n * @param {Object} widget.instance The instance of the widget.\n * @return {WPBlock} The transformed block.\n */\nexport function widgetToBlock( { id, idBase, number, instance } ) {\n\tlet block;\n\n\tconst {\n\t\tencoded_serialized_instance: encoded,\n\t\tinstance_hash_key: hash,\n\t\traw_instance: raw,\n\t\t...rest\n\t} = instance;\n\n\tif ( idBase === 'block' ) {\n\t\tconst parsedBlocks = parse( raw.content ?? '', {\n\t\t\t__unstableSkipAutop: true,\n\t\t} );\n\t\tblock = parsedBlocks.length\n\t\t\t? parsedBlocks[ 0 ]\n\t\t\t: createBlock( 'core/paragraph', {} );\n\t} else if ( number ) {\n\t\t// Widget that extends WP_Widget.\n\t\tblock = createBlock( 'core/legacy-widget', {\n\t\t\tidBase,\n\t\t\tinstance: {\n\t\t\t\tencoded,\n\t\t\t\thash,\n\t\t\t\traw,\n\t\t\t\t...rest,\n\t\t\t},\n\t\t} );\n\t} else {\n\t\t// Widget that does not extend WP_Widget.\n\t\tblock = createBlock( 'core/legacy-widget', {\n\t\t\tid,\n\t\t} );\n\t}\n\n\treturn addWidgetIdToBlock( block, id );\n}\n"]}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { useEffect } from '@wordpress/element';
5
5
  import { useShortcut, store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
6
+ import { isAppleOS } from '@wordpress/keycodes';
6
7
  import { useDispatch } from '@wordpress/data';
7
8
  import { __ } from '@wordpress/i18n';
8
9
 
@@ -49,7 +50,15 @@ function KeyboardShortcutsRegister() {
49
50
  keyCombination: {
50
51
  modifier: 'primaryShift',
51
52
  character: 'z'
52
- }
53
+ },
54
+ // Disable on Apple OS because it conflicts with the browser's
55
+ // history shortcut. It's a fine alias for both Windows and Linux.
56
+ // Since there's no conflict for Ctrl+Shift+Z on both Windows and
57
+ // Linux, we keep it as the default for consistency.
58
+ aliases: isAppleOS() ? [] : [{
59
+ modifier: 'primary',
60
+ character: 'y'
61
+ }]
53
62
  });
54
63
  registerShortcut({
55
64
  name: 'core/customize-widgets/save',
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/customize-widgets/src/components/keyboard-shortcuts/index.js"],"names":["useEffect","useShortcut","store","keyboardShortcutsStore","useDispatch","__","KeyboardShortcuts","undo","redo","save","event","preventDefault","KeyboardShortcutsRegister","registerShortcut","unregisterShortcut","name","category","description","keyCombination","modifier","character","Register"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,oBAA1B;AACA,SACCC,WADD,EAECC,KAAK,IAAIC,sBAFV,QAGO,+BAHP;AAIA,SAASC,WAAT,QAA4B,iBAA5B;AACA,SAASC,EAAT,QAAmB,iBAAnB;;AAEA,SAASC,iBAAT,OAAmD;AAAA,MAAvB;AAAEC,IAAAA,IAAF;AAAQC,IAAAA,IAAR;AAAcC,IAAAA;AAAd,GAAuB;AAClDR,EAAAA,WAAW,CAAE,6BAAF,EAAmCS,KAAF,IAAa;AACxDH,IAAAA,IAAI;AACJG,IAAAA,KAAK,CAACC,cAAN;AACA,GAHU,CAAX;AAKAV,EAAAA,WAAW,CAAE,6BAAF,EAAmCS,KAAF,IAAa;AACxDF,IAAAA,IAAI;AACJE,IAAAA,KAAK,CAACC,cAAN;AACA,GAHU,CAAX;AAKAV,EAAAA,WAAW,CAAE,6BAAF,EAAmCS,KAAF,IAAa;AACxDA,IAAAA,KAAK,CAACC,cAAN;AACAF,IAAAA,IAAI;AACJ,GAHU,CAAX;AAKA,SAAO,IAAP;AACA;;AAED,SAASG,yBAAT,GAAqC;AACpC,QAAM;AAAEC,IAAAA,gBAAF;AAAoBC,IAAAA;AAApB,MAA2CV,WAAW,CAC3DD,sBAD2D,CAA5D;AAIAH,EAAAA,SAAS,CAAE,MAAM;AAChBa,IAAAA,gBAAgB,CAAE;AACjBE,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAEZ,EAAE,CAAE,yBAAF,CAHE;AAIjBa,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUAP,IAAAA,gBAAgB,CAAE;AACjBE,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAEZ,EAAE,CAAE,sBAAF,CAHE;AAIjBa,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,cADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUAP,IAAAA,gBAAgB,CAAE;AACjBE,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAEZ,EAAE,CAAE,oBAAF,CAHE;AAIjBa,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUA,WAAO,MAAM;AACZN,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACAA,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACAA,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACA,KAJD;AAKA,GApCQ,EAoCN,CAAED,gBAAF,CApCM,CAAT;AAsCA,SAAO,IAAP;AACA;;AAEDP,iBAAiB,CAACe,QAAlB,GAA6BT,yBAA7B;AACA,eAAeN,iBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport {\n\tuseShortcut,\n\tstore as keyboardShortcutsStore,\n} from '@wordpress/keyboard-shortcuts';\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\nfunction KeyboardShortcuts( { undo, redo, save } ) {\n\tuseShortcut( 'core/customize-widgets/undo', ( event ) => {\n\t\tundo();\n\t\tevent.preventDefault();\n\t} );\n\n\tuseShortcut( 'core/customize-widgets/redo', ( event ) => {\n\t\tredo();\n\t\tevent.preventDefault();\n\t} );\n\n\tuseShortcut( 'core/customize-widgets/save', ( event ) => {\n\t\tevent.preventDefault();\n\t\tsave();\n\t} );\n\n\treturn null;\n}\n\nfunction KeyboardShortcutsRegister() {\n\tconst { registerShortcut, unregisterShortcut } = useDispatch(\n\t\tkeyboardShortcutsStore\n\t);\n\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/undo',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Undo your last changes.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/redo',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Redo your last undo.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryShift',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/save',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Save your changes.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 's',\n\t\t\t},\n\t\t} );\n\n\t\treturn () => {\n\t\t\tunregisterShortcut( 'core/customize-widgets/undo' );\n\t\t\tunregisterShortcut( 'core/customize-widgets/redo' );\n\t\t\tunregisterShortcut( 'core/customize-widgets/save' );\n\t\t};\n\t}, [ registerShortcut ] );\n\n\treturn null;\n}\n\nKeyboardShortcuts.Register = KeyboardShortcutsRegister;\nexport default KeyboardShortcuts;\n"]}
1
+ {"version":3,"sources":["@wordpress/customize-widgets/src/components/keyboard-shortcuts/index.js"],"names":["useEffect","useShortcut","store","keyboardShortcutsStore","isAppleOS","useDispatch","__","KeyboardShortcuts","undo","redo","save","event","preventDefault","KeyboardShortcutsRegister","registerShortcut","unregisterShortcut","name","category","description","keyCombination","modifier","character","aliases","Register"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,oBAA1B;AACA,SACCC,WADD,EAECC,KAAK,IAAIC,sBAFV,QAGO,+BAHP;AAIA,SAASC,SAAT,QAA0B,qBAA1B;AACA,SAASC,WAAT,QAA4B,iBAA5B;AACA,SAASC,EAAT,QAAmB,iBAAnB;;AAEA,SAASC,iBAAT,OAAmD;AAAA,MAAvB;AAAEC,IAAAA,IAAF;AAAQC,IAAAA,IAAR;AAAcC,IAAAA;AAAd,GAAuB;AAClDT,EAAAA,WAAW,CAAE,6BAAF,EAAmCU,KAAF,IAAa;AACxDH,IAAAA,IAAI;AACJG,IAAAA,KAAK,CAACC,cAAN;AACA,GAHU,CAAX;AAKAX,EAAAA,WAAW,CAAE,6BAAF,EAAmCU,KAAF,IAAa;AACxDF,IAAAA,IAAI;AACJE,IAAAA,KAAK,CAACC,cAAN;AACA,GAHU,CAAX;AAKAX,EAAAA,WAAW,CAAE,6BAAF,EAAmCU,KAAF,IAAa;AACxDA,IAAAA,KAAK,CAACC,cAAN;AACAF,IAAAA,IAAI;AACJ,GAHU,CAAX;AAKA,SAAO,IAAP;AACA;;AAED,SAASG,yBAAT,GAAqC;AACpC,QAAM;AAAEC,IAAAA,gBAAF;AAAoBC,IAAAA;AAApB,MAA2CV,WAAW,CAC3DF,sBAD2D,CAA5D;AAIAH,EAAAA,SAAS,CAAE,MAAM;AAChBc,IAAAA,gBAAgB,CAAE;AACjBE,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAEZ,EAAE,CAAE,yBAAF,CAHE;AAIjBa,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUAP,IAAAA,gBAAgB,CAAE;AACjBE,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAEZ,EAAE,CAAE,sBAAF,CAHE;AAIjBa,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,cADK;AAEfC,QAAAA,SAAS,EAAE;AAFI,OAJC;AAQjB;AACA;AACA;AACA;AACAC,MAAAA,OAAO,EAAElB,SAAS,KACf,EADe,GAEf,CACA;AACCgB,QAAAA,QAAQ,EAAE,SADX;AAECC,QAAAA,SAAS,EAAE;AAFZ,OADA;AAdc,KAAF,CAAhB;AAsBAP,IAAAA,gBAAgB,CAAE;AACjBE,MAAAA,IAAI,EAAE,6BADW;AAEjBC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAEZ,EAAE,CAAE,oBAAF,CAHE;AAIjBa,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AAUA,WAAO,MAAM;AACZN,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACAA,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACAA,MAAAA,kBAAkB,CAAE,6BAAF,CAAlB;AACA,KAJD;AAKA,GAhDQ,EAgDN,CAAED,gBAAF,CAhDM,CAAT;AAkDA,SAAO,IAAP;AACA;;AAEDP,iBAAiB,CAACgB,QAAlB,GAA6BV,yBAA7B;AACA,eAAeN,iBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport {\n\tuseShortcut,\n\tstore as keyboardShortcutsStore,\n} from '@wordpress/keyboard-shortcuts';\nimport { isAppleOS } from '@wordpress/keycodes';\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\nfunction KeyboardShortcuts( { undo, redo, save } ) {\n\tuseShortcut( 'core/customize-widgets/undo', ( event ) => {\n\t\tundo();\n\t\tevent.preventDefault();\n\t} );\n\n\tuseShortcut( 'core/customize-widgets/redo', ( event ) => {\n\t\tredo();\n\t\tevent.preventDefault();\n\t} );\n\n\tuseShortcut( 'core/customize-widgets/save', ( event ) => {\n\t\tevent.preventDefault();\n\t\tsave();\n\t} );\n\n\treturn null;\n}\n\nfunction KeyboardShortcutsRegister() {\n\tconst { registerShortcut, unregisterShortcut } = useDispatch(\n\t\tkeyboardShortcutsStore\n\t);\n\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/undo',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Undo your last changes.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/redo',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Redo your last undo.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryShift',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t\t// Disable on Apple OS because it conflicts with the browser's\n\t\t\t// history shortcut. It's a fine alias for both Windows and Linux.\n\t\t\t// Since there's no conflict for Ctrl+Shift+Z on both Windows and\n\t\t\t// Linux, we keep it as the default for consistency.\n\t\t\taliases: isAppleOS()\n\t\t\t\t? []\n\t\t\t\t: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmodifier: 'primary',\n\t\t\t\t\t\t\tcharacter: 'y',\n\t\t\t\t\t\t},\n\t\t\t\t ],\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/customize-widgets/save',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Save your changes.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 's',\n\t\t\t},\n\t\t} );\n\n\t\treturn () => {\n\t\t\tunregisterShortcut( 'core/customize-widgets/undo' );\n\t\t\tunregisterShortcut( 'core/customize-widgets/redo' );\n\t\t\tunregisterShortcut( 'core/customize-widgets/save' );\n\t\t};\n\t}, [ registerShortcut ] );\n\n\treturn null;\n}\n\nKeyboardShortcuts.Register = KeyboardShortcutsRegister;\nexport default KeyboardShortcuts;\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { isEqual } from 'lodash';
4
+ import fastDeepEqual from 'fast-deep-equal/es6';
5
5
  /**
6
6
  * WordPress dependencies
7
7
  */
@@ -59,7 +59,7 @@ export default function useSidebarBlockEditor(sidebar) {
59
59
  const prevWidget = sidebar.getWidget(widgetId); // Bail out updates by returning the previous widgets.
60
60
  // Deep equality is necessary until the block editor's internals changes.
61
61
 
62
- if (isEqual(nextBlock, prevBlock) && prevWidget) {
62
+ if (fastDeepEqual(nextBlock, prevBlock) && prevWidget) {
63
63
  return prevWidget;
64
64
  }
65
65
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/customize-widgets/src/components/sidebar-block-editor/use-sidebar-block-editor.js"],"names":["isEqual","useState","useEffect","useCallback","isShallowEqual","getWidgetIdFromBlock","addWidgetIdToBlock","blockToWidget","widgetToBlock","widgetsToBlocks","widgets","map","widget","useSidebarBlockEditor","sidebar","blocks","setBlocks","getWidgets","subscribe","prevWidgets","nextWidgets","prevBlocks","prevWidgetsMap","Map","id","prevBlocksMap","block","nextBlocks","nextWidget","prevWidget","get","onChangeBlocks","nextBlock","widgetId","has","prevBlock","getWidget","addedWidgetIds","setWidgets","reduce","updatedNextBlocks","index","addedWidgetId","slice"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAT,QAAwB,QAAxB;AAEA;AACA;AACA;;AACA,SAASC,QAAT,EAAmBC,SAAnB,EAA8BC,WAA9B,QAAiD,oBAAjD;AACA,OAAOC,cAAP,MAA2B,6BAA3B;AACA,SAASC,oBAAT,EAA+BC,kBAA/B,QAAyD,oBAAzD;AAEA;AACA;AACA;;AACA,SAASC,aAAT,EAAwBC,aAAxB,QAA6C,aAA7C;;AAEA,SAASC,eAAT,CAA0BC,OAA1B,EAAoC;AACnC,SAAOA,OAAO,CAACC,GAAR,CAAeC,MAAF,IAAcJ,aAAa,CAAEI,MAAF,CAAxC,CAAP;AACA;;AAED,eAAe,SAASC,qBAAT,CAAgCC,OAAhC,EAA0C;AACxD,QAAM,CAAEC,MAAF,EAAUC,SAAV,IAAwBf,QAAQ,CAAE,MACvCQ,eAAe,CAAEK,OAAO,CAACG,UAAR,EAAF,CADsB,CAAtC;AAIAf,EAAAA,SAAS,CAAE,MAAM;AAChB,WAAOY,OAAO,CAACI,SAAR,CAAmB,CAAEC,WAAF,EAAeC,WAAf,KAAgC;AACzDJ,MAAAA,SAAS,CAAIK,UAAF,IAAkB;AAC5B,cAAMC,cAAc,GAAG,IAAIC,GAAJ,CACtBJ,WAAW,CAACR,GAAZ,CAAmBC,MAAF,IAAc,CAAEA,MAAM,CAACY,EAAT,EAAaZ,MAAb,CAA/B,CADsB,CAAvB;AAGA,cAAMa,aAAa,GAAG,IAAIF,GAAJ,CACrBF,UAAU,CAACV,GAAX,CAAkBe,KAAF,IAAa,CAC5BrB,oBAAoB,CAAEqB,KAAF,CADQ,EAE5BA,KAF4B,CAA7B,CADqB,CAAtB;AAOA,cAAMC,UAAU,GAAGP,WAAW,CAACT,GAAZ,CAAmBiB,UAAF,IAAkB;AACrD,gBAAMC,UAAU,GAAGP,cAAc,CAACQ,GAAf,CAAoBF,UAAU,CAACJ,EAA/B,CAAnB,CADqD,CAGrD;;AACA,cAAKK,UAAU,IAAIA,UAAU,KAAKD,UAAlC,EAA+C;AAC9C,mBAAOH,aAAa,CAACK,GAAd,CAAmBF,UAAU,CAACJ,EAA9B,CAAP;AACA;;AAED,iBAAOhB,aAAa,CAAEoB,UAAF,CAApB;AACA,SATkB,CAAnB,CAX4B,CAsB5B;;AACA,YAAKxB,cAAc,CAAEiB,UAAF,EAAcM,UAAd,CAAnB,EAAgD;AAC/C,iBAAON,UAAP;AACA;;AAED,eAAOM,UAAP;AACA,OA5BQ,CAAT;AA6BA,KA9BM,CAAP;AA+BA,GAhCQ,EAgCN,CAAEb,OAAF,CAhCM,CAAT;AAkCA,QAAMiB,cAAc,GAAG5B,WAAW,CAC/BwB,UAAF,IAAkB;AACjBX,IAAAA,SAAS,CAAIK,UAAF,IAAkB;AAC5B,UAAKjB,cAAc,CAAEiB,UAAF,EAAcM,UAAd,CAAnB,EAAgD;AAC/C,eAAON,UAAP;AACA;;AAED,YAAMI,aAAa,GAAG,IAAIF,GAAJ,CACrBF,UAAU,CAACV,GAAX,CAAkBe,KAAF,IAAa,CAC5BrB,oBAAoB,CAAEqB,KAAF,CADQ,EAE5BA,KAF4B,CAA7B,CADqB,CAAtB;AAOA,YAAMN,WAAW,GAAGO,UAAU,CAAChB,GAAX,CAAkBqB,SAAF,IAAiB;AACpD,cAAMC,QAAQ,GAAG5B,oBAAoB,CAAE2B,SAAF,CAArC,CADoD,CAGpD;;AACA,YAAKC,QAAQ,IAAIR,aAAa,CAACS,GAAd,CAAmBD,QAAnB,CAAjB,EAAiD;AAChD,gBAAME,SAAS,GAAGV,aAAa,CAACK,GAAd,CAAmBG,QAAnB,CAAlB;AACA,gBAAMJ,UAAU,GAAGf,OAAO,CAACsB,SAAR,CAAmBH,QAAnB,CAAnB,CAFgD,CAIhD;AACA;;AACA,cAAKjC,OAAO,CAAEgC,SAAF,EAAaG,SAAb,CAAP,IAAmCN,UAAxC,EAAqD;AACpD,mBAAOA,UAAP;AACA;;AAED,iBAAOtB,aAAa,CAAEyB,SAAF,EAAaH,UAAb,CAApB;AACA,SAfmD,CAiBpD;;;AACA,eAAOtB,aAAa,CAAEyB,SAAF,CAApB;AACA,OAnBmB,CAApB,CAZ4B,CAiC5B;;AACA,UAAK5B,cAAc,CAAEU,OAAO,CAACG,UAAR,EAAF,EAAwBG,WAAxB,CAAnB,EAA2D;AAC1D,eAAOC,UAAP;AACA;;AAED,YAAMgB,cAAc,GAAGvB,OAAO,CAACwB,UAAR,CAAoBlB,WAApB,CAAvB;AAEA,aAAOO,UAAU,CAACY,MAAX,CACN,CAAEC,iBAAF,EAAqBR,SAArB,EAAgCS,KAAhC,KAA2C;AAC1C,cAAMC,aAAa,GAAGL,cAAc,CAAEI,KAAF,CAApC;;AAEA,YAAKC,aAAa,KAAK,IAAvB,EAA8B;AAC7B;AACA;AACA,cAAKF,iBAAiB,KAAKb,UAA3B,EAAwC;AACvCa,YAAAA,iBAAiB,GAAGb,UAAU,CAACgB,KAAX,EAApB;AACA;;AAEDH,UAAAA,iBAAiB,CAAEC,KAAF,CAAjB,GAA6BnC,kBAAkB,CAC9C0B,SAD8C,EAE9CU,aAF8C,CAA/C;AAIA;;AAED,eAAOF,iBAAP;AACA,OAlBK,EAmBNb,UAnBM,CAAP;AAqBA,KA7DQ,CAAT;AA8DA,GAhEgC,EAiEjC,CAAEb,OAAF,CAjEiC,CAAlC;AAoEA,SAAO,CAAEC,MAAF,EAAUgB,cAAV,EAA0BA,cAA1B,CAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { isEqual } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { getWidgetIdFromBlock, addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Internal dependencies\n */\nimport { blockToWidget, widgetToBlock } from '../../utils';\n\nfunction widgetsToBlocks( widgets ) {\n\treturn widgets.map( ( widget ) => widgetToBlock( widget ) );\n}\n\nexport default function useSidebarBlockEditor( sidebar ) {\n\tconst [ blocks, setBlocks ] = useState( () =>\n\t\twidgetsToBlocks( sidebar.getWidgets() )\n\t);\n\n\tuseEffect( () => {\n\t\treturn sidebar.subscribe( ( prevWidgets, nextWidgets ) => {\n\t\t\tsetBlocks( ( prevBlocks ) => {\n\t\t\t\tconst prevWidgetsMap = new Map(\n\t\t\t\t\tprevWidgets.map( ( widget ) => [ widget.id, widget ] )\n\t\t\t\t);\n\t\t\t\tconst prevBlocksMap = new Map(\n\t\t\t\t\tprevBlocks.map( ( block ) => [\n\t\t\t\t\t\tgetWidgetIdFromBlock( block ),\n\t\t\t\t\t\tblock,\n\t\t\t\t\t] )\n\t\t\t\t);\n\n\t\t\t\tconst nextBlocks = nextWidgets.map( ( nextWidget ) => {\n\t\t\t\t\tconst prevWidget = prevWidgetsMap.get( nextWidget.id );\n\n\t\t\t\t\t// Bail out updates.\n\t\t\t\t\tif ( prevWidget && prevWidget === nextWidget ) {\n\t\t\t\t\t\treturn prevBlocksMap.get( nextWidget.id );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn widgetToBlock( nextWidget );\n\t\t\t\t} );\n\n\t\t\t\t// Bail out updates.\n\t\t\t\tif ( isShallowEqual( prevBlocks, nextBlocks ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\treturn nextBlocks;\n\t\t\t} );\n\t\t} );\n\t}, [ sidebar ] );\n\n\tconst onChangeBlocks = useCallback(\n\t\t( nextBlocks ) => {\n\t\t\tsetBlocks( ( prevBlocks ) => {\n\t\t\t\tif ( isShallowEqual( prevBlocks, nextBlocks ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\tconst prevBlocksMap = new Map(\n\t\t\t\t\tprevBlocks.map( ( block ) => [\n\t\t\t\t\t\tgetWidgetIdFromBlock( block ),\n\t\t\t\t\t\tblock,\n\t\t\t\t\t] )\n\t\t\t\t);\n\n\t\t\t\tconst nextWidgets = nextBlocks.map( ( nextBlock ) => {\n\t\t\t\t\tconst widgetId = getWidgetIdFromBlock( nextBlock );\n\n\t\t\t\t\t// Update existing widgets.\n\t\t\t\t\tif ( widgetId && prevBlocksMap.has( widgetId ) ) {\n\t\t\t\t\t\tconst prevBlock = prevBlocksMap.get( widgetId );\n\t\t\t\t\t\tconst prevWidget = sidebar.getWidget( widgetId );\n\n\t\t\t\t\t\t// Bail out updates by returning the previous widgets.\n\t\t\t\t\t\t// Deep equality is necessary until the block editor's internals changes.\n\t\t\t\t\t\tif ( isEqual( nextBlock, prevBlock ) && prevWidget ) {\n\t\t\t\t\t\t\treturn prevWidget;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn blockToWidget( nextBlock, prevWidget );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add a new widget.\n\t\t\t\t\treturn blockToWidget( nextBlock );\n\t\t\t\t} );\n\n\t\t\t\t// Bail out updates if the updated widgets are the same.\n\t\t\t\tif ( isShallowEqual( sidebar.getWidgets(), nextWidgets ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\tconst addedWidgetIds = sidebar.setWidgets( nextWidgets );\n\n\t\t\t\treturn nextBlocks.reduce(\n\t\t\t\t\t( updatedNextBlocks, nextBlock, index ) => {\n\t\t\t\t\t\tconst addedWidgetId = addedWidgetIds[ index ];\n\n\t\t\t\t\t\tif ( addedWidgetId !== null ) {\n\t\t\t\t\t\t\t// Only create a new instance if necessary to prevent\n\t\t\t\t\t\t\t// the whole editor from re-rendering on every edit.\n\t\t\t\t\t\t\tif ( updatedNextBlocks === nextBlocks ) {\n\t\t\t\t\t\t\t\tupdatedNextBlocks = nextBlocks.slice();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tupdatedNextBlocks[ index ] = addWidgetIdToBlock(\n\t\t\t\t\t\t\t\tnextBlock,\n\t\t\t\t\t\t\t\taddedWidgetId\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn updatedNextBlocks;\n\t\t\t\t\t},\n\t\t\t\t\tnextBlocks\n\t\t\t\t);\n\t\t\t} );\n\t\t},\n\t\t[ sidebar ]\n\t);\n\n\treturn [ blocks, onChangeBlocks, onChangeBlocks ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/customize-widgets/src/components/sidebar-block-editor/use-sidebar-block-editor.js"],"names":["fastDeepEqual","useState","useEffect","useCallback","isShallowEqual","getWidgetIdFromBlock","addWidgetIdToBlock","blockToWidget","widgetToBlock","widgetsToBlocks","widgets","map","widget","useSidebarBlockEditor","sidebar","blocks","setBlocks","getWidgets","subscribe","prevWidgets","nextWidgets","prevBlocks","prevWidgetsMap","Map","id","prevBlocksMap","block","nextBlocks","nextWidget","prevWidget","get","onChangeBlocks","nextBlock","widgetId","has","prevBlock","getWidget","addedWidgetIds","setWidgets","reduce","updatedNextBlocks","index","addedWidgetId","slice"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { getWidgetIdFromBlock, addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Internal dependencies\n */\nimport { blockToWidget, widgetToBlock } from '../../utils';\n\nfunction widgetsToBlocks( widgets ) {\n\treturn widgets.map( ( widget ) => widgetToBlock( widget ) );\n}\n\nexport default function useSidebarBlockEditor( sidebar ) {\n\tconst [ blocks, setBlocks ] = useState( () =>\n\t\twidgetsToBlocks( sidebar.getWidgets() )\n\t);\n\n\tuseEffect( () => {\n\t\treturn sidebar.subscribe( ( prevWidgets, nextWidgets ) => {\n\t\t\tsetBlocks( ( prevBlocks ) => {\n\t\t\t\tconst prevWidgetsMap = new Map(\n\t\t\t\t\tprevWidgets.map( ( widget ) => [ widget.id, widget ] )\n\t\t\t\t);\n\t\t\t\tconst prevBlocksMap = new Map(\n\t\t\t\t\tprevBlocks.map( ( block ) => [\n\t\t\t\t\t\tgetWidgetIdFromBlock( block ),\n\t\t\t\t\t\tblock,\n\t\t\t\t\t] )\n\t\t\t\t);\n\n\t\t\t\tconst nextBlocks = nextWidgets.map( ( nextWidget ) => {\n\t\t\t\t\tconst prevWidget = prevWidgetsMap.get( nextWidget.id );\n\n\t\t\t\t\t// Bail out updates.\n\t\t\t\t\tif ( prevWidget && prevWidget === nextWidget ) {\n\t\t\t\t\t\treturn prevBlocksMap.get( nextWidget.id );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn widgetToBlock( nextWidget );\n\t\t\t\t} );\n\n\t\t\t\t// Bail out updates.\n\t\t\t\tif ( isShallowEqual( prevBlocks, nextBlocks ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\treturn nextBlocks;\n\t\t\t} );\n\t\t} );\n\t}, [ sidebar ] );\n\n\tconst onChangeBlocks = useCallback(\n\t\t( nextBlocks ) => {\n\t\t\tsetBlocks( ( prevBlocks ) => {\n\t\t\t\tif ( isShallowEqual( prevBlocks, nextBlocks ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\tconst prevBlocksMap = new Map(\n\t\t\t\t\tprevBlocks.map( ( block ) => [\n\t\t\t\t\t\tgetWidgetIdFromBlock( block ),\n\t\t\t\t\t\tblock,\n\t\t\t\t\t] )\n\t\t\t\t);\n\n\t\t\t\tconst nextWidgets = nextBlocks.map( ( nextBlock ) => {\n\t\t\t\t\tconst widgetId = getWidgetIdFromBlock( nextBlock );\n\n\t\t\t\t\t// Update existing widgets.\n\t\t\t\t\tif ( widgetId && prevBlocksMap.has( widgetId ) ) {\n\t\t\t\t\t\tconst prevBlock = prevBlocksMap.get( widgetId );\n\t\t\t\t\t\tconst prevWidget = sidebar.getWidget( widgetId );\n\n\t\t\t\t\t\t// Bail out updates by returning the previous widgets.\n\t\t\t\t\t\t// Deep equality is necessary until the block editor's internals changes.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tfastDeepEqual( nextBlock, prevBlock ) &&\n\t\t\t\t\t\t\tprevWidget\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn prevWidget;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn blockToWidget( nextBlock, prevWidget );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add a new widget.\n\t\t\t\t\treturn blockToWidget( nextBlock );\n\t\t\t\t} );\n\n\t\t\t\t// Bail out updates if the updated widgets are the same.\n\t\t\t\tif ( isShallowEqual( sidebar.getWidgets(), nextWidgets ) ) {\n\t\t\t\t\treturn prevBlocks;\n\t\t\t\t}\n\n\t\t\t\tconst addedWidgetIds = sidebar.setWidgets( nextWidgets );\n\n\t\t\t\treturn nextBlocks.reduce(\n\t\t\t\t\t( updatedNextBlocks, nextBlock, index ) => {\n\t\t\t\t\t\tconst addedWidgetId = addedWidgetIds[ index ];\n\n\t\t\t\t\t\tif ( addedWidgetId !== null ) {\n\t\t\t\t\t\t\t// Only create a new instance if necessary to prevent\n\t\t\t\t\t\t\t// the whole editor from re-rendering on every edit.\n\t\t\t\t\t\t\tif ( updatedNextBlocks === nextBlocks ) {\n\t\t\t\t\t\t\t\tupdatedNextBlocks = nextBlocks.slice();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tupdatedNextBlocks[ index ] = addWidgetIdToBlock(\n\t\t\t\t\t\t\t\tnextBlock,\n\t\t\t\t\t\t\t\taddedWidgetId\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn updatedNextBlocks;\n\t\t\t\t\t},\n\t\t\t\t\tnextBlocks\n\t\t\t\t);\n\t\t\t} );\n\t\t},\n\t\t[ sidebar ]\n\t);\n\n\treturn [ blocks, onChangeBlocks, onChangeBlocks ];\n}\n"]}
@@ -111,7 +111,9 @@ export function widgetToBlock(_ref) {
111
111
  } = instance;
112
112
 
113
113
  if (idBase === 'block') {
114
- const parsedBlocks = parse(raw.content, {
114
+ var _raw$content;
115
+
116
+ const parsedBlocks = parse((_raw$content = raw.content) !== null && _raw$content !== void 0 ? _raw$content : '', {
115
117
  __unstableSkipAutop: true
116
118
  });
117
119
  block = parsedBlocks.length ? parsedBlocks[0] : createBlock('core/paragraph', {});
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/customize-widgets/src/utils.js"],"names":["serialize","parse","createBlock","addWidgetIdToBlock","settingIdToWidgetId","settingId","matches","match","idBase","number","parseInt","blockToWidget","block","existingWidget","widget","isValidLegacyWidgetBlock","name","attributes","id","instance","encoded","hash","raw","rest","is_widget_customizer_js_value","encoded_serialized_instance","instance_hash_key","raw_instance","content","widgetClass","form","rendered","restExistingWidget","widgetToBlock","parsedBlocks","__unstableSkipAutop","length"],"mappings":"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","sourcesContent":["// @ts-check\n/**\n * WordPress dependencies\n */\nimport { serialize, parse, createBlock } from '@wordpress/blocks';\nimport { addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Convert settingId to widgetId.\n *\n * @param {string} settingId The setting id.\n * @return {string} The widget id.\n */\nexport function settingIdToWidgetId( settingId ) {\n\tconst matches = settingId.match( /^widget_(.+)(?:\\[(\\d+)\\])$/ );\n\n\tif ( matches ) {\n\t\tconst idBase = matches[ 1 ];\n\t\tconst number = parseInt( matches[ 2 ], 10 );\n\n\t\treturn `${ idBase }-${ number }`;\n\t}\n\n\treturn settingId;\n}\n\n/**\n * Transform a block to a customizable widget.\n *\n * @param {WPBlock} block The block to be transformed from.\n * @param {Object} existingWidget The widget to be extended from.\n * @return {Object} The transformed widget.\n */\nexport function blockToWidget( block, existingWidget = null ) {\n\tlet widget;\n\n\tconst isValidLegacyWidgetBlock =\n\t\tblock.name === 'core/legacy-widget' &&\n\t\t( block.attributes.id || block.attributes.instance );\n\n\tif ( isValidLegacyWidgetBlock ) {\n\t\tif ( block.attributes.id ) {\n\t\t\t// Widget that does not extend WP_Widget.\n\t\t\twidget = {\n\t\t\t\tid: block.attributes.id,\n\t\t\t};\n\t\t} else {\n\t\t\tconst { encoded, hash, raw, ...rest } = block.attributes.instance;\n\n\t\t\t// Widget that extends WP_Widget.\n\t\t\twidget = {\n\t\t\t\tidBase: block.attributes.idBase,\n\t\t\t\tinstance: {\n\t\t\t\t\t...existingWidget?.instance,\n\t\t\t\t\t// Required only for the customizer.\n\t\t\t\t\tis_widget_customizer_js_value: true,\n\t\t\t\t\tencoded_serialized_instance: encoded,\n\t\t\t\t\tinstance_hash_key: hash,\n\t\t\t\t\traw_instance: raw,\n\t\t\t\t\t...rest,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t} else {\n\t\tconst instance = {\n\t\t\tcontent: serialize( block ),\n\t\t};\n\t\twidget = {\n\t\t\tidBase: 'block',\n\t\t\twidgetClass: 'WP_Widget_Block',\n\t\t\tinstance: {\n\t\t\t\traw_instance: instance,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst { form, rendered, ...restExistingWidget } = existingWidget || {};\n\n\treturn {\n\t\t...restExistingWidget,\n\t\t...widget,\n\t};\n}\n\n/**\n * Transform a widget to a block.\n *\n * @param {Object} widget The widget to be transformed from.\n * @param {string} widget.id The widget id.\n * @param {string} widget.idBase The id base of the widget.\n * @param {number} widget.number The number/index of the widget.\n * @param {Object} widget.instance The instance of the widget.\n * @return {WPBlock} The transformed block.\n */\nexport function widgetToBlock( { id, idBase, number, instance } ) {\n\tlet block;\n\n\tconst {\n\t\tencoded_serialized_instance: encoded,\n\t\tinstance_hash_key: hash,\n\t\traw_instance: raw,\n\t\t...rest\n\t} = instance;\n\n\tif ( idBase === 'block' ) {\n\t\tconst parsedBlocks = parse( raw.content, {\n\t\t\t__unstableSkipAutop: true,\n\t\t} );\n\t\tblock = parsedBlocks.length\n\t\t\t? parsedBlocks[ 0 ]\n\t\t\t: createBlock( 'core/paragraph', {} );\n\t} else if ( number ) {\n\t\t// Widget that extends WP_Widget.\n\t\tblock = createBlock( 'core/legacy-widget', {\n\t\t\tidBase,\n\t\t\tinstance: {\n\t\t\t\tencoded,\n\t\t\t\thash,\n\t\t\t\traw,\n\t\t\t\t...rest,\n\t\t\t},\n\t\t} );\n\t} else {\n\t\t// Widget that does not extend WP_Widget.\n\t\tblock = createBlock( 'core/legacy-widget', {\n\t\t\tid,\n\t\t} );\n\t}\n\n\treturn addWidgetIdToBlock( block, id );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/customize-widgets/src/utils.js"],"names":["serialize","parse","createBlock","addWidgetIdToBlock","settingIdToWidgetId","settingId","matches","match","idBase","number","parseInt","blockToWidget","block","existingWidget","widget","isValidLegacyWidgetBlock","name","attributes","id","instance","encoded","hash","raw","rest","is_widget_customizer_js_value","encoded_serialized_instance","instance_hash_key","raw_instance","content","widgetClass","form","rendered","restExistingWidget","widgetToBlock","parsedBlocks","__unstableSkipAutop","length"],"mappings":"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","sourcesContent":["// @ts-check\n/**\n * WordPress dependencies\n */\nimport { serialize, parse, createBlock } from '@wordpress/blocks';\nimport { addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Convert settingId to widgetId.\n *\n * @param {string} settingId The setting id.\n * @return {string} The widget id.\n */\nexport function settingIdToWidgetId( settingId ) {\n\tconst matches = settingId.match( /^widget_(.+)(?:\\[(\\d+)\\])$/ );\n\n\tif ( matches ) {\n\t\tconst idBase = matches[ 1 ];\n\t\tconst number = parseInt( matches[ 2 ], 10 );\n\n\t\treturn `${ idBase }-${ number }`;\n\t}\n\n\treturn settingId;\n}\n\n/**\n * Transform a block to a customizable widget.\n *\n * @param {WPBlock} block The block to be transformed from.\n * @param {Object} existingWidget The widget to be extended from.\n * @return {Object} The transformed widget.\n */\nexport function blockToWidget( block, existingWidget = null ) {\n\tlet widget;\n\n\tconst isValidLegacyWidgetBlock =\n\t\tblock.name === 'core/legacy-widget' &&\n\t\t( block.attributes.id || block.attributes.instance );\n\n\tif ( isValidLegacyWidgetBlock ) {\n\t\tif ( block.attributes.id ) {\n\t\t\t// Widget that does not extend WP_Widget.\n\t\t\twidget = {\n\t\t\t\tid: block.attributes.id,\n\t\t\t};\n\t\t} else {\n\t\t\tconst { encoded, hash, raw, ...rest } = block.attributes.instance;\n\n\t\t\t// Widget that extends WP_Widget.\n\t\t\twidget = {\n\t\t\t\tidBase: block.attributes.idBase,\n\t\t\t\tinstance: {\n\t\t\t\t\t...existingWidget?.instance,\n\t\t\t\t\t// Required only for the customizer.\n\t\t\t\t\tis_widget_customizer_js_value: true,\n\t\t\t\t\tencoded_serialized_instance: encoded,\n\t\t\t\t\tinstance_hash_key: hash,\n\t\t\t\t\traw_instance: raw,\n\t\t\t\t\t...rest,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t} else {\n\t\tconst instance = {\n\t\t\tcontent: serialize( block ),\n\t\t};\n\t\twidget = {\n\t\t\tidBase: 'block',\n\t\t\twidgetClass: 'WP_Widget_Block',\n\t\t\tinstance: {\n\t\t\t\traw_instance: instance,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst { form, rendered, ...restExistingWidget } = existingWidget || {};\n\n\treturn {\n\t\t...restExistingWidget,\n\t\t...widget,\n\t};\n}\n\n/**\n * Transform a widget to a block.\n *\n * @param {Object} widget The widget to be transformed from.\n * @param {string} widget.id The widget id.\n * @param {string} widget.idBase The id base of the widget.\n * @param {number} widget.number The number/index of the widget.\n * @param {Object} widget.instance The instance of the widget.\n * @return {WPBlock} The transformed block.\n */\nexport function widgetToBlock( { id, idBase, number, instance } ) {\n\tlet block;\n\n\tconst {\n\t\tencoded_serialized_instance: encoded,\n\t\tinstance_hash_key: hash,\n\t\traw_instance: raw,\n\t\t...rest\n\t} = instance;\n\n\tif ( idBase === 'block' ) {\n\t\tconst parsedBlocks = parse( raw.content ?? '', {\n\t\t\t__unstableSkipAutop: true,\n\t\t} );\n\t\tblock = parsedBlocks.length\n\t\t\t? parsedBlocks[ 0 ]\n\t\t\t: createBlock( 'core/paragraph', {} );\n\t} else if ( number ) {\n\t\t// Widget that extends WP_Widget.\n\t\tblock = createBlock( 'core/legacy-widget', {\n\t\t\tidBase,\n\t\t\tinstance: {\n\t\t\t\tencoded,\n\t\t\t\thash,\n\t\t\t\traw,\n\t\t\t\t...rest,\n\t\t\t},\n\t\t} );\n\t} else {\n\t\t// Widget that does not extend WP_Widget.\n\t\tblock = createBlock( 'core/legacy-widget', {\n\t\t\tid,\n\t\t} );\n\t}\n\n\treturn addWidgetIdToBlock( block, id );\n}\n"]}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Converts a hex value into the rgb equivalent.
3
+ *
4
+ * @param {string} hex - the hexadecimal value to convert
5
+ * @return {string} comma separated rgb values
6
+ */
1
7
  /**
2
8
  * Colors
3
9
  */
@@ -11,6 +17,12 @@
11
17
  * Don't add to this sheet unless you're pretty sure the value will be reused in many places.
12
18
  * For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
13
19
  */
20
+ /**
21
+ * Converts a hex value into the rgb equivalent.
22
+ *
23
+ * @param {string} hex - the hexadecimal value to convert
24
+ * @return {string} comma separated rgb values
25
+ */
14
26
  /**
15
27
  * Colors
16
28
  */
@@ -46,15 +58,15 @@
46
58
  * @param {string} hex - the hexadecimal value to convert
47
59
  * @return {string} comma separated rgb values
48
60
  */
49
- /**
50
- * Breakpoint mixins
51
- */
52
61
  /**
53
62
  * Long content fade mixin
54
63
  *
55
64
  * Creates a fading overlay to signify that the content is longer
56
65
  * than the space allows.
57
66
  */
67
+ /**
68
+ * Breakpoint mixins
69
+ */
58
70
  /**
59
71
  * Focus styles.
60
72
  */
@@ -82,6 +94,8 @@
82
94
  --wp-admin-theme-color-darker-20: #005a87;
83
95
  --wp-admin-theme-color-darker-20--rgb: 0, 90, 135;
84
96
  --wp-admin-border-width-focus: 2px;
97
+ --wp-block-synced-color: #7a00df;
98
+ --wp-block-synced-color--rgb: 122, 0, 223;
85
99
  }
86
100
  @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
87
101
  :root {
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Converts a hex value into the rgb equivalent.
3
+ *
4
+ * @param {string} hex - the hexadecimal value to convert
5
+ * @return {string} comma separated rgb values
6
+ */
1
7
  /**
2
8
  * Colors
3
9
  */
@@ -11,6 +17,12 @@
11
17
  * Don't add to this sheet unless you're pretty sure the value will be reused in many places.
12
18
  * For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
13
19
  */
20
+ /**
21
+ * Converts a hex value into the rgb equivalent.
22
+ *
23
+ * @param {string} hex - the hexadecimal value to convert
24
+ * @return {string} comma separated rgb values
25
+ */
14
26
  /**
15
27
  * Colors
16
28
  */
@@ -46,15 +58,15 @@
46
58
  * @param {string} hex - the hexadecimal value to convert
47
59
  * @return {string} comma separated rgb values
48
60
  */
49
- /**
50
- * Breakpoint mixins
51
- */
52
61
  /**
53
62
  * Long content fade mixin
54
63
  *
55
64
  * Creates a fading overlay to signify that the content is longer
56
65
  * than the space allows.
57
66
  */
67
+ /**
68
+ * Breakpoint mixins
69
+ */
58
70
  /**
59
71
  * Focus styles.
60
72
  */
@@ -82,6 +94,8 @@
82
94
  --wp-admin-theme-color-darker-20: #005a87;
83
95
  --wp-admin-theme-color-darker-20--rgb: 0, 90, 135;
84
96
  --wp-admin-border-width-focus: 2px;
97
+ --wp-block-synced-color: #7a00df;
98
+ --wp-block-synced-color--rgb: 122, 0, 223;
85
99
  }
86
100
  @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
87
101
  :root {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/customize-widgets",
3
- "version": "3.19.0",
3
+ "version": "4.1.0",
4
4
  "description": "Widgets blocks in Customizer Module for WordPress.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -24,34 +24,34 @@
24
24
  "react-native": "src/index",
25
25
  "dependencies": {
26
26
  "@babel/runtime": "^7.16.0",
27
- "@wordpress/block-editor": "^10.5.0",
28
- "@wordpress/block-library": "^7.19.0",
29
- "@wordpress/blocks": "^11.21.0",
30
- "@wordpress/components": "^22.1.0",
31
- "@wordpress/compose": "^5.20.0",
32
- "@wordpress/core-data": "^5.5.0",
33
- "@wordpress/data": "^7.6.0",
34
- "@wordpress/dom": "^3.22.0",
35
- "@wordpress/element": "^4.20.0",
36
- "@wordpress/hooks": "^3.22.0",
37
- "@wordpress/i18n": "^4.22.0",
38
- "@wordpress/icons": "^9.13.0",
39
- "@wordpress/interface": "^4.21.0",
40
- "@wordpress/is-shallow-equal": "^4.22.0",
41
- "@wordpress/keyboard-shortcuts": "^3.20.0",
42
- "@wordpress/keycodes": "^3.22.0",
43
- "@wordpress/media-utils": "^4.13.0",
44
- "@wordpress/preferences": "^2.14.0",
45
- "@wordpress/widgets": "^2.20.0",
27
+ "@wordpress/block-editor": "^11.1.0",
28
+ "@wordpress/block-library": "^8.1.0",
29
+ "@wordpress/blocks": "^12.1.0",
30
+ "@wordpress/components": "^23.1.0",
31
+ "@wordpress/compose": "^6.1.0",
32
+ "@wordpress/core-data": "^6.1.0",
33
+ "@wordpress/data": "^8.1.0",
34
+ "@wordpress/dom": "^3.24.0",
35
+ "@wordpress/element": "^5.1.0",
36
+ "@wordpress/hooks": "^3.24.0",
37
+ "@wordpress/i18n": "^4.24.0",
38
+ "@wordpress/icons": "^9.15.0",
39
+ "@wordpress/interface": "^5.1.0",
40
+ "@wordpress/is-shallow-equal": "^4.24.0",
41
+ "@wordpress/keyboard-shortcuts": "^4.1.0",
42
+ "@wordpress/keycodes": "^3.24.0",
43
+ "@wordpress/media-utils": "^4.15.0",
44
+ "@wordpress/preferences": "^3.1.0",
45
+ "@wordpress/widgets": "^3.1.0",
46
46
  "classnames": "^2.3.1",
47
- "lodash": "^4.17.21"
47
+ "fast-deep-equal": "^3.1.3"
48
48
  },
49
49
  "peerDependencies": {
50
- "react": "^17.0.0",
51
- "react-dom": "^17.0.0"
50
+ "react": "^18.0.0",
51
+ "react-dom": "^18.0.0"
52
52
  },
53
53
  "publishConfig": {
54
54
  "access": "public"
55
55
  },
56
- "gitHead": "7ac04f446242452d3cb24372f9ca58f0cae97715"
56
+ "gitHead": "200bee7b06b15f6fa655e25b6ab69cbd6b49a357"
57
57
  }
@@ -6,6 +6,7 @@ import {
6
6
  useShortcut,
7
7
  store as keyboardShortcutsStore,
8
8
  } from '@wordpress/keyboard-shortcuts';
9
+ import { isAppleOS } from '@wordpress/keycodes';
9
10
  import { useDispatch } from '@wordpress/data';
10
11
  import { __ } from '@wordpress/i18n';
11
12
 
@@ -52,6 +53,18 @@ function KeyboardShortcutsRegister() {
52
53
  modifier: 'primaryShift',
53
54
  character: 'z',
54
55
  },
56
+ // Disable on Apple OS because it conflicts with the browser's
57
+ // history shortcut. It's a fine alias for both Windows and Linux.
58
+ // Since there's no conflict for Ctrl+Shift+Z on both Windows and
59
+ // Linux, we keep it as the default for consistency.
60
+ aliases: isAppleOS()
61
+ ? []
62
+ : [
63
+ {
64
+ modifier: 'primary',
65
+ character: 'y',
66
+ },
67
+ ],
55
68
  } );
56
69
 
57
70
  registerShortcut( {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { isEqual } from 'lodash';
4
+ import fastDeepEqual from 'fast-deep-equal/es6';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -82,7 +82,10 @@ export default function useSidebarBlockEditor( sidebar ) {
82
82
 
83
83
  // Bail out updates by returning the previous widgets.
84
84
  // Deep equality is necessary until the block editor's internals changes.
85
- if ( isEqual( nextBlock, prevBlock ) && prevWidget ) {
85
+ if (
86
+ fastDeepEqual( nextBlock, prevBlock ) &&
87
+ prevWidget
88
+ ) {
86
89
  return prevWidget;
87
90
  }
88
91
 
package/src/utils.js CHANGED
@@ -103,7 +103,7 @@ export function widgetToBlock( { id, idBase, number, instance } ) {
103
103
  } = instance;
104
104
 
105
105
  if ( idBase === 'block' ) {
106
- const parsedBlocks = parse( raw.content, {
106
+ const parsedBlocks = parse( raw.content ?? '', {
107
107
  __unstableSkipAutop: true,
108
108
  } );
109
109
  block = parsedBlocks.length