153 lines
8.7 KiB
JavaScript
153 lines
8.7 KiB
JavaScript
import {focusWithoutScrolling as $7215afc6de606d6b$export$de79e2c695e052f3} from "./focusWithoutScrolling.mjs";
|
|
import {isMac as $c87311424ea30a05$export$9ac100e40613ea10, isWebKit as $c87311424ea30a05$export$78551043582a6a98, isFirefox as $c87311424ea30a05$export$b7d78993b74f766d, isIPad as $c87311424ea30a05$export$7bef049ce92e4224} from "./platform.mjs";
|
|
import $g3jFn$react, {createContext as $g3jFn$createContext, useMemo as $g3jFn$useMemo, useContext as $g3jFn$useContext} from "react";
|
|
|
|
/*
|
|
* Copyright 2023 Adobe. All rights reserved.
|
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
* governing permissions and limitations under the License.
|
|
*/
|
|
|
|
|
|
const $ea8dcbcb9ea1b556$var$RouterContext = /*#__PURE__*/ (0, $g3jFn$createContext)({
|
|
isNative: true,
|
|
open: $ea8dcbcb9ea1b556$var$openSyntheticLink,
|
|
useHref: (href)=>href
|
|
});
|
|
function $ea8dcbcb9ea1b556$export$323e4fc2fa4753fb(props) {
|
|
let { children: children, navigate: navigate, useHref: useHref } = props;
|
|
let ctx = (0, $g3jFn$useMemo)(()=>({
|
|
isNative: false,
|
|
open: (target, modifiers, href, routerOptions)=>{
|
|
$ea8dcbcb9ea1b556$var$getSyntheticLink(target, (link)=>{
|
|
if ($ea8dcbcb9ea1b556$export$efa8c9099e530235(link, modifiers)) navigate(href, routerOptions);
|
|
else $ea8dcbcb9ea1b556$export$95185d699e05d4d7(link, modifiers);
|
|
});
|
|
},
|
|
useHref: useHref || ((href)=>href)
|
|
}), [
|
|
navigate,
|
|
useHref
|
|
]);
|
|
return /*#__PURE__*/ (0, $g3jFn$react).createElement($ea8dcbcb9ea1b556$var$RouterContext.Provider, {
|
|
value: ctx
|
|
}, children);
|
|
}
|
|
function $ea8dcbcb9ea1b556$export$9a302a45f65d0572() {
|
|
return (0, $g3jFn$useContext)($ea8dcbcb9ea1b556$var$RouterContext);
|
|
}
|
|
function $ea8dcbcb9ea1b556$export$efa8c9099e530235(link, modifiers) {
|
|
// Use getAttribute here instead of link.target. Firefox will default link.target to "_parent" when inside an iframe.
|
|
let target = link.getAttribute('target');
|
|
return (!target || target === '_self') && link.origin === location.origin && !link.hasAttribute('download') && !modifiers.metaKey && // open in new tab (mac)
|
|
!modifiers.ctrlKey && // open in new tab (windows)
|
|
!modifiers.altKey && // download
|
|
!modifiers.shiftKey;
|
|
}
|
|
function $ea8dcbcb9ea1b556$export$95185d699e05d4d7(target, modifiers, setOpening = true) {
|
|
var _window_event_type, _window_event;
|
|
let { metaKey: metaKey, ctrlKey: ctrlKey, altKey: altKey, shiftKey: shiftKey } = modifiers;
|
|
// Firefox does not recognize keyboard events as a user action by default, and the popup blocker
|
|
// will prevent links with target="_blank" from opening. However, it does allow the event if the
|
|
// Command/Control key is held, which opens the link in a background tab. This seems like the best we can do.
|
|
// See https://bugzilla.mozilla.org/show_bug.cgi?id=257870 and https://bugzilla.mozilla.org/show_bug.cgi?id=746640.
|
|
if ((0, $c87311424ea30a05$export$b7d78993b74f766d)() && ((_window_event = window.event) === null || _window_event === void 0 ? void 0 : (_window_event_type = _window_event.type) === null || _window_event_type === void 0 ? void 0 : _window_event_type.startsWith('key')) && target.target === '_blank') {
|
|
if ((0, $c87311424ea30a05$export$9ac100e40613ea10)()) metaKey = true;
|
|
else ctrlKey = true;
|
|
}
|
|
// WebKit does not support firing click events with modifier keys, but does support keyboard events.
|
|
// https://github.com/WebKit/WebKit/blob/c03d0ac6e6db178f90923a0a63080b5ca210d25f/Source/WebCore/html/HTMLAnchorElement.cpp#L184
|
|
let event = (0, $c87311424ea30a05$export$78551043582a6a98)() && (0, $c87311424ea30a05$export$9ac100e40613ea10)() && !(0, $c87311424ea30a05$export$7bef049ce92e4224)() && process.env.NODE_ENV !== 'test' ? new KeyboardEvent('keydown', {
|
|
keyIdentifier: 'Enter',
|
|
metaKey: metaKey,
|
|
ctrlKey: ctrlKey,
|
|
altKey: altKey,
|
|
shiftKey: shiftKey
|
|
}) : new MouseEvent('click', {
|
|
metaKey: metaKey,
|
|
ctrlKey: ctrlKey,
|
|
altKey: altKey,
|
|
shiftKey: shiftKey,
|
|
bubbles: true,
|
|
cancelable: true
|
|
});
|
|
$ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = setOpening;
|
|
(0, $7215afc6de606d6b$export$de79e2c695e052f3)(target);
|
|
target.dispatchEvent(event);
|
|
$ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = false;
|
|
}
|
|
// https://github.com/parcel-bundler/parcel/issues/8724
|
|
$ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = false;
|
|
function $ea8dcbcb9ea1b556$var$getSyntheticLink(target, open) {
|
|
if (target instanceof HTMLAnchorElement) open(target);
|
|
else if (target.hasAttribute('data-href')) {
|
|
let link = document.createElement('a');
|
|
link.href = target.getAttribute('data-href');
|
|
if (target.hasAttribute('data-target')) link.target = target.getAttribute('data-target');
|
|
if (target.hasAttribute('data-rel')) link.rel = target.getAttribute('data-rel');
|
|
if (target.hasAttribute('data-download')) link.download = target.getAttribute('data-download');
|
|
if (target.hasAttribute('data-ping')) link.ping = target.getAttribute('data-ping');
|
|
if (target.hasAttribute('data-referrer-policy')) link.referrerPolicy = target.getAttribute('data-referrer-policy');
|
|
target.appendChild(link);
|
|
open(link);
|
|
target.removeChild(link);
|
|
}
|
|
}
|
|
function $ea8dcbcb9ea1b556$var$openSyntheticLink(target, modifiers) {
|
|
$ea8dcbcb9ea1b556$var$getSyntheticLink(target, (link)=>$ea8dcbcb9ea1b556$export$95185d699e05d4d7(link, modifiers));
|
|
}
|
|
function $ea8dcbcb9ea1b556$export$bdc77b0c0a3a85d6(props) {
|
|
let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();
|
|
var _props_href;
|
|
const href = router.useHref((_props_href = props.href) !== null && _props_href !== void 0 ? _props_href : '');
|
|
return {
|
|
'data-href': props.href ? href : undefined,
|
|
'data-target': props.target,
|
|
'data-rel': props.rel,
|
|
'data-download': props.download,
|
|
'data-ping': props.ping,
|
|
'data-referrer-policy': props.referrerPolicy
|
|
};
|
|
}
|
|
function $ea8dcbcb9ea1b556$export$51437d503373d223(props) {
|
|
return {
|
|
'data-href': props.href,
|
|
'data-target': props.target,
|
|
'data-rel': props.rel,
|
|
'data-download': props.download,
|
|
'data-ping': props.ping,
|
|
'data-referrer-policy': props.referrerPolicy
|
|
};
|
|
}
|
|
function $ea8dcbcb9ea1b556$export$7e924b3091a3bd18(props) {
|
|
let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();
|
|
var _props_href;
|
|
const href = router.useHref((_props_href = props === null || props === void 0 ? void 0 : props.href) !== null && _props_href !== void 0 ? _props_href : '');
|
|
return {
|
|
href: (props === null || props === void 0 ? void 0 : props.href) ? href : undefined,
|
|
target: props === null || props === void 0 ? void 0 : props.target,
|
|
rel: props === null || props === void 0 ? void 0 : props.rel,
|
|
download: props === null || props === void 0 ? void 0 : props.download,
|
|
ping: props === null || props === void 0 ? void 0 : props.ping,
|
|
referrerPolicy: props === null || props === void 0 ? void 0 : props.referrerPolicy
|
|
};
|
|
}
|
|
function $ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f(e, router, href, routerOptions) {
|
|
// If a custom router is provided, prevent default and forward if this link should client navigate.
|
|
if (!router.isNative && e.currentTarget instanceof HTMLAnchorElement && e.currentTarget.href && // If props are applied to a router Link component, it may have already prevented default.
|
|
!e.isDefaultPrevented() && $ea8dcbcb9ea1b556$export$efa8c9099e530235(e.currentTarget, e) && href) {
|
|
e.preventDefault();
|
|
router.open(e.currentTarget, e, href, routerOptions);
|
|
}
|
|
}
|
|
|
|
|
|
export {$ea8dcbcb9ea1b556$export$323e4fc2fa4753fb as RouterProvider, $ea8dcbcb9ea1b556$export$efa8c9099e530235 as shouldClientNavigate, $ea8dcbcb9ea1b556$export$95185d699e05d4d7 as openLink, $ea8dcbcb9ea1b556$export$9a302a45f65d0572 as useRouter, $ea8dcbcb9ea1b556$export$bdc77b0c0a3a85d6 as useSyntheticLinkProps, $ea8dcbcb9ea1b556$export$51437d503373d223 as getSyntheticLinkProps, $ea8dcbcb9ea1b556$export$7e924b3091a3bd18 as useLinkProps, $ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f as handleLinkClick};
|
|
//# sourceMappingURL=openLink.module.js.map
|