From 5b9a861ca59b2094649fbf4d01e576786ce675e7 Mon Sep 17 00:00:00 2001 From: iOS Date: Sun, 7 Aug 2022 19:42:25 +0200 Subject: [PATCH] sunday update --- .obsidian/plugins/notion-like-tables/main.js | 1272 +++++++++-------- .../plugins/notion-like-tables/manifest.json | 2 +- .../plugins/notion-like-tables/styles.css | 23 +- .../obsidian-activity-history/data.json | 14 +- .obsidian/plugins/obsidian-commits/data.json | 180 ++- .../plugins/obsidian-dice-roller/main.js | 2 +- .../obsidian-dice-roller/manifest.json | 2 +- .../obsidian-reminder-plugin/data.json | 34 +- .../plugins/obsidian-sortable/manifest.json | 2 +- .../plugins/obsidian-sortable/styles.css | 9 +- .obsidian/workspace | 24 +- 00.01 Admin/Calendars/2022-08-05.md | 6 +- 00.01 Admin/Calendars/2022-08-06.md | 105 ++ 00.01 Admin/Calendars/2022-08-07.md | 104 ++ 00.03 News/Disaster at 18,200 feet.md | 487 +++++++ ...had to ‘nanny him’ through lockdown.md | 2 +- ... and shares them with a grateful public.md | 127 ++ ...d Go. Sex Bracelet Hysteria Is Forever..md | 141 ++ ...l Russell The Greatest Winner in Sports.md | 107 ++ 00.03 News/Sam Taggart’s Hard Sell.md | 297 ++++ ...buse How Mormon officials let it happen.md | 241 ++++ .../The Most Surveilled Place in America.md | 209 +++ ...ling with themselves again Marina Hyde.md | 62 + 01.01 Life Orga/@Finances.md | 3 +- 01.02 Home/Household.md | 3 +- 05.02 Networks/Configuring UFW.md | 6 +- 06.02 Investments/Crypto Tasks.md | 3 +- 06.02 Investments/Equity Tasks.md | 3 +- 06.02 Investments/VC Tasks.md | 3 +- 29 files changed, 2768 insertions(+), 705 deletions(-) create mode 100644 00.01 Admin/Calendars/2022-08-06.md create mode 100644 00.01 Admin/Calendars/2022-08-07.md create mode 100644 00.03 News/Disaster at 18,200 feet.md create mode 100644 00.03 News/Librarian finds love notes, doodles in books and shares them with a grateful public.md create mode 100644 00.03 News/Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever..md create mode 100644 00.03 News/Remembering Bill Russell The Greatest Winner in Sports.md create mode 100644 00.03 News/Sam Taggart’s Hard Sell.md create mode 100644 00.03 News/Seven years of sex abuse How Mormon officials let it happen.md create mode 100644 00.03 News/The Most Surveilled Place in America.md create mode 100644 00.03 News/While Britain burns, the Tories are … fiddling with themselves again Marina Hyde.md diff --git a/.obsidian/plugins/notion-like-tables/main.js b/.obsidian/plugins/notion-like-tables/main.js index 5c0138ed..4bb5a153 100644 --- a/.obsidian/plugins/notion-like-tables/main.js +++ b/.obsidian/plugins/notion-like-tables/main.js @@ -1649,14 +1649,14 @@ var require_react_development = __commonJS({ var createElement$1 = createElementWithValidation; var cloneElement$1 = cloneElementWithValidation; var createFactory = createFactoryWithValidation; - var Children = { + var Children2 = { map: mapChildren, forEach: forEachChildren, count: countChildren, toArray, only: onlyChild }; - exports.Children = Children; + exports.Children = Children2; exports.Component = Component; exports.PureComponent = PureComponent; exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals; @@ -2486,11 +2486,11 @@ var require_react_dom_development = __commonJS({ if (true) { (function() { "use strict"; - var React35 = require_react(); + var React42 = require_react(); var _assign = require_object_assign(); var Scheduler = require_scheduler(); var tracing = require_tracing(); - var ReactSharedInternals = React35.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + var ReactSharedInternals = React42.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; function warn(format) { { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { @@ -2522,7 +2522,7 @@ var require_react_dom_development = __commonJS({ Function.prototype.apply.call(console[level], console, argsWithFormat); } } - if (!React35) { + if (!React42) { { throw Error("ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM."); } @@ -3738,7 +3738,7 @@ var require_react_dom_development = __commonJS({ var didWarnInvalidChild = false; function flattenChildren(children) { var content = ""; - React35.Children.forEach(children, function(child) { + React42.Children.forEach(children, function(child) { if (child == null) { return; } @@ -3749,7 +3749,7 @@ var require_react_dom_development = __commonJS({ function validateProps(element, props) { { if (typeof props.children === "object" && props.children !== null) { - React35.Children.forEach(props.children, function(child) { + React42.Children.forEach(props.children, function(child) { if (child == null) { return; } @@ -10942,7 +10942,7 @@ var require_react_dom_development = __commonJS({ } var fakeInternalInstance = {}; var isArray = Array.isArray; - var emptyRefsObject = new React35.Component().refs; + var emptyRefsObject = new React42.Component().refs; var didWarnAboutStateAssignmentForComponent; var didWarnAboutUninitializedState; var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate; @@ -21498,7 +21498,7 @@ var require_cjs = __commonJS({ // node_modules/html-react-parser/lib/utilities.js var require_utilities2 = __commonJS({ "node_modules/html-react-parser/lib/utilities.js"(exports, module2) { - var React35 = require_react(); + var React42 = require_react(); var styleToJS = require_cjs().default; function invertObject(obj, override) { if (!obj || typeof obj !== "object") { @@ -21553,7 +21553,7 @@ var require_utilities2 = __commonJS({ props.style = {}; } } - var PRESERVE_CUSTOM_ATTRIBUTES = React35.version.split(".")[0] >= 16; + var PRESERVE_CUSTOM_ATTRIBUTES = React42.version.split(".")[0] >= 16; var elementsWithNoTextChildren = new Set([ "tr", "tbody", @@ -21639,14 +21639,14 @@ var require_attributes_to_props = __commonJS({ // node_modules/html-react-parser/lib/dom-to-react.js var require_dom_to_react = __commonJS({ "node_modules/html-react-parser/lib/dom-to-react.js"(exports, module2) { - var React35 = require_react(); + var React42 = require_react(); var attributesToProps2 = require_attributes_to_props(); var utilities = require_utilities2(); var setStyleProp = utilities.setStyleProp; var canTextBeChildOfNode = utilities.canTextBeChildOfNode; function domToReact2(nodes, options) { options = options || {}; - var library = options.library || React35; + var library = options.library || React42; var cloneElement = library.cloneElement; var createElement = library.createElement; var isValidElement = library.isValidElement; @@ -24866,7 +24866,7 @@ var require_isMuiElement = __commonJS({ value: true }); exports.default = isMuiElement; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -24906,7 +24906,7 @@ var require_isMuiElement = __commonJS({ return newObj; } function isMuiElement(element, muiNames) { - return /* @__PURE__ */ React35.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1; + return /* @__PURE__ */ React42.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1; } } }); @@ -25002,7 +25002,7 @@ var require_useEnhancedEffect = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -25041,7 +25041,7 @@ var require_useEnhancedEffect = __commonJS({ } return newObj; } - var useEnhancedEffect = typeof window !== "undefined" ? React35.useLayoutEffect : React35.useEffect; + var useEnhancedEffect = typeof window !== "undefined" ? React42.useLayoutEffect : React42.useEffect; var _default = useEnhancedEffect; exports.default = _default; } @@ -25055,7 +25055,7 @@ var require_useId = __commonJS({ value: true }); exports.default = useId2; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -25096,9 +25096,9 @@ var require_useId = __commonJS({ } var globalId = 0; function useGlobalId(idOverride) { - const [defaultId, setDefaultId] = React35.useState(idOverride); + const [defaultId, setDefaultId] = React42.useState(idOverride); const id = idOverride || defaultId; - React35.useEffect(() => { + React42.useEffect(() => { if (defaultId == null) { globalId += 1; setDefaultId(`mui-${globalId}`); @@ -25106,7 +25106,7 @@ var require_useId = __commonJS({ }, [defaultId]); return id; } - var maybeReactUseId = React35["useId"]; + var maybeReactUseId = React42["useId"]; function useId2(idOverride) { if (maybeReactUseId !== void 0) { const reactId = maybeReactUseId(); @@ -25146,7 +25146,7 @@ var require_useControlled = __commonJS({ value: true }); exports.default = useControlled; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -25193,25 +25193,25 @@ var require_useControlled = __commonJS({ }) { const { current: isControlled - } = React35.useRef(controlled !== void 0); - const [valueState, setValue] = React35.useState(defaultProp); + } = React42.useRef(controlled !== void 0); + const [valueState, setValue] = React42.useState(defaultProp); const value = isControlled ? controlled : valueState; if (true) { - React35.useEffect(() => { + React42.useEffect(() => { if (isControlled !== (controlled !== void 0)) { console.error([`MUI: A component is changing the ${isControlled ? "" : "un"}controlled ${state} state of ${name} to be ${isControlled ? "un" : ""}controlled.`, "Elements should not switch from uncontrolled to controlled (or vice versa).", `Decide between using a controlled or uncontrolled ${name} element for the lifetime of the component.`, "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", "More info: https://fb.me/react-controlled-components"].join("\n")); } }, [state, name, controlled]); const { current: defaultValue - } = React35.useRef(defaultProp); - React35.useEffect(() => { + } = React42.useRef(defaultProp); + React42.useEffect(() => { if (!isControlled && defaultValue !== defaultProp) { console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. To suppress this warning opt to use a controlled ${name}.`].join("\n")); } }, [JSON.stringify(defaultProp)]); } - const setValueIfUncontrolled = React35.useCallback((newValue) => { + const setValueIfUncontrolled = React42.useCallback((newValue) => { if (!isControlled) { setValue(newValue); } @@ -25230,7 +25230,7 @@ var require_useEventCallback = __commonJS({ value: true }); exports.default = useEventCallback; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _useEnhancedEffect = _interopRequireDefault(require_useEnhancedEffect()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -25271,11 +25271,11 @@ var require_useEventCallback = __commonJS({ return newObj; } function useEventCallback(fn) { - const ref = React35.useRef(fn); + const ref = React42.useRef(fn); (0, _useEnhancedEffect.default)(() => { ref.current = fn; }); - return React35.useCallback((...args) => (0, ref.current)(...args), []); + return React42.useCallback((...args) => (0, ref.current)(...args), []); } } }); @@ -25289,7 +25289,7 @@ var require_useForkRef = __commonJS({ value: true }); exports.default = useForkRef; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _setRef = _interopRequireDefault(require_setRef()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -25330,7 +25330,7 @@ var require_useForkRef = __commonJS({ return newObj; } function useForkRef(refA, refB) { - return React35.useMemo(() => { + return React42.useMemo(() => { if (refA == null && refB == null) { return null; } @@ -25352,7 +25352,7 @@ var require_useIsFocusVisible = __commonJS({ }); exports.default = useIsFocusVisible; exports.teardown = teardown; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -25466,12 +25466,12 @@ var require_useIsFocusVisible = __commonJS({ return hadKeyboardEvent || focusTriggersKeyboardModality(target); } function useIsFocusVisible() { - const ref = React35.useCallback((node) => { + const ref = React42.useCallback((node) => { if (node != null) { prepare(node.ownerDocument); } }, []); - const isFocusVisibleRef = React35.useRef(false); + const isFocusVisibleRef = React42.useRef(false); function handleBlurVisible() { if (isFocusVisibleRef.current) { hadFocusVisibleRecently = true; @@ -25581,7 +25581,7 @@ var require_usePreviousProps = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -25621,8 +25621,8 @@ var require_usePreviousProps = __commonJS({ return newObj; } var usePreviousProps = (value) => { - const ref = React35.useRef({}); - React35.useEffect(() => { + const ref = React42.useRef({}); + React42.useEffect(() => { ref.current = value; }); return ref.current; @@ -26270,7 +26270,7 @@ var require_useAutocomplete = __commonJS({ exports.createFilterOptions = createFilterOptions; exports.default = useAutocomplete; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -26411,14 +26411,14 @@ var require_useAutocomplete = __commonJS({ } return optionLabel; }; - const ignoreFocus = React35.useRef(false); - const firstFocus = React35.useRef(true); - const inputRef = React35.useRef(null); - const listboxRef = React35.useRef(null); - const [anchorEl, setAnchorEl] = React35.useState(null); - const [focusedTag, setFocusedTag] = React35.useState(-1); + const ignoreFocus = React42.useRef(false); + const firstFocus = React42.useRef(true); + const inputRef = React42.useRef(null); + const listboxRef = React42.useRef(null); + const [anchorEl, setAnchorEl] = React42.useState(null); + const [focusedTag, setFocusedTag] = React42.useState(-1); const defaultHighlighted = autoHighlight ? 0 : -1; - const highlightedIndexRef = React35.useRef(defaultHighlighted); + const highlightedIndexRef = React42.useRef(defaultHighlighted); const [value, setValueState] = (0, _utils.unstable_useControlled)({ controlled: valueProp, default: defaultValue, @@ -26430,8 +26430,8 @@ var require_useAutocomplete = __commonJS({ name: componentName, state: "inputValue" }); - const [focused, setFocused] = React35.useState(false); - const resetInputValue = React35.useCallback((event, newValue) => { + const [focused, setFocused] = React42.useState(false); + const resetInputValue = React42.useCallback((event, newValue) => { const isOptionSelected = multiple ? value.length < newValue.length : newValue !== null; if (!isOptionSelected && !clearOnBlur) { return; @@ -26453,8 +26453,8 @@ var require_useAutocomplete = __commonJS({ onInputChange(event, newInputValue, "reset"); } }, [getOptionLabel, inputValue, multiple, onInputChange, setInputValueState, clearOnBlur, value]); - const prevValue = React35.useRef(); - React35.useEffect(() => { + const prevValue = React42.useRef(); + React42.useEffect(() => { const valueChange = value !== prevValue.current; prevValue.current = value; if (focused && !valueChange) { @@ -26471,7 +26471,7 @@ var require_useAutocomplete = __commonJS({ name: componentName, state: "open" }); - const [inputPristine, setInputPristine] = React35.useState(true); + const [inputPristine, setInputPristine] = React42.useState(true); const inputValueIsSelectedValue = !multiple && value != null && inputValue === getOptionLabel(value); const popupOpen = open && !readOnly; const filteredOptions = popupOpen ? filterOptions(options.filter((option) => { @@ -26499,7 +26499,7 @@ var require_useAutocomplete = __commonJS({ anchorEl.querySelector(`[data-tag-index="${tagToFocus}"]`).focus(); } }); - React35.useEffect(() => { + React42.useEffect(() => { if (multiple && focusedTag > value.length - 1) { setFocusedTag(-1); focusTag(-1); @@ -26632,7 +26632,7 @@ var require_useAutocomplete = __commonJS({ } } }); - const syncHighlightedIndex = React35.useCallback(() => { + const syncHighlightedIndex = React42.useCallback(() => { if (!popupOpen) { return; } @@ -26690,7 +26690,7 @@ var require_useAutocomplete = __commonJS({ syncHighlightedIndex(); }); if (true) { - React35.useEffect(() => { + React42.useEffect(() => { if (!inputRef.current || inputRef.current.nodeName !== "INPUT") { if (inputRef.current && inputRef.current.nodeName === "TEXTAREA") { console.warn([`A textarea element was provided to ${componentName} where input was expected.`, `This is not a supported scenario but it may work under certain conditions.`, `A textarea keyboard navigation may conflict with Autocomplete controls (e.g. enter and arrow keys).`, `Make sure to test keyboard navigation and add custom event handlers if necessary.`].join("\n")); @@ -26700,7 +26700,7 @@ var require_useAutocomplete = __commonJS({ } }, [componentName]); } - React35.useEffect(() => { + React42.useEffect(() => { syncHighlightedIndex(); }, [syncHighlightedIndex]); const handleOpen = (event) => { @@ -26735,7 +26735,7 @@ var require_useAutocomplete = __commonJS({ } setValueState(newValue); }; - const isTouch = React35.useRef(false); + const isTouch = React42.useRef(false); const selectNewValue = (event, option, reasonProp = "selectOption", origin = "options") => { let reason = reasonProp; let newValue = option; @@ -27415,7 +27415,7 @@ var require_react_jsx_runtime_development = __commonJS({ if (true) { (function() { "use strict"; - var React35 = require_react(); + var React42 = require_react(); var _assign = require_object_assign(); var REACT_ELEMENT_TYPE = 60103; var REACT_PORTAL_TYPE = 60106; @@ -27472,7 +27472,7 @@ var require_react_jsx_runtime_development = __commonJS({ } return null; } - var ReactSharedInternals = React35.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + var ReactSharedInternals = React42.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; function error(format) { { for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { @@ -28274,7 +28274,7 @@ var require_BackdropUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _composeClasses = _interopRequireDefault(require_composeClasses2()); @@ -28330,7 +28330,7 @@ var require_BackdropUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _backdropUnstyledClasses.getBackdropUtilityClass, classes); }; - var BackdropUnstyled = /* @__PURE__ */ React35.forwardRef(function BackdropUnstyled2(props, ref) { + var BackdropUnstyled = /* @__PURE__ */ React42.forwardRef(function BackdropUnstyled2(props, ref) { const { classes: classesProp, className, @@ -28531,7 +28531,7 @@ var require_BadgeUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -28592,7 +28592,7 @@ var require_BadgeUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _badgeUnstyledClasses.getBadgeUtilityClass, classes); }; - var BadgeUnstyled = /* @__PURE__ */ React35.forwardRef(function BadgeUnstyled2(props, ref) { + var BadgeUnstyled = /* @__PURE__ */ React42.forwardRef(function BadgeUnstyled2(props, ref) { const { anchorOrigin: anchorOriginProp = { vertical: "top", @@ -28779,7 +28779,7 @@ var require_useButton = __commonJS({ }); exports.default = useButton; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); var _extractEventHandlers = _interopRequireDefault(require_extractEventHandlers()); function _getRequireWildcardCache(nodeInterop) { @@ -28830,19 +28830,19 @@ var require_useButton = __commonJS({ to, type } = parameters; - const buttonRef = React35.useRef(); - const [active, setActive] = React35.useState(false); + const buttonRef = React42.useRef(); + const [active, setActive] = React42.useState(false); const { isFocusVisibleRef, onFocus: handleFocusVisible, onBlur: handleBlurVisible, ref: focusVisibleRef } = (0, _utils.unstable_useIsFocusVisible)(); - const [focusVisible, setFocusVisible] = React35.useState(false); + const [focusVisible, setFocusVisible] = React42.useState(false); if (disabled && focusVisible) { setFocusVisible(false); } - React35.useEffect(() => { + React42.useEffect(() => { isFocusVisibleRef.current = focusVisible; }, [focusVisible, isFocusVisibleRef]); const createHandleMouseLeave = (otherHandlers) => (event) => { @@ -28928,7 +28928,7 @@ var require_useButton = __commonJS({ }; const handleOwnRef = (0, _utils.unstable_useForkRef)(focusVisibleRef, buttonRef); const handleRef = (0, _utils.unstable_useForkRef)(ref, handleOwnRef); - const [hostElementName, setHostElementName] = React35.useState(""); + const [hostElementName, setHostElementName] = React42.useState(""); const updateRef = (instance) => { var _instance$tagName; setHostElementName((_instance$tagName = instance == null ? void 0 : instance.tagName) != null ? _instance$tagName : ""); @@ -28987,7 +28987,7 @@ var require_ButtonUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -29046,7 +29046,7 @@ var require_ButtonUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _buttonUnstyledClasses.getButtonUnstyledUtilityClass, {}); }; - var ButtonUnstyled = /* @__PURE__ */ React35.forwardRef(function ButtonUnstyled2(props, forwardedRef) { + var ButtonUnstyled = /* @__PURE__ */ React42.forwardRef(function ButtonUnstyled2(props, forwardedRef) { var _ref, _componentsProps$root; const { className, @@ -29056,7 +29056,7 @@ var require_ButtonUnstyled = __commonJS({ children, action } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); - const buttonRef = React35.useRef(); + const buttonRef = React42.useRef(); const handleRef = (0, _utils.unstable_useForkRef)(buttonRef, forwardedRef); const ButtonRoot = (_ref = component != null ? component : components.Root) != null ? _ref : "button"; const { @@ -29068,7 +29068,7 @@ var require_ButtonUnstyled = __commonJS({ component: ButtonRoot, ref: handleRef })); - React35.useImperativeHandle(action, () => ({ + React42.useImperativeHandle(action, () => ({ focusVisible: () => { setFocusVisible(true); buttonRef.current.focus(); @@ -29249,7 +29249,7 @@ var require_ClickAwayListener = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _utils = require_utils(); var _jsxRuntime = require_jsx_runtime(); @@ -29305,11 +29305,11 @@ var require_ClickAwayListener = __commonJS({ onClickAway, touchEvent = "onTouchEnd" } = props; - const movedRef = React35.useRef(false); - const nodeRef = React35.useRef(null); - const activatedRef = React35.useRef(false); - const syntheticEventRef = React35.useRef(false); - React35.useEffect(() => { + const movedRef = React42.useRef(false); + const nodeRef = React42.useRef(null); + const activatedRef = React42.useRef(false); + const syntheticEventRef = React42.useRef(false); + React42.useEffect(() => { setTimeout(() => { activatedRef.current = true; }, 0); @@ -29352,7 +29352,7 @@ var require_ClickAwayListener = __commonJS({ if (touchEvent !== false) { childrenProps[touchEvent] = createHandleSynthetic(touchEvent); } - React35.useEffect(() => { + React42.useEffect(() => { if (touchEvent !== false) { const mappedTouchEvent = mapEventPropToEvent(touchEvent); const doc = (0, _utils.unstable_ownerDocument)(nodeRef.current); @@ -29371,7 +29371,7 @@ var require_ClickAwayListener = __commonJS({ if (mouseEvent !== false) { childrenProps[mouseEvent] = createHandleSynthetic(mouseEvent); } - React35.useEffect(() => { + React42.useEffect(() => { if (mouseEvent !== false) { const mappedMouseEvent = mapEventPropToEvent(mouseEvent); const doc = (0, _utils.unstable_ownerDocument)(nodeRef.current); @@ -29382,8 +29382,8 @@ var require_ClickAwayListener = __commonJS({ } return void 0; }, [handleClickAway, mouseEvent]); - return /* @__PURE__ */ (0, _jsxRuntime.jsx)(React35.Fragment, { - children: /* @__PURE__ */ React35.cloneElement(children, childrenProps) + return /* @__PURE__ */ (0, _jsxRuntime.jsx)(React42.Fragment, { + children: /* @__PURE__ */ React42.cloneElement(children, childrenProps) }); } true ? ClickAwayListener.propTypes = { @@ -29479,7 +29479,7 @@ var require_FormControlContext = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -29518,7 +29518,7 @@ var require_FormControlContext = __commonJS({ } return newObj; } - var FormControlUnstyledContext = /* @__PURE__ */ React35.createContext(void 0); + var FormControlUnstyledContext = /* @__PURE__ */ React42.createContext(void 0); if (true) { FormControlUnstyledContext.displayName = "FormControlUnstyledContext"; } @@ -29559,7 +29559,7 @@ var require_FormControlUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -29609,7 +29609,7 @@ var require_FormControlUnstyled = __commonJS({ function hasValue(value) { return value != null && !(Array.isArray(value) && value.length === 0) && value !== ""; } - var FormControlUnstyled = /* @__PURE__ */ React35.forwardRef(function FormControlUnstyled2(props, ref) { + var FormControlUnstyled = /* @__PURE__ */ React42.forwardRef(function FormControlUnstyled2(props, ref) { var _ref; const { defaultValue, @@ -29632,7 +29632,7 @@ var require_FormControlUnstyled = __commonJS({ state: "value" }); const filled = hasValue(value); - const [focusedState, setFocused] = React35.useState(false); + const [focusedState, setFocused] = React42.useState(false); if (disabled && focusedState) { setFocused(false); } @@ -29647,7 +29647,7 @@ var require_FormControlUnstyled = __commonJS({ let registerEffect = () => { }; if (true) { - const registeredInput = React35.useRef(false); + const registeredInput = React42.useRef(false); registerEffect = () => { if (registeredInput.current) { console.error(["MUI: There are multiple `Input` components inside a FormControl.", "This creates visual inconsistencies, only use one `Input`."].join("\n")); @@ -29722,7 +29722,7 @@ var require_useFormControl = __commonJS({ value: true }); exports.default = useFormControlUnstyled; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _FormControlContext = _interopRequireDefault(require_FormControlContext()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -29763,7 +29763,7 @@ var require_useFormControl = __commonJS({ return newObj; } function useFormControlUnstyled() { - return React35.useContext(_FormControlContext.default); + return React42.useContext(_FormControlContext.default); } } }); @@ -29910,7 +29910,7 @@ var require_useInput = __commonJS({ exports.default = useInput; var _extends2 = _interopRequireDefault(require_extends()); var _utils = require_utils(); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _useFormControl = _interopRequireDefault(require_useFormControl()); var _extractEventHandlers = _interopRequireDefault(require_extractEventHandlers()); function _getRequireWildcardCache(nodeInterop) { @@ -29981,19 +29981,19 @@ var require_useInput = __commonJS({ } const { current: isControlled - } = React35.useRef(value != null); - const handleInputRefWarning = React35.useCallback((instance) => { + } = React42.useRef(value != null); + const handleInputRefWarning = React42.useCallback((instance) => { if (true) { if (instance && instance.nodeName !== "INPUT" && !instance.focus) { console.error(["MUI: You have provided a `components.Input` to the input component", "that does not correctly handle the `ref` prop.", "Make sure the `ref` prop is called with a HTMLInputElement."].join("\n")); } } }, []); - const internalInputRef = React35.useRef(null); + const internalInputRef = React42.useRef(null); const handleIncomingRef = (0, _utils.unstable_useForkRef)(inputRef, handleInputRefWarning); const handleInputRef = (0, _utils.unstable_useForkRef)(internalInputRef, handleIncomingRef); - const [focused, setFocused] = React35.useState(false); - React35.useEffect(() => { + const [focused, setFocused] = React42.useState(false); + React42.useEffect(() => { if (!formControlContext && disabled && focused) { setFocused(false); onBlur == null ? void 0 : onBlur(); @@ -30093,7 +30093,7 @@ var require_InputUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _clsx = _interopRequireDefault(require_clsx()); var _propTypes = _interopRequireDefault(require_prop_types()); var _appendOwnerState = _interopRequireDefault(require_appendOwnerState()); @@ -30140,7 +30140,7 @@ var require_InputUnstyled = __commonJS({ } return newObj; } - var InputUnstyled = /* @__PURE__ */ React35.forwardRef(function InputUnstyled2(props, ref) { + var InputUnstyled = /* @__PURE__ */ React42.forwardRef(function InputUnstyled2(props, ref) { var _componentsProps$inpu, _ref, _componentsProps$root, _components$Input, _componentsProps$inpu2; const { "aria-describedby": ariaDescribedby, @@ -30643,7 +30643,7 @@ var require_useControllableReducer = __commonJS({ value: true }); exports.default = useControllableReducer; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); var _useListbox = require_useListbox_types(); var _areArraysEqual = _interopRequireDefault(require_areArraysEqual()); @@ -30686,17 +30686,17 @@ var require_useControllableReducer = __commonJS({ return newObj; } function useReducerReturnValueHandler(state, value, options, optionComparer, setValueState, onValueChange, onHighlightChange) { - const valueRef = React35.useRef(value); + const valueRef = React42.useRef(value); valueRef.current = value; - const onValueChangeRef = React35.useRef(onValueChange); - React35.useEffect(() => { + const onValueChangeRef = React42.useRef(onValueChange); + React42.useEffect(() => { onValueChangeRef.current = onValueChange; }, [onValueChange]); - const onHighlightChangeRef = React35.useRef(onHighlightChange); - React35.useEffect(() => { + const onHighlightChangeRef = React42.useRef(onHighlightChange); + React42.useEffect(() => { onHighlightChangeRef.current = onHighlightChange; }, [onHighlightChange]); - React35.useEffect(() => { + React42.useEffect(() => { if (Array.isArray(state.selectedValue)) { if ((0, _areArraysEqual.default)(state.selectedValue, valueRef.current)) { return; @@ -30710,7 +30710,7 @@ var require_useControllableReducer = __commonJS({ (_onValueChangeRef$cur = onValueChangeRef.current) == null ? void 0 : _onValueChangeRef$cur.call(onValueChangeRef, state.selectedValue); } }, [state.selectedValue, setValueState, optionComparer]); - React35.useEffect(() => { + React42.useEffect(() => { var _onHighlightChangeRef; (_onHighlightChangeRef = onHighlightChangeRef.current) == null ? void 0 : _onHighlightChangeRef.call(onHighlightChangeRef, state.highlightedValue); }, [state.highlightedValue]); @@ -30724,21 +30724,21 @@ var require_useControllableReducer = __commonJS({ options, optionComparer } = props; - const propsRef = React35.useRef(props); + const propsRef = React42.useRef(props); propsRef.current = props; const [value, setValueState] = (0, _utils.unstable_useControlled)({ controlled: controlledValue, default: defaultValue, name: "useListbox" }); - const previousValueRef = React35.useRef(null); - const [state, dispatch] = React35.useReducer(externalReducer != null ? externalReducer : internalReducer, { + const previousValueRef = React42.useRef(null); + const [state, dispatch] = React42.useReducer(externalReducer != null ? externalReducer : internalReducer, { highlightedValue: null, selectedValue: value }); - const optionComparerRef = React35.useRef(optionComparer); + const optionComparerRef = React42.useRef(optionComparer); optionComparerRef.current = optionComparer; - React35.useEffect(() => { + React42.useEffect(() => { if (controlledValue === void 0) { return; } @@ -30770,7 +30770,7 @@ var require_useListbox = __commonJS({ }); exports.default = useListbox; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); var _useListbox = require_useListbox_types(); var _defaultListboxReducer = _interopRequireDefault(require_defaultListboxReducer()); @@ -30843,17 +30843,17 @@ var require_useListbox = __commonJS({ multiple, optionComparer }); - const listboxRef = React35.useRef(null); + const listboxRef = React42.useRef(null); const handleRef = (0, _utils.unstable_useForkRef)(externalListboxRef, listboxRef); const [{ highlightedValue, selectedValue }, dispatch] = (0, _useControllableReducer.default)(_defaultListboxReducer.default, externalReducer, propsWithDefaults); - const highlightedIndex = React35.useMemo(() => { + const highlightedIndex = React42.useMemo(() => { return highlightedValue == null ? -1 : options.findIndex((option) => optionComparer(option, highlightedValue)); }, [highlightedValue, options, optionComparer]); - const previousOptions = React35.useRef([]); - React35.useEffect(() => { + const previousOptions = React42.useRef([]); + React42.useEffect(() => { if ((0, _areArraysEqual.default)(previousOptions.current, options, optionComparer)) { return; } @@ -30865,13 +30865,13 @@ var require_useListbox = __commonJS({ }); previousOptions.current = options; }, [options, optionComparer, dispatch]); - const setSelectedValue = React35.useCallback((option) => { + const setSelectedValue = React42.useCallback((option) => { dispatch({ type: _useListbox.ActionTypes.setValue, value: option }); }, [dispatch]); - const setHighlightedValue = React35.useCallback((option) => { + const setHighlightedValue = React42.useCallback((option) => { dispatch({ type: _useListbox.ActionTypes.setHighlight, highlight: option @@ -30987,7 +30987,7 @@ var require_useListbox = __commonJS({ role: "option" }); }; - React35.useDebugValue({ + React42.useDebugValue({ highlightedOption: options[highlightedIndex], selectedOption: selectedValue }); @@ -31056,7 +31056,7 @@ var require_MenuUnstyledContext = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -31095,7 +31095,7 @@ var require_MenuUnstyledContext = __commonJS({ } return newObj; } - var MenuUnstyledContext = /* @__PURE__ */ React35.createContext(null); + var MenuUnstyledContext = /* @__PURE__ */ React42.createContext(null); MenuUnstyledContext.displayName = "MenuUnstyledContext"; var _default = MenuUnstyledContext; exports.default = _default; @@ -31133,7 +31133,7 @@ var require_useMenu = __commonJS({ }); exports.default = useMenu2; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); var _ListboxUnstyled = require_ListboxUnstyled(); function _getRequireWildcardCache(nodeInterop) { @@ -31193,17 +31193,17 @@ var require_useMenu = __commonJS({ onClose, listboxId } = parameters; - const [menuItems, setMenuItems] = React35.useState({}); - const listboxRef = React35.useRef(null); + const [menuItems, setMenuItems] = React42.useState({}); + const listboxRef = React42.useRef(null); const handleRef = (0, _utils.unstable_useForkRef)(listboxRef, listboxRefProp); - const registerItem = React35.useCallback((id, metadata) => { + const registerItem = React42.useCallback((id, metadata) => { setMenuItems((previousState) => { const newState = (0, _extends2.default)({}, previousState); newState[id] = metadata; return newState; }); }, []); - const unregisterItem = React35.useCallback((id) => { + const unregisterItem = React42.useCallback((id) => { setMenuItems((previousState) => { const newState = (0, _extends2.default)({}, previousState); delete newState[id]; @@ -31228,17 +31228,17 @@ var require_useMenu = __commonJS({ stateReducer, disabledItemsFocusable: true }); - const highlightFirstItem = React35.useCallback(() => { + const highlightFirstItem = React42.useCallback(() => { if (Object.keys(menuItems).length > 0) { setListboxHighlight(menuItems[Object.keys(menuItems)[0]].id); } }, [menuItems, setListboxHighlight]); - const highlightLastItem = React35.useCallback(() => { + const highlightLastItem = React42.useCallback(() => { if (Object.keys(menuItems).length > 0) { setListboxHighlight(menuItems[Object.keys(menuItems)[Object.keys(menuItems).length - 1]].id); } }, [menuItems, setListboxHighlight]); - React35.useEffect(() => { + React42.useEffect(() => { if (!open) { highlightFirstItem(); } @@ -31260,7 +31260,7 @@ var require_useMenu = __commonJS({ onClose == null ? void 0 : onClose(); } }; - React35.useEffect(() => { + React42.useEffect(() => { var _listboxRef$current2; if ((_listboxRef$current2 = listboxRef.current) != null && _listboxRef$current2.contains(document.activeElement) && highlightedOption !== null) { var _menuItems$highlighte, _menuItems$highlighte2; @@ -31283,7 +31283,7 @@ var require_useMenu = __commonJS({ highlighted }; }; - React35.useDebugValue({ + React42.useDebugValue({ menuItems, highlightedOption }); @@ -32778,7 +32778,7 @@ var require_Portal = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var ReactDOM3 = _interopRequireWildcard(require_react_dom()); var _propTypes = _interopRequireDefault(require_prop_types()); var _utils = require_utils(); @@ -32823,14 +32823,14 @@ var require_Portal = __commonJS({ function getContainer(container) { return typeof container === "function" ? container() : container; } - var Portal = /* @__PURE__ */ React35.forwardRef(function Portal2(props, ref) { + var Portal = /* @__PURE__ */ React42.forwardRef(function Portal2(props, ref) { const { children, container, disablePortal = false } = props; - const [mountNode, setMountNode] = React35.useState(null); - const handleRef = (0, _utils.unstable_useForkRef)(/* @__PURE__ */ React35.isValidElement(children) ? children.ref : null, ref); + const [mountNode, setMountNode] = React42.useState(null); + const handleRef = (0, _utils.unstable_useForkRef)(/* @__PURE__ */ React42.isValidElement(children) ? children.ref : null, ref); (0, _utils.unstable_useEnhancedEffect)(() => { if (!disablePortal) { setMountNode(getContainer(container) || document.body); @@ -32846,8 +32846,8 @@ var require_Portal = __commonJS({ return void 0; }, [ref, mountNode, disablePortal]); if (disablePortal) { - if (/* @__PURE__ */ React35.isValidElement(children)) { - return /* @__PURE__ */ React35.cloneElement(children, { + if (/* @__PURE__ */ React42.isValidElement(children)) { + return /* @__PURE__ */ React42.cloneElement(children, { ref: handleRef }); } @@ -32900,7 +32900,7 @@ var require_PopperUnstyled = __commonJS({ var _utils = require_utils(); var _core = require_popper(); var _propTypes = _interopRequireDefault(require_prop_types()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _Portal = _interopRequireDefault(require_Portal2()); var _jsxRuntime = require_jsx_runtime(); var _excluded = ["anchorEl", "children", "direction", "disablePortal", "modifiers", "open", "ownerState", "placement", "popperOptions", "popperRef", "TransitionProps"]; @@ -32964,7 +32964,7 @@ var require_PopperUnstyled = __commonJS({ return typeof anchorEl === "function" ? anchorEl() : anchorEl; } var defaultPopperOptions = {}; - var PopperTooltip = /* @__PURE__ */ React35.forwardRef(function PopperTooltip2(props, ref) { + var PopperTooltip = /* @__PURE__ */ React42.forwardRef(function PopperTooltip2(props, ref) { const { anchorEl, children, @@ -32977,18 +32977,18 @@ var require_PopperUnstyled = __commonJS({ popperRef: popperRefProp, TransitionProps } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); - const tooltipRef = React35.useRef(null); + const tooltipRef = React42.useRef(null); const ownRef = (0, _utils.unstable_useForkRef)(tooltipRef, ref); - const popperRef = React35.useRef(null); + const popperRef = React42.useRef(null); const handlePopperRef = (0, _utils.unstable_useForkRef)(popperRef, popperRefProp); - const handlePopperRefRef = React35.useRef(handlePopperRef); + const handlePopperRefRef = React42.useRef(handlePopperRef); (0, _utils.unstable_useEnhancedEffect)(() => { handlePopperRefRef.current = handlePopperRef; }, [handlePopperRef]); - React35.useImperativeHandle(popperRefProp, () => popperRef.current, []); + React42.useImperativeHandle(popperRefProp, () => popperRef.current, []); const rtlPlacement = flipPlacement(initialPlacement, direction); - const [placement, setPlacement] = React35.useState(rtlPlacement); - React35.useEffect(() => { + const [placement, setPlacement] = React42.useState(rtlPlacement); + React42.useEffect(() => { if (popperRef.current) { popperRef.current.forceUpdate(); } @@ -33059,7 +33059,7 @@ var require_PopperUnstyled = __commonJS({ children: typeof children === "function" ? children(childProps) : children })); }); - var PopperUnstyled = /* @__PURE__ */ React35.forwardRef(function PopperUnstyled2(props, ref) { + var PopperUnstyled = /* @__PURE__ */ React42.forwardRef(function PopperUnstyled2(props, ref) { const { anchorEl, children, @@ -33075,7 +33075,7 @@ var require_PopperUnstyled = __commonJS({ style, transition = false } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded2); - const [exited, setExited] = React35.useState(true); + const [exited, setExited] = React42.useState(true); const handleEnter = () => { setExited(false); }; @@ -33192,7 +33192,7 @@ var require_MenuUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -33252,7 +33252,7 @@ var require_MenuUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _menuUnstyledClasses.getMenuUnstyledUtilityClass, {}); } - var MenuUnstyled = /* @__PURE__ */ React35.forwardRef(function MenuUnstyled2(props, forwardedRef) { + var MenuUnstyled = /* @__PURE__ */ React42.forwardRef(function MenuUnstyled2(props, forwardedRef) { var _componentsProps$list, _componentsProps$list2, _ref, _componentsProps$root, _components$Listbox, _componentsProps$list3; const { actions, @@ -33279,7 +33279,7 @@ var require_MenuUnstyled = __commonJS({ listboxRef: (_componentsProps$list = componentsProps.listbox) == null ? void 0 : _componentsProps$list.ref, listboxId: (_componentsProps$list2 = componentsProps.listbox) == null ? void 0 : _componentsProps$list2.id }); - React35.useImperativeHandle(actions, () => ({ + React42.useImperativeHandle(actions, () => ({ highlightFirstItem, highlightLastItem }), [highlightFirstItem, highlightLastItem]); @@ -33530,7 +33530,7 @@ var require_useMenuItem = __commonJS({ }); exports.default = useMenuItem; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); var _MenuUnstyled = require_MenuUnstyled2(); var _ButtonUnstyled = require_ButtonUnstyled2(); @@ -33579,8 +33579,8 @@ var require_useMenuItem = __commonJS({ ref } = props; const id = (0, _utils.unstable_useId)(); - const menuContext = React35.useContext(_MenuUnstyled.MenuUnstyledContext); - const itemRef = React35.useRef(null); + const menuContext = React42.useContext(_MenuUnstyled.MenuUnstyledContext); + const itemRef = React42.useRef(null); const handleRef = (0, _utils.unstable_useForkRef)(itemRef, ref); if (menuContext === null) { throw new Error("MenuItemUnstyled must be used within a MenuUnstyled"); @@ -33590,7 +33590,7 @@ var require_useMenuItem = __commonJS({ unregisterItem, open } = menuContext; - React35.useEffect(() => { + React42.useEffect(() => { if (id === void 0) { return void 0; } @@ -33609,17 +33609,17 @@ var require_useMenuItem = __commonJS({ ref: handleRef, disabled }); - const [focusRequested, requestFocus] = React35.useState(false); - const focusIfRequested = React35.useCallback(() => { + const [focusRequested, requestFocus] = React42.useState(false); + const focusIfRequested = React42.useCallback(() => { if (focusRequested && itemRef.current != null) { itemRef.current.focus(); requestFocus(false); } }, [focusRequested]); - React35.useEffect(() => { + React42.useEffect(() => { focusIfRequested(); }); - React35.useDebugValue({ + React42.useDebugValue({ id, disabled }); @@ -33629,7 +33629,7 @@ var require_useMenuItem = __commonJS({ } = itemState != null ? itemState : { highlighted: false }; - React35.useEffect(() => { + React42.useEffect(() => { requestFocus(highlighted && open); }, [highlighted, open]); if (id === void 0) { @@ -33668,7 +33668,7 @@ var require_MenuItemUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils2(); @@ -33725,7 +33725,7 @@ var require_MenuItemUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _menuItemUnstyledClasses.getMenuItemUnstyledUtilityClass, {}); } - var MenuItemUnstyled = /* @__PURE__ */ React35.forwardRef(function MenuItemUnstyled2(props, ref) { + var MenuItemUnstyled = /* @__PURE__ */ React42.forwardRef(function MenuItemUnstyled2(props, ref) { var _ref, _componentsProps$root; const { children, @@ -34107,7 +34107,7 @@ var require_Unstable_TrapFocus = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _utils = require_utils(); var _jsxRuntime = require_jsx_runtime(); @@ -34213,22 +34213,22 @@ var require_Unstable_TrapFocus = __commonJS({ isEnabled = defaultIsEnabled, open } = props; - const ignoreNextEnforceFocus = React35.useRef(); - const sentinelStart = React35.useRef(null); - const sentinelEnd = React35.useRef(null); - const nodeToRestore = React35.useRef(null); - const reactFocusEventTarget = React35.useRef(null); - const activated = React35.useRef(false); - const rootRef = React35.useRef(null); + const ignoreNextEnforceFocus = React42.useRef(); + const sentinelStart = React42.useRef(null); + const sentinelEnd = React42.useRef(null); + const nodeToRestore = React42.useRef(null); + const reactFocusEventTarget = React42.useRef(null); + const activated = React42.useRef(false); + const rootRef = React42.useRef(null); const handleRef = (0, _utils.unstable_useForkRef)(children.ref, rootRef); - const lastKeydown = React35.useRef(null); - React35.useEffect(() => { + const lastKeydown = React42.useRef(null); + React42.useEffect(() => { if (!open || !rootRef.current) { return; } activated.current = !disableAutoFocus; }, [disableAutoFocus, open]); - React35.useEffect(() => { + React42.useEffect(() => { if (!open || !rootRef.current) { return; } @@ -34254,7 +34254,7 @@ var require_Unstable_TrapFocus = __commonJS({ } }; }, [open]); - React35.useEffect(() => { + React42.useEffect(() => { if (!open || !rootRef.current) { return; } @@ -34338,13 +34338,13 @@ var require_Unstable_TrapFocus = __commonJS({ } activated.current = true; }; - return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React35.Fragment, { + return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React42.Fragment, { children: [/* @__PURE__ */ (0, _jsxRuntime.jsx)("div", { tabIndex: 0, onFocus: handleFocusSentinel, ref: sentinelStart, "data-test": "sentinelStart" - }), /* @__PURE__ */ React35.cloneElement(children, { + }), /* @__PURE__ */ React42.cloneElement(children, { ref: handleRef, onFocus }), /* @__PURE__ */ (0, _jsxRuntime.jsx)("div", { @@ -34422,7 +34422,7 @@ var require_ModalUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -34490,7 +34490,7 @@ var require_ModalUnstyled = __commonJS({ return props.children ? props.children.props.hasOwnProperty("in") : false; } var defaultManager = new _ModalManager.default(); - var ModalUnstyled = /* @__PURE__ */ React35.forwardRef(function ModalUnstyled2(props, ref) { + var ModalUnstyled = /* @__PURE__ */ React42.forwardRef(function ModalUnstyled2(props, ref) { const { BackdropComponent, BackdropProps, @@ -34519,10 +34519,10 @@ var require_ModalUnstyled = __commonJS({ onTransitionEnter, onTransitionExited } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); - const [exited, setExited] = React35.useState(true); - const modal = React35.useRef({}); - const mountNodeRef = React35.useRef(null); - const modalRef = React35.useRef(null); + const [exited, setExited] = React42.useState(true); + const modal = React42.useRef({}); + const mountNodeRef = React42.useRef(null); + const modalRef = React42.useRef(null); const handleRef = (0, _utils.unstable_useForkRef)(modalRef, ref); const hasTransition = getHasTransition(props); const getDoc = () => (0, _utils.unstable_ownerDocument)(mountNodeRef.current); @@ -34544,7 +34544,7 @@ var require_ModalUnstyled = __commonJS({ handleMounted(); } }); - const isTopModal = React35.useCallback(() => manager.isTopModal(getModal()), [manager]); + const isTopModal = React42.useCallback(() => manager.isTopModal(getModal()), [manager]); const handlePortalRef = (0, _utils.unstable_useEventCallback)((node) => { mountNodeRef.current = node; if (!node) { @@ -34556,15 +34556,15 @@ var require_ModalUnstyled = __commonJS({ (0, _ModalManager.ariaHidden)(modalRef.current, true); } }); - const handleClose = React35.useCallback(() => { + const handleClose = React42.useCallback(() => { manager.remove(getModal()); }, [manager]); - React35.useEffect(() => { + React42.useEffect(() => { return () => { handleClose(); }; }, [handleClose]); - React35.useEffect(() => { + React42.useEffect(() => { if (open) { handleOpen(); } else if (!hasTransition || !closeAfterTransition) { @@ -34661,7 +34661,7 @@ var require_ModalUnstyled = __commonJS({ disableRestoreFocus, isEnabled: isTopModal, open, - children: /* @__PURE__ */ React35.cloneElement(children, childProps) + children: /* @__PURE__ */ React42.cloneElement(children, childProps) })] })) }); @@ -34863,7 +34863,7 @@ var require_useSelect = __commonJS({ }); exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); var _ButtonUnstyled = require_ButtonUnstyled2(); var _ListboxUnstyled = require_ListboxUnstyled(); @@ -34920,9 +34920,9 @@ var require_useSelect = __commonJS({ options, value: valueProp } = props; - const buttonRef = React35.useRef(null); + const buttonRef = React42.useRef(null); const handleButtonRef = (0, _utils.unstable_useForkRef)(buttonRefProp, buttonRef); - const listboxRef = React35.useRef(null); + const listboxRef = React42.useRef(null); const intermediaryListboxRef = (0, _utils.unstable_useForkRef)(listboxRefProp, listboxRef); const [value, setValue] = (0, _utils.unstable_useControlled)({ controlled: valueProp, @@ -34930,10 +34930,10 @@ var require_useSelect = __commonJS({ name: "SelectUnstyled", state: "value" }); - const ignoreEnterKeyUp = React35.useRef(false); - const ignoreClick = React35.useRef(false); - const [listboxFocusRequested, requestListboxFocus] = React35.useState(false); - const focusListboxIfRequested = React35.useCallback(() => { + const ignoreEnterKeyUp = React42.useRef(false); + const ignoreClick = React42.useRef(false); + const [listboxFocusRequested, requestListboxFocus] = React42.useState(false); + const focusListboxIfRequested = React42.useCallback(() => { if (listboxFocusRequested && listboxRef.current != null) { listboxRef.current.focus(); requestListboxFocus(false); @@ -34944,10 +34944,10 @@ var require_useSelect = __commonJS({ focusListboxIfRequested(); }; const handleListboxRef = (0, _utils.unstable_useForkRef)(intermediaryListboxRef, updateListboxRef); - React35.useEffect(() => { + React42.useEffect(() => { focusListboxIfRequested(); }, [focusListboxIfRequested]); - React35.useEffect(() => { + React42.useEffect(() => { requestListboxFocus(open); }, [open]); const createHandleMouseDown = (otherHandlers) => (event) => { @@ -35032,7 +35032,7 @@ var require_useSelect = __commonJS({ disabled, ref: handleButtonRef }); - const selectedOption = React35.useMemo(() => { + const selectedOption = React42.useMemo(() => { var _props$options$find; return props.multiple ? props.options.filter((o) => value.includes(o.value)) : (_props$options$find = props.options.find((o) => o.value === value)) != null ? _props$options$find : null; }, [props.multiple, props.options, value]); @@ -35100,7 +35100,7 @@ var require_useSelect = __commonJS({ onClick: createHandleListboxItemClick(otherHandlers) })); }; - React35.useDebugValue({ + React42.useDebugValue({ selectedOption: listboxSelectedOption, open, highlightedOption @@ -35130,7 +35130,7 @@ var require_SelectUnstyledContext = __commonJS({ value: true }); exports.SelectUnstyledContext = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -35169,7 +35169,7 @@ var require_SelectUnstyledContext = __commonJS({ } return newObj; } - var SelectUnstyledContext = /* @__PURE__ */ React35.createContext(void 0); + var SelectUnstyledContext = /* @__PURE__ */ React42.createContext(void 0); exports.SelectUnstyledContext = SelectUnstyledContext; } }); @@ -35206,7 +35206,7 @@ var require_MultiSelectUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -35258,7 +35258,7 @@ var require_MultiSelectUnstyled = __commonJS({ return newObj; } function defaultRenderMultipleValues(selectedOptions) { - return /* @__PURE__ */ (0, _jsxRuntime.jsx)(React35.Fragment, { + return /* @__PURE__ */ (0, _jsxRuntime.jsx)(React42.Fragment, { children: selectedOptions.map((o) => o.label).join(", ") }); } @@ -35276,7 +35276,7 @@ var require_MultiSelectUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _selectUnstyledClasses.getSelectUnstyledUtilityClass, {}); } - var MultiSelectUnstyled = /* @__PURE__ */ React35.forwardRef(function MultiSelectUnstyled2(props, ref) { + var MultiSelectUnstyled = /* @__PURE__ */ React42.forwardRef(function MultiSelectUnstyled2(props, ref) { var _props$renderValue, _ref, _components$Listbox, _components$Popper, _componentsProps$list, _componentsProps$list2, _componentsProps$root, _componentsProps$list3, _componentsProps$popp; const { autoFocus, @@ -35294,20 +35294,20 @@ var require_MultiSelectUnstyled = __commonJS({ value: valueProp } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); const renderValue = (_props$renderValue = props.renderValue) != null ? _props$renderValue : defaultRenderMultipleValues; - const [groupedOptions, setGroupedOptions] = React35.useState([]); - const options = React35.useMemo(() => (0, _utils2.flattenOptionGroups)(groupedOptions), [groupedOptions]); + const [groupedOptions, setGroupedOptions] = React42.useState([]); + const options = React42.useMemo(() => (0, _utils2.flattenOptionGroups)(groupedOptions), [groupedOptions]); const [listboxOpen, setListboxOpen] = (0, _utils.unstable_useControlled)({ controlled: listboxOpenProp, default: defaultListboxOpen, name: "MultiSelectUnstyled", state: "listboxOpen" }); - React35.useEffect(() => { + React42.useEffect(() => { setGroupedOptions((0, _utils2.getOptionsFromChildren)(children)); }, [children]); - const [buttonDefined, setButtonDefined] = React35.useState(false); - const buttonRef = React35.useRef(null); - const listboxRef = React35.useRef(null); + const [buttonDefined, setButtonDefined] = React42.useState(false); + const buttonRef = React42.useRef(null); + const listboxRef = React42.useRef(null); const Button2 = (_ref = component != null ? component : components.Root) != null ? _ref : "button"; const ListboxRoot = (_components$Listbox = components.Listbox) != null ? _components$Listbox : "ul"; const Popper = (_components$Popper = components.Popper) != null ? _components$Popper : _PopperUnstyled.default; @@ -35319,7 +35319,7 @@ var require_MultiSelectUnstyled = __commonJS({ }; const handleButtonRef = (0, _utils.unstable_useForkRef)(ref, handleButtonRefChange); const handleListboxRef = (0, _utils.unstable_useForkRef)(listboxRef, (_componentsProps$list = componentsProps.listbox) == null ? void 0 : _componentsProps$list.ref); - React35.useEffect(() => { + React42.useEffect(() => { if (autoFocus) { buttonRef.current.focus(); } @@ -35361,7 +35361,7 @@ var require_MultiSelectUnstyled = __commonJS({ value }); const classes = useUtilityClasses(ownerState); - const selectedOptions = React35.useMemo(() => { + const selectedOptions = React42.useMemo(() => { if (value == null) { return []; } @@ -35387,7 +35387,7 @@ var require_MultiSelectUnstyled = __commonJS({ getOptionState, listboxRef }; - return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React35.Fragment, { + return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React42.Fragment, { children: [/* @__PURE__ */ (0, _jsxRuntime.jsx)(Button2, (0, _extends2.default)({}, buttonProps, { children: renderValue(selectedOptions) })), buttonDefined && /* @__PURE__ */ (0, _jsxRuntime.jsx)(Popper, (0, _extends2.default)({}, popperProps, { @@ -35482,7 +35482,7 @@ var require_NoSsr = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _utils = require_utils(); var _jsxRuntime = require_jsx_runtime(); @@ -35530,18 +35530,18 @@ var require_NoSsr = __commonJS({ defer = false, fallback = null } = props; - const [mountedState, setMountedState] = React35.useState(false); + const [mountedState, setMountedState] = React42.useState(false); (0, _utils.unstable_useEnhancedEffect)(() => { if (!defer) { setMountedState(true); } }, [defer]); - React35.useEffect(() => { + React42.useEffect(() => { if (defer) { setMountedState(true); } }, [defer]); - return /* @__PURE__ */ (0, _jsxRuntime.jsx)(React35.Fragment, { + return /* @__PURE__ */ (0, _jsxRuntime.jsx)(React42.Fragment, { children: mountedState ? children : fallback }); } @@ -36013,7 +36013,7 @@ var require_SelectUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -36082,7 +36082,7 @@ var require_SelectUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _selectUnstyledClasses.getSelectUnstyledUtilityClass, {}); } - var SelectUnstyled = /* @__PURE__ */ React35.forwardRef(function SelectUnstyled2(props, ref) { + var SelectUnstyled = /* @__PURE__ */ React42.forwardRef(function SelectUnstyled2(props, ref) { var _ref, _components$Listbox, _components$Popper, _componentsProps$list, _componentsProps$list2, _componentsProps$root, _componentsProps$list3, _componentsProps$popp; const { autoFocus, @@ -36101,20 +36101,20 @@ var require_SelectUnstyled = __commonJS({ value: valueProp } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); const renderValue = renderValueProp != null ? renderValueProp : defaultRenderSingleValue; - const [groupedOptions, setGroupedOptions] = React35.useState([]); - const options = React35.useMemo(() => (0, _utils2.flattenOptionGroups)(groupedOptions), [groupedOptions]); + const [groupedOptions, setGroupedOptions] = React42.useState([]); + const options = React42.useMemo(() => (0, _utils2.flattenOptionGroups)(groupedOptions), [groupedOptions]); const [listboxOpen, setListboxOpen] = (0, _utils.unstable_useControlled)({ controlled: listboxOpenProp, default: defaultListboxOpen, name: "SelectUnstyled", state: "listboxOpen" }); - React35.useEffect(() => { + React42.useEffect(() => { setGroupedOptions((0, _utils2.getOptionsFromChildren)(children)); }, [children]); - const [buttonDefined, setButtonDefined] = React35.useState(false); - const buttonRef = React35.useRef(null); - const listboxRef = React35.useRef(null); + const [buttonDefined, setButtonDefined] = React42.useState(false); + const buttonRef = React42.useRef(null); + const listboxRef = React42.useRef(null); const Button2 = (_ref = component != null ? component : components.Root) != null ? _ref : "button"; const ListboxRoot = (_components$Listbox = components.Listbox) != null ? _components$Listbox : "ul"; const Popper = (_components$Popper = components.Popper) != null ? _components$Popper : _PopperUnstyled.default; @@ -36126,7 +36126,7 @@ var require_SelectUnstyled = __commonJS({ }; const handleButtonRef = (0, _utils.unstable_useForkRef)(ref, handleButtonRefChange); const handleListboxRef = (0, _utils.unstable_useForkRef)(listboxRef, (_componentsProps$list = componentsProps.listbox) == null ? void 0 : _componentsProps$list.ref); - React35.useEffect(() => { + React42.useEffect(() => { if (autoFocus) { buttonRef.current.focus(); } @@ -36168,7 +36168,7 @@ var require_SelectUnstyled = __commonJS({ value }); const classes = useUtilityClasses(ownerState); - const selectedOptions = React35.useMemo(() => { + const selectedOptions = React42.useMemo(() => { return options.find((o) => value === o.value); }, [options, value]); const buttonProps = (0, _utils3.appendOwnerState)(Button2, (0, _extends2.default)({}, getButtonProps(), other, componentsProps.root, { @@ -36191,7 +36191,7 @@ var require_SelectUnstyled = __commonJS({ getOptionState, listboxRef }; - return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React35.Fragment, { + return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React42.Fragment, { children: [/* @__PURE__ */ (0, _jsxRuntime.jsx)(Button2, (0, _extends2.default)({}, buttonProps, { children: renderValue(selectedOptions) })), buttonDefined && /* @__PURE__ */ (0, _jsxRuntime.jsx)(Popper, (0, _extends2.default)({}, popperProps, { @@ -36406,7 +36406,7 @@ var require_SliderValueLabelUnstyled = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _sliderUnstyledClasses = _interopRequireDefault(require_sliderUnstyledClasses()); @@ -36468,9 +36468,9 @@ var require_SliderValueLabelUnstyled = __commonJS({ theme } = props; const classes = useValueLabelClasses(props); - return /* @__PURE__ */ React35.cloneElement(children, { + return /* @__PURE__ */ React42.cloneElement(children, { className: (0, _clsx.default)(children.props.className) - }, /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React35.Fragment, { + }, /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React42.Fragment, { children: [children.props.children, /* @__PURE__ */ (0, _jsxRuntime.jsx)("span", { className: (0, _clsx.default)(classes.offset, className), theme, @@ -36508,7 +36508,7 @@ var require_useSlider = __commonJS({ exports.default = useSlider; exports.valueToPercent = valueToPercent; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -36695,11 +36695,11 @@ var require_useSlider = __commonJS({ value: valueProp, isRtl = false } = props; - const touchId = React35.useRef(); - const [active, setActive] = React35.useState(-1); - const [open, setOpen] = React35.useState(-1); - const [dragging, setDragging] = React35.useState(false); - const moveCount = React35.useRef(0); + const touchId = React42.useRef(); + const [active, setActive] = React42.useState(-1); + const [open, setOpen] = React42.useState(-1); + const [dragging, setDragging] = React42.useState(false); + const moveCount = React42.useRef(0); const [valueDerived, setValueState] = (0, _utils.unstable_useControlled)({ controlled: valueProp, default: defaultValue != null ? defaultValue : min, @@ -36730,8 +36730,8 @@ var require_useSlider = __commonJS({ onFocus: handleFocusVisible, ref: focusVisibleRef } = (0, _utils.unstable_useIsFocusVisible)(); - const [focusVisible, setFocusVisible] = React35.useState(-1); - const sliderRef = React35.useRef(); + const [focusVisible, setFocusVisible] = React42.useState(-1); + const sliderRef = React42.useRef(); const handleFocusRef = (0, _utils.unstable_useForkRef)(focusVisibleRef, sliderRef); const handleRef = (0, _utils.unstable_useForkRef)(ref, handleFocusRef); const createHandleHiddenInputFocus = (otherHandlers) => (event) => { @@ -36808,7 +36808,7 @@ var require_useSlider = __commonJS({ onChangeCommitted(event, newValue); } }; - const previousIndex = React35.useRef(); + const previousIndex = React42.useRef(); let axis = orientation; if (isRtl && orientation === "horizontal") { axis += "-reverse"; @@ -36956,14 +36956,14 @@ var require_useSlider = __commonJS({ doc.addEventListener("touchmove", handleTouchMove); doc.addEventListener("touchend", handleTouchEnd); }); - const stopListening = React35.useCallback(() => { + const stopListening = React42.useCallback(() => { const doc = (0, _utils.unstable_ownerDocument)(sliderRef.current); doc.removeEventListener("mousemove", handleTouchMove); doc.removeEventListener("mouseup", handleTouchEnd); doc.removeEventListener("touchmove", handleTouchMove); doc.removeEventListener("touchend", handleTouchEnd); }, [handleTouchEnd, handleTouchMove]); - React35.useEffect(() => { + React42.useEffect(() => { const { current: slider } = sliderRef; @@ -36977,7 +36977,7 @@ var require_useSlider = __commonJS({ stopListening(); }; }, [stopListening, handleTouchStart]); - React35.useEffect(() => { + React42.useEffect(() => { if (disabled) { stopListening(); } @@ -37104,7 +37104,7 @@ var require_SliderUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -37183,7 +37183,7 @@ var require_SliderUnstyled = __commonJS({ var Forward = ({ children }) => children; - var SliderUnstyled = /* @__PURE__ */ React35.forwardRef(function SliderUnstyled2(props, ref) { + var SliderUnstyled = /* @__PURE__ */ React42.forwardRef(function SliderUnstyled2(props, ref) { var _ref, _components$Rail, _components$Track, _components$Thumb, _components$ValueLabe, _components$Mark, _components$MarkLabel; const { "aria-label": ariaLabel, @@ -37280,7 +37280,7 @@ var require_SliderUnstyled = __commonJS({ } else { markActive = track === "normal" && (range ? mark.value >= values[0] && mark.value <= values[values.length - 1] : mark.value <= values[0]) || track === "inverted" && (range ? mark.value <= values[0] || mark.value >= values[values.length - 1] : mark.value >= values[0]); } - return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React35.Fragment, { + return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React42.Fragment, { children: [/* @__PURE__ */ (0, _jsxRuntime.jsx)(Mark, (0, _extends2.default)({ "data-index": index }, markProps, !(0, _isHostComponent.default)(Mark) && { @@ -37303,7 +37303,7 @@ var require_SliderUnstyled = __commonJS({ const percent = (0, _useSlider.valueToPercent)(value, min, max); const style = axisProps[axis].offset(percent); const ValueLabelComponent = valueLabelDisplay === "off" ? Forward : ValueLabel; - return /* @__PURE__ */ (0, _jsxRuntime.jsx)(React35.Fragment, { + return /* @__PURE__ */ (0, _jsxRuntime.jsx)(React42.Fragment, { children: /* @__PURE__ */ (0, _jsxRuntime.jsx)(ValueLabelComponent, (0, _extends2.default)({}, !(0, _isHostComponent.default)(ValueLabelComponent) && { valueLabelFormat, valueLabelDisplay, @@ -37524,7 +37524,7 @@ var require_useSwitch = __commonJS({ }); exports.default = useSwitch; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -37596,14 +37596,14 @@ var require_useSwitch = __commonJS({ onFocus: handleFocusVisible, ref: focusVisibleRef } = (0, _utils.unstable_useIsFocusVisible)(); - const [focusVisible, setFocusVisible] = React35.useState(false); + const [focusVisible, setFocusVisible] = React42.useState(false); if (disabled && focusVisible) { setFocusVisible(false); } - React35.useEffect(() => { + React42.useEffect(() => { isFocusVisibleRef.current = focusVisible; }, [focusVisible, isFocusVisibleRef]); - const inputRef = React35.useRef(null); + const inputRef = React42.useRef(null); const handleFocus = (event, otherHandler) => { if (!inputRef.current) { inputRef.current = event.currentTarget; @@ -37681,7 +37681,7 @@ var require_SwitchUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _useSwitch = _interopRequireDefault(require_useSwitch()); @@ -37727,7 +37727,7 @@ var require_SwitchUnstyled = __commonJS({ } return newObj; } - var SwitchUnstyled = /* @__PURE__ */ React35.forwardRef(function SwitchUnstyled2(props, ref) { + var SwitchUnstyled = /* @__PURE__ */ React42.forwardRef(function SwitchUnstyled2(props, ref) { var _ref, _components$Thumb, _componentsProps$thum, _components$Input, _componentsProps$inpu, _components$Track, _componentsProps$trac; const { checked: checkedProp, @@ -37983,7 +37983,7 @@ var require_useTabs = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -38039,7 +38039,7 @@ var require_useTabs = __commonJS({ state: "value" }); const idPrefix = (0, _utils.unstable_useId)(); - const onSelected = React35.useCallback((e, newValue) => { + const onSelected = React42.useCallback((e, newValue) => { setValue(newValue); if (onChange) { onChange(e, newValue); @@ -38048,7 +38048,7 @@ var require_useTabs = __commonJS({ const getRootProps = () => { return {}; }; - const tabsContextValue = React35.useMemo(() => { + const tabsContextValue = React42.useMemo(() => { return { idPrefix, value, @@ -38079,7 +38079,7 @@ var require_TabsContext = __commonJS({ exports.getPanelId = getPanelId; exports.getTabId = getTabId; exports.useTabContext = useTabContext; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -38118,12 +38118,12 @@ var require_TabsContext = __commonJS({ } return newObj; } - var Context = /* @__PURE__ */ React35.createContext(null); + var Context = /* @__PURE__ */ React42.createContext(null); if (true) { Context.displayName = "TabsContext"; } function useTabContext() { - return React35.useContext(Context); + return React42.useContext(Context); } function getPanelId(context, value) { const { @@ -38159,7 +38159,7 @@ var require_TabsUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils2(); @@ -38216,7 +38216,7 @@ var require_TabsUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _tabsUnstyledClasses.getTabsUnstyledUtilityClass, {}); }; - var TabsUnstyled = /* @__PURE__ */ React35.forwardRef((props, ref) => { + var TabsUnstyled = /* @__PURE__ */ React42.forwardRef((props, ref) => { var _ref, _componentsProps$root; const { children, @@ -38441,7 +38441,7 @@ var require_TabPanelUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils2(); @@ -38497,7 +38497,7 @@ var require_TabPanelUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _tabPanelUnstyledClasses.getTabPanelUnstyledUtilityClass, {}); }; - var TabPanelUnstyled = /* @__PURE__ */ React35.forwardRef(function TabPanelUnstyled2(props, ref) { + var TabPanelUnstyled = /* @__PURE__ */ React42.forwardRef(function TabPanelUnstyled2(props, ref) { var _ref, _componentsProps$root; const { children, @@ -38674,7 +38674,7 @@ var require_useTabsList = __commonJS({ }); exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _utils = require_utils(); var _reactIs = require_react_is2(); var _TabsUnstyled = require_TabsUnstyled2(); @@ -38767,7 +38767,7 @@ var require_useTabsList = __commonJS({ children, ref } = props; - const tabsListRef = /* @__PURE__ */ React35.createRef(); + const tabsListRef = /* @__PURE__ */ React42.createRef(); const handleRef = (0, _utils.unstable_useForkRef)(tabsListRef, ref); const context = (0, _TabsUnstyled.useTabContext)(); if (context === null) { @@ -38833,11 +38833,11 @@ var require_useTabsList = __commonJS({ ref: handleRef }, mergedEventHandlers); }; - const processChildren = React35.useCallback(() => { + const processChildren = React42.useCallback(() => { const valueToIndex = new Map(); let childIndex = 0; - const processedChildren = React35.Children.map(children, (child) => { - if (!/* @__PURE__ */ React35.isValidElement(child)) { + const processedChildren = React42.Children.map(children, (child) => { + if (!/* @__PURE__ */ React42.isValidElement(child)) { return null; } if (true) { @@ -38848,7 +38848,7 @@ var require_useTabsList = __commonJS({ const childValue = child.props.value === void 0 ? childIndex : child.props.value; valueToIndex.set(childValue, childIndex); childIndex += 1; - return /* @__PURE__ */ React35.cloneElement(child, (0, _extends2.default)({ + return /* @__PURE__ */ React42.cloneElement(child, (0, _extends2.default)({ value: childValue }, childIndex === 1 && value === false && !child.props.tabIndex || value === childValue ? { tabIndex: 0 @@ -38882,7 +38882,7 @@ var require_TabsListUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _composeClasses = _interopRequireDefault(require_composeClasses2()); @@ -38938,7 +38938,7 @@ var require_TabsListUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _tabsListUnstyledClasses.getTabsListUnstyledUtilityClass, {}); }; - var TabsListUnstyled = /* @__PURE__ */ React35.forwardRef((props, ref) => { + var TabsListUnstyled = /* @__PURE__ */ React42.forwardRef((props, ref) => { var _ref, _componentsProps$root; const { className, @@ -39195,7 +39195,7 @@ var require_TabUnstyled = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _utils = require_utils(); @@ -39253,7 +39253,7 @@ var require_TabUnstyled = __commonJS({ }; return (0, _composeClasses.default)(slots, _tabUnstyledClasses.getTabUnstyledUtilityClass, {}); }; - var TabUnstyled = /* @__PURE__ */ React35.forwardRef(function TabUnstyled2(props, ref) { + var TabUnstyled = /* @__PURE__ */ React42.forwardRef(function TabUnstyled2(props, ref) { var _ref, _componentsProps$root; const { action, @@ -39264,7 +39264,7 @@ var require_TabUnstyled = __commonJS({ components = {}, componentsProps = {} } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); - const tabRef = React35.useRef(); + const tabRef = React42.useRef(); const handleRef = (0, _utils.unstable_useForkRef)(tabRef, ref); const { active, @@ -39275,7 +39275,7 @@ var require_TabUnstyled = __commonJS({ } = (0, _useTab.default)((0, _extends2.default)({}, props, { ref: handleRef })); - React35.useImperativeHandle(action, () => ({ + React42.useImperativeHandle(action, () => ({ focusVisible: () => { setFocusVisible(true); tabRef.current.focus(); @@ -39435,7 +39435,7 @@ var require_TextareaAutosize = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _utils = require_utils(); var _jsxRuntime = require_jsx_runtime(); @@ -39492,7 +39492,7 @@ var require_TextareaAutosize = __commonJS({ transform: "translateZ(0)" } }; - var TextareaAutosize = /* @__PURE__ */ React35.forwardRef(function TextareaAutosize2(props, ref) { + var TextareaAutosize = /* @__PURE__ */ React42.forwardRef(function TextareaAutosize2(props, ref) { const { onChange, maxRows, @@ -39502,13 +39502,13 @@ var require_TextareaAutosize = __commonJS({ } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); const { current: isControlled - } = React35.useRef(value != null); - const inputRef = React35.useRef(null); + } = React42.useRef(value != null); + const inputRef = React42.useRef(null); const handleRef = (0, _utils.unstable_useForkRef)(ref, inputRef); - const shadowRef = React35.useRef(null); - const renders = React35.useRef(0); - const [state, setState] = React35.useState({}); - const syncHeight = React35.useCallback(() => { + const shadowRef = React42.useRef(null); + const renders = React42.useRef(0); + const [state, setState] = React42.useState({}); + const syncHeight = React42.useCallback(() => { const input = inputRef.current; const containerWindow = (0, _utils.unstable_ownerWindow)(input); const computedStyle = containerWindow.getComputedStyle(input); @@ -39553,7 +39553,7 @@ var require_TextareaAutosize = __commonJS({ return prevState; }); }, [maxRows, minRows, props.placeholder]); - React35.useEffect(() => { + React42.useEffect(() => { const handleResize = (0, _utils.unstable_debounce)(() => { renders.current = 0; syncHeight(); @@ -39576,7 +39576,7 @@ var require_TextareaAutosize = __commonJS({ (0, _utils.unstable_useEnhancedEffect)(() => { syncHeight(); }); - React35.useEffect(() => { + React42.useEffect(() => { renders.current = 0; }, [value]); const handleChange = (event) => { @@ -39588,7 +39588,7 @@ var require_TextareaAutosize = __commonJS({ onChange(event); } }; - return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React35.Fragment, { + return /* @__PURE__ */ (0, _jsxRuntime.jsxs)(React42.Fragment, { children: [/* @__PURE__ */ (0, _jsxRuntime.jsx)("textarea", (0, _extends2.default)({ value, onChange: handleChange, @@ -41896,7 +41896,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter var require_emotion_element_35a1554b_browser_cjs = __commonJS({ "node_modules/@emotion/react/dist/emotion-element-35a1554b.browser.cjs.js"(exports) { "use strict"; - var React35 = require_react(); + var React42 = require_react(); var createCache = require_emotion_cache_browser_cjs(); var _extends = require_extends(); var weakMemoize = require_weak_memoize_browser_cjs(); @@ -41926,12 +41926,12 @@ var require_emotion_element_35a1554b_browser_cjs = __commonJS({ n["default"] = e; return Object.freeze(n); } - var React__namespace = /* @__PURE__ */ _interopNamespace(React35); + var React__namespace = /* @__PURE__ */ _interopNamespace(React42); var createCache__default = /* @__PURE__ */ _interopDefault(createCache); var _extends__default = /* @__PURE__ */ _interopDefault(_extends); var weakMemoize__default = /* @__PURE__ */ _interopDefault(weakMemoize); var hasOwnProperty = {}.hasOwnProperty; - var EmotionCacheContext = /* @__PURE__ */ React35.createContext(typeof HTMLElement !== "undefined" ? /* @__PURE__ */ createCache__default["default"]({ + var EmotionCacheContext = /* @__PURE__ */ React42.createContext(typeof HTMLElement !== "undefined" ? /* @__PURE__ */ createCache__default["default"]({ key: "css" }) : null); if (true) { @@ -41939,20 +41939,20 @@ var require_emotion_element_35a1554b_browser_cjs = __commonJS({ } var CacheProvider = EmotionCacheContext.Provider; var __unsafe_useEmotionCache = function useEmotionCache() { - return React35.useContext(EmotionCacheContext); + return React42.useContext(EmotionCacheContext); }; var withEmotionCache = function withEmotionCache2(func) { - return /* @__PURE__ */ React35.forwardRef(function(props, ref) { - var cache = React35.useContext(EmotionCacheContext); + return /* @__PURE__ */ React42.forwardRef(function(props, ref) { + var cache = React42.useContext(EmotionCacheContext); return func(props, cache, ref); }); }; - var ThemeContext = /* @__PURE__ */ React35.createContext({}); + var ThemeContext = /* @__PURE__ */ React42.createContext({}); if (true) { ThemeContext.displayName = "EmotionThemeContext"; } var useTheme = function useTheme2() { - return React35.useContext(ThemeContext); + return React42.useContext(ThemeContext); }; var getTheme = function getTheme2(outerTheme, theme) { if (typeof theme === "function") { @@ -41973,24 +41973,24 @@ var require_emotion_element_35a1554b_browser_cjs = __commonJS({ }); }); var ThemeProvider = function ThemeProvider2(props) { - var theme = React35.useContext(ThemeContext); + var theme = React42.useContext(ThemeContext); if (props.theme !== theme) { theme = createCacheWithTheme(theme)(props.theme); } - return /* @__PURE__ */ React35.createElement(ThemeContext.Provider, { + return /* @__PURE__ */ React42.createElement(ThemeContext.Provider, { value: theme }, props.children); }; function withTheme(Component) { var componentName = Component.displayName || Component.name || "Component"; var render = function render2(props, ref) { - var theme = React35.useContext(ThemeContext); - return /* @__PURE__ */ React35.createElement(Component, _extends__default["default"]({ + var theme = React42.useContext(ThemeContext); + return /* @__PURE__ */ React42.createElement(Component, _extends__default["default"]({ theme, ref }, props)); }; - var WithTheme = /* @__PURE__ */ React35.forwardRef(render); + var WithTheme = /* @__PURE__ */ React42.forwardRef(render); WithTheme.displayName = "WithTheme(" + componentName + ")"; return _isolatedHnrs_dist_emotionReact_isolatedHnrs["default"](WithTheme, Component); } @@ -42073,7 +42073,7 @@ var require_emotion_element_35a1554b_browser_cjs = __commonJS({ } else if (props.className != null) { className = props.className + " "; } - var serialized = serialize.serializeStyles(registeredStyles, void 0, React35.useContext(ThemeContext)); + var serialized = serialize.serializeStyles(registeredStyles, void 0, React42.useContext(ThemeContext)); if (serialized.name.indexOf("-") === -1) { var labelFromStack = props[labelPropName]; if (labelFromStack) { @@ -42089,11 +42089,11 @@ var require_emotion_element_35a1554b_browser_cjs = __commonJS({ } newProps.ref = ref; newProps.className = className; - return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(Insertion, { + return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Insertion, { cache, serialized, isStringTag: typeof WrappedComponent === "string" - }), /* @__PURE__ */ React35.createElement(WrappedComponent, newProps)); + }), /* @__PURE__ */ React42.createElement(WrappedComponent, newProps)); }); if (true) { Emotion.displayName = "EmotionCssPropInternal"; @@ -42117,7 +42117,7 @@ var require_emotion_react_browser_cjs = __commonJS({ "node_modules/@emotion/react/dist/emotion-react.browser.cjs.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - var React35 = require_react(); + var React42 = require_react(); require_emotion_cache_browser_cjs(); var emotionElement = require_emotion_element_35a1554b_browser_cjs(); require_extends(); @@ -42146,7 +42146,7 @@ var require_emotion_react_browser_cjs = __commonJS({ n["default"] = e; return Object.freeze(n); } - var React__namespace = /* @__PURE__ */ _interopNamespace(React35); + var React__namespace = /* @__PURE__ */ _interopNamespace(React42); var pkg = { name: "@emotion/react", version: "11.9.0", @@ -42226,7 +42226,7 @@ var require_emotion_react_browser_cjs = __commonJS({ var jsx = function jsx2(type, props) { var args = arguments; if (props == null || !emotionElement.hasOwnProperty.call(props, "css")) { - return React35.createElement.apply(void 0, args); + return React42.createElement.apply(void 0, args); } var argsLength = args.length; var createElementArgArray = new Array(argsLength); @@ -42235,9 +42235,9 @@ var require_emotion_react_browser_cjs = __commonJS({ for (var i = 2; i < argsLength; i++) { createElementArgArray[i] = args[i]; } - return React35.createElement.apply(null, createElementArgArray); + return React42.createElement.apply(null, createElementArgArray); }; - var useInsertionEffect = React__namespace["useInsertionEffect"] ? React__namespace["useInsertionEffect"] : React35.useLayoutEffect; + var useInsertionEffect = React__namespace["useInsertionEffect"] ? React__namespace["useInsertionEffect"] : React42.useLayoutEffect; var warnedAboutCssPropForGlobal = false; var Global = /* @__PURE__ */ emotionElement.withEmotionCache(function(props, cache) { if (!warnedAboutCssPropForGlobal && (props.className || props.css)) { @@ -42245,8 +42245,8 @@ var require_emotion_react_browser_cjs = __commonJS({ warnedAboutCssPropForGlobal = true; } var styles = props.styles; - var serialized = serialize.serializeStyles([styles], void 0, React35.useContext(emotionElement.ThemeContext)); - var sheetRef = React35.useRef(); + var serialized = serialize.serializeStyles([styles], void 0, React42.useContext(emotionElement.ThemeContext)); + var sheetRef = React42.useRef(); useInsertionEffect(function() { var key = cache.key + "-global"; var sheet = new cache.sheet.constructor({ @@ -42394,11 +42394,11 @@ var require_emotion_react_browser_cjs = __commonJS({ var content = { css: css2, cx, - theme: React35.useContext(emotionElement.ThemeContext) + theme: React42.useContext(emotionElement.ThemeContext) }; var ele = props.children(content); hasRendered = true; - return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(Insertion, { + return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Insertion, { cache, serializedArr }), ele); @@ -42444,7 +42444,7 @@ var require_emotion_styled_base_browser_cjs = __commonJS({ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = require_extends(); - var React35 = require_react(); + var React42 = require_react(); var isPropValid = require_emotion_is_prop_valid_browser_cjs(); var react = require_emotion_react_browser_cjs(); var utils = require_emotion_utils_browser_cjs(); @@ -42473,7 +42473,7 @@ var require_emotion_styled_base_browser_cjs = __commonJS({ return Object.freeze(n); } var _extends__default = /* @__PURE__ */ _interopDefault(_extends); - var React__namespace = /* @__PURE__ */ _interopNamespace(React35); + var React__namespace = /* @__PURE__ */ _interopNamespace(React42); var isPropValid__default = /* @__PURE__ */ _interopDefault(isPropValid); var testOmitPropsOnStringTag = isPropValid__default["default"]; var testOmitPropsOnComponent = function testOmitPropsOnComponent2(key) { @@ -42562,7 +42562,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter for (var key in props) { mergedProps[key] = props[key]; } - mergedProps.theme = React35.useContext(react.ThemeContext); + mergedProps.theme = React42.useContext(react.ThemeContext); } if (typeof props.className === "string") { className = utils.getRegisteredStyles(cache.registered, classInterpolations, props.className); @@ -42585,11 +42585,11 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter } newProps.className = className; newProps.ref = ref; - return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(Insertion, { + return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Insertion, { cache, serialized, isStringTag: typeof FinalTag === "string" - }), /* @__PURE__ */ React35.createElement(FinalTag, newProps)); + }), /* @__PURE__ */ React42.createElement(FinalTag, newProps)); }); Styled.displayName = identifierName !== void 0 ? identifierName : "Styled(" + (typeof baseTag === "string" ? baseTag : baseTag.displayName || baseTag.name || "Component") + ")"; Styled.defaultProps = tag.defaultProps; @@ -42782,7 +42782,7 @@ var require_StyledEngineProvider = __commonJS({ value: true }); exports.default = StyledEngineProvider; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _react2 = require_emotion_react_browser_cjs(); var _cache = _interopRequireDefault(require_emotion_cache_browser_cjs()); @@ -42873,7 +42873,7 @@ var require_GlobalStyles = __commonJS({ value: true }); exports.default = GlobalStyles; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _react2 = require_emotion_react_browser_cjs(); var _jsxRuntime = require_jsx_runtime(); @@ -44564,7 +44564,7 @@ var require_ThemeContext = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; @@ -44603,7 +44603,7 @@ var require_ThemeContext = __commonJS({ } return newObj; } - var ThemeContext = /* @__PURE__ */ React35.createContext(null); + var ThemeContext = /* @__PURE__ */ React42.createContext(null); if (true) { ThemeContext.displayName = "ThemeContext"; } @@ -44621,7 +44621,7 @@ var require_useTheme = __commonJS({ value: true }); exports.default = useTheme; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _ThemeContext = _interopRequireDefault(require_ThemeContext()); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -44662,9 +44662,9 @@ var require_useTheme = __commonJS({ return newObj; } function useTheme() { - const theme = React35.useContext(_ThemeContext.default); + const theme = React42.useContext(_ThemeContext.default); if (true) { - React35.useDebugValue(theme); + React42.useDebugValue(theme); } return theme; } @@ -44713,7 +44713,7 @@ var require_ThemeProvider = __commonJS({ }); exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _utils = require_utils(); var _ThemeContext = _interopRequireDefault(require_ThemeContext()); @@ -44781,7 +44781,7 @@ var require_ThemeProvider = __commonJS({ console.error(["MUI: You are providing a theme function prop to the ThemeProvider component:", " outerTheme} />", "", "However, no outer theme is present.", "Make sure a theme is already injected higher in the React tree or provide a theme object."].join("\n")); } } - const theme = React35.useMemo(() => { + const theme = React42.useMemo(() => { const output = outerTheme === null ? localTheme : mergeOuterLocalTheme(outerTheme, localTheme); if (output != null) { output[_nested.default] = outerTheme !== null; @@ -44964,7 +44964,7 @@ var require_createBox = __commonJS({ exports.default = createBox; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _styledEngine = _interopRequireDefault(require_node3()); @@ -45018,7 +45018,7 @@ var require_createBox = __commonJS({ styleFunctionSx = _styleFunctionSx.default } = options; const BoxRoot = (0, _styledEngine.default)("div")(styleFunctionSx); - const Box = /* @__PURE__ */ React35.forwardRef(function Box2(inProps, ref) { + const Box = /* @__PURE__ */ React42.forwardRef(function Box2(inProps, ref) { const theme = (0, _useTheme.default)(defaultTheme); const _extendSxProp = (0, _styleFunctionSx.extendSxProp)(inProps), { className, @@ -45580,7 +45580,7 @@ var require_ThemeProvider3 = __commonJS({ value: true }); exports.default = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _privateTheming = require_node4(); var _utils = require_utils(); @@ -45775,7 +45775,7 @@ var require_getInitColorSchemeScript = __commonJS({ }); exports.DEFAULT_MODE_STORAGE_KEY = exports.DEFAULT_COLOR_SCHEME_STORAGE_KEY = exports.DEFAULT_ATTRIBUTE = void 0; exports.default = getInitColorSchemeScript; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _jsxRuntime = require_jsx_runtime(); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -45872,7 +45872,7 @@ var require_useCurrentColorScheme = __commonJS({ exports.getColorScheme = getColorScheme; exports.getSystemMode = getSystemMode; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _getInitColorSchemeScript = require_getInitColorSchemeScript(); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") @@ -45963,7 +45963,7 @@ var require_useCurrentColorScheme = __commonJS({ colorSchemeStorageKey = _getInitColorSchemeScript.DEFAULT_COLOR_SCHEME_STORAGE_KEY } = options; const joinedColorSchemes = supportedColorSchemes.join(","); - const [state, setState] = React35.useState(() => { + const [state, setState] = React42.useState(() => { const initialMode = resolveValue(modeStorageKey, defaultMode); return { mode: initialMode, @@ -45973,7 +45973,7 @@ var require_useCurrentColorScheme = __commonJS({ }; }); const colorScheme = getColorScheme(state); - const setMode = React35.useCallback((mode) => { + const setMode = React42.useCallback((mode) => { setState((currentState) => { const newMode = !mode ? defaultMode : mode; if (typeof localStorage !== "undefined") { @@ -45985,7 +45985,7 @@ var require_useCurrentColorScheme = __commonJS({ }); }); }, [modeStorageKey, defaultMode]); - const setColorScheme = React35.useCallback((value) => { + const setColorScheme = React42.useCallback((value) => { if (!value || typeof value === "string") { if (value && !supportedColorSchemes.includes(value)) { console.error(`\`${value}\` does not exist in \`theme.colorSchemes\`.`); @@ -46030,23 +46030,23 @@ var require_useCurrentColorScheme = __commonJS({ } } }, [colorSchemeStorageKey, supportedColorSchemes, defaultLightColorScheme, defaultDarkColorScheme]); - const handleMediaQuery = React35.useCallback((e) => { + const handleMediaQuery = React42.useCallback((e) => { if (state.mode === "system") { setState((currentState) => (0, _extends2.default)({}, currentState, { systemMode: e.matches ? "dark" : "light" })); } }, [state.mode]); - const mediaListener = React35.useRef(handleMediaQuery); + const mediaListener = React42.useRef(handleMediaQuery); mediaListener.current = handleMediaQuery; - React35.useEffect(() => { + React42.useEffect(() => { const handler = (...args) => mediaListener.current(...args); const media = window.matchMedia("(prefers-color-scheme: dark)"); media.addListener(handler); handler(media); return () => media.removeListener(handler); }, []); - React35.useEffect(() => { + React42.useEffect(() => { if (state.mode) { localStorage.setItem(modeStorageKey, state.mode); } @@ -46059,7 +46059,7 @@ var require_useCurrentColorScheme = __commonJS({ } }); }, [state, colorSchemeStorageKey, modeStorageKey]); - React35.useEffect(() => { + React42.useEffect(() => { const handleStorage = (event) => { const value = event.newValue; if (typeof event.key === "string" && event.key.startsWith(colorSchemeStorageKey) && (!value || joinedColorSchemes.match(value))) { @@ -46130,7 +46130,7 @@ var require_createCssVarsProvider = __commonJS({ var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); var _utils = require_utils(); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _styledEngine = require_node3(); var _createSpacing = _interopRequireDefault(require_createSpacing()); @@ -46201,9 +46201,9 @@ var require_createCssVarsProvider = __commonJS({ if (!baseTheme.colorSchemes || typeof designSystemColorScheme === "string" && !baseTheme.colorSchemes[designSystemColorScheme] || typeof designSystemColorScheme === "object" && !baseTheme.colorSchemes[designSystemColorScheme == null ? void 0 : designSystemColorScheme.light] || typeof designSystemColorScheme === "object" && !baseTheme.colorSchemes[designSystemColorScheme == null ? void 0 : designSystemColorScheme.dark]) { console.error(`MUI: \`${designSystemColorScheme}\` does not exist in \`theme.colorSchemes\`.`); } - const ColorSchemeContext = /* @__PURE__ */ React35.createContext(void 0); + const ColorSchemeContext = /* @__PURE__ */ React42.createContext(void 0); const useColorScheme = () => { - const value = React35.useContext(ColorSchemeContext); + const value = React42.useContext(ColorSchemeContext); if (!value) { throw new Error(true ? `MUI: \`useColorScheme\` must be called under ` : (0, _utils.formatMuiErrorMessage)(19)); } @@ -46226,7 +46226,7 @@ var require_createCssVarsProvider = __commonJS({ const { colorSchemes: colorSchemesProp = {} } = themeProp, restThemeProp = (0, _objectWithoutPropertiesLoose2.default)(themeProp, _excluded2); - const hasMounted = React35.useRef(false); + const hasMounted = React42.useRef(false); let _deepmerge = (0, _utils.deepmerge)(restBaseTheme, restThemeProp), { components = {} } = _deepmerge, mergedTheme = (0, _objectWithoutPropertiesLoose2.default)(_deepmerge, _excluded3); @@ -46306,7 +46306,7 @@ var require_createCssVarsProvider = __commonJS({ styleSheet[`[${attribute}="${key}"]`] = css; } }); - React35.useEffect(() => { + React42.useEffect(() => { if (colorScheme) { document.documentElement.setAttribute(attribute, colorScheme); } @@ -46325,7 +46325,7 @@ var require_createCssVarsProvider = __commonJS({ document.documentElement.style.setProperty("color-scheme", priorColorScheme); }; }, [mode, systemMode, enableColorScheme]); - React35.useEffect(() => { + React42.useEffect(() => { let timer; if (disableTransitionOnChange && hasMounted.current) { const css = document.createElement("style"); @@ -46340,7 +46340,7 @@ var require_createCssVarsProvider = __commonJS({ clearTimeout(timer); }; }, [colorScheme, disableTransitionOnChange]); - React35.useEffect(() => { + React42.useEffect(() => { hasMounted.current = true; return () => { hasMounted.current = false; @@ -47810,7 +47810,7 @@ var require_SvgIcon = __commonJS({ exports.default = void 0; var _extends2 = _interopRequireDefault(require_extends()); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require_objectWithoutPropertiesLoose()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _propTypes = _interopRequireDefault(require_prop_types()); var _clsx = _interopRequireDefault(require_clsx()); var _base = require_node2(); @@ -47906,7 +47906,7 @@ var require_SvgIcon = __commonJS({ }[ownerState.color] }; }); - var SvgIcon = /* @__PURE__ */ React35.forwardRef(function SvgIcon2(inProps, ref) { + var SvgIcon = /* @__PURE__ */ React42.forwardRef(function SvgIcon2(inProps, ref) { const props = (0, _useThemeProps.default)({ props: inProps, name: "MuiSvgIcon" @@ -48060,7 +48060,7 @@ var require_createSvgIcon = __commonJS({ }); exports.default = createSvgIcon2; var _extends2 = _interopRequireDefault(require_extends()); - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _SvgIcon = _interopRequireDefault(require_SvgIcon2()); var _jsxRuntime = require_jsx_runtime(); function _getRequireWildcardCache(nodeInterop) { @@ -48112,7 +48112,7 @@ var require_createSvgIcon = __commonJS({ Component.displayName = `${displayName}Icon`; } Component.muiName = _SvgIcon.default.muiName; - return /* @__PURE__ */ React35.memo(/* @__PURE__ */ React35.forwardRef(Component)); + return /* @__PURE__ */ React42.memo(/* @__PURE__ */ React42.forwardRef(Component)); } } }); @@ -54093,7 +54093,7 @@ var require_Manager = __commonJS({ }); exports.Manager = Manager; exports.ManagerReferenceNodeSetterContext = exports.ManagerReferenceNodeContext = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; @@ -54132,27 +54132,27 @@ var require_Manager = __commonJS({ } return newObj; } - var ManagerReferenceNodeContext = React35.createContext(); + var ManagerReferenceNodeContext = React42.createContext(); exports.ManagerReferenceNodeContext = ManagerReferenceNodeContext; - var ManagerReferenceNodeSetterContext = React35.createContext(); + var ManagerReferenceNodeSetterContext = React42.createContext(); exports.ManagerReferenceNodeSetterContext = ManagerReferenceNodeSetterContext; function Manager(_ref) { var children = _ref.children; - var _React$useState = React35.useState(null), referenceNode = _React$useState[0], setReferenceNode = _React$useState[1]; - var hasUnmounted = React35.useRef(false); - React35.useEffect(function() { + var _React$useState = React42.useState(null), referenceNode = _React$useState[0], setReferenceNode = _React$useState[1]; + var hasUnmounted = React42.useRef(false); + React42.useEffect(function() { return function() { hasUnmounted.current = true; }; }, []); - var handleSetReferenceNode = React35.useCallback(function(node) { + var handleSetReferenceNode = React42.useCallback(function(node) { if (!hasUnmounted.current) { setReferenceNode(node); } }, []); - return /* @__PURE__ */ React35.createElement(ManagerReferenceNodeContext.Provider, { + return /* @__PURE__ */ React42.createElement(ManagerReferenceNodeContext.Provider, { value: referenceNode - }, /* @__PURE__ */ React35.createElement(ManagerReferenceNodeSetterContext.Provider, { + }, /* @__PURE__ */ React42.createElement(ManagerReferenceNodeSetterContext.Provider, { value: handleSetReferenceNode }, children)); } @@ -54167,7 +54167,7 @@ var require_utils5 = __commonJS({ value: true }); exports.useIsomorphicLayoutEffect = exports.fromEntries = exports.setRef = exports.safeInvoke = exports.unwrapArray = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; @@ -54235,7 +54235,7 @@ var require_utils5 = __commonJS({ }, {}); }; exports.fromEntries = fromEntries; - var useIsomorphicLayoutEffect = typeof window !== "undefined" && window.document && window.document.createElement ? React35.useLayoutEffect : React35.useEffect; + var useIsomorphicLayoutEffect = typeof window !== "undefined" && window.document && window.document.createElement ? React42.useLayoutEffect : React42.useEffect; exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect; } }); @@ -54343,7 +54343,7 @@ var require_usePopper = __commonJS({ value: true }); exports.usePopper = void 0; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var ReactDOM3 = _interopRequireWildcard(require_react_dom()); var _core = require_popper(); var _reactFastCompare = _interopRequireDefault(require_react_fast_compare()); @@ -54394,14 +54394,14 @@ var require_usePopper = __commonJS({ if (options === void 0) { options = {}; } - var prevOptions = React35.useRef(null); + var prevOptions = React42.useRef(null); var optionsWithDefaults = { onFirstUpdate: options.onFirstUpdate, placement: options.placement || "bottom", strategy: options.strategy || "absolute", modifiers: options.modifiers || EMPTY_MODIFIERS }; - var _React$useState = React35.useState({ + var _React$useState = React42.useState({ styles: { popper: { position: optionsWithDefaults.strategy, @@ -54414,7 +54414,7 @@ var require_usePopper = __commonJS({ }, attributes: {} }), state = _React$useState[0], setState = _React$useState[1]; - var updateStateModifier = React35.useMemo(function() { + var updateStateModifier = React42.useMemo(function() { return { name: "updateState", enabled: true, @@ -54436,7 +54436,7 @@ var require_usePopper = __commonJS({ requires: ["computeStyles"] }; }, []); - var popperOptions = React35.useMemo(function() { + var popperOptions = React42.useMemo(function() { var newOptions = { onFirstUpdate: optionsWithDefaults.onFirstUpdate, placement: optionsWithDefaults.placement, @@ -54453,7 +54453,7 @@ var require_usePopper = __commonJS({ return newOptions; } }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]); - var popperInstanceRef = React35.useRef(); + var popperInstanceRef = React42.useRef(); (0, _utils.useIsomorphicLayoutEffect)(function() { if (popperInstanceRef.current) { popperInstanceRef.current.setOptions(popperOptions); @@ -54491,7 +54491,7 @@ var require_Popper = __commonJS({ value: true }); exports.Popper = Popper; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _Manager = require_Manager(); var _utils = require_utils5(); var _usePopper2 = require_usePopper(); @@ -54542,13 +54542,13 @@ var require_Popper = __commonJS({ var EMPTY_MODIFIERS = []; function Popper(_ref) { var _ref$placement = _ref.placement, placement = _ref$placement === void 0 ? "bottom" : _ref$placement, _ref$strategy = _ref.strategy, strategy = _ref$strategy === void 0 ? "absolute" : _ref$strategy, _ref$modifiers = _ref.modifiers, modifiers = _ref$modifiers === void 0 ? EMPTY_MODIFIERS : _ref$modifiers, referenceElement = _ref.referenceElement, onFirstUpdate = _ref.onFirstUpdate, innerRef = _ref.innerRef, children = _ref.children; - var referenceNode = React35.useContext(_Manager.ManagerReferenceNodeContext); - var _React$useState = React35.useState(null), popperElement = _React$useState[0], setPopperElement = _React$useState[1]; - var _React$useState2 = React35.useState(null), arrowElement = _React$useState2[0], setArrowElement = _React$useState2[1]; - React35.useEffect(function() { + var referenceNode = React42.useContext(_Manager.ManagerReferenceNodeContext); + var _React$useState = React42.useState(null), popperElement = _React$useState[0], setPopperElement = _React$useState[1]; + var _React$useState2 = React42.useState(null), arrowElement = _React$useState2[0], setArrowElement = _React$useState2[1]; + React42.useEffect(function() { (0, _utils.setRef)(innerRef, popperElement); }, [innerRef, popperElement]); - var options = React35.useMemo(function() { + var options = React42.useMemo(function() { return { placement, strategy, @@ -54563,7 +54563,7 @@ var require_Popper = __commonJS({ }; }, [placement, strategy, onFirstUpdate, modifiers, arrowElement]); var _usePopper = (0, _usePopper2.usePopper)(referenceElement || referenceNode, popperElement, options), state = _usePopper.state, styles = _usePopper.styles, forceUpdate = _usePopper.forceUpdate, update = _usePopper.update; - var childrenProps = React35.useMemo(function() { + var childrenProps = React42.useMemo(function() { return { ref: setPopperElement, style: styles.popper, @@ -54636,7 +54636,7 @@ var require_Reference = __commonJS({ value: true }); exports.Reference = Reference; - var React35 = _interopRequireWildcard(require_react()); + var React42 = _interopRequireWildcard(require_react()); var _warning = _interopRequireDefault(require_warning()); var _Manager = require_Manager(); var _utils = require_utils5(); @@ -54683,17 +54683,17 @@ var require_Reference = __commonJS({ } function Reference(_ref) { var children = _ref.children, innerRef = _ref.innerRef; - var setReferenceNode = React35.useContext(_Manager.ManagerReferenceNodeSetterContext); - var refHandler = React35.useCallback(function(node) { + var setReferenceNode = React42.useContext(_Manager.ManagerReferenceNodeSetterContext); + var refHandler = React42.useCallback(function(node) { (0, _utils.setRef)(innerRef, node); (0, _utils.safeInvoke)(setReferenceNode, node); }, [innerRef, setReferenceNode]); - React35.useEffect(function() { + React42.useEffect(function() { return function() { return (0, _utils.setRef)(innerRef, null); }; }, []); - React35.useEffect(function() { + React42.useEffect(function() { (0, _warning["default"])(Boolean(setReferenceNode), "`Reference` should not be used outside of a `Manager` component."); }, [setReferenceNode]); return (0, _utils.unwrapArray)(children)({ @@ -56318,11 +56318,11 @@ var import_obsidian4 = __toModule(require("obsidian")); // src/NLTTable.tsx var import_obsidian2 = __toModule(require("obsidian")); -var import_react36 = __toModule(require_react()); +var import_react43 = __toModule(require_react()); var import_react_dom2 = __toModule(require_react_dom()); // src/app/App.tsx -var import_react35 = __toModule(require_react()); +var import_react42 = __toModule(require_react()); // src/app/components/EditableTd/index.tsx var import_react23 = __toModule(require_react()); @@ -56484,7 +56484,7 @@ var BOLD_TAG_CLOSE = ""; var HIGHLIGHT_TAG_START = ""; var HIGHLIGHT_TAG_CLOSE = ""; var MIN_COLUMN_WIDTH_PX = 50; -var CURRENT_TABLE_CACHE_VERSION = 423; +var CURRENT_TABLE_CACHE_VERSION = 425; // src/app/services/string/matchers/index.ts var matchBoldMarkdown = (input) => { @@ -58763,14 +58763,14 @@ function RowMenu({ } // src/app/components/EditableTh/index.tsx -var import_react32 = __toModule(require_react()); +var import_react39 = __toModule(require_react()); // src/app/components/HeaderMenu/index.tsx -var import_react31 = __toModule(require_react()); +var import_react38 = __toModule(require_react()); -// src/app/components/HeaderMenu/components/HeaderMenuItem/index.tsx +// src/app/components/HeaderMenu/components/MenuItem/index.tsx var import_react29 = __toModule(require_react()); -function HeaderMenuItem({ +function MenuItem({ icon, content, onClick, @@ -58790,13 +58790,57 @@ function HeaderMenuItem({ }, content)); } -// src/app/components/Switch/index.tsx +// src/app/components/HeaderMenu/components/EditSubmenu/index.tsx +var import_react33 = __toModule(require_react()); + +// src/app/components/HeaderMenu/components/Submenu/index.tsx +var import_react31 = __toModule(require_react()); + +// src/app/components/Stack/index.tsx var import_react30 = __toModule(require_react()); +function Stack({ + children, + spacing, + isVertical = false +}) { + const arr = import_react30.Children.toArray(children); + return /* @__PURE__ */ import_react30.default.createElement("div", { + style: __spreadValues({ + display: "flex", + flexDirection: isVertical ? "column" : "row" + }, isVertical ? { justifyContent: "center" } : { alignItems: "center" }) + }, arr.map((child, index) => { + let style = {}; + if (arr.length > 1 && index < arr.length - 1) + style = isVertical ? { marginBottom: spacing } : { marginRight: spacing }; + return /* @__PURE__ */ import_react30.default.createElement("div", { + key: index, + style + }, child); + })); +} + +// src/app/components/HeaderMenu/components/Submenu/index.tsx +function Submenu({ title, children, onBackClick }) { + return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement(Stack, { + spacing: "10px" + }, /* @__PURE__ */ import_react31.default.createElement(IconButton, { + icon: Icon.KEYBOARD_BACKSPACE, + onClick: () => onBackClick() + }), /* @__PURE__ */ import_react31.default.createElement("div", { + className: "NLT__header-menu-title" + }, title)), /* @__PURE__ */ import_react31.default.createElement("hr", { + className: "NLT__hr" + }), children); +} + +// src/app/components/Switch/index.tsx +var import_react32 = __toModule(require_react()); function Switch({ isChecked, onToggle }) { - return /* @__PURE__ */ import_react30.default.createElement("label", { + return /* @__PURE__ */ import_react32.default.createElement("label", { className: "NLT__switch", onClick: () => onToggle(!isChecked) - }, /* @__PURE__ */ import_react30.default.createElement("input", { + }, /* @__PURE__ */ import_react32.default.createElement("input", { type: "checkbox", checked: isChecked, onChange: () => { @@ -58805,13 +58849,58 @@ function Switch({ isChecked, onToggle }) { e.stopPropagation(); onToggle(!isChecked); } - }), /* @__PURE__ */ import_react30.default.createElement("span", { + }), /* @__PURE__ */ import_react32.default.createElement("span", { className: "NLT__slider" })); } +// src/app/components/HeaderMenu/components/EditSubmenu/index.tsx +function EditMenu({ + title, + headerId, + headerType, + headerName, + shouldWrapOverflow, + useAutoWidth, + onHeaderNameChange, + onAutoWidthToggle, + onWrapOverflowToggle, + onBackClick, + onHeaderDeleteClick +}) { + return /* @__PURE__ */ import_react33.default.createElement(Submenu, { + title, + onBackClick + }, /* @__PURE__ */ import_react33.default.createElement(Stack, { + spacing: "5px", + isVertical: true + }, /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, /* @__PURE__ */ import_react33.default.createElement("p", { + className: "NLT__label" + }, "Header Name"), /* @__PURE__ */ import_react33.default.createElement("input", { + className: "NLT__header-menu-input", + autoFocus: true, + value: headerName, + onChange: (e) => onHeaderNameChange(e.target.value) + })), (headerType === CONTENT_TYPE.TEXT || headerType === CONTENT_TYPE.NUMBER) && /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, /* @__PURE__ */ import_react33.default.createElement("p", { + className: "NLT__label" + }, "Auto Width"), /* @__PURE__ */ import_react33.default.createElement(Switch, { + isChecked: useAutoWidth, + onToggle: (value) => onAutoWidthToggle(headerId, value) + }), !useAutoWidth && /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, /* @__PURE__ */ import_react33.default.createElement("p", { + className: "NLT__label" + }, "Wrap Overflow"), /* @__PURE__ */ import_react33.default.createElement(Switch, { + isChecked: shouldWrapOverflow, + onToggle: (value) => onWrapOverflowToggle(headerId, value) + }))), /* @__PURE__ */ import_react33.default.createElement(Button, { + onClick: () => onHeaderDeleteClick(headerId) + }, "Delete"))); +} + +// src/app/components/HeaderMenu/components/SortSubmenu/index.tsx +var import_react34 = __toModule(require_react()); + // src/app/components/HeaderMenu/constants.ts -var SUBMENU = { +var SUBMENU_ITEM = { EDIT: { name: "edit", content: "Edit", @@ -58863,22 +58952,123 @@ var SORT_MENU_ITEM = { } }; +// src/app/components/HeaderMenu/components/SortSubmenu/index.tsx +function SortSubmenu({ + title, + headerSortDir, + onSortClick, + onBackClick +}) { + return /* @__PURE__ */ import_react34.default.createElement(Submenu, { + title, + onBackClick + }, /* @__PURE__ */ import_react34.default.createElement("ul", { + className: "NLT__header-menu-ul" + }, Object.values(SORT_MENU_ITEM).map((item) => /* @__PURE__ */ import_react34.default.createElement(MenuItem, { + key: item.name, + icon: item.icon, + content: `Sort ${item.content}`, + onClick: () => onSortClick(item.name), + selected: headerSortDir === item.name + })))); +} + +// src/app/components/HeaderMenu/components/InsertSubmenu/index.tsx +var import_react35 = __toModule(require_react()); +function InsertSubmenu({ + title, + onInsertClick, + onBackClick +}) { + return /* @__PURE__ */ import_react35.default.createElement(Submenu, { + title, + onBackClick + }, /* @__PURE__ */ import_react35.default.createElement("ul", { + className: "NLT__header-menu-ul" + }, /* @__PURE__ */ import_react35.default.createElement(MenuItem, { + icon: Icon.KEYBOARD_DOUBLE_ARROW_LEFT, + content: "Insert Left", + onClick: () => onInsertClick(false) + }), /* @__PURE__ */ import_react35.default.createElement(MenuItem, { + icon: Icon.KEYBOARD_DOUBLE_ARROW_RIGHT, + content: "Insert Right", + onClick: () => onInsertClick(true) + }))); +} + +// src/app/components/HeaderMenu/components/MoveSubmenu/index.tsx +var import_react36 = __toModule(require_react()); +function MoveSubmenu({ + title, + headerIndex, + numHeaders, + onMoveClick, + onBackClick +}) { + return /* @__PURE__ */ import_react36.default.createElement(Submenu, { + title, + onBackClick + }, /* @__PURE__ */ import_react36.default.createElement("ul", { + className: "NLT__header-menu-ul" + }, headerIndex !== 0 && /* @__PURE__ */ import_react36.default.createElement(MenuItem, { + icon: Icon.KEYBOARD_DOUBLE_ARROW_LEFT, + content: "Move Left", + onClick: () => onMoveClick(false) + }), headerIndex !== numHeaders - 1 && /* @__PURE__ */ import_react36.default.createElement(MenuItem, { + icon: Icon.KEYBOARD_DOUBLE_ARROW_RIGHT, + content: "Move Right", + onClick: () => onMoveClick(true) + }))); +} + +// src/app/components/HeaderMenu/components/TypeSubmenu/index.tsx +var import_react37 = __toModule(require_react()); +function TypeSubmenu({ + title, + headerType, + onTypeClick, + onBackClick +}) { + return /* @__PURE__ */ import_react37.default.createElement(Submenu, { + title, + onBackClick + }, TYPE_ITEMS.map((item) => /* @__PURE__ */ import_react37.default.createElement(MenuItem, { + key: item.name, + icon: null, + content: item.content, + onClick: () => onTypeClick(item.type), + selected: item.type === headerType + }))); +} + // src/app/components/HeaderMenu/index.tsx +var SubmenuList = ({ numHeaders, onOptionClick }) => { + return /* @__PURE__ */ import_react38.default.createElement(import_react38.default.Fragment, null, Object.values(SUBMENU_ITEM).filter((value) => { + if (numHeaders === 1 && value.name === SUBMENU_ITEM.MOVE.name) + return false; + return true; + }).map((item) => /* @__PURE__ */ import_react38.default.createElement(MenuItem, { + key: item.name, + content: item.content, + icon: item.icon, + onClick: () => onOptionClick(item) + }))); +}; function HeaderMenu({ isOpen, id, - menuId, - content, + headerId, + headerName, + headerType, + headerSortDir, + headerIndex, + numHeaders, style, - type, - sortDir, useAutoWidth, shouldWrapOverflow, - isFirstChild, - isLastChild, onTypeSelect, onSortSelect, - onDeleteClick, + onHeaderDeleteClick, onOutsideClick, onInsertColumnClick, onMoveColumnClick, @@ -58886,160 +59076,90 @@ function HeaderMenu({ onWrapOverflowToggle, onAutoWidthToggle }) { - const [inputText, setInputText] = (0, import_react31.useState)(""); - const [submenu, setSubmenu] = (0, import_react31.useState)(null); - const lastLength = (0, import_react31.useRef)(0); - (0, import_react31.useEffect)(() => { + const [headerNameInput, setHeaderNameInput] = (0, import_react38.useState)(""); + const [submenu, setSubmenu] = (0, import_react38.useState)(null); + const lastLength = (0, import_react38.useRef)(0); + (0, import_react38.useEffect)(() => { if (!isOpen) { - if (inputText.length !== lastLength.current) { - lastLength.current = inputText.length; - if (inputText !== content) { - onOutsideClick(id, inputText); + if (headerNameInput.length !== lastLength.current) { + lastLength.current = headerNameInput.length; + if (headerNameInput !== headerName) { + onOutsideClick(headerId, headerNameInput); } } setSubmenu(null); } - }, [isOpen, inputText.length, lastLength.current]); - (0, import_react31.useEffect)(() => { - setInputText(content); - }, [content]); - function renderTypeItems() { - return TYPE_ITEMS.map((item) => { - return /* @__PURE__ */ import_react31.default.createElement(HeaderMenuItem, { - key: item.name, - icon: null, - content: item.content, - onClick: () => handleTypeSelect(id, item.type), - selected: item.type === type - }); - }); - } - function renderSortItems() { - return /* @__PURE__ */ import_react31.default.createElement("ul", { - className: "NLT__header-menu-ul" - }, Object.values(SORT_MENU_ITEM).map((item) => /* @__PURE__ */ import_react31.default.createElement(HeaderMenuItem, { - key: item.name, - icon: item.icon, - content: `Sort ${item.content}`, - onClick: () => handleSortSelect(id, item.name), - selected: sortDir === item.name - }))); - } - function renderInsertItems() { - return /* @__PURE__ */ import_react31.default.createElement("ul", { - className: "NLT__header-menu-ul" - }, /* @__PURE__ */ import_react31.default.createElement(HeaderMenuItem, { - icon: Icon.KEYBOARD_DOUBLE_ARROW_LEFT, - content: "Insert Left", - onClick: () => handleInsertColumnClick(id, false) - }), /* @__PURE__ */ import_react31.default.createElement(HeaderMenuItem, { - icon: Icon.KEYBOARD_DOUBLE_ARROW_RIGHT, - content: "Insert Right", - onClick: () => handleInsertColumnClick(id, true) - })); - } - function renderMoveItems() { - return /* @__PURE__ */ import_react31.default.createElement("ul", { - className: "NLT__header-menu-ul" - }, !isFirstChild && /* @__PURE__ */ import_react31.default.createElement(HeaderMenuItem, { - icon: Icon.KEYBOARD_DOUBLE_ARROW_LEFT, - content: "Move Left", - onClick: () => handleMoveColumnClick(id, false) - }), !isLastChild && /* @__PURE__ */ import_react31.default.createElement(HeaderMenuItem, { - icon: Icon.KEYBOARD_DOUBLE_ARROW_RIGHT, - content: "Move Right", - onClick: () => handleMoveColumnClick(id, true) - })); - } - function renderEditItems() { - return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement("div", { - style: { marginBottom: "10px" } - }, /* @__PURE__ */ import_react31.default.createElement("p", { - className: "NLT__label" - }, "Header Name"), /* @__PURE__ */ import_react31.default.createElement("input", { - className: "NLT__input NLT__header-menu-input", - autoFocus: true, - type: "text", - value: inputText, - onChange: (e) => setInputText(e.target.value) - })), (type === CONTENT_TYPE.TEXT || type === CONTENT_TYPE.NUMBER) && /* @__PURE__ */ import_react31.default.createElement("div", null, /* @__PURE__ */ import_react31.default.createElement("p", { - className: "NLT__label" - }, "Auto Width"), /* @__PURE__ */ import_react31.default.createElement(Switch, { - isChecked: useAutoWidth, - onToggle: (value) => onAutoWidthToggle(id, value) - }), !useAutoWidth && /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement("p", { - className: "NLT__label" - }, "Wrap Overflow"), /* @__PURE__ */ import_react31.default.createElement(Switch, { - isChecked: shouldWrapOverflow, - onToggle: (value) => onWrapOverflowToggle(id, value) - }))), /* @__PURE__ */ import_react31.default.createElement(Button, { - style: { marginTop: "5px" }, - onClick: () => handleDeleteClick(id) - }, "Delete")); - } + }, [isOpen, headerNameInput.length, lastLength.current]); + (0, import_react38.useEffect)(() => { + setHeaderNameInput(headerName); + }, [headerName]); function handleMoveColumnClick(id2, moveRight) { onMoveColumnClick(id2, moveRight); onClose(); } - function handleSortSelect(id2, sortDir2) { - onSortSelect(id2, sortDir2); + function handleSortClick(id2, sortDir) { + onSortSelect(id2, sortDir); onClose(); } function handleInsertColumnClick(id2, insertRight) { onInsertColumnClick(id2, insertRight); onClose(); } - function handleTypeSelect(id2, type2) { - onTypeSelect(id2, type2); + function handleTypeClick(id2, type) { + onTypeSelect(id2, type); onClose(); } - function handleDeleteClick(id2) { + function handleHeaderDeleteClick(id2) { if (window.confirm("Are you sure you want to delete this column?")) { - onDeleteClick(id2); + onHeaderDeleteClick(id2); onClose(); } } - function renderMenu() { - return Object.values(SUBMENU).map((item) => /* @__PURE__ */ import_react31.default.createElement(HeaderMenuItem, { - key: item.name, - content: item.content, - icon: item.icon, - onClick: () => setSubmenu(item) - })); + function handleBackClick() { + setSubmenu(null); } - function Submenu() { - function renderSubmenuItems() { - switch (submenu.name) { - case SUBMENU.EDIT.name: - return renderEditItems(); - case SUBMENU.INSERT.name: - return renderInsertItems(); - case SUBMENU.SORT.name: - return renderSortItems(); - case SUBMENU.MOVE.name: - return renderMoveItems(); - case SUBMENU.TYPE.name: - return renderTypeItems(); - default: - return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null); - } - } - return /* @__PURE__ */ import_react31.default.createElement("div", null, /* @__PURE__ */ import_react31.default.createElement("div", { - className: "NLT__header-menu-header-container" - }, /* @__PURE__ */ import_react31.default.createElement(IconButton, { - icon: Icon.KEYBOARD_BACKSPACE, - onClick: () => setSubmenu(null) - }), /* @__PURE__ */ import_react31.default.createElement("div", { - className: "NLT__header-menu-header" - }, submenu.content)), renderSubmenuItems()); - } - return /* @__PURE__ */ import_react31.default.createElement(Menu, { + return /* @__PURE__ */ import_react38.default.createElement(Menu, { isOpen, - id: menuId, + id, style - }, /* @__PURE__ */ import_react31.default.createElement("div", { + }, /* @__PURE__ */ import_react38.default.createElement("div", { className: "NLT__header-menu" - }, submenu !== null ? /* @__PURE__ */ import_react31.default.createElement(Submenu, null) : renderMenu())); + }, submenu === null && /* @__PURE__ */ import_react38.default.createElement(SubmenuList, { + numHeaders, + onOptionClick: setSubmenu + }), submenu && submenu.name === SUBMENU_ITEM.EDIT.name && /* @__PURE__ */ import_react38.default.createElement(EditMenu, { + title: submenu.content, + headerId, + headerName: headerNameInput, + headerType, + useAutoWidth, + shouldWrapOverflow, + onBackClick: handleBackClick, + onAutoWidthToggle, + onWrapOverflowToggle, + onHeaderDeleteClick: handleHeaderDeleteClick, + onHeaderNameChange: setHeaderNameInput + }), submenu && submenu.name === SUBMENU_ITEM.INSERT.name && /* @__PURE__ */ import_react38.default.createElement(InsertSubmenu, { + title: submenu.content, + onInsertClick: (isRightInsert) => handleInsertColumnClick(headerId, isRightInsert), + onBackClick: handleBackClick + }), submenu && submenu.name === SUBMENU_ITEM.SORT.name && /* @__PURE__ */ import_react38.default.createElement(SortSubmenu, { + title: submenu.content, + headerSortDir, + onSortClick: (sortDir) => handleSortClick(headerId, sortDir), + onBackClick: handleBackClick + }), submenu && submenu.name === SUBMENU_ITEM.MOVE.name && /* @__PURE__ */ import_react38.default.createElement(MoveSubmenu, { + title: submenu.content, + headerIndex, + numHeaders, + onMoveClick: (isRightMove) => handleMoveColumnClick(headerId, isRightMove), + onBackClick: handleBackClick + }), submenu && submenu.name === SUBMENU_ITEM.TYPE.name && /* @__PURE__ */ import_react38.default.createElement(TypeSubmenu, { + title: submenu.content, + headerType, + onTypeClick: (type) => handleTypeClick(headerId, type), + onBackClick: handleBackClick + }))); } // src/app/components/EditableTh/index.tsx @@ -59053,8 +59173,7 @@ function EditableTh({ shouldWrapOverflow, type, sortDir, - isFirstChild, - isLastChild, + numHeaders, onWidthChange, onInsertColumnClick, onMoveColumnClick, @@ -59068,9 +59187,9 @@ function EditableTh({ const menuId = useId(); const { isMenuOpen, openMenu, closeMenu, isMenuRequestingClose } = useMenuId(menuId); const { positionRef, position } = usePositionRef([positionUpdateTime]); - const mouseDownX = (0, import_react32.useRef)(0); - const isResizing = (0, import_react32.useRef)(false); - (0, import_react32.useEffect)(() => { + const mouseDownX = (0, import_react39.useRef)(0); + const isResizing = (0, import_react39.useRef)(false); + (0, import_react39.useEffect)(() => { if (isMenuRequestingClose) { closeMenu(); } @@ -59104,20 +59223,20 @@ function EditableTh({ isResizing.current = false; }, 100); } - return /* @__PURE__ */ import_react32.default.createElement(import_react32.default.Fragment, null, /* @__PURE__ */ import_react32.default.createElement("th", { + return /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, /* @__PURE__ */ import_react39.default.createElement("th", { className: "NLT__th NLT__selectable", ref: positionRef, style: { width }, onClick: handleHeaderClick - }, /* @__PURE__ */ import_react32.default.createElement("div", { + }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "NLT__th-container" - }, /* @__PURE__ */ import_react32.default.createElement("div", { + }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "NLT__th-content" - }, content), /* @__PURE__ */ import_react32.default.createElement("div", { + }, content), /* @__PURE__ */ import_react39.default.createElement("div", { className: "NLT__th-resize-container" - }, !useAutoWidth && /* @__PURE__ */ import_react32.default.createElement("div", { + }, !useAutoWidth && /* @__PURE__ */ import_react39.default.createElement("div", { className: "NLT__th-resize", onMouseDown: (e) => { e.preventDefault(); @@ -59128,28 +59247,28 @@ function EditableTh({ onClick: (e) => { e.stopPropagation(); } - })))), /* @__PURE__ */ import_react32.default.createElement(HeaderMenu, { + })))), /* @__PURE__ */ import_react39.default.createElement(HeaderMenu, { isOpen: isMenuOpen, style: { top: numToPx(pxToNum(position.top) + pxToNum(position.height)), left: position.left }, - id, + headerId: id, shouldWrapOverflow, useAutoWidth, - menuId, - content, + id: menuId, + headerName: content, index, - sortDir, - type, - isFirstChild, - isLastChild, + headerSortDir: sortDir, + headerType: type, + headerIndex: index, + numHeaders, onOutsideClick: onSaveClick, onSortSelect, onMoveColumnClick, onInsertColumnClick, onTypeSelect, - onDeleteClick, + onHeaderDeleteClick: onDeleteClick, onClose: handleClose, onAutoWidthToggle, onWrapOverflowToggle @@ -59157,22 +59276,22 @@ function EditableTh({ } // src/app/components/OptionBar/index.tsx -var import_react33 = __toModule(require_react()); +var import_react40 = __toModule(require_react()); var SortBubble = ({ sortDir, content }) => { const icon = findSortIcon(sortDir, "NLT__icon--md"); - return /* @__PURE__ */ import_react33.default.createElement("div", { + return /* @__PURE__ */ import_react40.default.createElement("div", { className: "NLT__sort-bubble" - }, icon, /* @__PURE__ */ import_react33.default.createElement("span", null, content)); + }, icon, /* @__PURE__ */ import_react40.default.createElement("span", null, content)); }; var SortBubbleList = ({ bubbles }) => { - return /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, bubbles.map((bubble, i) => /* @__PURE__ */ import_react33.default.createElement(SortBubble, { + return /* @__PURE__ */ import_react40.default.createElement(import_react40.default.Fragment, null, bubbles.map((bubble, i) => /* @__PURE__ */ import_react40.default.createElement(SortBubble, { key: i, sortDir: bubble.sortDir, content: bubble.content }))); }; function OptionBar({ headers }) { - const bubbles = (0, import_react33.useMemo)(() => { + const bubbles = (0, import_react40.useMemo)(() => { return headers.filter((header) => header.sortDir !== SortDir.DEFAULT).map((header) => { return { content: header.content, @@ -59180,9 +59299,9 @@ function OptionBar({ headers }) { }; }); }, [headers]); - return /* @__PURE__ */ import_react33.default.createElement("div", { + return /* @__PURE__ */ import_react40.default.createElement("div", { className: "NLT__option-bar" - }, /* @__PURE__ */ import_react33.default.createElement(SortBubbleList, { + }, /* @__PURE__ */ import_react40.default.createElement(SortBubbleList, { bubbles })); } @@ -59255,10 +59374,10 @@ var addColumn = (data) => { }; // src/app/services/sort/sort.ts -var import_react34 = __toModule(require_react()); +var import_react41 = __toModule(require_react()); var useSortedRows = (appData, sortTime) => { - const lastTime = (0, import_react34.useRef)(-1); - const lastSort = (0, import_react34.useRef)({ + const lastTime = (0, import_react41.useRef)(-1); + const lastSort = (0, import_react41.useRef)({ sortDir: SortDir.DEFAULT, sortedRows: appData.rows }); @@ -59334,19 +59453,19 @@ function App({ tableIndex, el }) { - const [appData, setAppData] = (0, import_react35.useState)(loadedData); + const [appData, setAppData] = (0, import_react42.useState)(loadedData); const tableId = useId(); - const [tagUpdate, setTagUpdate] = (0, import_react35.useState)({ + const [tagUpdate, setTagUpdate] = (0, import_react42.useState)({ time: 0, cellId: "" }); - const [sortTime, setSortTime] = (0, import_react35.useState)(0); - const [positionUpdateTime, setPositionUpdateTime] = (0, import_react35.useState)(0); + const [sortTime, setSortTime] = (0, import_react42.useState)(0); + const [positionUpdateTime, setPositionUpdateTime] = (0, import_react42.useState)(0); const { saveTime, saveData } = useSaveTime(); const { sortedRows, sortDir } = useSortedRows(appData, sortTime); useCloseMenusOnScroll("markdown-preview-view"); useCloseMenusOnScroll("NLT__table-wrapper"); - (0, import_react35.useEffect)(() => { + (0, import_react42.useEffect)(() => { forcePositionUpdate(); }, [sortedRows]); useDidMountEffect(() => { @@ -59726,7 +59845,7 @@ function App({ return calculatedWidth; return headerWidth; } - const cellSizes = (0, import_react35.useMemo)(() => { + const cellSizes = (0, import_react42.useMemo)(() => { return appData.cells.map((cell) => { const header = appData.headers.find((header2) => header2.id === cell.headerId); const { width, height } = measureElement(cell.toString(), header.useAutoWidth, header.width, header.shouldWrapOverflow); @@ -59738,7 +59857,7 @@ function App({ }; }); }, [appData.cells, appData.headers]); - const rowHeights = (0, import_react35.useMemo)(() => { + const rowHeights = (0, import_react42.useMemo)(() => { const heights = {}; cellSizes.forEach((size) => { const { rowId, height } = size; @@ -59750,7 +59869,7 @@ function App({ return [key, numToPx(value)]; })); }, [cellSizes]); - const columnWidths = (0, import_react35.useMemo)(() => { + const columnWidths = (0, import_react42.useMemo)(() => { const widths = {}; cellSizes.forEach((size) => { const { headerId, width: cellWidth } = size; @@ -59765,16 +59884,16 @@ function App({ return [key, numToPx(value)]; })); }, [cellSizes]); - return /* @__PURE__ */ import_react35.default.createElement("div", { + return /* @__PURE__ */ import_react42.default.createElement("div", { id: tableId, className: "NLT__app", tabIndex: 0 - }, /* @__PURE__ */ import_react35.default.createElement(OptionBar, { + }, /* @__PURE__ */ import_react42.default.createElement(OptionBar, { headers: appData.headers - }), /* @__PURE__ */ import_react35.default.createElement("div", { + }), /* @__PURE__ */ import_react42.default.createElement("div", { className: "NLT__table-wrapper" - }, /* @__PURE__ */ import_react35.default.createElement(Table, { - headers: appData.headers.map((header, columnIndex) => { + }, /* @__PURE__ */ import_react42.default.createElement(Table, { + headers: appData.headers.map((header, i) => { const { id, content, @@ -59786,19 +59905,18 @@ function App({ } = header; return { id, - component: /* @__PURE__ */ import_react35.default.createElement(EditableTh, { + component: /* @__PURE__ */ import_react42.default.createElement(EditableTh, { key: id, id, width: findCellWidth(type, useAutoWidth, columnWidths[id], width), shouldWrapOverflow, useAutoWidth, positionUpdateTime, - index: columnIndex, + index: i, content, type, sortDir: sortDir2, - isFirstChild: columnIndex === 0, - isLastChild: columnIndex === appData.headers.length - 1, + numHeaders: appData.headers.length, onSortSelect: handleHeaderSortSelect, onInsertColumnClick: handleInsertColumnClick, onMoveColumnClick: handleMoveColumnClick, @@ -59814,7 +59932,7 @@ function App({ rows: sortedRows.map((row, rowIndex) => { return { id: row.id, - component: /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, appData.headers.map((header) => { + component: /* @__PURE__ */ import_react42.default.createElement(import_react42.default.Fragment, null, appData.headers.map((header) => { const cell = appData.cells.find((cell2) => cell2.rowId === row.id && cell2.headerId === header.id); const { id: headerId, @@ -59822,7 +59940,7 @@ function App({ useAutoWidth, width } = header; - return /* @__PURE__ */ import_react35.default.createElement(EditableTd, { + return /* @__PURE__ */ import_react42.default.createElement(EditableTd, { key: cell.id, cell, headerType: header.type, @@ -59840,12 +59958,12 @@ function App({ onColorChange: handleChangeColor, onAddTag: handleAddTag }); - }), /* @__PURE__ */ import_react35.default.createElement("td", { + }), /* @__PURE__ */ import_react42.default.createElement("td", { className: "NLT__td", style: { height: rowHeights[row.id] } - }, /* @__PURE__ */ import_react35.default.createElement("div", { + }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "NLT__td-container" - }, /* @__PURE__ */ import_react35.default.createElement(RowMenu, { + }, /* @__PURE__ */ import_react42.default.createElement(RowMenu, { hideInsertOptions: sortDir !== SortDir.DEFAULT, hideMoveOptions: sortDir !== SortDir.DEFAULT, positionUpdateTime, @@ -60038,12 +60156,12 @@ var NLTTable = class extends import_obsidian2.MarkdownRenderChild { const { tableIndex, data } = yield loadAppData(this.plugin, this.settings, this.containerEl, this.sourcePath); if (data) { this.el = this.containerEl.createEl("div"); - import_react_dom2.default.render(/* @__PURE__ */ import_react36.default.createElement(FocusProvider, { + import_react_dom2.default.render(/* @__PURE__ */ import_react43.default.createElement(FocusProvider, { plugin: this.plugin, sourcePath: this.sourcePath, tableIndex, el: this.el - }, /* @__PURE__ */ import_react36.default.createElement(MenuProvider, null, /* @__PURE__ */ import_react36.default.createElement(App, { + }, /* @__PURE__ */ import_react43.default.createElement(MenuProvider, null, /* @__PURE__ */ import_react43.default.createElement(App, { plugin: this.plugin, settings: this.settings, loadedData: data, diff --git a/.obsidian/plugins/notion-like-tables/manifest.json b/.obsidian/plugins/notion-like-tables/manifest.json index 7d39bdb8..734ae6a2 100644 --- a/.obsidian/plugins/notion-like-tables/manifest.json +++ b/.obsidian/plugins/notion-like-tables/manifest.json @@ -6,5 +6,5 @@ "author": "Trey Wallis", "authorUrl": "https://github.com/trey-wallis", "isDesktopOnly": false, - "version": "4.2.3" + "version": "4.2.5" } diff --git a/.obsidian/plugins/notion-like-tables/styles.css b/.obsidian/plugins/notion-like-tables/styles.css index 36bfb933..00f9eae1 100644 --- a/.obsidian/plugins/notion-like-tables/styles.css +++ b/.obsidian/plugins/notion-like-tables/styles.css @@ -985,21 +985,20 @@ input:checked + .NLT__slider:before { cursor: default; color: var(--text-normal); } -.NLT__header-menu-item:focus-visible { - outline: 1px solid blue; -} -.NLT__header-menu-header-container { +.NLT__header-menu-title-container { display: flex; - margin-bottom: 5px; font-size: 0.95rem; } +.NLT__header-menu-title { + font-weight: 700; +} +.NLT__header-menu-item:focus-visible { + outline: 1px solid blue; +} .NLT__header-menu-ul { padding: 0; margin: 0; } -.NLT__header-menu-header { - font-weight: 700; -} .NLT__header-menu-item { font-size: 0.9rem; display: flex; @@ -1008,7 +1007,7 @@ input:checked + .NLT__slider:before { margin: 0; } .NLT__header-menu-input { - width: 150px !important; + font-size: 0.95rem; } /* src/app/components/EditableTh/styles.css */ @@ -1101,8 +1100,6 @@ input:checked + .NLT__slider:before { .NLT__error { color: red; } -.NLT__app { -} .NLT__table-wrapper { overflow: auto; } @@ -1154,3 +1151,7 @@ input:checked + .NLT__slider:before { white-space: nowrap; margin: 0; } +.NLT__hr { + margin: 0.35rem 0; + width: 100%; +} diff --git a/.obsidian/plugins/obsidian-activity-history/data.json b/.obsidian/plugins/obsidian-activity-history/data.json index 6b448497..51eb1f81 100644 --- a/.obsidian/plugins/obsidian-activity-history/data.json +++ b/.obsidian/plugins/obsidian-activity-history/data.json @@ -12,8 +12,8 @@ "checkpointList": [ { "path": "/", - "date": "2022-08-05", - "size": 5984611 + "date": "2022-08-07", + "size": 6221341 } ], "activityHistory": [ @@ -850,7 +850,15 @@ }, { "date": "2022-08-05", - "value": 1387 + "value": 1683 + }, + { + "date": "2022-08-06", + "value": 1213 + }, + { + "date": "2022-08-07", + "value": 235233 } ] } diff --git a/.obsidian/plugins/obsidian-commits/data.json b/.obsidian/plugins/obsidian-commits/data.json index 37a16ca0..dbbecd3f 100644 --- a/.obsidian/plugins/obsidian-commits/data.json +++ b/.obsidian/plugins/obsidian-commits/data.json @@ -2145,7 +2145,7 @@ "links": 1 }, "01.01 Life Orga/@Finances.md": { - "size": 3756, + "size": 4217, "tags": 3, "links": 5 }, @@ -2775,7 +2775,7 @@ "links": 2 }, "06.02 Investments/VC Tasks.md": { - "size": 7035, + "size": 7809, "tags": 3, "links": 6 }, @@ -2860,7 +2860,7 @@ "links": 3 }, "06.02 Investments/Equity Tasks.md": { - "size": 7437, + "size": 8259, "tags": 3, "links": 4 }, @@ -4677,7 +4677,7 @@ "00.03 News/How PM’s former aide had to ‘nanny him’ through lockdown.md": { "size": 16172, "tags": 4, - "links": 1 + "links": 2 }, "00.01 Admin/Calendars/2022-08-01.md": { "size": 1108, @@ -4703,14 +4703,64 @@ "size": 1108, "tags": 0, "links": 4 + }, + "00.01 Admin/Calendars/2022-08-06.md": { + "size": 1108, + "tags": 0, + "links": 5 + }, + "00.01 Admin/Calendars/2022-08-07.md": { + "size": 1108, + "tags": 0, + "links": 4 + }, + "00.03 News/Disaster at 18,200 feet.md": { + "size": 43315, + "tags": 3, + "links": 1 + }, + "00.03 News/Remembering Bill Russell The Greatest Winner in Sports.md": { + "size": 13978, + "tags": 3, + "links": 2 + }, + "00.03 News/Librarian finds love notes, doodles in books and shares them with a grateful public.md": { + "size": 9133, + "tags": 3, + "links": 2 + }, + "00.03 News/Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever..md": { + "size": 21181, + "tags": 3, + "links": 1 + }, + "00.03 News/Seven years of sex abuse How Mormon officials let it happen.md": { + "size": 27161, + "tags": 3, + "links": 1 + }, + "00.03 News/The Most Surveilled Place in America.md": { + "size": 51162, + "tags": 3, + "links": 1 + }, + "00.03 News/Sam Taggart’s Hard Sell.md": { + "size": 59075, + "tags": 3, + "links": 1 + }, + "00.03 News/While Britain burns, the Tories are … fiddling with themselves again Marina Hyde.md": { + "size": 9157, + "tags": 3, + "links": 1 } }, "commitTypes": { "/": { - "Refactor": 640, - "Create": 614, - "Link": 1235, - "Expand": 533 + "Refactor": 649, + "Create": 625, + "Link": 1258, + "Expand": 536 } }, "dailyCommits": { @@ -4724,17 +4774,17 @@ "6": 23, "7": 206, "8": 318, - "9": 253, - "10": 168, + "9": 259, + "10": 169, "11": 116, "12": 133, - "13": 251, + "13": 252, "14": 177, "15": 115, "16": 102, "17": 130, - "18": 284, - "19": 159, + "18": 316, + "19": 165, "20": 132, "21": 69, "22": 225, @@ -4749,12 +4799,15 @@ "Thu": 354, "Fri": 298, "Sat": 0, - "Sun": 1357 + "Sun": 1403 } }, "recentCommits": { "/": { "Expanded": [ + " @Finances ", + " VC Tasks ", + " Equity Tasks ", " @Shopping list ", " @Reading master ", " Household ", @@ -4802,12 +4855,20 @@ " 2022-06-21 ", " Avignon ", " Voitures ", - " Arles ", - " Avignon ", - " Nimes ", " Arles " ], "Created": [ + " While Britain burns, the Tories are … fiddling with themselves again Marina Hyde ", + " Sam Taggart’s Hard Sell ", + " The Most Surveilled Place in America ", + " Seven years of sex abuse How Mormon officials let it happen ", + " Inside Putin's Anti-Semitic Turn ", + " Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever. ", + " Librarian finds love notes, doodles in books and shares them with a grateful public ", + " Remembering Bill Russell The Greatest Winner in Sports ", + " Disaster at 18,200 feet ", + " 2022-08-07 ", + " 2022-08-06 ", " 2022-08-05 ", " 2022-08-04 ", " 2022-08-03 ", @@ -4847,20 +4908,17 @@ " 2022-07-16 ", " 2022-07-15 ", " 2022-07-14 ", - " 2022-07-13 ", - " 2022-07-12 ", - " 2022-07-11 ", - " Meet Richard Fritz, America’s Most Unelectable Elected Official Defector ", - " He Had a Dark Secret. It Changed His Best Friend’s Life. ", - " Brett Parson, gay D.C. cop arrested in Florida, divides LGBTQ community ", - " The Holy Anarchy of Fun ", - " American Graffiti New Beverly Cinema ", - " 2022-07-10 ", - " 2022-07-09 ", - " Untitled ", - " 2022-07-08 " + " 2022-07-13 " ], "Renamed": [ + " While Britain burns, the Tories are … fiddling with themselves again Marina Hyde ", + " Sam Taggart’s Hard Sell ", + " The Most Surveilled Place in America ", + " Seven years of sex abuse How Mormon officials let it happen ", + " Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever. ", + " Librarian finds love notes, doodles in books and shares them with a grateful public ", + " Remembering Bill Russell The Greatest Winner in Sports ", + " Disaster at 18,200 feet ", " How PM’s former aide had to ‘nanny him’ through lockdown ", " How PM’s former aide had to ‘nanny him’ through lockdown ", " The Age of the Superyacht ", @@ -4903,17 +4961,18 @@ " The Biggest Change in Media Since Cable Is Happening Right Now ", " Jeff Bezos’s Next Monopoly The Press ", " At 88, Poker Legend Doyle Brunson Is Still Bluffing. Or Is He ", - " Bandes Dessinées ", - " Marseille ", - " Arles ", - " Nimes ", - " @France ", - " @@Travels ", - " Avignon ", - " As El Salvador’s president tries to silence free press, journalist brothers expose his ties to street gangs - Los Angeles Times ", - " Two Professors Found What Creates a Mass Shooter. Will Politicians Pay Attention " + " Bandes Dessinées " ], "Tagged": [ + " While Britain burns, the Tories are … fiddling with themselves again Marina Hyde ", + " While Britain burns, the Tories are … fiddling with themselves again Marina Hyde ", + " Sam Taggart’s Hard Sell ", + " Seven years of sex abuse How Mormon officials let it happen ", + " The Most Surveilled Place in America ", + " Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever. ", + " Disaster at 18,200 feet ", + " Remembering Bill Russell The Greatest Winner in Sports ", + " Librarian finds love notes, doodles in books and shares them with a grateful public ", " How PM’s former aide had to ‘nanny him’ through lockdown ", " Meet the Lobbyist Next Door ", " The Age of the Superyacht ", @@ -4955,16 +5014,7 @@ " Albert Camus The philosopher who resisted despair ", " He was my high school journalism teacher. Then I investigated his relationships with teenage girls. ", " Riding London’s Unexpectedly Fantastic Elizabeth Line ", - " When Cars Kill Pedestrians ", - " The making of Prince William ", - " It’s 10 PM. Do You Know Where Your Cat Is Hakai Magazine ", - " The Incredible True Story of Jody Harris, Con Artist Extraordinaire. ", - " The Women Who Ran Genghis Khan’s Empire ", - " The Silent Impact of Burnout — and How to Overcome It as a Leader ", - " No Idea ", - " La Réserve ", - " The Richest Black Girl in America ", - " The rise of the Strangler " + " When Cars Kill Pedestrians " ], "Refactored": [ " @Main Dashboard ", @@ -5011,6 +5061,7 @@ " @Reading master " ], "Deleted": [ + " Inside Putin's Anti-Semitic Turn ", " 403 Forbidden ", " 2022-07-30 ", " Hollywood's Finest series on pregnancy and homelessness - Los Angeles Times ", @@ -5060,10 +5111,23 @@ " Chainlink ", " Equity Investments ", " Untitled ", - " unlinked files output ", - " Untitled " + " unlinked files output " ], "Linked": [ + " While Britain burns, the Tories are … fiddling with themselves again Marina Hyde ", + " Librarian finds love notes, doodles in books and shares them with a grateful public ", + " Remembering Bill Russell The Greatest Winner in Sports ", + " How PM’s former aide had to ‘nanny him’ through lockdown ", + " Sam Taggart’s Hard Sell ", + " Seven years of sex abuse How Mormon officials let it happen ", + " The Most Surveilled Place in America ", + " Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever. ", + " Disaster at 18,200 feet ", + " Remembering Bill Russell The Greatest Winner in Sports ", + " Librarian finds love notes, doodles in books and shares them with a grateful public ", + " 2022-08-07 ", + " 2022-08-06 ", + " 2022-08-06 ", " 2022-08-05 ", " 2022-08-04 ", " 2022-08-03 ", @@ -5100,21 +5164,7 @@ " Scenes from an Open Marriage - The Paris Review ", " The Surprising Evolution of Dinner Parties ", " The metamorphosis of J.K. Rowling ", - " Saudi Crown Prince’s $500 Billion ’Smart City’ Faces Major Setbacks ", - " Scenes from an Open Marriage - The Paris Review ", - " The Surprising Evolution of Dinner Parties ", - " It was a secret road map for breaking the law to get an abortion. Now, ‘The List’ and its tactics are resurfacing ", - " 2022-07-17 ", - " 2022-07-17 ", - " American Graffiti New Beverly Cinema ", - " Modo ", - " Modo ", - " Daizy ", - " Daizy ", - " 2022-07-16 ", - " 2022-07-15 ", - " 2022-07-15 ", - " 2022-07-14 " + " Saudi Crown Prince’s $500 Billion ’Smart City’ Faces Major Setbacks " ], "Removed Tags from": [ " Le Miel de Paris ", diff --git a/.obsidian/plugins/obsidian-dice-roller/main.js b/.obsidian/plugins/obsidian-dice-roller/main.js index 23fb183b..01df2861 100644 --- a/.obsidian/plugins/obsidian-dice-roller/main.js +++ b/.obsidian/plugins/obsidian-dice-roller/main.js @@ -5728,7 +5728,7 @@ void main() { `),f.splice(o.lineStart,o.lineEnd-o.lineStart+1,...E),b()})})),await A.roll();continue}catch(x){console.error(x)}if(!!/^dice(?:\+|\-|\-mod)?:\s*([\s\S]+)\s*?/.test(g.innerText))try{let[,x]=g.innerText.match(/^dice(?:\+|\-|\-mod)?:\s*([\s\S]+)\s*?/),p=await this.getRoller(x,a.sourcePath),d=this.data.results?.[s]?.[l]?.[v]??null;(this.data.persistResults&&!/dice\-/.test(g.innerText)||/dice\+/.test(g.innerText))&&(this.persistingFiles.add(a.sourcePath),u[v]=p,p.save=!0);let A=async()=>{await p.roll(),p.save&&d&&await p.applyResult(d),g.replaceWith(p.containerEl)};p.loaded?await A():p.on("loaded",async()=>{await A()}),this.fileMap.has(c)||this.fileMap.set(c,[]),this.fileMap.set(c,[...this.fileMap.get(c),p]);let b=this.app.workspace.getActiveViewOfType(l2.MarkdownView);if(b&&this.fileMap.has(c)&&this.fileMap.get(c).length===1){let C=this,E=E0(b,{onUnloadFile:function(T){return async function(_){return _==c&&(C.fileMap.delete(c),E()),await T.call(this,_)}}});b.register(E),b.register(()=>this.fileMap.delete(c))}}catch(x){console.error(x),new l2.Notice(`There was an error parsing the dice string: ${g.innerText}. ${x}`,5e3);continue}}if(h&&m.length&&(await Promise.all(m),await this.app.vault.modify(c,f.join(` -`))),s in this.data.results&&(this.data.results[s][l]={}),Object.entries(u).length){let v=this.app.workspace.getActiveViewOfType(l2.MarkdownView);if(v){let g=this,x=E0(v,{onUnloadFile:function(p){return async function(d){if(d=c){g.persistingFiles.has(s)&&(g.persistingFiles.delete(s),g.data.results[s]={});for(let A in u){let b=u[A],C=a.getSectionInfo(i)?.lineStart;if(C==null)continue;let E={[C]:{...g.data.results[s]?.[C]??{},[A]:b.toResult()}};g.data.results[s]={...g.data.results[s]??{},...E},await g.saveSettings()}}return x(),await p.call(this,d)}}});v.register(x),v.register(async()=>{this.persistingFiles.has(s)&&(this.persistingFiles.delete(s),this.data.results[s]={});for(let p in u){let d=u[p],A=a.getSectionInfo(i)?.lineStart;if(A==null)continue;let b={[A]:{...this.data.results[s]?.[A]??{},[p]:d.toResult()}};this.data.results[s]={...this.data.results[s]??{},...b},await this.saveSettings()}})}}}),this.app.workspace.onLayoutReady(async()=>{await this.registerDataviewInlineFields()})}get canUseDataview(){return this.app.plugins.getPlugin("dataview")!=null}get dataview(){return this.app.plugins.getPlugin("dataview")}async dataviewReady(){return new Promise(e=>{this.canUseDataview||e(!1),this.dataview.api&&e(!0),this.registerEvent(this.app.metadataCache.on("dataview:api-ready",()=>{e(!0)}))})}get view(){let e=this.app.workspace.getLeavesOfType(v4),t=e.length?e[0]:null;if(t&&t.view&&t.view instanceof $e)return t.view}async getArrayRoller(e,t=1){let i=new H0(this,e,t);return await i.roll(),i}async addDiceView(e=!1){e&&!this.data.showLeafOnStartup||this.app.workspace.getLeavesOfType(v4).length||await this.app.workspace.getRightLeaf(!1).setViewState({type:v4})}async registerDataviewInlineFields(){if(!this.canUseDataview)return;await this.dataviewReady(),this.dataview.index.pages.forEach(({fields:t})=>{for(let[i,a]of t)typeof a!="number"||Number.isNaN(a)||a==null||this.inline.set(i,a)}),this.registerEvent(this.app.metadataCache.on("dataview:metadata-change",(t,i)=>{if(t==="update"){let a=this.dataview.api.page(i.path);if(!a)return;for(let r in a){let s=a[r];typeof s!="number"||Number.isNaN(s)||s==null||this.inline.set(r,s)}}}))}async renderRoll(e){if(!(e instanceof X2)||!e?.dice?.length){new l2.Notice(`This dice roll can't be rendered: ${e.original}`);return}this.addChild(this.renderer),this.renderer.setDice(e),await this.renderer.start(),e.recalculate()}async parseDice(e,t){let i=await this.getRoller(e,t);return{result:await i.roll(),roller:i}}clearEmpties(e){for(var t in e)!e[t]||typeof e[t]!="object"||(this.clearEmpties(e[t]),Object.keys(e[t]).length===0&&delete e[t])}async saveSettings(){this.clearEmpties(this.data.results),await this.saveData(this.data)}get dataview_regex(){let e=Array.from(this.inline.keys());return e.length?new RegExp(`(${e.join("|")})`,"g"):null}async getRoller(e,t="",i=this.data.showDice){e=e.replace(/\\\|/g,"|");let a=e.includes("|nodice")?!1:i,r=this.data.renderAllDice,s=this.data.displayResultsInline,o=h2.Roll,l="",c=/\|text\((.*)\)/;if(e.includes("|render")&&(r=!0),e.includes("|norender")&&(r=!1),e.includes("|form")&&(s=!0),e.includes("|noform")&&(s=!1),e.includes("|avg")&&(o=h2.Average),e.includes("|none")&&(o=h2.None),e.includes("|text(")){let[,h]=e.match(c)??[null,""];l=h}e=(0,Li.decode)(e.replace("|nodice","").replace("|render","").replace("|norender","").replace("|noform","").replace("|form","").replace("|avg","").replace("|none","").replace(c,"")),e in this.data.formulas&&(e=this.data.formulas[e]);let u=this.parse(e);switch(this.getTypeFromLexemes(u)){case"dice":{let h=new X2(this,e,u,a,l,o);return h.shouldRender=r,h.showFormula=s,h}case"table":{let h=new B4(this,e,u[0],t,a);return await h.init,h}case"section":return new Mt(this,e,u[0],t,a);case"tag":{if(!this.canUseDataview)throw new Error("Tags are only supported with the Dataview plugin installed.");return new a6(this,e,u[0],t,a)}case"link":return new r6(this,e,u[0],t,a);case"line":return new n6(this,e,u[0],t,a)}}getRollerSync(e,t,i=this.data.showDice){e=e.replace(/\\\|/g,"|");let a=e.includes("|nodice")?!1:i,r=this.data.renderAllDice,s=this.data.displayResultsInline,o=h2.Roll,l="",c=/\|text\((.*)\)/;if(e.includes("|render")&&(r=!0),e.includes("|norender")&&(r=!1),e.includes("|form")&&(s=!0),e.includes("|noform")&&(s=!1),e.includes("|avg")&&(o=h2.Average),e.includes("|none")&&(o=h2.None),e.includes("|text(")){let[,h]=e.match(c)??[null,""];l=h}e=(0,Li.decode)(e.replace("|nodice","").replace("|render","").replace("|norender","").replace("|noform","").replace("|form","").replace("|avg","").replace("|none","").replace(c,"")),e in this.data.formulas&&(e=this.data.formulas[e]);let u=this.parse(e);switch(this.getTypeFromLexemes(u)){case"dice":{let h=new X2(this,e,u,a,l,o);return h.shouldRender=r,h.showFormula=s,h}case"table":{let h=new B4(this,e,u[0],t,a);return h.init,h}case"section":return new Mt(this,e,u[0],t,a);case"tag":{if(!this.canUseDataview)throw new Error("Tags are only supported with the Dataview plugin installed.");return new a6(this,e,u[0],t,a)}case"link":return new r6(this,e,u[0],t,a);case"line":return new n6(this,e,u[0],t,a)}}getTypeFromLexemes(e){return e.some(({type:t})=>t==="table")?"table":e.some(({type:t})=>t==="section")?"section":e.some(({type:t})=>t==="tag")?"tag":e.some(({type:t})=>t==="link")?"link":e.some(({type:t})=>t==="line")?"line":"dice"}onunload(){console.log("DiceRoller unloaded"),this.app.workspace.getLeavesOfType(v4).forEach(e=>e.detach()),"__THREE__"in window&&delete window.__THREE__,this.renderer.unload(),this.app.workspace.trigger("dice-roller:unload")}parse(e){return this.parser.parse(e)}}; +`))),s in this.data.results&&(this.data.results[s][l]={}),Object.entries(u).length){let v=this.app.workspace.getActiveViewOfType(l2.MarkdownView);if(v){let g=this,x=E0(v,{onUnloadFile:function(p){return async function(d){if(d=c){g.persistingFiles.has(s)&&(g.persistingFiles.delete(s),g.data.results[s]={});for(let A in u){let b=u[A],C=a.getSectionInfo(i)?.lineStart;if(C==null)continue;let E={[C]:{...g.data.results[s]?.[C]??{},[A]:b.toResult()}};g.data.results[s]={...g.data.results[s]??{},...E},await g.saveSettings()}}return x(),await p.call(this,d)}}});v.register(x),v.register(async()=>{this.persistingFiles.has(s)&&(this.persistingFiles.delete(s),this.data.results[s]={});for(let p in u){let d=u[p],A=a.getSectionInfo(i)?.lineStart;if(A==null)continue;let b={[A]:{...this.data.results[s]?.[A]??{},[p]:d.toResult()}};this.data.results[s]={...this.data.results[s]??{},...b},await this.saveSettings()}})}}}),this.app.workspace.onLayoutReady(async()=>{await this.registerDataviewInlineFields()})}get canUseDataview(){return this.app.plugins.getPlugin("dataview")!=null}get dataview(){return this.app.plugins.getPlugin("dataview")}async dataviewReady(){return new Promise(e=>{this.canUseDataview||e(!1),this.dataview.api&&e(!0),this.registerEvent(this.app.metadataCache.on("dataview:api-ready",()=>{e(!0)}))})}get view(){let e=this.app.workspace.getLeavesOfType(v4),t=e.length?e[0]:null;if(t&&t.view&&t.view instanceof $e)return t.view}async getArrayRoller(e,t=1){let i=new H0(this,e,t);return await i.roll(),i}async addDiceView(e=!1){e&&!this.data.showLeafOnStartup||this.app.workspace.getLeavesOfType(v4).length||await this.app.workspace.getRightLeaf(!1).setViewState({type:v4})}async registerDataviewInlineFields(){if(!this.canUseDataview)return;await this.dataviewReady(),this.dataview.index.pages.forEach(({fields:t})=>{for(let[i,a]of t)typeof a!="number"||Number.isNaN(a)||a==null||this.inline.set(i,a)}),this.registerEvent(this.app.metadataCache.on("dataview:metadata-change",(t,i)=>{if(t==="update"){let a=this.dataview.api.page(i.path);if(!a)return;for(let r in a){let s=a[r];typeof s!="number"||Number.isNaN(s)||s==null||this.inline.set(r,s)}}}))}async renderRoll(e){if(!(e instanceof X2)||!e?.dice?.length){new l2.Notice(`This dice roll can't be rendered: ${e.original}`);return}this.addChild(this.renderer),this.renderer.setDice(e),await this.renderer.start(),e.recalculate()}async parseDice(e,t){let i=await this.getRoller(e,t);return{result:await i.roll(),roller:i}}clearEmpties(e){for(var t in e)!e[t]||typeof e[t]!="object"||(this.clearEmpties(e[t]),Object.keys(e[t]).length===0&&delete e[t])}async saveSettings(){this.clearEmpties(this.data.results),await this.saveData(this.data)}get dataview_regex(){let e=Array.from(this.inline.keys());return e.length?new RegExp(`(${e.join("|")})`,"g"):null}async getRoller(e,t="",i=this.data.showDice){e=e.replace(/\\\|/g,"|");let a=e.includes("|nodice")?!1:i,r=this.data.renderAllDice,s=this.data.displayResultsInline,o=h2.Roll,l="",c=/\|text\((.*)\)/;if(e.includes("|render")&&(r=!0),e.includes("|norender")&&(r=!1),e.includes("|form")&&(s=!0),e.includes("|noform")&&(s=!1),e.includes("|avg")&&(o=h2.Average),e.includes("|none")&&(o=h2.None),e.includes("|text(")){let[,h]=e.match(c)??[null,""];l=h}e=(0,Li.decode)(e.replace("|nodice","").replace("|render","").replace("|norender","").replace("|noform","").replace("|form","").replace("|avg","").replace("|none","").replace(c,"")),e in this.data.formulas&&(e=this.data.formulas[e]);let u=this.parse(e);switch(this.getTypeFromLexemes(u)){case"dice":{let h=new X2(this,e,u,a,l,o);return h.shouldRender=r,h.showFormula=s,h}case"table":{let h=new B4(this,e,u[0],t,a);return await h.init,h}case"section":return new Mt(this,e,u[0],t,a);case"tag":{if(!this.canUseDataview)throw new Error("Tags are only supported with the Dataview plugin installed.");return new a6(this,e,u[0],t,a)}case"link":return new r6(this,e,u[0],t,a);case"line":return new n6(this,e,u[0],t,a)}}getRollerSync(e,t,i=this.data.showDice){e=e.replace(/\\\|/g,"|");let a=e.includes("|nodice")?!1:i,r=this.data.renderAllDice,s=!1,o=h2.Roll,l="",c=/\|text\((.*)\)/;if(e.includes("|form")&&(s=!0),e.includes("|noform")&&(s=!1),e.includes("|avg")&&(o=h2.Average),e.includes("|none")&&(o=h2.None),e.includes("|text(")){let[,h]=e.match(c)??[null,""];l=h}e=(0,Li.decode)(e.replace("|nodice","").replace("|render","").replace("|norender","").replace("|noform","").replace("|form","").replace("|avg","").replace("|none","").replace(c,"")),e in this.data.formulas&&(e=this.data.formulas[e]);let u=this.parse(e);switch(this.getTypeFromLexemes(u)){case"dice":{let h=new X2(this,e,u,a,l,o);return h.shouldRender=r,h.showFormula=s,h}case"table":{let h=new B4(this,e,u[0],t,a);return h.init,h}case"section":return new Mt(this,e,u[0],t,a);case"tag":{if(!this.canUseDataview)throw new Error("Tags are only supported with the Dataview plugin installed.");return new a6(this,e,u[0],t,a)}case"link":return new r6(this,e,u[0],t,a);case"line":return new n6(this,e,u[0],t,a)}}getTypeFromLexemes(e){return e.some(({type:t})=>t==="table")?"table":e.some(({type:t})=>t==="section")?"section":e.some(({type:t})=>t==="tag")?"tag":e.some(({type:t})=>t==="link")?"link":e.some(({type:t})=>t==="line")?"line":"dice"}onunload(){console.log("DiceRoller unloaded"),this.app.workspace.getLeavesOfType(v4).forEach(e=>e.detach()),"__THREE__"in window&&delete window.__THREE__,this.renderer.unload(),this.app.workspace.trigger("dice-roller:unload")}parse(e){return this.parser.parse(e)}}; /*! * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) diff --git a/.obsidian/plugins/obsidian-dice-roller/manifest.json b/.obsidian/plugins/obsidian-dice-roller/manifest.json index d95d03fa..914e851f 100644 --- a/.obsidian/plugins/obsidian-dice-roller/manifest.json +++ b/.obsidian/plugins/obsidian-dice-roller/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-dice-roller", "name": "Dice Roller", - "version": "8.6.1", + "version": "8.6.2", "minAppVersion": "0.12.15", "description": "Inline dice rolling for Obsidian.md", "author": "Jeremy Valentine", diff --git a/.obsidian/plugins/obsidian-reminder-plugin/data.json b/.obsidian/plugins/obsidian-reminder-plugin/data.json index d1591a46..f2a3ff6a 100644 --- a/.obsidian/plugins/obsidian-reminder-plugin/data.json +++ b/.obsidian/plugins/obsidian-reminder-plugin/data.json @@ -341,11 +341,6 @@ } ], "01.02 Home/Household.md": [ - { - "title": "🛎 🧻 REMINDER [[Household]]: check need for toilet paper", - "time": "2022-08-08", - "rowNumber": 111 - }, { "title": "♻ [[Household]]: *Cardboard* recycling collection", "time": "2022-08-09", @@ -354,7 +349,12 @@ { "title": ":bed: [[Household]] Change bedsheets", "time": "2022-08-13", - "rowNumber": 122 + "rowNumber": 123 + }, + { + "title": "🛎 🧻 REMINDER [[Household]]: check need for toilet paper", + "time": "2022-08-15", + "rowNumber": 111 }, { "title": "♻ [[Household]]: *Paper* recycling collection", @@ -399,15 +399,15 @@ } ], "01.01 Life Orga/@Finances.md": [ - { - "title": ":heavy_dollar_sign: [[@Finances]]: update crypto prices within Obsidian 🔼", - "time": "2022-08-09", - "rowNumber": 118 - }, { "title": ":moneybag: [[@Finances]]: Transfer UK pension to CH", "time": "2022-08-29", "rowNumber": 73 + }, + { + "title": ":heavy_dollar_sign: [[@Finances]]: update crypto prices within Obsidian 🔼", + "time": "2022-09-13", + "rowNumber": 118 } ], "01.01 Life Orga/@Lifestyle.md": [ @@ -463,34 +463,34 @@ "06.02 Investments/VC Tasks.md": [ { "title": "💰[[VC Tasks#internet alerts|monitor VC news and publications]]", - "time": "2022-08-05", + "time": "2022-08-12", "rowNumber": 74 } ], "06.02 Investments/Crypto Tasks.md": [ { "title": "💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]]", - "time": "2022-08-05", + "time": "2022-08-12", "rowNumber": 74 } ], "06.02 Investments/Equity Tasks.md": [ { "title": "💰[[Equity Tasks#internet alerts|monitor Equity news and publications]]", - "time": "2022-08-05", + "time": "2022-08-12", "rowNumber": 74 } ], "05.02 Networks/Configuring UFW.md": [ { "title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix", - "time": "2022-08-06", + "time": "2022-08-13", "rowNumber": 239 }, { "title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list", - "time": "2022-08-06", - "rowNumber": 260 + "time": "2022-08-13", + "rowNumber": 261 } ], "00.01 Admin/Calendars/2022-03-02.md": [ diff --git a/.obsidian/plugins/obsidian-sortable/manifest.json b/.obsidian/plugins/obsidian-sortable/manifest.json index b839acc4..0e3ae8f1 100644 --- a/.obsidian/plugins/obsidian-sortable/manifest.json +++ b/.obsidian/plugins/obsidian-sortable/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-sortable", "name": "Sortable", - "version": "0.2.5", + "version": "0.2.6", "minAppVersion": "0.12.0", "description": "Wiki-like table sorting.", "author": "Alexandru Dinu", diff --git a/.obsidian/plugins/obsidian-sortable/styles.css b/.obsidian/plugins/obsidian-sortable/styles.css index 8ad06892..5d7241a1 100644 --- a/.obsidian/plugins/obsidian-sortable/styles.css +++ b/.obsidian/plugins/obsidian-sortable/styles.css @@ -1,22 +1,21 @@ .theme-light { --arrows-up: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='21' height='4' viewBox='0 0 21 4'%3E%3Cpath d='M6.5 4l4-4 4 4z'/%3E%3C/svg%3E"); --arrows-down: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='21' height='4' viewBox='0 0 21 4'%3E%3Cpath d='M14.5 0l-4 4-4-4z'/%3E%3C/svg%3E"); - --arrows-up-down: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='21' height='9' viewBox='0 0 21 9'%3E%3Cpath d='M14.5 5l-4 4-4-4zm0-1l-4-4-4 4z'/%3E%3C/svg%3E"); } .theme-dark { --arrows-up: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='21' height='4' viewBox='0 0 21 4'%3E%3Cpath fill='grey' d='M6.5 4l4-4 4 4z'/%3E%3C/svg%3E"); --arrows-down: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='21' height='4' viewBox='0 0 21 4'%3E%3Cpath fill='grey' d='M14.5 0l-4 4-4-4z'/%3E%3C/svg%3E"); - --arrows-up-down: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='21' height='9' viewBox='0 0 21 9'%3E%3Cpath fill='grey' d='M14.5 5l-4 4-4-4zm0-1l-4-4-4 4z'/%3E%3C/svg%3E"); } .markdown-preview-view th, .table-view-table > thead > tr > th, .markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th { - background-image: var(--arrows-up-down); + background-image: none; background-repeat: no-repeat; - background-position: center right; + background-position: right, left; padding-right: 21px; + padding-left: 21px; cursor: pointer; } @@ -26,4 +25,4 @@ th[sortable-style="sortable-asc"] { th[sortable-style="sortable-desc"] { background-image: var(--arrows-down) !important; -} +} \ No newline at end of file diff --git a/.obsidian/workspace b/.obsidian/workspace index 0ffd1af4..6be3cc71 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -4,7 +4,7 @@ "type": "split", "children": [ { - "id": "2b2590f368d34b86", + "id": "17d87be4cafe1862", "type": "leaf", "state": { "type": "markdown", @@ -141,7 +141,7 @@ } }, { - "id": "95cc78ec7a4c77e3", + "id": "0149d2717d704031", "type": "leaf", "state": { "type": "DICE_ROLLER_VIEW", @@ -151,17 +151,17 @@ ], "currentTab": 2 }, - "active": "2b2590f368d34b86", + "active": "17d87be4cafe1862", "lastOpenFiles": [ - "00.01 Admin/Calendars/2022-08-05.md", + "00.03 News/Disaster at 18,200 feet.md", "01.02 Home/@Main Dashboard.md", - "01.02 Home/@Shopping list.md", - "03.03 Food & Wine/Pastitsio.md", - "00.01 Admin/Calendars/2022-08-04.md", - "03.01 Reading list/@Reading master.md", - "03.01 Reading list/Americanah.md", - "03.02 Travels/Marseille.md", - "05.02 Networks/VPS Console Dialogue.md", - "00.01 Admin/Calendars/2022-08-03.md" + "00.03 News/While Britain burns, the Tories are … fiddling with themselves again Marina Hyde.md", + "00.03 News/Librarian finds love notes, doodles in books and shares them with a grateful public.md", + "00.03 News/Remembering Bill Russell The Greatest Winner in Sports.md", + "00.03 News/How PM’s former aide had to ‘nanny him’ through lockdown.md", + "00.03 News/Sam Taggart’s Hard Sell.md", + "00.03 News/The Most Surveilled Place in America.md", + "00.03 News/Seven years of sex abuse How Mormon officials let it happen.md", + "00.02 Inbox/Inside Putin's Anti-Semitic Turn.md" ] } \ No newline at end of file diff --git a/00.01 Admin/Calendars/2022-08-05.md b/00.01 Admin/Calendars/2022-08-05.md index 5cb527f1..11822303 100644 --- a/00.01 Admin/Calendars/2022-08-05.md +++ b/00.01 Admin/Calendars/2022-08-05.md @@ -13,9 +13,9 @@ Stress: 25 FrontHeadBar: 5 EarHeadBar: 30 BackHeadBar: 20 -Water: 3 -Coffee: 3 -Steps: +Water: 6 +Coffee: 4 +Steps: 7325 Ski: Riding: Racket: diff --git a/00.01 Admin/Calendars/2022-08-06.md b/00.01 Admin/Calendars/2022-08-06.md new file mode 100644 index 00000000..928a194d --- /dev/null +++ b/00.01 Admin/Calendars/2022-08-06.md @@ -0,0 +1,105 @@ +--- + +Date: 2022-08-06 +DocType: Note +Hierarchy: +TimeStamp: +location: +CollapseMetaTable: Yes +Sleep: 8.5 +Happiness: 95 +Gratefulness: 95 +Stress: 25 +FrontHeadBar: 5 +EarHeadBar: 30 +BackHeadBar: 20 +Water: 3.75 +Coffee: 2 +Steps: 5125 +Ski: +Riding: +Racket: +Football: +title: "Daily Note" +allDay: true +date: 2022-08-06 + +--- + +%% Parent:: [[@Life Admin]] %% + +--- + +[[2022-08-05|<< 🗓 Previous ]]       [[@Main Dashboard|Back]]       [[2022-08-07|🗓 Next >>]] + +--- + +  + +```button +name Record today's health +type command +action MetaEdit: Run MetaEdit +id EditMetaData +``` +^button-2022-08-06Edit + +```button +name Save +type command +action Save current file +id Save +``` +^button-2022-08-06NSave + +  + +# 2022-08-06 + +  + +```ad-abstract +title: Summary +collapse: open +Note Description +``` + +  + +```toc +style: number +``` + +  + +--- + +  + +### Memos + +  + +#### Memos + +This section does serve for quick memos. + +  + + +%% ### %% +  +- 09:42 Visit of Jungfrau by Interlaken with [[MRCK|Meggi-mo]] and her mum + +--- + +  + +### Notes + +  + +Loret ipsum + +  +  \ No newline at end of file diff --git a/00.01 Admin/Calendars/2022-08-07.md b/00.01 Admin/Calendars/2022-08-07.md new file mode 100644 index 00000000..b983ec79 --- /dev/null +++ b/00.01 Admin/Calendars/2022-08-07.md @@ -0,0 +1,104 @@ +--- + +Date: 2022-08-07 +DocType: Note +Hierarchy: +TimeStamp: +location: +CollapseMetaTable: Yes +Sleep: 9 +Happiness: 90 +Gratefulness: 90 +Stress: 25 +FrontHeadBar: 5 +EarHeadBar: 30 +BackHeadBar: 20 +Water: 0.25 +Coffee: 2 +Steps: +Ski: +Riding: +Racket: +Football: +title: "Daily Note" +allDay: true +date: 2022-08-07 + +--- + +%% Parent:: [[@Life Admin]] %% + +--- + +[[2022-08-06|<< 🗓 Previous ]]       [[@Main Dashboard|Back]]       [[2022-08-08|🗓 Next >>]] + +--- + +  + +```button +name Record today's health +type command +action MetaEdit: Run MetaEdit +id EditMetaData +``` +^button-2022-08-07Edit + +```button +name Save +type command +action Save current file +id Save +``` +^button-2022-08-07NSave + +  + +# 2022-08-07 + +  + +```ad-abstract +title: Summary +collapse: open +Note Description +``` + +  + +```toc +style: number +``` + +  + +--- + +  + +### Memos + +  + +#### Memos + +This section does serve for quick memos. + +  + + +%% ### %% +  + +--- + +  + +### Notes + +  + +Loret ipsum + +  +  \ No newline at end of file diff --git a/00.03 News/Disaster at 18,200 feet.md b/00.03 News/Disaster at 18,200 feet.md new file mode 100644 index 00000000..20cd7848 --- /dev/null +++ b/00.03 News/Disaster at 18,200 feet.md @@ -0,0 +1,487 @@ +--- + +Tag: ["Alpinism", "Sport", "Accident"] +Date: 2022-08-07 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2022-08-07 +Link: https://www.businessinsider.com/inside-a-fall-from-denali-north-americas-tallest-peak-2022-7 +location: +CollapseMetaTable: Yes + +--- + +Parent:: [[@News|News]] +Read:: [[2022-08-07]] + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-Disasterat18200feetNSave + +  + +# Disaster at 18,200 feet + +None of them noticed the fall. One moment, Adam Rawski was with them on the mountain. The next, he was gone. + +It was May 24, 2021, around Day 15 of their trek up Denali, North America's tallest peak. There was Grant Wilson and Sarah Maynard, Alaska natives and close friends since high school who were now in their early 20s; Rawski, a 31-year-old clean technology executive from Canada, who had befriended them on the mountain a week earlier; and Dr. Jason Lance, a 48-year-old radiologist from Utah who had paired up with Rawski at the last minute after both of their climbing partners turned back. + +The four had hoped to summit that day. But Rawski was exhausted and showing signs of altitude sickness. He couldn't go any further. Just over a thousand feet from the summit, they had no choice but to stop and turn back. + +Now on the descent, at around 18,200 feet, they had just crossed Denali Pass, a relatively flat, open snowfield with sweeping views of the Alaska Range and surrounding wilderness. In front of them lay the Autobahn, a notoriously dangerous icy slope that descends 1,000 feet. At least 13 deadly falls have been recorded here since 1980. + +The Autobahn's terrain can vary from rock solid ice to several feet of snow. If climbers lose their footing and fall, there's nothing to slow their momentum and prevent a fast and almost certainly fatal tumble down the slope. It's said some German climbers died at this spot years ago, which is how it became known as the Autobahn — as in, Germany's highway with no speed limit. + +Perhaps the most dangerous thing about the Autobahn is that it doesn't *look* very dangerous. It's steep enough to cause climbers to fall with great speed, but not so steep that all climbers exercise proper caution. The park service strongly encourages roping up with protection at this spot, but every year, teams ignore that advice. If the slope was just a bit steeper, it's likely fewer climbers would take the risk. + +Most falls on the Autobahn happen on the descent, when climbers are exhausted, having just pushed for the summit after two weeks on the unforgiving mountain, perhaps slightly impaired by the effects of altitude, and quite possibly a little cocky from having made it this far.  + +Despite his condition, Rawski was not roped up. Standing at the top of the Autobahn, the others had scattered a bit. Wilson had stepped out of sight for a bathroom break. Maynard was slightly downhill from Lance.  + +And then, Rawski was gone. + +As Maynard would tell me later, her mind raced through the possibilities: "Is he so hypoxic that he is taking his clothes off and wandering around? Is he so delusional that he's going for another summit attempt? Does his stomach hurt so bad that he's puking somewhere or just huddled up?" + +Then she heard Lance: "Oh, fuck." She followed his eyes down to the bottom of the Autobahn, 1000 feet below. There, Rawski's body in his bright blue puffer was lying, motionless. + +It was quiet, with no wind. But Maynard hadn't heard a thing. "That's what was so spooky and haunting," she said. "I didn't hear his ice axe hit the ground. I didn't hear his body tumble. I didn't hear a yelp from him." + +Maynard and Wilson huddled under a rock, all but certain their friend was dead. They held each other, and cried. + +Amazingly, Rawski didn't die that day. He's one of the only climbers known to have survived a fall down the Autobahn. But that's not where the story ends. What none of them knew then was that six months later, one of them would be criminally charged and brought before a judge — and they'd all have to relive the worst day of their lives. + +## The Great Outdoors + +When throngs of novice adventurers take on challenges without the proper training or expertise, disaster often follows — which is part of the story of what happened on Denali last May. + +Visits to America's national parks have exploded in recent years as more and more people seek out wild, majestic places to visit and color their Instagram feeds. More than 600,000 people came to Denali National Park in 2019, a 65% increase from 2000. Things were quiet in 2020 due to COVID-19, but by 2021 the mountain was nearly as busy as before the pandemic, with 1,007 climbers attempting to summit. + +Shortly after Rawski's fall, Denali's park rangers, all of them expert mountaineers, took the extraordinary step of publishing a finger-wagging [report](https://www.nps.gov/dena/blogs/troubling-trends.htm). "We have seen a disturbing amount of overconfidence paired with inexperience in the Alaska Range," they said, warning climbers that mountaineering in the Lower 48 doesn't necessarily prepare you for the high-altitude and extreme conditions of the Alaskan wilderness. + +![A clear morning view of Denali from inside the national park.](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) + +A clear morning view of Denali from inside the national park. + +C. Fredrickson Photography/Getty Images + +Denali soars 20,310 feet above sea level and, for some mountaineers, is considered a stepping stone to Mount Everest (though without the help of Sherpas). Its official title was changed from Mt. McKinley in 2015, when Denali, the name given to the mountain by Alaskan Natives — meaning "the tall one" or "the great one" — was restored. + +The peak is located among 6 million acres of protected wilderness. To reach the mountain, climbers hop on a small plane in Talkeetna, a tiny town south of the park, and fly over 75 miles of terrain that changes from lush greenery to jagged granite and snow-covered slopes. + +They're dropped off at Denali's base camp, located on the Kahiltna Glacier, at 7,200 feet elevation — already 1,000 feet higher than Mount Washington, the tallest peak of New Hampshire's White Mountains. From there, the expedition to the summit and back usually takes 17 to 21 days. + +Typically only about half of the climbers attempting Denali every year will reach the summit. Determining whether or not a climber is prepared to take on Denali is difficult even for rangers and guides. + +Temperatures can dip below -40 degrees Fahrenheit. Climbers face snow storms, freezing rain, 100 mph winds, and blazing sunlight. The gear weighs over 100 pounds and includes clothes, tents, stoves, skis, or snowshoes, crampons, protective equipment, and a sled to haul it all. Climbers take on steep vertical grades and glacier travel, during which they can encounter crevasses that go hundreds of feet deep into the ice — and that's all on top of the sheer physical challenge of climbing a mountain at an altitude few humans ever experience. + +![Base Camp on the Kahiltna Glacier in Denali National Park. Mountaineers climbing Denali, the highest mountain in North America, are dropped off here by ski planes, visible in photo.](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) + +Base Camp on the Kahiltna Glacier in Denali National Park. Mountaineers climbing Denali, the highest mountain in North America, are dropped off here by ski planes, visible in photo. + +Getty Images + +There are specific skill sets climbers should have, like snow and ice climbing, glacier travel, cold-weather camping, and exceptional cardiovascular fitness. But even then, it is hard to gauge if a person is ready. + +The most basic measure for whether or not a climber is prepared — physically, technically, psychologically — for a Denali expedition is straightforward: Would you attempt what you are doing if you were alone on this mountain? + +If the answer is no, you shouldn't be there. + +## A shared passion + +Maynard and Wilson teamed up to tackle Denali in late 2020. + +The two were high school classmates in Fairbanks, the largest and coldest city in Alaska's Interior region and the closest city to Denali. It's known for being one of the best places to see the northern lights, and for long summer days when the sun never sets. + +They both ran cross country, traveling with the team to faraway meets on weekends, and were part of a large friend group of cross country skiers. But they bonded most over their shared passion for mountaineering. + +They stayed close even after Maynard moved to Montana to get a degree in exercise science and work as a ski instructor, keeping up with each other's adventures through texts and social media, and planned excursions whenever their schedules aligned. Whenever Maynard returned home to Alaska, she'd check in with Wilson. "I'm always trying to get invited on his adventures because he stays busy," she said. + +![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='1066' height='800'/%3E) + +Sarah Maynard and Grant Wilson on Denali. Sarah Maynard + +Show less + +![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='1067' height='800'/%3E) + +Grant Wilson and Sarah Maynard on Denali. Sarah Maynard + +Show less + +Wilson has lived in Alaska his whole life. When not climbing, skiing, surfing, or recreating outdoors in some capacity, he worked as a commercial fisherman in Bristol Bay. + +"I grew up winter camping with my family and doing wintertime hunting and all these things that I feel like was preparation leading up to this Denali climb," Wilson told me.  + +They had both skied pristine backcountry landscapes and conquered peaks in Alaska and elsewhere. They had lots of training with rope systems, including on past climbs and through courses. Neither had much experience above 14,000 feet. + +But having grown up in Alaska, Denali always loomed large. It's a famously challenging expedition for any mountaineer, but, more than that, it's their home mountain. + +"My grandpa used to take me out of school on bluebird days" — clear, sunny days that follow a night of snowfall, Maynard told me. "He's a pilot and he would fly me around Denali." + +"One time he got close enough that you could see the climbers. And I remember that moment just being like, 'Wow.'" + +## Base Camp + +In early May of 2021, Maynard and Wilson finally stepped out onto Kahiltna Glacier. + +The plan was to tackle the West Buttress, Denali's most popular, and least technical, route. It's a 15-mile journey to the summit, gaining more than 13,000 feet in elevation along the way.  + +As with the other camps higher up the mountain, base camp has room for dozens of tents but no physical infrastructure. + +From camp to camp, climbers make their way up the mountain in strategic bursts. Moving too quickly can be dangerous. Climbers will take full days to wait out bad weather, rest, and acclimatize to the higher altitudes as the air gets thinner and thinner. + +There's also some essential backtracking. To lighten the load they're carrying, climbers will bury some of their gear in the snow, marking it with a flag, and then double back for it once they've set up camp higher up the mountain. + +![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='1066' height='800'/%3E) + +A view of Grant Wilson and Sarah Maynard's camp on the Kahiltna Glacier, 7,200 feet, after a late start in the day and poor visibility. Grant Wilson + +Show less + +![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='1066' height='800'/%3E) + +A relaxing day at Denali's 14 camp, where elite mountaineers mingle with those rolling into camp with little to no experience. Grant Wilson + +Show less + +When the mountain is busy, especially in late spring when there's near round-the-clock sunlight, the camps come alive, forming makeshift towns. Killing time at the camps is part of the experience, and can involve kicking around a hacky sack, doing yoga, or getting to know other climbers. + +One morning, still early on the route, Maynard and Wilson were flying kites when they first met Adam Rawski.  + +Rawski, tall with dark hair, was about a decade older and lived on Canada's west coast. He worked as the VP of finance at a clean technology company in Vancouver, and spent as much time as he could in the wilderness. "Backcountry skiing, downhill mountain biking, rock climbing, ice climbing," he would tell me later. "You name it, I would do it."  + +After climbing most major peaks in the Pacific Northwest — including Mount Rainier, which at 14,417 feet, is considered a precursor to Denali — he decided to take on "the great one." He had come to Alaska with a fellow climber from back home.  + +Rawski was a friendly presence at the camps, going out of his way to meet other climbers. "I would just walk around and say hi to people," he said. + +![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='1067' height='800'/%3E) + +Adam Rawski on a prior adventure. Adam Rawski + +Show less + +![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='1067' height='800'/%3E) + +Adam Rawski on a prior adventure. Adam Rawski + +Show less + +He and his partner started out around the same time as Maynard and Wilson, so the teams were moving up the mountain at a similar pace. During rest periods, Rawski would join them for a game of cards. One day, when Maynard and Wilson needed butter, Rawski gave them some of his. "We made friends with him pretty quickly," Maynard told me. + +When they reached 14 Camp — one of two potential launching pads to take the summit — there was a problem: Rawski's partner had decided to pull out. + +## A new partner for the upper mountain + +At 14,200 feet — just shy of the height of Mount Whitney, the highest peak in the Lower 48 — 14 Camp marks the start of what rangers call the upper mountain. From here, the weather gets even more unpredictable and climbers are more likely to face relentless whiteout conditions — as well as unbearable wind, altitude sickness, frostbite, or hypothermia. + +Many climbers reach 14 Camp and decide not to go any further.  + +Others, eager to minimize the time spent lugging heavy equipment in this increasingly desolate and punishing environment, store their gear here and — skipping the final resting spot, High Camp, at 17,200 feet — make their final push to the summit.  + +This goes against park rangers' recommendation. Climbers who do not have prior experience above 14,000 feet in arctic conditions have "no real conception of how their body will respond to such stresses," they explained in the report published days after Rawski's fall. "There are very few mountaineers capable of moving fast enough to accomplish this safely."  + +Setting up camp at High Camp gives climbers more time to acclimate to the higher elevation and makes for a shorter trek to and from Denali's summit. Despite this, the report said, more climbers were choosing the more dangerous route of trying to summit from 14 Camp. + +![Sarah Maynard making her way along the 16,000 ft ridge of Denali during an early morning attempt to reach the summit.](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) + +Sarah Maynard making her way along the 16,000 ft ridge of Denali during an early morning attempt to reach the summit. + +Grant Wilson + +The issue had been compounded, the rangers said, by the reshuffling that's all too common at 14 Camp. Climbers who want to continue even after their teammates bow out end up forming new teams. (The risk of a crevasse fall, sickness, or serious accident are too high to make solo climbing a safe option.) + +But team dynamics is one of the biggest factors impacting safety and success on a Denali expedition. Strangers won't know the skill level or risk tolerance of their teammates, or be able to spot when the other person is sick or exhausted. "In many cases, these determined climbers end up forming loose coalitions with other individuals who they have just met for the first time and who are equally summit-driven," the report said. + +"Collectively, this is a recipe for disaster." + +This was the position that Rawski found himself in that day. He heard that Jason Lance, a military vet who had served in Afghanistan and a father of four from Mountain Green, Utah, was also looking for a partner. The two teamed up and decided to push for the summit the next day. (Lance declined multiple interview requests from Insider and did not respond to a detailed list of questions.) + +"It was a very last-minute, hasty decision," Rawski later said. + +"In hindsight, probably not the best idea." + +## Summit day: 'Push through it and get by' + +A few hours after midnight on May 24, Rawski and Lance left 14 Camp and set off for the summit. Aided by the almost constant daylight, they figured the early start would give them enough time to summit and capitalize on the clear weather. + +A couple hours later, Maynard and Wilson also set off from 14 Camp. At around 9 a.m., they stopped to rest at High Camp and ran into Rawski and Lance. + +Immediately it was clear to them that Rawski was not himself. He was quiet, dehydrated, and had diarrhea. Another team that was staying at High Camp was boiling snow into potable water for Rawski to drink. + +Rawski told me he remembers being dehydrated and exhausted, but at the time didn't think his condition was especially worrisome. "I've been tired in that sort of situation before in the past. So I was sort of like, 'Push through it and get by.'" + +Maynard and Wilson — who were meeting Lance for the first time — both said they wondered if Rawski was better off turning back, but decided it wasn't their place to push it. + +"When somebody's that sick, you don't continue with the original plan." Wilson told me later. "Jason Lance, as his partner that day, should have made some serious adjustments to their plan knowing how dehydrated Adam was." + +After some time resting at High Camp, Lance and Rawski resumed the climb, as did Maynard and Wilson. + +![Adam Rawski finishing a dangerously exposed portion of the climb known as the Autobahn.](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) + +Adam Rawski finishing a dangerously exposed portion of the climb known as the Autobahn. + +Grant Wilson + +At 18,200 feet, Maynard and Wilson stopped at Denali Pass and took a minute to enjoy the breathtaking views. "We were kind of geeking out, looking around and going, 'Oh my gosh, there's the Hayes Range' and 'Oh, there's Hunter,'" Maynard said. "It was really cool, being from Alaska, to just kind of be on top and see all the ranges that we recreate in." + +A short while later, Maynard and Wilson caught up to Rawski and Lance.  + +Lance motioned to them to huddle up. Turning to Maynard, he suggested that she and Rawski turn back together, and that Lance and Wilson continue up the mountain as a pair. As Maynard remembers it, Lance said, "Sarah, I see you've slowed down. Why don't you take Adam down? Why don't you guide him down and Grant and I can go for the summit." + +She and Wilson were incredulous. This was *their* mountain. Who was Lance, not even an Alaskan, to boss them around, Wilson told me later. "It was like, dude, look, we're young, but we're not idiots here." + +But even as they shut the idea down, they were getting increasingly concerned about Rawski. He was clearly out of it but still saying he wanted to keep going. "Was I experiencing symptoms of altitude sickness? Maybe, I just couldn't realize it myself," Rawski told me later. + +So, they kept going, letting Rawski set the pace. Wilson later described it as a "zombie march." + +Then, according to Maynard and Wilson, Lance started moving faster, slowly pushing ahead of the group. "We stayed on either side of Adam, and Jason just got farther and farther and farther ahead, until he disappeared over a little pass," Wilson said. "It wasn't verbalized. There was no discussion involved. It was quite obvious what was going on."  + +Lance was ditching them with his partner and going for a solo summit attempt. + +Lance later disputed this account, saying he went up ahead in hopes of waving down another team, climbers Maynard knew from Montana. But Maynard said he didn't say that at the time and, in any event, she was in radio contact with her friends. + +I asked Rawski about whether or not he felt Lance had abandoned him. "I don't really feel like he abandoned me too much," Rawski said. Lance, he said, "just felt like more of that sort of lone wolf who wanted to make it to the summit, no matter how, whether it be solo or with the group."  + +At 19,200 feet, .2 miles from the summit, Maynard and Wilson decided they had to turn back. Lance was out of sight, Rawski was in bad shape, and they too were starting to slow down. + +But first, the three of them paused to look around and take it all in, their high point on Denali. "For the first time in the day, Adam kind of seemed like himself for a little bit. He asked us to take some videos of him," Wilson said. + +Rawski wanted to take a video for his girlfriend. Maynard remembered him playfully shouting out his love from the highest point on the continent. + +"I was able to look back and see my hometown, where I've seen Denali on the horizon for most of my life," Wilson said. "That was a really amazing feeling." + +## The fall + +Maynard guided Rawski as the three climbers began their descent. Around every 100 feet, Rawski would have to sit down, and his stomach hurt so badly that he wasn't able to eat or drink anything, Maynard and Wilson said. + +By the time they reached Denali Pass, Lance — having apparently abandoned his own summit attempt — caught back up with them. Maynard and Wilson figured they would return to their original configuration: Maynard and Wilson, Rawski and Lance. + +Ahead of them lay the Autobahn. + +To catch themselves in the case of a fall, climbers jam long, T-shaped pieces of metal called pickets several feet into the ice or snow. They secure a carabiner to the picket, run a rope through it, and attach the rope to their harness. If they trip, the rope goes taut and breaks the fall. + +Once again, they were going against the advice of Denali's park rangers. Maynard and Wilson planned to ski down the Autobahn, during which they would not use ropes. But Lance and Rawski planned to down climb it, traversing at a downward angle. They were not roped into protection. + +"We had the rope. We had the pickets. We had our carabiners. We had everything," Rawski said. "But from what I recall, Jason was in a bit more of a rush to get down there. So I think we decided to opt out of roping up."  + +In hindsight, he said, this was clearly a mistake. At the time he weighed the benefits and risks and decided not to waste time arguing. + +![Climbers taking on the exposed headwall above 14 Camp.](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) + +Climbers taking on the exposed headwall above 14 Camp. Rangers and volunteers fix lines for climbers to offer protection. In the event that a climber stumbles, the lines will arrest the fall. + +Grant Wilson + +Ironically, it's the less experienced climbers on Denali who are more likely to descend the Autobahn without the protection of ropes. + +Tucker Chenoweth, Denali's South District ranger who oversees rescues on Denali, told me he would never do that section of the climb without protection. In his experience, climbers who have mastered rope skills won't think twice about using them "because it's not a hindrance to them." + +"But if you're not good at it, then it's a pain," he said. Indeed, no one who has died on the Autobahn was roped up with protection. + +There was also the matter of altitude.  + +"Altitude can give you a somewhat intoxicated feeling, where things don't seem as important as they are," Chenoweth told me. "Even if you're climatized, you're feeling the effects of altitude sickness that challenges not only your physical ability, but your decision-making ability."  + +At this point, Maynard was positioned slightly lower on the pass than Lance. She clipped herself into a picket before grabbing her skis. Wilson was briefly out of sight after just stepping away from the group to go to the bathroom. + +Lance was standing a bit higher and around a slight ledge. + +Maynard was pulling on her skis when all of a sudden Lance shouted down to her: "Where's Adam?" + +"I thought he was climbing up to you," Maynard said. At first they thought maybe he had also gone to the bathroom, but when Wilson returned a few minutes later he was alone. + +"That's the hard part about splitting partners," Wilson would tell me. "It's like, 'Whose problem is this incapacitated climber? We're handing him back off now, who's taking care of him?'" + +They started calling out for Rawski: "Adam! Adam! Where'd you go?" + +Lance was the one who spotted him, lying at the bottom of the Autobahn some 1,000 feet below. It didn't seem possible that he could have survived. Wilson thought he was going to puke. + +Lance was carrying Rawski's Garmin inReach, a satellite communications device, and used it to request a rescue crew. + +From the top of the Autobahn, there was nothing more they could do for Rawski. And they still had to get themselves down safely. + +## A risky rescue + +Guides at High Camp who saw the fall alerted the park service within seconds of Rawski landing at the bottom of the Autobahn.  + +Helicopter pilot Andy Hermansky was sitting at Base Camp, twiddling his thumbs, when he got the call. He wouldn't normally be there. The helicopter would normally be parked in Talkeetna. But he had flown a team of scientists up to take some glacial samples and was just waiting for them. + +Hermansky made a quick stop at 14 Camp to pick up Chris Erickson, a Denali ranger and law enforcement officer who was on the mountain. In the more than ten years they worked together on Denali, the two teamed up on many rescues. They'd become close friends, hanging out even in the off-season and attending each other's birthday parties. + +The average response time for a rescue helicopter can be several hours. But between the good luck of Rawski falling in full view of High Camp, the helicopter being close by, and the skilled maneuvering of the rescue team, this rescue happened with extraordinary speed — which is very likely why Rawski is alive to talk about it.  + +![Helicopter hovers in Denali National Park with Mt. Hunter in the background.](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) + +A ranger waiting to be picked up by a helicopter in Denali National Park. Rangers patrol the mountain between Base Camp and the summit. Helicopter rescues are called only if there's a direct threat to life, limb, or eyesight. + +Menno Boermans/Getty Images + +The environment on the upper mountain is inherently dangerous for helicopters, and there wasn't a flat surface close to Rawski to allow for a regular landing. Instead, Hermansky decided to try a high-risk maneuver that's common in snowy mountain terrains. + +Hovering near Rawski, Hermansky carefully lowered the helicopter so only the front part of the skids were touching the ground, while the back parts remained in the air. The helicopter blades chopped through the air just a few feet from the ground. Hermansky gave Erickson a quick nod, signaling conditions were safe enough to go through with the rescue. + +With the helicopter in that position, Erickson slowly crawled out onto the skids, careful not to make a sudden weight transfer that would cause Hermansky to lose control, and then onto the ground. + +Within 30 minutes of Rawski's fall, Erickson was at his side — "frankly shocked," Erickson would tell me later, to find Rawski alive. + +"I fully expected him to be dead," Erickson said.  + +He motioned to a mountain guide — also a friend of his — who had seen the fall from High Camp and trekked over. Together, the two of them did an overhead body press and were able to load Rawski into the helicopter.  + +Erickson carefully climbed back in, and they were off. + +"I've dealt with colder rescues. I've dealt with windier rescues, I've dealt with rescues at a higher elevation," Erickson would say later. + +But the thing that made this rescue exceptional? Time. + +## 'Can't descend safely. Patients in shock.' + +Up at the top of the Autobahn, time was working against Rawski's climbing companions. Around 16 hours had now passed since Maynard and Wilson set off from 14 Camp, which was a long time to spend at such high altitude. They were exhausted.  + +As Wilson, Maynard, and Lance watched the rescue from atop Denali Pass, they were also in a state of disbelief.  + +Wilson remembers thinking that the helicopter, hovering so far below, almost looked like a toy. "We were just trying to comprehend that they were loading our friend's body onto a helicopter," he said. + +When Lance proposed calling in another rescue — this one for the three of them — Maynard and Wilson said they considered it. "Of course we were like, 'Yeah, I want a rescue. We just watched someone die. Maybe the slope is too unsafe to down climb,'" Maynard said. + +But they quickly snapped out of it. "No one's coming for us," she remembers Wilson saying, with so much emotion. "We have to get ourselves down." + +Lance was set on a rescue. "I paid the climbing fee. I paid for this rescue," he kept saying, according to Maynard and Wilson. (A permit to climb Denali costs $395. The fee goes towards training and maintaining ranger and volunteer patrols on the mountain, providing critical mountaineering information to climbers, and keeping the area clean.)  + +Lance sent a message to a third-party emergency response service, saying that, while none of them were injured, they didn't have the necessary equipment to descend. Rawski had fallen with the pickets. (The park service unofficially maintains pickets on the Autobahn, but climbers are told not to rely on them and be prepared to place their own.) + +A reply came back, saying he should contact the park service directly. He did that next.  + +"The helicopter cannot come to your location and is not flying any more tonight," the park service replied. "Do you have a rope with you? Your only option tonight is descent."  + +Lance persisted. "Cant decend safely," he wrote. "Patients in shock. Early hypothermia. Cant you land east of pass?" + +This wasn't true. Neither Maynard and Wilson were in medical shock or hypothermic, and they said they never suggested to Lance that they were. They were getting colder, especially after standing around for so long, and wanted to start descending, but Lance refused.  + +Maynard and Wilson have estimated that they spent a total of three hours in that spot, trying to convince Lance to down climb with them. When they finally said they were leaving, with or without Lance, he agreed to go. + +From High Camp, guides could see the trio descending and radioed Erickson. + +Lance's message had in fact gotten the rangers' attention. The park service is explicit that climbers must be self-sufficient and stresses that a rescue should only be requested in the case of a direct threat to life, limb, or eyesight. Even then, a rescue is not guaranteed, as rescuer safety is a top priority. It's not uncommon for the park service to turn down a rescue request. + +But Lance's message made their situation sound like a true emergency, since medical shock can be fatal. Lance, a radiologist, would likely know that. + +It was too dangerous to attempt a helicopter rescue at the top of the Autobahn, so Erickson had dispatched a helicopter to drop off supplies for them to set up camp where they were. + +Unbeknownst to Lance, Maynard, and Wilson, a helicopter was on its way when they finally budged from their location. But since rangers' protocol is that climbers are never told to expect a helicopter — doing so could make a dangerous situation worse, and climbers have died waiting around for a promised rescue — they assumed all they could do was start down climbing. + +Maynard and Wilson described the two hours the group spent descending the Autobahn essentially as a rescue of Lance. They both said he didn't appear to have a handle on rope skills, and that he kept leaving far too much slack in the lines in between them. Maynard, concerned for their safety, kept shouting at Lance to keep the rope tight. + +When they finally arrived at High Camp sometime after 10 p.m., Denali guides greeted them with food and camping gear. But the next chapter of their ordeal was just beginning. + +Maynard and Wilson said they listened, flabbergasted, as Lance told the guides how the two Alaskans had been in serious need of a rescue. But, between their exhaustion and the fact that they still had to share a tent with him that night, they didn't bother correcting him. + +![Jason Lance in the tent with mountain guides who had provided him, Sarah Maynard, and Grant Wilson with food and shelter at High Camp after their ordeal.](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) + +Jason Lance in the tent with mountain guides who had provided him, Sarah Maynard, and Grant Wilson with food and shelter at High Camp after their ordeal. + +Grant Wilson + +The next day, Erickson met them at 14 Camp and questioned them about what had happened. Maynard and Wilson said they were not in shock or hypothermic on Denali Pass. When Erickson asked Lance about this, Lance — according to Erickson — insisted that as a doctor he would recognize signs of hypothermia before the climbers and that he "did not need to be lectured on hypothermia." + +When Erickson asked Lance to hand over Rawski's personal items, including his inReach device, Lance retreated into his tent. It would later be alleged that Lance had used this time to delete the original message where he said the group required equipment, but not medical attention. After several requests from Erickson, Lance eventually handed over the device. + +The three were told they were free to return to the base of the mountain. Maynard and Wilson avoided Lance the rest of the descent. + +## Lance's story + +On November 9 — six months after the climb — Lance was charged with three misdemeanor counts: violating a lawful order of a government employee, interfering with a rescue operation, and making a false report. + +The prosecutor said Lance's actions displayed a "selfishness and indifference to the scarcity of public safety and rescue resources that is unacceptable anywhere, let alone on the tallest peak in North America." + +In April, in exchange for pleading guilty to the first count, the other two charges were dropped. Lance was banned from Denali for five years and ordered to pay $10,000 — half to the government, half as a charitable donation to the nonprofit Denali Rescue Volunteers. + +Appearing in court on the day of Lance's sentencing, Wilson and Erickson both gave extensive testimony about everything that happened that day on Denali — how Lance had pushed ahead, how he'd behaved toward Rawski, despite his fragile state. Even though the charges related to Lance's actions *after* Rawski's fall, it was clear that Lance's behavior throughout the last leg of their climb was of interest to the court. + +Finally, it was Lance's turn to address the court. And, naturally, he painted a very different picture of himself than the one the others had presented.  + +He opened by saying the day's events had been "life-changing" – "You know, life-changing for me and, you know, tragic in Adam's case." + +Lance insisted he always had the group's safety at top of mind. When he separated from the others on the ascent, he said he was just trying to get a good vantage point to wave down another team for help. + +"I had no intention of summiting and ditching the party," he said. + +After Rawski's fall, and as they tried to collect themselves atop Denali Pass, he said that the three of them, himself included, were experiencing emotional trauma. It reminded him of being in Afghanistan during his 14 years in the military. + +"We would see people come in being shot or witnessing bombings, IED explosions, and whatnot. And it was not uncommon to see people who had witnessed a traumatic event go into psychological shock. And that's clearly what was going on here," he said. + +His immediate concern was that Rawski had fallen with the pickets, and said that was why he had first radioed for help. He said communicating on the clunky satellite device was like typing into a cell phone from the 1990s. As the hours passed, he said, his concerns about shock and hypothermia were genuine. + +"I had to make a choice, based on what information we had," Lance said, adding that Maynard and Wilson are the same age as his kids. "If my kids were up here with somebody else, what would I have them do? I was reluctant to make that descent until I had exhausted every other means of getting us safely off there." + +Ultimately, Lance realized the helicopter wasn't coming, and that they could either sit there and freeze to death or make a risky descent. "Make no mistake, that descent was unsafe," he said. + +When I asked Erickson what he made of Lance's defense, or the idea that his decision-making at that altitude could not be trusted, he didn't buy it. He said rangers work in those conditions everyday, often making high-stakes decisions. + +"We're not superheroes," he said. "We don't acclimatize better or worse than anyone else." + +As for the charge he pleaded guilty to — violating Erickson's order to hand over the inReach device — Lance said it wasn't clear to him it was an official request and that, either way, he felt he needed it for the remainder of his descent, for safety reasons, even though the device was Rawski's. + +Lance claimed his interactions with Erickson amounted to a clash of personalities, and that Erickson simply wasn't interested in hearing his thoughts on how the park service could handle things better. "I was tired. I was stressed. And, frankly, I just — I didn't want to really talk to him," Lance said. + +While Lance stopped short of apologizing, he said he hopes in the future in situations like this he "would have kind of a cooler head." + +![Early morning sunrise on the Alaska Range. Denali's "summit shadow" (left) casting over the Kahiltna and Mt. Foraker (right), North America's sixth tallest peak.](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) + +Early morning sunrise on the Alaska Range. Denali's "summit shadow" (left) casting over the Kahiltna and Mt. Foraker (right), North America's sixth tallest peak. + +Grant Wilson + +## The aftermath + +When they made it off Denali, Maynard and Wilson visited the hospital in Anchorage. Rawski was unconscious in the ICU and it fell on them to tell his loved ones what happened. Instead of flowers, they left a stick of butter at his bedside — a wink at how Rawski had helped them out early in the climb. + +Rawski was in a coma for two months. He had broken ribs, collapsed lungs, fractured spinal bones, a broken talus and humerus, and nerve damage in his arm.  + +When he finally emerged from the coma and learned what happened — he says he can remember everything up to about five minutes before the fall — he felt like he was reading about another person. "You're like, 'Oh, what an amateur. They didn't know what they were doing,'" he told me. "'The Adam I know would never do that.'" + +After seven months in the hospital, he was released in December, but the road to recovery is long. + +In the months since, his walking has improved substantially, and he can even muster a "very awkward jog." He hopes to get back to being the active, outdoorsy person he was before the fall, but he's not sure what exactly that will look like. + +"I think the most difficult thing was, in the past year, my whole identity was changed," he said, again switching into the third person narrator of his story: "The biggest thing was just sort of accepting that changed identity and trying to pretty much redefine who Adam should be." + +Maynard and Wilson have also spent the last 14 months working through what went wrong on the mountain that day. + +"I was passionate about guiding before and now, more than ever," Wilson said. "I feel called to be on the mountain… making sure that the same things don't happen that happened to Adam." + +Maynard went through months of therapy to confront the guilt she felt over not hearing Rawski fall or making sure he was roped up. "Even now, every day I relive it," she said. "It's the exact same moment of clipping myself into the picket at the Autobahn, and then looking over and Adam's gone." + +Despite the many things she thinks Lance did wrong, she says she can't help but sympathize with him. + +She chalked up Lance's actions to an "ignorance of climber responsibility and his heightened sense of self importance." + +"I came across a photo of him in one of the reports that has come out recently and I honestly didn't recognize him without the look of desperation on his face," she said. "He was definitely just trying anything and everything to find the magic words to get off the mountain." + +Rawski's fall was just one of about 20 search and rescue efforts the mountaineering rangers completed in Denali National Park in the 2021 season, mostly for frostbite or extreme altitude sickness. Two incidents were fatal.  + +Chenoweth said the outdoor climbing boom has resulted in a noticeable shift in the types of people arriving at Denali — more summit chasers, fewer wilderness seekers.  + +It's easy for climbers to forget that in remote corners of the earth like Denali, more often than not, you're on your own.  + +Though Denali is an extreme example, it highlights a disconnect that often exists when humans flee from the comforts and safety of modern society and head outdoors. The places we visit are still wild. And while that doesn't mean we shouldn't go, we should treat them with the reverence they deserve when we do. + +Climbers typically fly to Alaska on a commercial airplane. They take a shuttle to a hotel and go grocery shopping for supplies. They hop on a smaller plane and get dropped off in the wilderness. Even when they arrive, there are other climbers on the glacier, fostering a deceiving sense of safety in numbers. Better and cheaper satellite communications devices have also helped create a "false sense of security." + +Most climbers taking on Denali wouldn't be able to get back to civilization if the plane never came back to pick them up, Chenoweth said. + +"They lose this sense of scale and I think people don't quite recognize how deep in the wilderness they are." + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/How PM’s former aide had to ‘nanny him’ through lockdown.md b/00.03 News/How PM’s former aide had to ‘nanny him’ through lockdown.md index b0bae1be..b4118654 100644 --- a/00.03 News/How PM’s former aide had to ‘nanny him’ through lockdown.md +++ b/00.03 News/How PM’s former aide had to ‘nanny him’ through lockdown.md @@ -12,7 +12,7 @@ CollapseMetaTable: Yes --- Parent:: [[@News|News]] -Read:: No +Read:: [[2022-08-07]] --- diff --git a/00.03 News/Librarian finds love notes, doodles in books and shares them with a grateful public.md b/00.03 News/Librarian finds love notes, doodles in books and shares them with a grateful public.md new file mode 100644 index 00000000..a628fb34 --- /dev/null +++ b/00.03 News/Librarian finds love notes, doodles in books and shares them with a grateful public.md @@ -0,0 +1,127 @@ +--- + +Tag: ["Society", "US", "Library"] +Date: 2022-08-07 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2022-08-07 +Link: https://www.washingtonpost.com/lifestyle/2022/08/03/oakland-library-found-book-notes/ +location: +CollapseMetaTable: Yes + +--- + +Parent:: [[@News|News]] +Read:: [[2022-08-07]] + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-LibrarianfindslovenotesdoodlesinbooksNSave + +  + +# Librarian finds love notes, doodles in books and shares them with a grateful public + +If you’ve ever mistakenly left a note or a to-do list — or worse, a love letter — behind in a library book, and figured your personal item was tossed by the librarian, you might be wrong. + +Especially if you live in Oakland, Calif. + +In her 20 years as a librarian, Sharon McKellar has unearthed all kinds of left-behind personal items — from doodles to recipes to old photographs — nestled between the pages of returned library books. She carefully removes them and reads them, then she scans and uploads them to the library’s website after scrubbing any personal identifying information. + +It has become a hobby, and she has got quite a following of people who are equally charmed by the forgotten finds. + +“Part of the magic is that they sort of just appear,” McKellar said. “Sometimes, they may have been in a book for a really long time before we notice them there.” + +McKellar — a librarian at the Oakland Public Library — marvels at each memento, no matter how mundane. She chronicles them all. + +“Things that seem the most mundane can be the most interesting,” she said. “I love the little peek into somebody’s life in that moment.” + +McKellar has been doing this for many years, but in 2013, she decided to make her pastime public. She began uploading each scanned item to the library’s website — which was revamped about a year ago — on a page she created called [“Found in a Library Book.”](https://oaklandlibrary.org/found-in-a-library-book/) + +The top of the page says: “Have you ever wondered what happens to the things you leave behind? Well, if you leave them in an OPL library book, or around the library, you might find them featured right here, on our website. See some of our found treasures below.” + +The impromptu project took off. Staff members at the library — which has 18 locations around the city — started sending McKellar submissions of interesting things they discovered in books and around the library. + +“I do believe it is the nature of people who are inclined to work in libraries to have a tendency to enjoy ephemera and collecting of things,” said McKellar, 46, adding that she always seeks to return important items to their owner, and removes any private information — such as names and addresses — from her digital posts. + +She divides the items into various categories: notes, art, photos, cards and letters, artifacts, facts, bookmarks, creative writing, lists, written in a book, and items by kids. She then gives each piece an applicable title. + +When considering which items to showcase on the site, “I don’t discriminate,” McKellar said. “The idea is to post everything, because what’s a nugget to me might not be a nugget to someone else.” + +For McKellar, the treasures that tickle her most are drawings by children — especially those that [paint a clear picture](https://oaklandlibrary.org/content/dad-and-cj/) of what might be going on in their lives, despite the simplicity of the artwork. + +She also loves looking at people’s lists: to-do lists, grocery lists, brainstorming lists, bucket lists. All the lists. + +“I’m a person who makes lists for everything and then tends to leave them behind,” McKellar said, explaining that there’s an element of relatability that intrigues her about a stranger’s personal notes. “It feels connecting in a way.” + +[“Learning to cook”](https://oaklandlibrary.org/content/learning-to-cook/) is the title of one list that randomly turned up, and is written in distinctly curly cursive. Several dishes are listed: Almond butter cake, banana muffins, deviled eggs and baking powder biscuits. + +Another list, scribbled messily on a yellow Post-it Note, is mostly crossed out. Some tasks are still pending, though, including: “buy hay” and “vit AE moisturizer.” + +To anyone other than the scribe, these notes might seem meaningless, McKellar said, but to her, they are an opportunity for creativity. + +“I love it as a storytelling device,” said McKellar, who hopes to soon host an in-person display at the library to share some particularly special pieces. “You can look at an object, whether it’s a photo or a scrap of paper, and you can think of all the possible people who might have brought that into our space, and why and how it got here, and what their stories are.” + +“You could really let your imagination dream up all kinds of scenarios, and you will be unlikely to ever guess the actual one,” she continued. “But that’s kind of the fun.” + +Other staff members at the library have long been involved in the project, too. They scour returned books for interesting items and share their finds with McKellar — who is the curator of the sprawling collection. + +Remy Timbrook, a librarian in the children’s department, finds “lots of little drawings” in returned books. They always brighten her day, she said. + +“I love little illustrations of things,” said Timbrook, 38, who has worked at the library since 2015. “Sometimes there are notes, or their recommendations for a book, or a response to what’s happening in the book.” + +Her favorite find, she said, was a leaf — which was burrowed within a children’s nonfiction book about leaves. Naturally, she found it last autumn. + +“I turned the page and I thought it was an illustration,” Timbrook said. “Then, it fell out of the book.” + +Christy Thomas, who has worked at the library for 18 years, has also been delighted by the project. + +“I’ve seen so many lovely things,” said Thomas, 48. “It’s like finding a treasure, and it’s so nice that we have this process to actually do something with them and share them.” + +Especially amid the world’s current woes, “it’s wonderful to be able to get a boost from the small joys that we can find,” she said. + +The collection of miscellaneous mementos, Thomas added, is “a reminder that these are shared objects that so many of us enjoy, and that’s one of the things that I really love about it.” + +People on the internet are also fans of the forgotten vestiges. The website page has been popular for years, McKellar said, but the initiative recently spread wider on social media. + +“The Oakland Public Library scans the paper scraps people leave in library books and I’m obsessed with them,” [tweeted Annie Rauwerda](https://twitter.com/anniierau/status/1549746719600136195) — a recent graduate of the University of Michigan, who works as a comedian, writer and content creator. + +She came across the project in a newsletter, and was immediately hooked. + +“It’s just so endearing to see people’s private personal thoughts that they didn’t write for an audience,” said Rauwerda, 22, who runs the popular Twitter account, [@depthsofwiki](https://twitter.com/depthsofwiki). “It’s very relatable.” + +She spent an hour scrolling on the site, and selected some favorites — which she shared in a thread. Some are silly, and some are sweet. + +In [one image](https://twitter.com/anniierau/status/1549746742513516545/photo/1), a handwritten Post-it note reads: “The squirrel can type!!!” on a book page with illustrations of a squirrel using a typewriter. + +Another shows [a book review](https://twitter.com/anniierau/status/1549746752827408384) of sorts, written on lined paper in penmanship that appears to be a child’s. + +“I love this book,” reads the review. “It stole my heart and made me cry.” + +“When you find tear stains,” it continues, “you will now know they are mine. Enjoy!” + +McKellar and her fellow library staff members also have found wistful and insightful love letters. + +“When you broke my heart … you freed me. Thank you,” [one note says](https://oaklandlibrary.org/content/you-freed-me/). + +“Remember, I Love U Sweetheart,” [another reads](https://oaklandlibrary.org/content/remember-i-love-u/). “The past is the past, so lets not Take it home with us. I just want to Love U, and be happy.” + +“I always wonder who left it behind,” said McKellar. “Did the writer ever give it to that person? Did they leave it behind by accident, or did they really not care?” + +She revels in the mystery — which, she knows, will never truly be solved. For her, that’s part of the appeal. + +“I think it’s compelling to see these little glimpses into other people’s lives,” McKellar said. “They feel very human.” + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever..md b/00.03 News/Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever..md new file mode 100644 index 00000000..050a5729 --- /dev/null +++ b/00.03 News/Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever..md @@ -0,0 +1,141 @@ +--- + +Tag: ["Society", "Parenthood", "Panic"] +Date: 2022-08-07 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2022-08-07 +Link: https://www.theringer.com/features/2022/7/29/23282763/jelly-bracelet-sex-game-media-myth-moral-panic +location: +CollapseMetaTable: Yes + +--- + +Parent:: [[@News|News]] +Read:: No + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-MoralPanicsComeandGoSexBraceletHysteriaIsForeverNSave + +  + +# Moral Panics Come and Go. Sex Bracelet Hysteria Is Forever. + +*My Chemical Romance is touring again, Paramore and Jimmy Eat World are headlining a major festival this fall, and there’s a skinny, tattooed white dude with a guitar dominating the charts. In case you haven’t heard, emo is back, baby! In honor of its return to prominence—plus the 20th anniversary of the first MCR album—*The Ringer *is following* [*Emo Wendy’s*](https://www.businessinsider.com/wendys-debuts-emo-logo-location-londons-camden-neighborhood-2022-7) *lead and tapping into that nostalgia.* [*Welcome to Emo Week*](https://www.theringer.com/music/2022/7/25/23277197/welcome-to-emo-week-on-the-ringer)*, where we’ll explore the scene’s roots, its evolution to the modern-day Fifth Wave, and some of the ephemera around the genre. Grab your Telecasters and Manic Panic and join us in the Black Parade.* + +--- + +Late in 2003, something strange started happening to Jason Saucier at Hot Topic. + +He would be in the middle of his shift at the Meriden Mall in Connecticut, a bustling suburban hub halfway between New Haven and Hartford, when a parent would march up to him and point furiously at the racks of colorful silicone bracelets propped near the register. + +“I definitely remember that being a big seller at the time,” Saucier says. “Among the sort of alt-rock, metal, goth kids, it was a big trend. Some kids would wear like four of them. Some would wear them halfway up their arm, like a gauntlet of bracelets.” + +A bundle cost only a few bucks, making the bracelets a hit with [kids weaned on the Warped Tour who made regular pilgrimages to the store](https://www.theringer.com/music/2022/7/27/23279552/hot-topic-store-emo-generation). Even Saucier, a college student whose tastes tended toward electronic acts like VNV Nation, had taken to wearing a few of the colorful adornments. But the parents coming into the store didn’t like the bracelets at all. + +“‘I can’t believe you carry this,’” Saucier remembers them scolding him on multiple occasions. “‘Don’t you know what kids are doing with these?’” + +He didn’t, but the parents quickly filled him in. They were part of a secret code, they said. Different colors corresponded to different R-rated acts, with teens across the nation’s middle and high schools brazenly using them to signal their willingness to perform a litany of unspeakable deeds. These were no mere jelly bracelets, the parents said—they were *sex* bracelets. + +Nearly two decades on from the jelly bracelet hysteria, the frenzy of school bans, media coverage, and parental outrage in 2003 and 2004 stands as a testament to what can happen when grown-ups misunderstand jokes made by young people—especially ones that take root online. Jelly bracelets weren’t the first time that adult misunderstanding of youth behavior precipitated a full-blown moral panic, but years before dubious TikTok challenges would become fodder for the evening news, they represented one of the first cases in which a fad fed by the internet gave rise to a mainstream freakout wildly disproportionate to what was actually going on. + +“I do not miss working with the public one bit,” says Saucier, who has long since left retail and now works in marketing. + +The same fall that Saucier learned about sex bracelets from parents at Hot Topic, Steve Haberlin was working as an education reporter at the *Ocala Star-Banner* in Central Florida. As part of the job, he spoke regularly with parents—“usually angry,” he says—principals, and teachers (who “were often fearful to talk”); he lunched with the superintendent; and he dropped by school board meetings. Having left journalism for a career teaching in the education department at Wesleyan College, Haberlin now admits that the origins of his big scoop are fuzzy. + +What he can remember is this: In 2003, a concerned mother called to tip him off that a note had been found on a school bus at a local middle school, “listing the different colors of bracelets and their meaning.” + +“My editors loved it, since it was juicy,” Haberlin says. “So I started talking to anyone who would talk.” + +The result [appeared on October 13, 2003](https://www.ocala.com/story/news/2003/11/13/latest-fashion-fad-raising-marion-parents-concern/31287692007/), starting with a firecracker of a lede: “Raymond Andrews had no idea that the bracelets his sixth-grade daughter purchased this summer were related to sex.” Haberlin went on to detail a local school system in turmoil over the sudden appearance of the bracelets, and cited reports of their causing controversy in both Central and South Florida. + +At Fort McCoy School, the bracelets had been banned after administrators “\[discovered\] their meaning,” Haberlin wrote, and a school board member was calling on parents to step in. Even worse than the bracelets’ coded meaning was that the kids had come up with a game, which Haberlin described as “the newest twist on Truth or Dare”: “Inside classrooms and hallways, students—boys and girls—would grab at each other’s bracelets, hoping to snap one off.” Succeed, and the bracelet’s owner would then carry out the broken bauble’s color-coded act. + +The story *was* juicy, but that turned out to be a massive understatement. Haberlin’s piece blew up immediately. “I remember getting a call from a national news outlet,” Haberlin says—Fox, maybe, or CNN. “It was a bit surreal for my coverage to get that much play since I worked out of a fairly small-town newspaper.” + +Days later, *The* *Gainesville Sun* ran [its own story on the bracelets](https://web.archive.org/web/20070307005654/http://search.gainesville.com/apps/pbcs.dll/article?AID=/20031018/LOCAL/210180317&SearchID=73258459105519), which were also banned at Alachua Elementary School. By the end of the month, the story had gone national: *Time* ran [a piece on the “risque” new trend](https://content.time.com/time/subscriber/article/0,33009,1005988,00.html), advising parents to—ahem—brace themselves. *Time* even anointed the challenge that Haberlin had written up with a name. “In a game some kids call Snap, they yank the rubbery bracelets from the wrists of fellow students to indicate which kind of sex they would like to have,” *Time*’s Jeffrey Ressner wrote. “Grabbing a red bracelet is asking for a lap dance, for example, and a blue one can mean oral sex.” + +From there, nationwide attention and panic only grew. + +The principal of Malabar Middle School in Mansfield, Ohio, banned the bracelets, citing the coverage in *Time*. A 13-year-old student and her father quickly protested, calling the bracelets a fashion statement and threatening to involve the ACLU. + +“I wouldn’t let my daughter wear them if it was for the reason stated in *Time*,” the father, Brian Moore, decried in a [local newspaper](https://www.newspapers.com/image/?clipping_id=106381627&fcfToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVlLXZpZXctaWQiOjI5Njc3ODE4NywiaWF0IjoxNjU4OTQzMjQ2LCJleHAiOjE2NTkwMjk2NDZ9.a20DaS1JN2KpYNZaFBxBrOyt-jMZaEN2SmkFh3TqQ4A). The Moores, along with the school board member quoted in Haberlin’s original story, were swiftly booked on *Dr. Phil*, where they recorded a segment the show dubbed “[Girls Misbehaving](https://www.drphil.com/slideshows/girls-misbehaving/).” + +An avalanche of national coverage soon followed. MSNBC’s Joe Scarborough cautioned on November 13 that “what you might think is good, clean fun could be ruining your children’s lives.” The next day, the *Today* show followed suit: “Well, parents beware,” Matt Lauer said. “Your teenage daughter’s favorite accessory may be a kind of sexual code.” + +The jelly bracelet code might not have started online, but it quickly made it there. Records from the Internet Corporation for Assigned Names and Numbers show that the domain for sex-bracelets.com was registered on November 14, 2003. It was the first of a rash of sites that popped up on the topic, purporting to offer [the definitive list of colors](https://web.archive.org/web/20031118180346/http://www.sex-bracelets.com:80/color.shtml) and [an entire list of titillating games](https://web.archive.org/web/20031124223752/http://www.sex-bracelets.com/sex-games.shtml) to be played with them. (Attempts to reach the domain registrant went unanswered.) Gold glitter, the site proclaimed, meant making out. Glow in the dark was for sex toys. And black? That meant going all the way. + +As media coverage of the bracelet blight continued unabated—the *New York Post* interviewed [a fifth-grader at Holy Child Jesus School in Queens who had started selling the bracelets at a 25-cent markup](https://nypost.com/2004/05/23/kids-cuff-kink-raunchy-sex-bracelet-fad-hits-city-schools/), then followed up [when she was expelled days later](https://nypost.com/2004/05/25/school-boots-sex-bracelet-girl/)—websites like this became frequent citations for reporters. In an [*Indianapolis Star* story](https://www.newspapers.com/clip/106420767/the-indianapolis-star/) that quoted sex-bracelets.com, a high school sophomore named Daniel Day said, “I think mostly it’s adults being more paranoid than really what the threat is.” + +Back in Florida, the school principal who helped spark the national outcry begged for mercy. + +“I have been appalled by the broadcast media’s recent overwhelming attention to a minor event at Fort McCoy Middle School,” Fort McCoy principal Ron Wheelis [wrote in a letter to the editor of his local newspaper](https://www.ocala.com/story/news/2003/11/24/give-some-credit/31290630007/). “The ‘jelly bracelet’ situation was dealt with at our school months ago. In recent weeks we have had production crew visits from NBC News, CBS News, *Inside Edition*, the *Today* show, the *Dr. Phil* show, Channel 2, and Channel 6 (both Orlando).” + +But the story of “sex bracelets” showed no signs of slowing down. The *St. Louis Post-Dispatch* [quoted the principal of Illinois’s Fulton Junior High](https://www.newspapers.com/clip/106477845/st-louis-post-dispatch/): “It was brought to my attention by a staff member who had read about this on the Internet. I thought, ‘This is nuts.’” By the spring, a Fox News segment cautioned that “kids today may be trading sex acts like we traded baseball cards.” On *Good Morning America*, Diane Sawyer cautioned parents to ask their children to leave the room before she delivered her report. School bans spread and spread. + +Cracks, however, were already appearing in the story. Before 2003 was out, sex-bracelets.com had tacked [a new note onto its homepage](https://web.archive.org/web/20031202015204/http://www.sex-bracelets.com:80/): “The VAST MAJORITY of people who wear jelly bracelets do not consider them ‘sex bracelets’. The idea that middle schoolers are wearing jelly bracelets and having sex is, as far as we can tell, a media myth. Sex bracelets are something used and enjoyed by adults.” + +In 2014, the sociologists Kathleen A. Bogle and Joel Best attempted to chart a series of teenage sex myths in their book *Kids Gone Wild: From Rainbow Parties to Sexting, Understanding the Hype Over Teen Sex*. Jelly bracelets, Bogle says, instantly emerged as a core area of focus. + +Moral panics, she says, are often “a way of expressing a fear that you already have.” Before *Kids Gone Wild*, Bogle, an associate professor of sociology and criminal justice at LaSalle University, turned her attention to the sexual behaviors of college students in the 2008 book *Hooking Up*. A key revelation was that, contrary to media reports of sex-obsessed coeds bouncing between romantic partners with no strings attached, that era’s undergrads were much more conservative than they were perceived. + +The perception problem, in which people of all ages tend to assume that the generation or generations behind them are more salacious than they really are, is one that persists to this day, Bogle says. “There’s this idea that we’re on a kind of one-way ticket, where it’ll just keep getting wilder and wilder and younger and younger. There’s no research whatsoever to suggest that this is some sort of widespread behavior among youth. I tell even college students: Guess how many sexual partners a typical college student—sexual partner meaning full sex—had in the past year. The most common answer is one. The second most common answer is zero.” + +Bogle says that after campus visits on her *Hooking Up* tour, students would come up to her amazed that *Animal House* wasn’t the norm and that they weren’t, in fact, alone in their relative lack of sexual activity. + +“There is not any great evidence suggesting the age of first sex has gotten younger, so that alone is a miss,” Bogle says. “Those things move in increments. Not in any dramatic, ‘Oh, 12-year-olds are having sex now’ \[sense\]. The median age to first have sex in a lot of countries around the world is around 16 or 17. It hasn’t dramatically changed, and when it does it changes by centimeters.” + +According to Bogle, the jelly bracelets panic was a function of the same pervasive fear of a slippery moral slope. Her research with Best found the earliest recorded mention of sex bracelets was not Haberlin’s story, but rather someone with the username “Junior” [posting a definition of “shag bands”](https://web.archive.org/web/20080714031444/https://www.urbandictionary.com/define.php?term=Shag%20band)—the counterpart to “sex bracelets” in the U.K., which [swiftly](https://www.dailymail.co.uk/femail/article-1215712/Thousands-young-children-buying-coloured-wristbands-week-But-parents-idea-true-disturbing-meaning-.html) [reported](http://news.bbc.co.uk/2/hi/uk_news/england/west_yorkshire/8274178.stm) its own wave of school bans—on Urban Dictionary. Bogle and Best, too, charted the media frenzy that swept the nation in 2003 and 2004, laying particular blame at the feet of news anchors, whose coverage they argued both spread the story and, by dint of coming from recognizable journalists, further vouched for the sex bracelet game being a real thing among kids. + +“I really think that basically what fuels the legend is this idea that they’re middle-school age and they don’t even care,” Bogle says. “They’re willing to do anything with anyone, anywhere. And meanwhile, most of them have never kissed someone at that age. But it’s hard to shake the story once it takes hold.” + +The story becomes even harder to shake once it becomes enshrined in pop culture. By the fall of 2004, sex bracelets had formally entered the aughts teenage canon with an appearance on *Degrassi: The Next Generation*. + +“The way we would do each season was we would have a board of hot topics that we potentially wanted to cover,” says Shelley Scarrow, a producer and writer who started working on *Degrassi* in 2002 and wrote the first bracelet-featuring episode in Season 4, “Secret.” + +As the writers put together episodes, Scarrow says they would attempt to incorporate issues from the board, operating under *Degrassi* creator Linda Schuyler’s mantra: “If kids were talking about it,” Scarrow says, “we should be talking about it.” + +In the spring of 2004, someone tacked a story onto the writers’ issues board detailing how [two New Brunswick schools had banned the bracelets](https://www.cbc.ca/news/canada/n-b-school-bans-sex-bracelets-1.465336). The report cited—yup—that *Time* piece from the year before. Which meant that sex bracelets found their way into the plot, appearing on the wrists of several female students as “prizes” after encounters with male classmates. + + ![](https://cdn.vox-cdn.com/thumbor/xGoIVlO4isHB7Cm2JYRzgsA0ocs=/0x0:1600x899/1200x0/filters:focal(0x0:1600x899):no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23908128/Jelly_1.png)Screenshots via NBC + + ![](https://cdn.vox-cdn.com/thumbor/X9oH2FVNzxL3kg95h9vZazS9hxk=/0x0:1600x899/1200x0/filters:focal(0x0:1600x899):no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23908129/Jelly_2.png) + +*Degrassi* was far from the only show to feature the bracelets. They turned up on *30 Rock* with Jon Hamm’s character’s daughter; in 2005, detectives on *Law & Order: SVU* began to unravel a murder case when the teen victim’s school principal informed them that she had taken to wearing the uncouth accessory. + +“Different colored bracelets the girls wear, signaling which sex acts they’re willing to perform,” the principal explained. “Uh, yellow’s hugging, purple’s kissing, red is for a lap dance, blue is for oral sex, and don’t make me say what black is for.” + +Joshua Kotcheff, who wrote that *SVU* episode, remembers it being a hit. “\[NBC\] chose it for ‘sweeps week’ that season, which is something of an honor,” he says. “They tend to choose an episode they think is going to do well and showcase the series in the best possible light.” + +The episode may have even helped the sex bracelet panic spread internationally. “They also remade it for a Russian iteration of the show,” Kotcheff says. + +If jelly bracelets ever really *were* sex bracelets, and if anyone ever *did* play Snap, the evidence is minute. + +“I haven’t heard of any instance of anybody actually using those bracelets for sex,” says Saucier, the former Hot Topic employee. “It seems like if it even was a thing, it would be a very much consensual thing. So, you know, that also goes to the question of like, why would there be outrage at just, like, kids having fun, consensual sex? Even if it was a real thing, I don’t understand why parents would be outraged about it. What was it, a few years after Columbine happened? Like, you have bigger things to be outraged about.” + +Much of the panic of the sex bracelets saga centered on the idea that children were being corrupted—not by the jewelry itself so much as by one another and the nascent internet, corners of which, then as now, were widely misunderstood by older generations. Sex-bracelets.com may not have led anybody to, uh, [toss a salad](https://web.archive.org/web/20031208184116/http://www.sex-bracelets.com/color.shtml) after breaking a classmate’s brown band, but it publicly codified a sliver of a winking teen culture. That codification was taken as gospel by adults, driving a wedge between them and kids who might face real problems. + +To Bogle, the pervasiveness of mistaken or grossly exaggerated panics around teen sex is no laughing matter. She says that the enduring perception of the bracelets has influenced some of the more disproportionate punishments that have been handed out in relation to a real youth behavior: sexting. + +“If you go into the sexting phenomenon and you believe youth are out of control, that they have no morality whatsoever, they’ll do anything with anyone, they’ll send naked pictures to anyone they can and all these kinds of things—then you get some of the reaction of like, ‘We’re going to prosecute this as child pornography,’” she says. + +“So that’s why it isn’t just like, ‘Oh, this silly sex bracelet story’ and eventually people figured out it was an urban legend. Rather than just dismissing it, it’s like, OK, that story had traction for a long time. It made it not just around the U.S., but it made it around the globe. And when it comes to actually dealing with youth behavior like sexting—like all right, what are we going to do, these young people have phones and they take goofy and offensive pictures of each other and pass them around—what are we going to do about that? Then those underlying beliefs can be factored into that kind of overreaction.” + +The fear of the jelly bracelets continued long after 2004, with [new](https://www.nytimes.com/2009/09/13/us/13bracelets.html) [schools](https://www.smh.com.au/world/brazil-city-bans-student-sex-bracelets-20100303-phkf.html) stepping forward to ban them for their supposed sexual connotations. Sex-bracelets.com has come and gone, but whispers of the code, and the misplaced certainty that the kids are up to no good, live on. + +As it happens, so, too, does the opportunity to furnish today’s young people with the accessories to spook the grown-ups in their lives. There’s an [open job for assistant manager](https://workatht.com/job-description/?stores=true&id=a3127c6a-7613-4a0b-8857-7b7e86230b1b&utm_ref=www.google.com) at the Meriden Hot Topic. + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/Remembering Bill Russell The Greatest Winner in Sports.md b/00.03 News/Remembering Bill Russell The Greatest Winner in Sports.md new file mode 100644 index 00000000..d64f6612 --- /dev/null +++ b/00.03 News/Remembering Bill Russell The Greatest Winner in Sports.md @@ -0,0 +1,107 @@ +--- + +Tag: ["Sport", "NBA", "Orbituary"] +Date: 2022-08-07 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2022-08-07 +Link: https://www.si.com/nba/2022/07/31/bill-russell-death-boston-celtics-obituary +location: +CollapseMetaTable: Yes + +--- + +Parent:: [[@News|News]] +Read:: [[2022-08-07]] + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-RememberingBillRussellTheGreatestWinnerinSportsNSave + +  + +# Remembering Bill Russell: The Greatest Winner in Sports + +Among the six million Black people who moved out of the Deep South from 1916 to ’70, the “Great Migration” chronicled by Isabel Wilkerson in *The Warmth of Other Suns*, were the parents of Huey Newton, who would go on to head the Black Panther party, and the parents of Jimi Hendrix, who would go on to set his electric guitar, and the rock world, on fire. + +There was, too, a revolutionary of a different stripe who emerged from that African American diaspora—the gangly son of Charles and Katie Russell, a couple who left Monroe, La., for Oakland in 1943. That was William Felton Russell, who learned his basketball chops on the Oakland playgrounds, refined them at the University of San Francisco and perfected them with the Boston Celtics. + +Bill Russell [died Sunday at age 88](https://www.si.com/nba/2022/07/31/nba-celtics-legend-bill-russell-dies-at-88) from age-related causes. His impact on the game was so profound that the [NBA Finals MVP trophy is named in his honor](https://www.si.com/nba/2022/06/17/stephen-curry-named-nba-finals-mvp-first-time-in-career#:%7e:text=With%20a%20performance%20of%2034,to%20win%20the%20MVP%20title.). + +Russell was just 9 when his parents arrived in Oakland, and so he had only a minor sense of the Jim Crow indignities that his parents had suffered in Louisiana. Charles Russell had a shotgun stuck in his face at a gas station, and Katie was told by a policeman to go home and change because she was wearing “white women’s clothing.” But the son came to know heartache and hard times on his own (his mother died when he was 12), and he would come to know virulent racism, too, especially after he arrived in 1950s Boston, a city that in some ways was not unlike Monroe, La. + +The barriers that Russell faced as he put together a Hall of Fame career, and his pertinacious reaction to them, became a major part of his legacy. But it would be a mistake to let them obscure what Russell accomplished as a game-changing player. As was the case with Muhammad Ali, Jim Brown, Kareem Abdul-Jabbar and, later, LeBron James, what Bill Russell said off the court resounded in large part because of what he accomplished on it. + +![Bill Russell and LeBron James](https://www.si.com/.image/t_share/MTkxMjkwNjY4NjIwOTgxODU4/bill-russell-lebron-james.jpg) + +lJesse D. Garrabrant/NBAE via Getty Images + +(It’s impossible to ignore that [LeBron made headlines a couple of weeks ago when he accused Boston fans of being racist](https://www.si.com/nba/2022/07/16/lebron-james-celtics-fans-are-racist), which echoed what Russell had said decades ago. Of course, Russell had unpleasant receipts. During his playing days, Russell and his family returned to their home in the Boston suburb of Reading to find that burglars had broken in, spray-painted racial epithets on the wall, smashed some of his trophies and defecated in his bed.) + +In his formative years, Russell, who was cut from his junior high basketball team, was more diligent than gifted. But he practiced hard in both basketball and track, and gradually his long-legged gawkiness, combined with his work ethic and intelligence, started to produce results. He became an outstanding high jumper at Oakland’s McClymonds High School—one of his rivals was a future crooner named Johnny Mathis from Washington High in San Francisco—and attracted some attention as a defensive-minded albeit low-scoring basketball center whose teammates included future Hall of Fame baseball player Frank Robinson. The only college basketball scholarship that was offered, however, came from the Jesuits at the University of San Francisco, and Russell jumped at the opportunity. There he would team with another defensive demon, guard K.C. Jones, to overwhelm college basketball. In their junior season, they won the opening game, lost to UCLA, then reeled off 25 straight wins en route to the NCAA championship. In their senior season, Russ, K.C. and the rest of the Dons ran the table, 27–0, crushing Iowa 83–71 in the championship game. The template was set for Russell to become (as he not so humbly said himself many times) the greatest winner in sports. + +Across the continent, meanwhile, interest was much higher in a player two years younger, two inches taller, 50 pounds heavier and seemingly a hundred times more athletic than Russell. Everybody knew Wilton Norman Chamberlain, a breathtaking athletic phenomenon from Philadelphia, and everybody wanted him. An intense recruiting battle ended with Chamberlain enrolling at Kansas University in 1956, the year that Russell finished up his USF career with his second straight NCAA championship. + +And so would begin a story line that carried through until Wilt’s death from heart failure in 1999: Wilt dominated the headlines, but Russell earned the championships. + +![Bill Russell](https://www.si.com/.image/t_share/MTkxMjkwOTc1NzExMTQzNTIy/bill-russell-celtics-vault.jpg) + +sifullframe + +Russell wasn’t the first great defensive center, but he was the first around whom an offense could be constructed from his defensive talents. When it came time for the 1956 NBA draft, Red Auerbach, then in his sixth year as Celtics coach/overseer and still looking for his first NBA title, saw this in Russell. Auerbach surrendered to the St. Louis Hawks two All-Star-caliber players, Cliff Hagan and Charles “Easy Ed” Macauley, in exchange for the 6'10" Russell. + +The move might’ve said as much about the times as it did about Auerbach’s acumen for judging talent: The Hawks, who played in a deeply segregated city, acceded to the trade at least partly because they were getting two white players in place of one Black one. + +Over the next 13 years, 11 of which resulted in championships, the Celtics’ fast break revolutionized basketball. Most often, Russell got the break started by blocking a shot, retrieving it—he prided himself on the strategic block more than the spectacular one—and throwing a precise outlet pass. But Russell also frequently got the rebound and joined the break, finishing it with a dunk at the other end. Once he grew into his body, nobody ever called him awkward anymore. + +Scroll to Continue + +## SI Recommends + +Over 963 regular-season games and another 165 in the playoffs—the left-handed pivotman was an ironman who averaged 42 minutes a game and was rarely injured—Russell’s understated greatness was the key to the Boston dynasty. Though Russell often felt that his talents weren’t recognized by the media and the fans, he was voted MVP of the league five times, one more, he was sure to have noted, than Wilt earned. + +There is no better illustration of what Russell meant to the Celtics, and his knack for bedeviling his more talented nemesis Wilt, than his final game. It was May 5, 1969. Game 7 of the Finals at the Forum in Los Angeles: Russell in his final season with the Celtics, Wilt in his first season with the Lakers. + +It had been an enervating year for Boston, Russell in particular. He was 34, beaten down by so many trips up and down the floor and also the mental burden of serving as the team’s player-coach, an honor that Auerbach had bestowed on him in 1966. The Celts had finished the regular season in fourth place in the Eastern Conference, and it was a minor miracle that they had gotten the Chamberlain–Elgin Baylor–Jerry West Lakers to a Game 7. It seemed a preordained victory for the Lakers, whose owner, Jack Kent Cooke, had ordered balloons to be released after the presumptive victory. They hung in netting on the Forum ceiling, a silent, inflated taunt that Russell and the Celtics noticed when they took the court. + +Sure enough, the Celtics won 108–106, their seventh Finals victory without a loss over the Lakers since Russell came into the league. Russell had only six points in that Game 7 but played all 48 minutes and grabbed 21 rebounds. As for Chamberlain, he sat out the final six minutes, first after coming down hard on his right knee and requesting a breather, and then being kept on the bench by coach Butch Van Breda Kolff. It wasn’t quite fair, but the game seemed to say everything about Russell, and his almost mystical superiority over Wilt, at least in the win-loss column. Years later, West gazed at a photo of Russell, who stood hands on hips, taking a breather. “He looks almost regal,” said West, who was mesmerized by Russell’s ability to win the big one. + +![Bill Russell SI cover](https://www.si.com/.image/t_share/MTkxMjkwOTk0NzcwMDYwODk4/4309dc30.jpg) + +sifullframe + +By the time of that final game, Russell had become a recognized political activist, a central character in the turbulence of the times, and in contrast to Chamberlain, who had been a Richard Nixon delegate to the 1968 Republican convention. Russell had spent the summer of ’68 living with Jim Brown in Hollywood as news from the chaotic Democratic convention washed over them like a tidal wave. Russell’s radicalization had begun in his boyhood in Oakland as he and his father, who became a steelworker after his wife died, endured the racial slights endemic of the time, and continued in college, where on one road trip Oklahoma City hotels had refused to provide service to the USF team because it had Black players. + +But Russell’s desire to speak out against the system really took hold in Boston, where he couldn’t help notice that fans cheered him when he was on the Garden parquet but often vilified him when he wasn’t. Russell referred to Boston as a “flea market of racism,” writing in his 1979 autobiography, *Second Wind: The Memoirs of an Opinionated Man*, that the “city had corrupt, city hall-crony racists, brick-throwing, send-’em-back-to-Africa racists, and in the university areas phony radical-chic racists.” + +Russell fought back in any way he could, earning him the passive-aggressive adjective that was so often hung on thinking Black athletes of that time—difficult. Russell never went in for the show-stopping antics of Ali, but he never made it easy for those he considered to be racist. When the Celtics retired his No. 6 in 1972, Russell insisted it be done in an empty Boston Garden with only his teammates around. And remembering the slights of a league in which a de facto segregation existed, he refused to attend his ’75 Hall of Fame induction ceremony. + +Russell moved out of Boston after he retired and for four years (1973–74 through ’76–77) coached the Seattle SuperSonics with moderate success. He followed that with various NBA broadcasting gigs in the ‘70s and ‘80s. He was never comfortable, or very good, in that role, nor did his one appearance as host of *Saturday Night Live* in ’79 do much to alter the course of television comedy. Russell was coaxed back into the league in ’87 to become coach and general manager of the Kings but lasted only 58 games as coach (the Kings were 17–41 when he stepped down), though he hung around for another year as GM. + +Over the next decade, Russell was more or less estranged from the league and remained at his home in Mercer Island, spending much of his time golfing. But encouraged by NBA commissioner David Stern, he gradually returned to the fold and became more and more of a fixture during All-Star weekends, the Finals and other NBA events. He remained wary and held the media at arm’s length, but he was approachable and often brightened a room with his distinctive high-pitched cackle that seemed to come out of nowhere. “The one thing I had to learn in this job,” said Jerry Reynolds, one of his assistant coaches during his brief time in Sacramento, “was how to become cackle-proof.” Stern also announced in 2009 that the Bill Russell NBA Finals Most Valuable Player would be handed out after the final game. It’s anyone’s guess how many of those Russell would’ve won—five? six?—had the award existed before 1969. + +Stern also arranged a rapprochement between the two giants of the game, and in Wilt’s final years he and Russell appeared together at NBA events from time to time. In 2012 the league released a documentary about the night in 1962 when Wilt scored 100 points in a single game, and Russell did the narration. “He’s been gone for more than a decade,” intoned Russell near the end of the film, “and I still miss him.” + +The same now will be said of Russell, who could never have scored 100 points in a single game, perhaps not over the course of three games. But he gazed at a different mountaintop. He wanted to be recognized as the greatest winner in sports. It is an argument he made often and one with enduring merit. + +**More Bill Russell:** + +- **[NBA Legend Bill Russell Dies at 88](https://www.si.com/nba/2022/07/31/nba-celtics-legend-bill-russell-dies-at-88)** +- **[Adam Silver Releases Statement After Russell's Death](https://www.si.com/nba/2022/07/31/nba-commissioner-adam-silver-statement-bill-russell-death)** +- **[The Ring Leader (1999)](https://www.si.com/nba/2014/08/15/bill-russell-boston-celtics-ring-leader-si-60-frank-deford)** +- **[1968 Sportsperson of the Year](https://vault.si.com/vault/1968/12/23/sportsman-of-the-year-bill-russell)** +- **[2016 Muhammad Ali Legacy Recipient](https://www.si.com/sportsperson/2016/11/30/kareem-abdul-jabbar-jim-brown-bill-russell-muhammad-ali-legacy-award)** + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/Sam Taggart’s Hard Sell.md b/00.03 News/Sam Taggart’s Hard Sell.md new file mode 100644 index 00000000..8ac3cc1c --- /dev/null +++ b/00.03 News/Sam Taggart’s Hard Sell.md @@ -0,0 +1,297 @@ +--- + +Tag: ["Economics", "Job", "Sales"] +Date: 2022-08-07 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2022-08-07 +Link: https://www.newyorker.com/magazine/2022/08/08/sam-taggarts-hard-sell +location: +CollapseMetaTable: Yes + +--- + +Parent:: [[@News|News]] +Read:: No + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-SamTaggartsHardSellNSave + +  + +# Sam Taggart’s Hard Sell + +For eight minutes, Sam Taggart had them all hooked. Relaxed and sincere, he roamed the stage at the Salt Palace Convention Center, selling fifteen hundred door-to-door salesmen on selling. It was a crisp January morning at the fifth D2DCon, an annual conference in Salt Lake City that’s the centerpiece of Taggart’s campaign to elevate a profession reviled by nearly everyone. You can hang up on a telemarketer, but not on the insistent young man who won’t leave your doorstep until you buy some goddam thing—pest control, an alarm system, solar panels, a new roof, magazines, scented candles, paintless autobody dent repair, or perhaps tri-tip steaks from a delivery van that, he swears, just broke down in front of your house. + +The best door-to-door salesmen can earn more than a million dollars a year, but it’s a punishing way of life. Unlike the salesman who hawks minivans or enterprise software, the door knocker can’t network at the Rotary Club, make a catchy commercial, or research his prospect’s needs. He faces an unknown and often hostile customer with only his own brain for backup. + +“Is selling good?” Taggart asked, from the stage. He wore a Beckett & Robb suit, and his auburn hair was spiked with American Crew gel. “Say yes!” + +“Yes!” everyone yelled. + +“Is getting sold good? Say yes!” + +“Yes!” + +Salesmen are particularly susceptible to the American impulse to turn every art into a science. Taggart’s company, the D2D Experts, has an online “university” of hundreds of videos that show sales reps exactly what to say and how to say it. One trusty method is the “yes train,” an idea formalized in the eighteen-eighties by John H. Patterson, who founded National Cash Register. Patterson believed questions that elicit a “yes” prime the customer to agree to a purchase. Encyclopedia salesmen once practiced an “ascending close” that required summoning forty-two yeses—but even that Joycean crescendo of acquiescence didn’t guarantee a sale. “Direct-to-home is the hardest job in the world, outside of being in the military,” Vess Pearson, the C.E.O. of Aptive Environmental, which dispatches some seventy per cent of the knockers in pest control, told me. “You’re working for free every day until you make a sale. The job is repetitive and mundane. And you get rejected over and over and over—you’ll probably only sell two out of a hundred knocks.” + +Selling is instinctual to Taggart. At thirty-two, he has talked his way out of dozens of speeding tickets. When he knocks at a Hispanic family’s door, he’ll blurt a halting phrase in Spanish: “*Estoy aprendiendo,* ah . . . sorry!” Then he’ll ask if it’s O.K. to practice the language as he goes into his spiel, miraculously achieve fluency, and walk off with a sale. *Gracias, mis nuevos amigos!* He knows exactly how to inveigle customers into buying a better way of life. “Everything is selling,” he told me. “You find the person’s problem—‘My skin isn’t good’ or ‘I got broken into’ or ‘I don’t believe in anything’—and you solve it through your product.” + +Taggart’s audience was largely bearded young men with fade haircuts wearing jeans, Henley T-shirts, expensive sneakers, and watches that tracked their steps. Fit, focussed, and wired on energy drinks, they whooped when a speaker’s exhortation resonated—“There’s gold behind that wall of fear!”—then inscribed the new mantra in their bullet journals. When someone on their team won a Golden Door, a trophy for élite levels of annual sales, they roared and dapped. + +But Taggart wanted to discuss failure. He’s been swung at in Cabot, Arkansas; arrested in Dimmitt, Texas; called scum in more than forty states. In his second year selling alarms, he said, “I just was getting beat up.” He was “bageling”—recording no sales. Then he met “this old guy named Phil,” in Canadian, Texas, a town in the Panhandle. “Do you guys know that customer that’s, like, ‘I’m not buyin’ anything, but I’m bored and lonely, live by myself, and I just want to talk to somebody’?” There were chuckles. “I’m, like, ‘Sir, Phil, you need this’ ”—a medical pendant, bundled with a fire alarm and door sensors for just fifty bucks a month. Phil scoffed, saying that his gun was all he needed: “ ‘We don’t even lock our doors.’ And I’m, like, ‘Sir, Phil, you need this! If you were to fall, and you were to be by yourself, you could potentially die.’ ” Taggart gazed imploringly into the dark, imbuing the salesmen with his concern, just as he had with Phil. + +“Somehow, with my mind wizardry,” he went on, “I sell the guy.” A year later, back in Canadian, he knocked on a woman’s door: “I’m, like, ‘Hi, I’m Sam, I’m with Vivint, I’ll be super-quick.’ And she’s, like, ‘Wait—Sam? The alarm guy?’ ” Starting to cry, the woman said, “Last year, you set up my dad, and he fell, and he pressed that medical pendant, and it saved his life.” The woman led Taggart up the street to her father’s house, and “immediately Phil breaks down in tears.” + +“I changed my mentality about selling that day,” Taggart said. “That was the year I finished No. 1” in sales at Vivint. “I said, ‘I’m going to sell *everyone*, because selling is amazing, and I believe in what I sell. Because I’m not God, I don’t know who’s going to have a fall, a fire, a break-in,’ ” he went on. “ ‘So, therefore, every single person I talk to I need to change and bless their life with what I’m pitching.’ Does that make sense? Say yes!” + +“Yes!” + +Taggart’s intensity kept building. “I want you guys to stand up if you believe in what you’re selling!” Standing, cheering. “On the count of three, you’re going to pound your chest and say, ‘I’m the *greatest* salesman in the world!’ One, two, three!” + +Salt Lake is the home of modern door-to-door, in large part because it’s the home of the Church of Jesus Christ of Latter-day Saints. Bryce Roberts, a local venture capitalist, told me, “You’ve got seventy thousand kids going out every year for their two-year missions and getting trained on knocking doors, dealing with rejection, and selling a very difficult product—Jesus.” As a result, he said, the Salt Lake area has become “the Silicon Valley of direct sales and multilevel marketing”—sometimes known as pyramid schemes. + +[](https://www.newyorker.com/cartoon/a24931) + +“I find it relaxes me to chuck these stress balls at Dave’s head every now and then.” + +Cartoon by Zachary Kanin + +Every May, the Salt Lake area’s “summer bros” disperse across the country. Summer is the time of college vacation, of long daylight hours for knocking, and of rampageous insects that need killing. The salesmen often view their customers as prey, too, and speak the language of guns and ammo and making resistance futile—the language of locker rooms and poker tables and comedy clubs. “Most salespeople actually believe that what they are doing is wrong and unethical,” the sales guru Grant Cardone observes in his book “Sell or Be Sold,” “and because they believe that what they are doing is a bad thing they will fail at it.” The industry’s conflicted self-image is embodied by Vivint Smart Home, the company that Taggart sold for in Texas. Vivint has its name blazoned across Salt Lake’s largest indoor arena—and for the past eleven years has also sat atop the Better Business Bureau’s list of most-complained-about companies in the region. + +Taggart was raised in the L.D.S. Church. At nineteen, he flew to Argentina for his mission and in the first six weeks converted an extraordinary sixteen Argentineans. But after he started on the doors he gradually realized that his new trade facilitated the breaking of nearly every commandment. “Satan’s pathway to gain hold of a person is hookers, blow, money, and fame,” Taggart told me. “And door-to-door guys are on the road, alone, having success really young, so they’re super-­vulnerable.” His mission is to prove that you can be a masterly salesman—one who exploits every frailty in the human psyche—and still bring light to dark places. “Sam is the face of door-to-door,” Graham Wood, the founder of Fluent Home, which sells alarm systems and solar panels, told me. “He has such a strong message of ‘Do it proper, do it clean.’ Everyone else’s message is ‘Money, money, money.’ ” + +Onstage at D2DCon, Taggart began pitching Xperts Circle Mastermind, his élite program for door-to-door C.E.O.s who meet regularly to learn how to improve their performance and inspire their teams. After plugging the Circle’s benefits, he employed a “pullback”—a door-to-door staple, based on the conviction that customers want a product more if they think they might be denied it. *Your house may not qualify for solar panels—my engineers will have to check.* Fear of loss drives more sales than hope for gain. + +Taggart’s pullback was bold: *I can teach you to be killer salesmen—but are you* sure *you want that*? Last year, he confided, he got divorced. “Those that are closest to me would say, ‘Sam found himself in 2021.’ ” There were shouts of “We love you!” He continued raggedly, “I lost my wife—but I found love. I lost my house—but I found a home. . . . I lost time with my kids—but I found fatherhood.” He went on, “But the biggest thing I noticed is that I had lost myself chasing the wrong shit. Because, for me, none of the money, the fun, the flash, the suits, matters anymore.” He stared into the darkness: “Last year, I woke up to my internal poverty.” + +His pitch had reversed field—was being the greatest salesman in the world a path to plenitude or to crushing insufficiency? But selling is not an inherently rational process. One of Taggart’s favorite whammies is the “Instant Reverse Close.” When the customer raises a powerful objection—“We don’t need home security, because we’re moving out next month”—he replies, “That’s exactly why you *do* need it!” “It’s a jab to the nose that leaves them stunned,” he told me. + +He concluded by explaining that joining the Circle normally costs about thirty-five thousand dollars, but that this year you could buy in for just fifteen thousand (plus monthly payments that would more than double the cost). Meet me at the back of the hall, he cried: “I’d love to help you make more money than you have ever freakin’ made!” + +Taggart hustled offstage to his booth—but only five people followed to sign up. “I didn’t prepare the subconscious mind-control tricks well enough,” he lamented afterward. He watched dejectedly as his wayward flock streamed past. He’d tried to sell them a better version of themselves, but they weren’t buying. + +Two hundred years ago, the peddler James Guild discovered that people would happily pay a quarter for scissors that they’d scorn if they cost twelve cents. The value of the scissors derived from how they were positioned. In this view, without salesmen to point out features and build value, customers would never buy anything except food and a change of clothes. Belief that the huckster was the linchpin of capitalism was particularly strong in the nineteenth century. When a smiling chap with a sample case rattled up in his wagon to offer you Lydia E. Pinkham’s Vegetable Compound or Ulysses S. Grant’s memoirs, you were buying progress. At the World’s Salesmanship Congress in 1916, President Woodrow Wilson urged the congregants to “go out and sell goods that will make the world more comfortable and more happy, and convert them to the principles of America.” + +With the advent of mass advertising, businesses had easier ways to sell their goods, and observers predicted that door-to-door was doomed—a prediction that recurred with the rise of magazines, telephones, radios, and televisions. These death notices were always premature, until the nineteen-­eighties and nineties, when they finally weren’t. Once Internet shopping arrived, customers had instant access to product specs and competitive pricing; only a rube buys a Chevy Silverado without Googling the dealer’s cost. The sales expert Daniel Pink calls this “information parity,” which has replaced “information asymmetry,” where the salesman knew a lot more than the customer. + +The past two decades, however, have witnessed a resurgence in door-to-door. Tom Karren, the founder of Vantage Marketing, which has more than a thousand reps selling pest control, said, “Twenty-two years ago, I was told after my first summer on the doors—by my family, my professors, my mentors—that door-to-door was a dying industry. Now it’s at least fifty times bigger.” Industry leaders estimate that between fifty and a hundred thousand knockers go out every summer. The boom was fuelled in part by the advent of the national “Do Not Call” list, in 2003, which dampened phone solicitation, and in part by the very information glut that helped cripple door-to-door in the first place. To deter customers from doing research—to reconstruct the gloriously profitable world of information asymmetry—companies need to catch them unawares. Who among us, when we answer the door, has any inkling of the actual cost of a treatment for ants, roaches, and mice in a three-thousand-square-foot house? Shopping online is about finding the best price; shopping on your doorstep is about being bowled over by someone with all the answers. + +Because a sale is a successful transfer of enthusiasm to the customer, the salesman is ultimately his own leading product. But even someone who can sell anything needs to decide *what* to sell. Kenny Brooks may be the country’s most recognizable door-to-door salesman, famous online for a persona that he described to me as “the funny salesman from inner-city Detroit who’s trying to reach my goals.” A video of him selling Advanage, a wonder cleaner, has been viewed more than a hundred million times. Loose-limbed and quick-witted, Brooks once sold a hundred and twelve bottles of Advanage in a day. “But I only made six thousand dollars—and a lot of that was from bets with other salesmen,” he said. “In solar, guys who sell three deals in a day can make twenty thousand!” However, he acknowledged, “In solar, you’ve got to learn the product, the customer, the financing, and all about credit, so you can go three months without selling anyone. I’ve got ten kids. I couldn’t take that chance.” + +Pest control is the quickest, easiest sale—“eight to ten minutes, door to done”—and salesmen can make seven hundred dollars on a one-year plan. An alarm contract, which takes about an hour to complete, can yield eight hundred. Solar, a two-visit sale that takes some ninety minutes all told, is the most lucrative commodity, and the main driver of the boom in door-to-door. On a six-kilowatt system, a salesman can earn three thousand dollars. A middling solar salesman can make two hundred thousand a year, and a great one far more. You just have to get them to hear you out. + +Sam Taggart rapped on the door of a house in the Salt Lake City suburbs, then stepped off the porch. To reassure the customer that you’re not a threat, you angle your body to appear smaller and gaze at your iPad. Then you look up and smile—but not before you catch the customer’s eye, because that looks creepy. + +A man answered the door, and Taggart asked if he was the homeowner. “No, she is,” the man said, gesturing behind him. + +“Could you get her?” Taggart said sternly. You steamroll the gatekeeper to get to the decision-maker. + +A middle-aged woman appeared, wearing a tartan shirt. “I like the festive jammy top!” Taggart said, and she beamed. A friendly icebreaker makes the customer feel seen, and buys another ten seconds in which the salesman can explain, with calibrated candor, “I’m just here about the net-­­metering program” (solar), or “I’m with the new crime-prevention program” (alarms), or “We’re the public adjusters inspecting the damage after the big hailstorm” (roofing). + +Many top salesmen employ a matter-­of-fact “contractor’s voice” to establish that they have other places to be, and they avoid uptalk, which can sound nervous. But Taggart’s tone was uptalk-­adjacent, and his smile was warm. He told me, “I call my style ‘the Grandson Effect.’ Innocent little soft pretty boy. My perfect customer is the tender mom, and my greatest strength is intentional stupidity.” + +At the door, he said, “You’ve probably had a bunch of solar people come by, right?” He was anticipating the woman’s objection—a time-honored technique that he calls “8 Mile,” for the film in which Eminem wins a rap contest by raising his weaknesses before his opponent can. + +“Oh, sure!” + +“Well, what we’re doing is a little different. I’m not here to sell you anything.” + +What the customer thinks is happening on the doors is often the opposite of what’s actually happening. She may feel shielded by her “No Soliciting” sign, but salespeople see it as an invitation: the resident feels vulnerable to being sold. Often, the salesman’s task is to persuade the customer that she has an urgent need that she isn’t aware of: *Your situation is much worse than you thought.* Roofers, Taggart’s videos suggest, should stress “the invisible damage that’s actually a silent killer.” Pest-control sales trade on such hard-to-verify anxieties as mud daubers in the eaves “that push up inside that fascia.” + +Taggart began to evoke the cost of doing nothing. “It’s, like, where in life do we say, ‘Yay, let’s pay more than we have to, to go with the monopoly where we’re locked in forever, right?’ ” The woman nodded. “And do you know where we get most of our power in Utah from?” + +“Electricity?” + +“Exactly, right,” Taggart said, moseying onto her porch. “And the electricity comes from burning coal. So they have these big smokestacks, and it’s two thousand fricking twenty-two! If there’s a cheaper and more efficient way to harness the sun, don’t you think that’d be better?” + +“Oh, sure!” + +“So we’re here *today* because there’s a big push to get panels on roofs through the new program.” + +She frowned. “My husband won’t do it, because we’re faced the wrong way.” The ideal house has a rear roof that faces south: more sun, no panels visible to passersby. Salesmen call such houses “solar boners.” + +“Here’s the thing,” Taggart said. He leaned against the doorway, and the woman leaned against its opposite side—a signal that she felt more comfortable. “What’s your name?” + +“Kay.” + +“Every kiss begins with ‘K’!” They both laughed. “So, actually, your house is perfect for it!” He hadn’t even glanced at her roof. “And you’re already saying yes to ‘I want power on my house,’ right?” + +“Right! But my husband made his decision. I’m sorry!” + +Usually, once the customer realizes she’s being pitched, she’ll say anything to make the salesman go. When I canvassed with Taggart, I often felt anxious: *They really want us to leave!* But he interpreted every objection as an appeal for further information. He heard “I can’t afford it” as “Show me how I can afford it,” and “I already have a gun and a mean dog” as “What else do I need to fully protect my family?” + +A customer’s questions are always taken as a sign of interest. A salesman’s questions, on the other hand, bait you into selling yourself: *Would you use your alarm system more when you’re away and the house is empty, or at night when you’re sleeping and your family is vulnerable*? These are “tie-downs”: questions whose answers leave you trammelled. Even an outright “No!” is a buying sign. Salesmen believe that customers need the freedom to say no as many as six or seven times; rejection is a necessary stop on the road to submission. + +Taggart now told Kay, “We do solar so you make money on Day One. Because you’d rather pay money into your account than to Rocky Mountain Power, right? Does that make sense?” That question is the keystone of Taggart’s “grandson” pitch; he asks it with a worried frown, as if English, too, were a language he was just beginning to explore. + +“Why, yes!” + +Taggart looked relieved. “My favorite people to set up are accountants and financial planners, because they see right away that it makes sense—you make money, you own your own power, and you stick it to the power company, O.K.?” He nodded enthusiastically, so Kay did, too. In his book “ABC’s of Closing,” from 2017, Taggart writes that you “kind of want them to feel like an idiot for not buying,” because smart people “had those same concerns and conducted research, but still moved ahead.” He bent to his iPad: “So what was your husband’s name?” Having made a return appointment to see Kay when her husband was home, Taggart high-fived her, a form of concurrence that, he believes, registers “in the unwritten book of awesomeness—we high-fived on that, you can’t back out now!” + +As he turned away, animation drained from his face. “Kay is a classic Mormon mom,” he told me. “I don’t like knocking in Utah. They’re super-­nice, but they’ll talk for an hour and not buy, because they’re also super-­cheap.” + +The renowned salesman Zig Ziglar wrote that Jesus Christ “was the greatest Salesman and the greatest Teacher who ever lived.” But even proselytizers for eternal life need to keep body and soul together. Methodist preachers used to support themselves by selling books as they rode their circuits, and the Gideons, famed for placing Bibles in hotel rooms, were originally travelling salesmen from Wisconsin. In “Birth of a Salesman,” an illuminating history of the field, Walter Friedman writes, “The connection between selling and evangelism was particularly clear in sales of life insurance, a business with antecedents in church-­operated societies that pooled money for the indigent”—and a business predicated on the fear of loss. + +When Joseph Smith, who’d once made his living searching for buried treasure, founded the Mormon church, in 1830, one of its core missions was to spread the Gospel. The church expected the world to end within a few years, so at first the pitch was wild-eyed: convert or perish! As decades passed and the Apocalypse receded, missionaries began to rely on secular sales techniques. In 1936, a Mormon salesman named Earl W. Harmer published a guide for missionaries that included exercises to overcome “heavy jaw,” warnings against body odor, and a form to grade themselves in seventy-seven categories, from mirthfulness to intellectual continuity. Harmer wanted to arm his emissaries with “all the best methods of commercial salesmanship in addition to that power which you have that no ordinary salesmen possess: *THE POWER AND PRIESTHOOD OF ALMIGHTY GOD*!” + +In 2004, the Church adopted a more improvisatory approach, which included outreach to lapsed members and, eventually, social-media campaigns. But saving strangers was still the main goal. Suli Zinck, who grew up on welfare, converted more than a hundred people during her mission. When it ended, in 2008, she told me, she was recruited by Church members at alarm and pest-control companies: “I said, ‘No! I knocked for Christ—I’m not going to knock for money! Who does that?’ ” A lot of people, it turns out, including Zinck, who began selling pest control. Prosperity is lauded dozens of times in the Book of Mormon, so knocking for commissions can feel almost sacerdotal. “I actually *hate* knocking doors,” Zinck said, “but I’m obsessed with the financial freedom it provides.” She is one of just a handful of people who’ve won Golden Doors in two product categories. + +Sam Taggart’s father, Paul, was an entrepreneur who once sold Kirby vacuums door-to-door and later helped launch Ogio bags and a home dermabrasion unit. In 2014, he began serving as a mission president. He told me, “We’d train these eighteen- to twenty-year-old men how to knock, to stand six feet back from the door, and then to say, ‘Hey, listen, we know you’re busy, but we’ve got a quick question for you.’ You hold up the Book of Mormon and say, ‘We noticed the bikes. Do you have kids? Wow, sounds like you’re a really good mother/father.’ Then, ‘You ever wondered where you’d be with your kids in a thousand years?’ ” He leaned in: “If I were to promise you that there *is* a life after death where you could be with your family, would you be interested?” + +When Paul and his wife, Jane, had Sam, their fourth child, in 1990, they felt certain that he was destined for a special purpose. Jane told me, “Everything came very easy to Sam.” Growing up in Park City, however, he preferred playing his guitar in his room to studying. “Avoidance was my emotional home,” he said. “My mom was always, like, ‘Don’t be sad, see the rainbow in everything,’ and that’s become the customer-service, people-pleasing part of me that can suffocate everything else.” + +At eleven, Taggart sold coupon books door-to-door for businesses including a local bowling alley and the Utah Jazz; at fourteen, he started a business stencilling curbs with property owners’ addresses. “I brought six guys, and I’d divide out territories,” he said. “I gave them the objections script, and it was the same objections you get now for a seventy-thousand-dollar solar deal: ‘I don’t have any money,’ ‘I need to talk to my husband,’ ‘Maybe later.’ ” + +At Utah Valley University, he spent summers selling alarms, and, in 2013, he made five hundred and fifty thousand dollars—enough to persuade him to drop out of school. He was newly married, and he and his wife, Katie, soon had three daughters. He shifted to solar and found increasingly lucrative managerial positions. A millionaire by twenty-five, he began investing in real estate and crypto—standard moves for salesmen, when they’re not putting it all into “pay zero tax” schemes—but he wasn’t happy. Taggart said that there was an imbalance of power in the couple’s marital arguments: “A normal human being would feel like, ‘I can’t beat Sam, I’m always getting sold.’ I was winning in business, winning in life, but my marriage sucked. God was telling me to get divorced for a long time.” + +His older sister Abi Ayres told me, “I look at Sam and I think, You’ve never been poor, you’re super good at everything, you’re charming, you’ve got the perfect body. But the one thing that was always so hard for him was marriage. He was starving for attention and love, but it was also really hard for him to get close to people. On Christmas Eve at the Taggarts’, Sam would show up an hour late, talk about his business, then leave early. In the industry, Sam was a god, but his family was, like, ‘How do we take you seriously?’ ” + +Taggart grew increasingly dismayed by his industry’s gold-rush morality. He told me that, in 2016, his solar company owed him two hundred and fifty thousand dollars. When he complained, he got fired, so he took seventy-five salesmen with him to another firm. In 2017, on a three-day fasting-and-meditation retreat in the Utah desert, he had a vision of himself speaking onstage before thousands of people. He decided that God was sending him a message “to up-level door-to-door.” He quit his six-hundred-thousand-dollar job and began organizing his first convention. Ayres, who ran four conventions for her brother, said, “D2DCon was Sam’s way of saying, ‘I want *everybody* in this industry to be taken seriously.’ ” She added, “But it’s mostly bros who care only about their bodies and their sales numbers. It’s such a vain, sad industry.” + +Two days after D2DCon, a hundred or so knockers gathered at a cabin in Heber City, an hour southeast of Salt Lake. Their hosts were Danny Pessy and Taylor McCarthy, topflight salesmen in their thirties, who recently launched a curriculum called Knockstar University. Their program is closely based on Taggart’s D2D University. “Sam paved the path, and now we’re crushing it with a very similar setup,” Pessy told me. + +One of Pessy and McCarthy’s messages was that door-to-door burns you out fast, so become a manager and recruit reps, because you get a percentage of their commissions. The pair addressed such topics as wealth, life style, and family, and then McCarthy softly added a last category: love. McCarthy is best known for tactical brilliance and for an insistent politeness that borders on rudeness (“Sir, are you upset? The *last* thing I want to do is cause you emotional hardship”). So his suggestion that sales could be a form of moral redemption—Taggart’s message—was a surprise. + +Pessy offered a parable of the dangers of conducting business without love: “Every year, I’d be, like, ‘I sold three hundred, man, I’m the best manager ever!’ ” He raised his hand for a high five and mimed being left hanging. “And my reps were, like, ‘Dude, you don’t give a shit about me.’ ” He inhaled. “Sorry, I’m getting emotional, but I’ve lost so many friends because of this job—I’ve fucked ’em over, I’ve stolen deals from my reps.” But, he added sombrely, “when I die, I can’t take this watch with me”—he displayed his Breitling. “I can’t take the fancy cars, the limo with twenty-five women. They’re gone. It’s the friends.” + +The perspective from the limo, like that in the room, was decidedly masculine. Less than ten per cent of door-to-door reps are women. Makenna Halls, a pest-control knocker whose team made $2.5 million last year, told me that at D2DCon “the men only talk to the men, and then they say, ‘Oh, do you sell, too? Or are you just a wife?’ ” (The more festive world of direct sales—which is dominated by multilevel marketing, in which people sell leggings or essential oils to their friends and acquaintances—is seventy-­six per cent female.) + +Pessy and McCarthy introduced Michael O’Donnell, the country’s best-known salesman in solar and a proponent of a hugely influential closing technique. In a D2DU video, he explains that, if he hasn’t quite closed a customer, then it’s “just time to make shit up” (somewhat glossing over all the shit he’s already made up). He turns to the “Last Bullet in the Gun” close, teasing the possibility of a price cut: “I don’t know if I can get this approved. If I were able to, could we move forward?” He then deploys the venerable “Manager Call Close,” in which the rep dials a number—which, for the scrupulous salesman, could even be an actual manager’s—and pleads the customer’s case. + +In the cabin, O’Donnell diverged from Pessy and McCarthy’s theme. He clicked to a photo of a Porsche Panamera alongside a Gulfstream III. “All the big influencers say, ‘What is your why?’ ” he said. “The why, to me, is to find a nine-figure mind-set. A nine-­figure balance sheet gives you the opportunity to have any life style you can possibly imagine without having to work. You’re also preserving generational wealth, which is the way you’re going to start thinking when you use ‘Think and Grow Rich’ as a textbook.” That book, a touchstone for salesmen, is Napoleon Hill’s account of the secrets he gleaned from interviewing such Gilded Age titans as Andrew Carnegie, Thomas Edison, and John D. Rockefeller. “We must magnetize our minds with intense desire for riches,” Hill declares. The popularity of this belief is undimmed by the fact that Hill was a con man who made up his research. + +O’Donnell’s pep talk got a loud ovation, but Pessy was nonplussed. “That mind-set never lasts, long term, because the kicks in the nuts become too much,” he told me. “If you don’t get to the nine figures, you’re a total failure. Whereas if your mind-set is about removing impediments, then *not* achieving nine figures is just a stepping stone to becoming a better person.” + +Motivational speakers often tell reps that the ultimate goal is “abundance,” a roomy word that comprehends not just wealth but also family life, charity, and well-being. Knockers remove impediments to abundance by continually taking up new disciplines. They pump weights, try intermittent fasting or paleo, adopt Wim Hof breathing techniques, and undertake 75 *Hard*s, seventy-­five-day programs requiring twice-a-day workouts, abstention from alcohol, and immersion in self-help books. If you’re betting on yourself, then everything you do to make yourself faster and tougher and more focussed improves your odds. + +Perhaps the biggest obstacle to using sales as a path to redemption is that redemption, in turn, increases your sales. Pessy told his disciples that, once he got physically and mentally and emotionally stronger, he became such a great salesman that “my boss bought me this cool-ass Breitling that cost ten thousand dollars”—he held up his watch again. “I wear it all the time to remind myself that the real wealth is health.” + +When Sam Taggart was selling Kay on solar, he instantly sized her up as a lamb, using the *BOLT* system, which sorts people into bulls, owls, lambs, and tigers. A bull’s force must be met with equal power; as the pest-­control salesman Parker Langeveld puts it, you “stand your ground and redirect, and then mount the back of the bull while he’s disoriented.” Owls study product specs and buy reluctantly, if at all. Owls, Taggart told me, “are usually Jews, or Asian dudes. My first two years knocking, if an Indian opened the door I’d say, ‘Wrong house.’ ” Lambs want to be told what to do. And with tigers you chitchat and reassure them that they’re getting the latest tech. Bulls drive a black Dodge Charger, owls a Toyota that gets great gas mileage, and lambs whatever the salesman wanted off the lot. Tigers leave their garage door open so everyone can admire their red BMW. + +As I considered my own place in this taxonomy, I realized that I’m an owl. I want to know every detail. I also realized that my self-image as a savvy, unpersuadable New Yorker was dead wrong. All a salesman has to do is listen to my concerns and I’ll start giving serious thought to buying his tropical-­fish subscription or backhoe. I’m susceptible even as I’m being shown how the trick is done. In one D2DU video, a solar salesman named Pistol Pete Winston pitches Taggart, demonstrating how to bulldoze the “one-legger”—the solo homeowner who won’t make a decision without his spouse. After Winston sets a follow-up appointment with a forced-choice question (*Is Wednesday afternoon or Thursday morning better for you*?), he insures the spouse’s attendance: “As much as this is about helping you save money and increase the value of your home, if you qualify, it’s also about sharing with you what the community is doing to help the environment, and they just ask that both of you be here for that.” + +A grin spreads across Taggart’s face: “So you make it about the *community*.” + +[](https://www.newyorker.com/cartoon/a25335) + +“The heathens are no longer at the gate, sire. They’re now at the food truck.” + +Cartoon by Michael Maslin + +“And ‘they’ just ask . . .” Winston notes, drawing Taggart’s attention to the masterstroke of his coercive piety. “Who? ‘*They*.’ ” I’d buy solar panels from Pete Winston. And I live in an apartment building. + +Perhaps eighty per cent of salesmen are tigers, as Taggart is, so they’re drawn to the latest persuasive techniques. When Taggart filmed an online commercial for a D2D sales summit in March, he did a tongue-in-cheek practice take: “Do you want to pull someone’s brain out of their head and mold it and put it back in their skull? Have you ever heard that sales is bad because it’s a manipulation technique for making people do whatever you want, and thought, How can *I* learn that?” + +His actual ad wasn’t much different: a promise to reveal “how you break into the subconscious mind of your customers to *master* the art of selling.” Rather than preying on the customer’s fear of loss, you reframe his outlook using “wordsmithing.” Avoid saying “problem” (instead, use “challenge” or “situation”), “contract” (“service agreement”), “chemical” (“product”), “sell” (“provide”), or “sign” (“initial”). Not *The customer wouldn’t sign the contract because it cost too much,* but *The head of the family I served O.K.’d the form once she grasped the unparalleled investment opportunity.* “Bucks” sounds cheaper than “dollars,” so you build value in dollars, then promote in bucks: *This service is two hundred and forty-nine dollars, but because we’ve got technicians in the area today I can give it to you for ninety-­nine bucks.* + +A fancier-sounding form of conditioning is neurolinguistic programming. Taggart suggests making seemingly anodyne observations—“Hey, whether you *do* it or *don’t* do it, it would make sense to just *do* it, right?”—that, operating on the same frequency as subliminal advertising and homeopathic medicine, brainwash the prospect into obedience. There’s no real scientific evidence for these techniques, but they have a powerful placebo effect, and salesmen need a thick buffer of confidence against self-doubt. Self-doubt leads to failure, and failure is unacceptable. When reps bagel, the penalties can range from having to lip-synch to Britney Spears to having to shave their beard and consume the clippings. + +Failure is abhorrent because it can induce a contagious loss of faith in the whole enterprise. Managers teach salesmen to avert this death spiral by imagining that they’re getting paid for rejections. If you get five thousand dollars for a solar sale, but you sell only one out of a hundred prospects, then condition yourself to believe that you’re getting paid fifty bucks for each no. Michael O’Donnell, successful as he is, told me, “I want to throw up in the bushes half the time. The only way I get myself out of my house is that I made a sacred commitment to get one person to say no to me every day, and I try to experience that no as an uplifting event that I’m getting paid for.” + +There are two types of door-to-door salesmen: those motivated by money or by the call of their persuasive gift, and those simmering for a shot at redemption. Taylor McCarthy had a high-school G.P.A. of 1.8; Michael O’Donnell was an alcoholic; Luke Ward, who in 2021 made $1.4 million selling solar, was convicted of several felonies during his years of heroin and meth addiction. “The obsessive quality that made me an addict is also what makes me great at sales,” Ward told me. “That, and the competitive need I have—that all great salespeople have—to be recognized as the best.” + +Adam Schanz, the founder and C.E.O. of Alder Security, is the simmering sort. His ability to sell alarm systems elicits wonder. Sam Taggart said, “Adam is the best door knocker in history.” Schanz requires his execs to knock doors for a week each year; in 2019, he spent his own week in a town in northeast Louisiana and sold two hundred and five accounts—a total that might take a merely great salesman half a year. He installed systems for local officials and paid them a hundred dollars for each referral who bought in, got more leads from church congregants after he dropped a thousand dollars in the collection plate, and then raced from house to house, sweeping the town clean like the Pied Piper of Hamelin. + +Schanz, who grew up in a Mormon family, is exceedingly precautious about acts of God, but he remains an optimist about humanity. “In the meanest neighborhoods of Brooklyn, where you live,” he told me, “I can knock on any door and get the people to let us borrow their car and drive to McDonald’s to get a milkshake. It’s amazing how awesome people are when you give them a chance!” And yet, when he started on the doors, he said, “I saw salesmen tricking old people, and liars and cheaters being rewarded. It’s a flashy, trashy industry.” After his second year, he told me, “I called my mother in tears and said, ‘The Cinderella story is a lie, Mom. What you taught me is bullshit.’ ” Schanz’s mother encouraged him to stay true to himself, and he redoubled his efforts, reading every sales book he could, setting three appointments after nine each night, explaining the fine print so that customers couldn’t possibly be confused. He radiated a passion for his product that few people feel for their families, let alone for a seven-inch touch-­screen panel with two-way voice and 24/7 monitoring and support. Three years later, when he sold five hundred accounts in a summer, he called his mother again and said, “Mom, it’s legit! I’m the best in the world at this!” + +It’s easier to sell, of course, if you fiddle with the truth. That’s why everyone at your door announces himself as “the regional manager,” even if the region under management is just the space occupied by his own body. Last year, Vivint Smart Home paid $23.2 million to the Department of Justice and the Federal Trade Commission, to settle allegations that some of its salesmen had been fudging credit reports, including “white paging” to make sure that customers passed a check—that is, borrowing the superior score of an unwitting person with a similar name. Another legendary industry workaround was to go to the local graveyard and run a likely name: the dead frequently retained their credit rating, and the tombstone supplied a birth date. + +When home-security salesmen seek to take over another company’s account, they sometimes tell the customer that they’ve come “from the alarm company” to upgrade her system. Schanz himself founded a business called APT, which sounds a lot like ADT, the nation’s largest security company. He contends that his reps never pretended to be from ADT: “Our whole thing was to *clown* on their equipment and service—to win accounts by doing the opposite.” Unpersuaded, ADT sued four times. “Their goal was to crush me,” Schanz said, even as he acknowledged that his company paid seven million dollars to settle the lawsuits: “I admit that I’m not perfect.” + +On the doors, the ends frequently justify the means. In a Knockstar University video, Taylor McCarthy tells trainees, “It is *never* O.K. to be pushy in selling. Unless it’s a life-or-death situation,” he clarifies. Or, he further clarifies, “if you *feel* as if it’s a life-or-death situation—if you’re selling home security, if you’re trying to protect the environment,” or “if you’re trying to protect somebody’s lawn.” Danny Pessy told me, “If your intention is to *deceive* the customer—if you’re saying your meat truck broke down, and it’s actually meat from Ralphs that you repackaged—that’s a no. But, if your intention is to *serve* them, then you can say whatever you have to say to get them to buy the amazing product that you believe in.” + +As Taggart ambled into a development not far from his office, he noted with pleasure that new owners were still moving in. “You can sell these people anything,” he said. “They need Internet, they need alarms, they need pest, they need solar.” + +At the first house, a man named Geo answered Taggart’s knock. He wore baggy shorts and had a phlegmatic air. Taggart, pegging him as a lamb, started his pitch gently: “Where normally you’d pay up to sixty thousand dollars, in this neighborhood we’re setting up standard kits to fit on the roof sizes. Is it cool if we step inside and show you? It takes, like, two seconds?” + +“Yeah, sure.” + +Taggart gave me a smile: the salesman’s first goal is to get into the house. Alfred Fuller, the founder of the Fuller Brush Company, wore shoes a size too large so he could slip them off and be inside before housewives could protest. Earlier that afternoon, after Taggart had convinced a bull named Bob that he needed a new alarm system, he’d told me, “Once I get inside, it’s done. The saying is ‘On the door you’re a pest, in the home you’re a guest.’ ” + +Taggart sat in the living room cater­corner to Geo and laid out the advantages of solar. “So would you be doing this more for the savings, the independence, or saving the planet?”—a classic tie-down. + +“If it has the affordability. What’s the total cost for a home like this?” + +Taggart explained net metering: each month, the power company credits you for the electricity your panels generate and charges you for the electricity you use. “So we want to size the system to offset the power you’d use over the year. Does that make sense?” + +“Yeah, I get what you’re saying.” Geo asked a few more questions, then said, “It’s an option to explore, but—” + +“The numbers have to make sense,” Taggart said, nodding sagely. “Say you pay a hundred a month in electricity, and you move after five years, how much have you paid?” + +“Six thousand dollars.” + +“And that’s if prices don’t go up! So I say, Hey, look, give me a shot, we run a proposal and give you the opportunity to recuperate all that money.” + +“Why don’t we wait until we see what the monthly power bill is?” Geo said, weakly offering his final objection. + +“Well, right now you’re getting a winter power bill, and that’s going to be less. You wait a year to see your annual power costs, you just wasted four thousand dollars. See what I mean?” + +“Yeah, I see, I see,” Geo said, ninety-­five per cent sold. Taggart took his information and said he’d get him a quote. On the street, he told me, “Say he has to pay thirty bucks *more* a month to get solar.” Many solar salesmen promise lower total bills, but that usually proves true only in states with high electricity costs, such as California. “Then I’d say, ‘If you had to pay twelve hundred ­dollars a month for your mortgage, or eleven­-hundred-seventy a month for rent, which would you do?” He looked at me. + +Cast as Geo, I said, “The mortgage.” + +Taggart grimaced and said, “Why would you pay *more* every month? That’s dumb.” + +“Because that way I own my house,” I said, annoyed that he was being so dense. + +He grinned. “*Exactly*. You get them selling you.” + +[](https://www.newyorker.com/cartoon/a24653) + +“But I don’t feel safe.” + +Cartoon by Robert Leighton + +The next day, Taggart texted Geo and asked him to take photos of his roof for the engineer’s estimate; getting customers to perform tasks for you is the kinetic equivalent of the “yes train.” And then Taggart lost interest. “It’s terrible that I haven’t closed him, because it’s easy money,” he admitted a few weeks later. But his focus had begun to shift. + +A few months after Taggart and his wife separated, in 2020, he got an Instagram message from an effervescent woman named Mia Pheonix. Pheo­nix, who’d changed her last name from O’Neil to honor her soul’s continual rebirth, had seen Taggart’s D2DU videos in Tampa, where she was learning to sell solar. Her message asked how to get into roofing sales. In truth, she suspected that Taggart was the man she’d been magnetizing her mind for. Her original list of desirable qualities included “luscious hair,” “really beautiful bone structure,” “ripped & strong,” “making 200k + a year,” and “50k + followers” on Instagram, but it had grown to encompass “spirituality/God,” “business savvy,” and “musical ability.” + +When she and Taggart met up a few weeks later in Utah, he told me, “I realized she’s, like, four foot eleven—‘You really want to do roofing sales?’ ” Height helps when you’re raising a ladder to inspect a roof. “It was a ploy. She sold me.” + +Pheonix said that on their second night together “I put my hands on Sam’s chest and put love into him: ‘You are so powerful—you’re going to change the world!’ He started bawling, and I literally saw a zombie come back to life.” She began knocking doors for Taggart’s solar company, Agoge (named for the Spartan warriors’ training program), then started a lab-grown-diamond enterprise, then launched a podcast while assisting Taggart with his seminars. “Knocking had served its purpose by leading me to Sam,” she said. “God is working through us to change lives, and I genuinely see Sam and me becoming two of the most influential humans who ever lived, along with Beyoncé, Oprah, Elon Musk, Einstein, and Aristotle.” + +Taggart is still some ways from a global empire. When I visited the D2D Experts office, in a mini mall south of Salt Lake, it looked as if he and his fifteen employees could move out of it in ten minutes. Yet his efforts to expand his sphere of influence are relentless. The office had a gong you banged when you made a sale; when Taggart banged it, he filmed himself for his more than a hundred and forty thousand Instagram followers. He explained, “We have a guy in Serbia, two chicks in the Philippines, and a guy in Nigeria whose job is putting inspirational quotes on photos and videos of me. The guy in Nigeria is also writing my book.” Taggart’s new book of entrepreneurial advice is inspired by Matthew 7:7: “Ask, and it shall be given you; seek, and ye shall find; knock, and it shall be opened unto you.” Taggart said, “The problem is it’s too good, too ecclesiastical. It needs to be dumbed down for the sales world.” + +After D2DCon, he convened his team in his private office, which was decorated with an acoustic guitar, a suitcase, and a jug of protein powder. The convention had been a success, netting about two hundred thousand dollars. Next year, Taggart said, “my goal is to sell twice as many tickets, and have just two speakers on the main stage—me and Tony Robbins.” Some of his employees glanced at one another: *Is he kidding*? “I have an in, a guy who sells Tony hats,” Taggart explained. Afterward, he told me, “Tony Robbins is people’s modern-day Jesus. I grew up believing in modern prophets, like Joseph Smith, and Tony Robbins is one. I’d like to be seen at that level.” + +More than anything, he’d decided, he was selling inspiration. At an Xperts Circle Mastermind gathering in Park City, he stood by the woodstove of a rented chalet and spoke to eighteen C.E.O.s. “Too much of sales is about ‘How much money did I make?’ ” he said. “But I hope you see this weekend as ‘Let’s become better humans and up-level everyone else along with us.’ ” He suddenly shouted, “It’s our duty to fix all these roofs, because if we don’t fix them no one will!” + +“And somebody else is going to pay for it!” a roofer named Joshua Blanch added, to laughter. + +Taggart began to discuss how to coach employees. “Pain is a bigger driver than pleasure,” he said. “It’s sad, but that’s how we motivate our customers: ‘A black widow is going to bite your kid one day.’ The obvious employee problem is that people will do anything *not* to knock, because they associate doors with pain. Our job is to reframe that, so doors become the doorway to your future.” + +He turned to Amy Walker, one of two women present. Walker owns a roofing company in Tulsa with her husband, Paul, who had stayed home, doubting much would come of her efforts at self-improvement. Taggart now cast her as an underperforming sales rep, and Walker looked stricken. Her company had plateaued at two million dollars in revenue, and she had resisted knocking for new customers. Playing Walker’s boss, Taggart informed her, “If you go two more weeks with this performance, we gotta let you go.” He told the others, “It’s the pain piece: ‘Don’t cut me, Coach!’ And the pleasure piece is the promise of renewed connection.” He turned back: “Hey, girl, we all want to feel close to you, but we need you to keep up and be an all-star, like us.” + +After some introspection, Walker announced, “I’m going to go on the streets!” and everyone whooped. Back home in Tulsa, though, she kept putting it off. Finally, in February, she could no longer stand “having life run me,” so she walked into her neighborhood and began knocking. “One guy was a total asshole,” she reported, but within hours she’d booked a job. She found herself doing the math: what would it take to win a Golden Door? She’d need a hundred and fifty-seven sales this year, an average of three a week. “Freaking scary—but I’m going to do it!” she said. “And my other mission for this year is helping women get into this industry—forming a tribe!” + +Her husband, Paul, said, “Amy hates ladders and heights, so this change is pretty bold.” Inspired, he quit drinking and started a modified 75 *Hard* with her; he even teamed up with her for one of Taggart’s door-knocking competitions. “I still don’t feel comfortable overcoming objections, because I sympathize with the *Stop it, go away!*” he told me. “But I recognize that I was lazy and miserable, and that I need to scratch and claw to keep up with Amy.” + +Every salesman is proving something on the doors. Taylor McCarthy wants to demonstrate that he’s smarter than you, Adam Schanz that he can befriend you, and Sam Taggart that he can charm you. Yet Taggart has grown sufficiently frustrated with his industry that he no longer cares about ingratiating himself with everyone in it. For years, he’s tried to launch an initiative to train sales reps in ethics and certify them, as if they were accountants or Realtors. He hoped that three hundred companies would support his initiative; he said that only fifty had. This year, at D2DCon, he didn’t even raise the topic. “I can’t carry the whole industry on my back,” he told me. “So, if you’re not going to help me to police it, then F you.” + +It’s a business scant on deep loyalties. Once the salesman leaves and his injection of confidence wears off, customers often feel obscurely tricked; what seemed like a conversation was only a transaction after all. That’s why the salesman pressures his technician to spray the house or install the alarms that same day. In solar, where the necessary permits take weeks, the salesman will often give the owner brownies or a smart thermostat to hold the interpersonal glue in place. River Skinner, the vice-president of sales at Fluent Solar, said he’ll send “an emoji of my face with a thumbs-up—because friends text with emojis—or a handwritten card saying that it meant a lot. Because, if you have an intimate moment with someone you’re attracted to, you wouldn’t want to never hear from them again.” + +Regret lingers, though, and it threatens the business model. As a rule, door-to-door pest-control companies lose roughly a third of their customers in the first year. Many pest and alarm companies have launched solar divisions to retain their top salespeople; solar is where the money is. Yet, with federal tax credits set to expire in 2024, the boom may be brief. The growth of door-to-door is also menaced by the saturation of local markets and by customer disenchantment—the retiree who writes a Facebook screed about her alarm salesman is unlikely to want another system. + +Door-to-door companies have begun to look abroad, following the path of other American innovations—Spam, Agent Orange, subprime mortgages—that ran into resistance at home but flourished overseas. Paul Giannamore, an adviser to the pest-control industry, told me, “Because you already have six or seven door-to-door companies selling on top of each other in the same suburb of Wichita, you’re seeing teams go to Canada now. I’m getting calls, ‘What about Australia?’ A bunch of American kids knocking doors in the outback—that would get the homeowners’ attention!” + +Taggart expressed his own restlessness by hiring a new ghostwriter for his book and breaking up with Mia Pheo­nix. “Mia unlocked a whole new version of what I can be in a relationship,” he said. “And I’m excited for the next one.” To elevate his life, in the past year he learned how to dunk, became a vegan for six months, and completed a marathon and an Ironman. He intends to gain fourteen pounds of muscle and be at ten-per-cent body fat by the end of August and then to get certified in yoga and jujitsu. His new longer-term goal is to accrue fifty million dollars by age forty, move to Los Angeles, and host a game show in the vein of “The Amazing Race” or “Survivor.” + +He now subscribed to his parents’ belief that God has a plan for him. “Grant Cardone’s motto is to ‘10*X* yourself,’ ” he said. “But why cap it at ten? I like the idea of ‘Infin*X*.’ ” He went on, “I’m a huge fan of mindfulness—and of coupling that with *success*. Religion sees money as the root of all evil, but I believe you can have it all, the spirituality *and* driving a Lamborghini. Call it religion, call it personal development, call it whatever, but I’m called to go beyond the hundred thousand door knockers in America. I feel called to compete with the Tony Robbinses to impact millions around the world, by teaching them to sell themselves on life!” + +Selling fulfillment door-to-door wouldn’t scale, so Taggart has turned, inevitably, to a Silicon Valley solution: “We’re building out a goal-setting life-­management system with accountability that’s pretty dope. It’ll tell you, ‘Did I expand my life or not?’ and then deliver content into your app.” Once Taggart’s app goes live, your phone will become a doorway to the next level. And then all the happiness that a salesman can promise will be not a brisk knock away but only a gentle tap. ♦ + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/Seven years of sex abuse How Mormon officials let it happen.md b/00.03 News/Seven years of sex abuse How Mormon officials let it happen.md new file mode 100644 index 00000000..21595618 --- /dev/null +++ b/00.03 News/Seven years of sex abuse How Mormon officials let it happen.md @@ -0,0 +1,241 @@ +--- + +Tag: ["Crime", "Society", "SexualAbuse"] +Date: 2022-08-07 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2022-08-07 +Link: https://apnews.com/article/Mormon-church-sexual-abuse-investigation-e0e39cf9aa4fbe0d8c1442033b894660 +location: +CollapseMetaTable: Yes + +--- + +Parent:: [[@News|News]] +Read:: No + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-SevenyearsofsexabuseHowMormonofficialsletithappenNSave + +  + +# Seven years of sex abuse: How Mormon officials let it happen + +BISBEE, Ariz. (AP) — MJ was a tiny, black-haired girl, just 5 years old, when her father admitted to his bishop that he was sexually abusing her. + +The father, a member of The Church of Jesus Christ of Latter-day Saints and an admitted pornography addict, was in counseling with his bishop when he revealed the abuse. The bishop, who was also a family physician, followed church policy and called what church officials have dubbed the “help line” for guidance. + +But the call offered little help for MJ. Lawyers for the church, widely known as the Mormon church, who staff the help line around the clock told Bishop John Herrod not to call police or child welfare officials. Instead he kept the abuse secret. + +“They said, ‘You absolutely can do nothing,’” Herrod said in a recorded interview with law enforcement. + +Herrod continued to counsel MJ’s father, Paul Douglas Adams, for another year, and brought in Adams’ wife, Leizza Adams, in hopes she would do something to protect the children. She didn’t. Herrod later told a second bishop, who also kept the matter secret after consulting with church officials who maintain that the bishops were excused from reporting the abuse to police under the state’s so-called clergy-penitent privilege. + +Adams continued raping MJ for as many as seven more years, into her adolescence, and also abused her infant sister, who was born during that time. He frequently recorded the abuse on video and posted the video on the internet. + +Adams was finally arrested by Homeland Security agents in 2017 with no help from the church, after law enforcement officials in New Zealand discovered one of the videos. He died by suicide in custody before he could stand trial. + +The Associated Press has obtained nearly 12,000 pages of sealed records from an unrelated child sex abuse lawsuit against the Mormon church in West Virginia. The documents offer the most detailed and comprehensive look yet at the so-called help line Herrod called. Families of survivors who filed the lawsuit said they show it’s part of a system that can easily be misused by church leaders to divert abuse accusations away from law enforcement and instead to church attorneys who may bury the problem, leaving victims in harm’s way. + +The help line has been criticized by abuse victims and their attorneys for being inadequate to quickly stop abuse and protect victims. Yet the Utah-based faith has stuck by the system despite the criticism and increasing scrutiny from attorneys and prosecutors, including those in the Adams case. + +“’I just think that the Mormon church really sucks. Seriously sucks,” said MJ, who is now 16, during an interview with the AP. “They are just the worst type of people, from what I’ve experienced and what other people have also experienced.” + +MJ and her adoptive mother asked the AP to use only her initials in part because videos of her abuse posted by her father are still circulating on the internet. The AP does not publish the names of sexual abuse survivors without their consent. + +William Maledon, an Arizona attorney representing the bishops and the church in a lawsuit filed by three of the Adams’ six children, told the AP last month that the bishops were not required to report the abuse. + +“These bishops did nothing wrong. They didn’t violate the law, and therefore they can’t be held liable,” he said. Maledon referred to the suit as “a money grab.” + +In his AP interview, Maledon also insisted Herrod did not know that Adams was continuing to sexually assault his daughter after learning of the abuse in a single counseling session. + +But in the recorded interview with the agent obtained by the AP, Herrod said he asked Leizza Adams in multiple sessions if the abuse was ongoing and asked her, “What are we going to do to stop it?” + +“At least for a period of time I assumed they had stopped things, but — and then I never asked if they picked up again.” + +‘THE PERFECT LIFESTYLE’ + +The Adams family lived on a lonely dirt road about 8 miles from the center of Bisbee, an old copper-mining town in southeastern Arizona known today for its antique shops and laid-back attitude. Far from prying eyes, the Adams home — a three-bedroom, open concept affair surrounded by desert — was often littered with piles of clothing and containers of lubricant Adams used to sexually abuse his children, according to legal documents reviewed by the AP. + +Paul’s wife, Leizza, assumed most of the child-rearing responsibilities, including getting their six children off to school and chauffeuring them to church and religious instruction on Sundays. Paul, who worked for the U.S. Border Patrol, spent much of his time online looking at porn, often with his children watching, or wandering the house naked or in nothing but his underwear. + +He had a short fuse and would frequently throw things, yell at his wife and beat his kids. “He just had this explosive personality,” said Shaunice Warr, a Border Patrol agent and a Mormon who worked with Paul and described herself as Leizza’s best friend. “He had a horrible temper.” + +Paul was more relaxed while coaxing his older daughter to hold a smartphone camera and record him while he sexually abused her. He also seemed to revel in the abuse in online chat rooms, where he once bragged that he had “the perfect lifestyle” because he could have sex with his daughters whenever he pleased, while his wife knew and “doesn’t care.” + +He would later tell investigators the abuse was a compulsion he couldn’t stop. “I got into something too deep that I just couldn’t pull myself out of,” he said. “I’m not trying to say the devil made me do it.” + +The Adams family was deeply involved in the Mormon community, and on Sundays they attended services in Bisbee. So Adams turned to his church, and to Bishop Herrod, when he sought help and revealed his abuse of MJ. + +Herrod later told Homeland Security agent Robert Edwards he knew from the start that Leizza Adams was unlikely to stop her husband, after he called her into the counseling sessions. The bishop, who was also Leizza’s personal physician, said she seemed “pretty emotionally dead” when her husband recounted his abuse of their daughter. The bishop also recognized the harm being done to MJ. “I doubt (she) will ever do well,” he said in his recorded interview with Homeland Security agents. + +Herrod also told Edwards that when he called the help line, church officials told him the state’s clergy-penitent privilege required him to keep Adams’s abuse confidential. + +But the law required no such thing. + +Arizona’s child sex abuse reporting law, and similar laws in more than 20 states that require clergy to report child sex abuse and neglect, says that clergy, physicians, nurses, or anyone caring for a child who “reasonably believes” a child has been abused or neglected has a legal obligation to report the information to police or the state Department of Child Safety. But it also says that clergy who receive information about child neglect or sexual abuse during spiritual confessions “may withhold” that information from authorities if the clergy determine it is “reasonable and necessary” under church doctrine. + +In 2012, when Herrod rotated out of his position as bishop of the Bisbee ward — a Mormon jurisdiction similar to a Catholic parish — he told incoming Bishop Robert “Kim” Mauzy about the abuse in the Adams household. Instead of rescuing MJ by reporting the abuse to authorities, Mauzy also kept the information within the church. + +In a separate recorded interview with federal agents obtained by the AP, Mauzy said church officials told him he should convene a confidential disciplinary hearing for Adams, after which Adams was ex-communicated in 2013. Mauzy and other church leaders still didn’t report Adams to the police. + +Two years later, in 2015, Leizza Adams gave birth to a second daughter. It took her husband just six weeks to start sexually assaulting her, recording the abuse, and uploading the videos to the internet. + +The revelation that Mormon officials may have directed an effort to conceal years of abuse in the Adams household sparked a criminal investigation of the church by Cochise County Attorney Brian McIntyre, and the civil lawsuit by three of the Adams children. + +“Who’s really responsible for Herrod not disclosing?” McIntyre asked in an AP interview. “Is it Herrod,” who says he followed the church lawyers’ instruction not to report the abuse to authorities? “Or is it the people who gave him that advice?” + +‘THE CALL COMES TO MY CELL PHONE’ + +When it comes to child sexual abuse, the Mormon church says “the first responsibility of the church in abuse cases is to help those who have been abused and protect those who may be vulnerable to future abuse,” according to its 2010 handbook for church leaders. The handbook also says, “Abuse cannot be tolerated in any form.” + +But church officials, from the bishops in the Bisbee ward to officials in Salt Lake City, tolerated abuse in the Adams family for years. + +“They just let it keep happening,” said MJ, in her AP interview. “They just said, ‘Hey, let’s excommunicate her father.’ It didn’t stop. ‘Let’s have them do therapy.’ It didn’t stop. ‘Hey, let’s forgive and forget and all this will go away.’ It didn’t go away.” + +A similar dynamic played out in West Virginia, where church leaders were accused of covering up the crimes committed by a young abuser from a prominent Mormon family even after he’d been convicted on child sex abuse charges in Utah. The abuser, Michael Jensen, today is serving a 35- to 75-year prison sentence for abusing two children in West Virginia. Their family, along with others, sued the church and settled out of court for an undisclosed sum. + +“Child abuse festers and grows in secrecy,” said Lynne Cadigan, a lawyer for the Adams children who filed suit. “That is why the mandatory reporting came into effect. It’s the most important thing in the world to immediately report to the police.” + +The lawsuit filed by the three Adams children accuses The Church of Jesus Christ of Latter-day Saints and several members, including Bishops Herrod and Mauzy, of negligence and conspiring to cover up child sex abuse to avoid “costly lawsuits” and protect the reputation of the church, which relies on proselytizing and tithing to attract new members and raise money. In 2020, the church claimed approximately 16 million members worldwide, most of them living outside the United States. + +“The failure to prevent or report abuse was part of the policy of the defendants, which was to block public disclosure to avoid scandals, to avoid the disclosure of their tolerance of child sexual molestation and assault, to preserve a false appearance of propriety, and to avoid investigation and action by public authority, including law enforcement,” the suit alleges. “Plaintiffs are informed and believe that such actions were motivated by a desire to protect the reputation of the defendants.” + +Very few of the scores of lawsuits against The Church of Jesus Christ of Latter-day Saints mention the help line, in part because details of its operations have been a closely guarded secret. The documents in the sealed court records show how it works. + +“The help line is certainly there to help — to help the church keep its secrets and to cover up abuse,” said Craig Vernon, an Idaho attorney who has filed several sex abuse lawsuits against the church. + +Vernon, a former member, routinely demands that the church require bishops to report sex abuse to police or state authorities rather than the help line. + +The sealed records say calls to the help line are answered by social workers or professional counselors who determine whether the information they receive is serious enough to be referred to an attorney with Kirton McConkie, a Salt Lake City firm that represents the church. + +A document with the heading “Protocol for abuse help line calls,” which was among the sealed records obtained by the AP, laid out the questions social workers were to ask before determining whether the calls should be referred to the lawyers. + +Mormon officials in the West Virginia case said they did not recognize the Protocol and could not authenticate it. But a ranking church official in a separate sex abuse lawsuit in Oregon confirmed that those answering the help line used a “written protocol” to guide them. + +“There would be a page containing various topics to discuss and handle,” said Harold C. Brown, then director of the church’s Welfare Services Department. + +The Protocol instructs those staffing the help line to tell callers they are to use first names only. “No identifying information should be given.” Under the heading “High Risk Cases,” it also instructs staffers to ask a series of questions, including whether calls concerned possible abuse by a church leader, an employee, or abuse at “a church-sponsored activity.” + +The protocol advises those taking the calls to instruct a “priesthood leader,” which includes bishops and stake presidents, to encourage the perpetrator, the victim, or others who know of the abuse to report it. But it also says, in capital letters, that those taking the calls “should never advise a priesthood leader to report abuse. Counsel of this nature should come only from legal counsel.” + +That counsel comes from attorneys from Kirton McConkie, which represents the church. + +Joseph Osmond, one of the Kirton McConkie lawyers assigned to take help line calls, said in a sealed deposition that he’s always ready to deal with sex abuse complaints. + +“Wherever I am. The call comes to my cell phone,” he said. He then acknowledged that he did not refer calls to a social worker and wouldn’t know how to do so. + +Osmond declined to comment through church officials. Peter Schofield, a Kirton McConkie lawyer long associated with the help line, also declined to answer questions from the AP. + +Maledon, the attorney for the church in the Adams lawsuit, said church clergy or church attorneys have made “hundreds of reports” of child abuse to civil authorities in Arizona over an unspecified number of years. But he could not say how many calls to the help line were not referred to police or child welfare officials and could not provide a referral rate. + +Two church practices, identified in the sealed records, work together to ensure that the contents of all help lines calls remain confidential. First, all records of calls to the help line are routinely destroyed. “Those notes are destroyed by the end of every day,” said Roger Van Komen, the church’s director of Family Services, in an affidavit included in the sealed records. + +Second, church officials say that all calls referred to Kirton McConkie lawyers are covered by attorney-client privilege and remain out of the reach of prosecutors and victims’ attorneys. “The church has always regarded those communications between its lawyers and local leaders as attorney-client privileged,” said Paul Rytting, the director of Risk Management, in a sealed affidavit. + +AN OMINOUS TIME + +Mormon leaders established the help line in 1995 and it operated not within its Department of Family Services, but instead in its Office of Risk Management, whose role is to protect the church and members from injury and liability in an array of circumstances, including fires, explosions, hazardous chemical spills and severe weather. The department ultimately reports to the First Presidency, the three officials at the very top of the church hierarchy, according to records in the sealed documents. + +Risk management also tracks all sex abuse lawsuits against the church, according to a sealed affidavit by Dwayne Liddell, a past director of the department who helped establish the help line. He said members of the church’s First Presidency knew the details of the help line. + +“I have been in those type of meetings where ... the training of ecclesiastical leaders (and) the establishment of a help line have been discussed,” Liddell said. When asked who attended the meetings, he answered, “Members of the First Presidency and the presiding bishopric,” or the top leaders of the church. + +Before establishing the help line in 1995, the Mormon church simply instructed bishops to comply with local child sex abuse reporting laws. + +At the time, child sex abuse lawsuits were on the rise and juries were awarding victims millions of dollars. The Mormon church is largely self-insured, leaving it especially vulnerable to costly lawsuits. + +“There is nothing inconsistent between identifying cases that may pose litigation risks to the church and complying with reporting obligations,” church lawyers said in a sealed legal filing. + +But one affidavit in the sealed records which repeatedly says the church condemns child sexual abuse, also suggests the church is more concerned about the spiritual well-being of perpetrators than the physical and emotional well-being of young victims, who also may be members of the faith. + +“Disciplinary proceedings are subject to the highest confidentiality possible,” said Rytting. “If members had any concerns that their disciplinary files could be read by a secular judge or attorneys or be presented to a jury as evidence in a public trial, their willingness to confess and repent and for their souls to be saved would be seriously compromised.” + +A GLOBAL INVESTIGATION + +In 2016 police in New Zealand arrested a 47-year-old farm worker on child pornography charges and found a nine-minute video on his cell phone, downloaded from the internet, showing a man in his 30s raping a 10-year-old girl. + +A global search for the rapist and his victim was on. It started with Interpol and led to the U.S. State Department, where investigators using facial recognition technology matched the rapist with a passport card photo of a U.S. Border Patrol employee living in Bisbee, Arizona, according to a Homeland Security synopsis obtained by the AP. + +Agents rushed to the Naco, Arizona, Border Station and arrested Adams, then a lanky, bearded mission support specialist with the Border Patrol. After some coaxing, Adams admitted to raping MJ and to sexually assaulting her younger sister, and to posting video of the assaults on the internet. When agents raided his home, they seized phones and computers holding more than 4,000 photos and nearly 1,000 videos depicting child sex abuse, many featuring the Adams daughters. + +But the nine-minute video stood out. “This video is one of the worst I’ve ever seen,” Homeland Security agent Edwards later testified, adding that haunting dialogue between Adams and his older daughter helped make the video “stand out in my mind and continue to stand out in my mind.” + +That video represented nine minutes and 14 seconds in seven years of continual and unnecessary trauma for MJ — and a lifetime of abuse for her tiny sister — while Bishops Herrod and Mauzy and church representatives in Salt Lake City stood by. + +After Paul Adams died by suicide, Leizza Adams pleaded no contest to child sex abuse charges and served two-and-a-half years in state prison. Three of the Adams children went to live with members of Leizza’s extended family in California. The other three were taken in by local families. + +THE SURVIVORS + +MJ’s little sister was only 2 when she met her adoptive mother for the first time. The toddler wrapped her arms and legs around Miranda Whitworth’s head, buried her face in her neck, and refused to look up to say good-bye to members of Leizza’s family. “It was the craziest thing,” said Whitworth who, with her husband, Matthew, welcomed the toddler into their family. “It was like when you see a baby monkey or baby gorilla cling to their mother, and they just won’t let go.” + +Over the next few days and weeks, the Whitworths would see additional markers of the unfathomable abuse the toddler endured at the hands of her father — much of it recorded on video. She would howl in terror when any man attempted to touch her, whether it was Matthew or the family physician. “The nurse was fine but the minute the doctor walked in she climbed onto me and started screaming bloody murder,” Miranda said. + +The 2-year-old was also terrified of the water, which made bathing an ear-splitting ordeal. She wouldn’t tolerate anything wrapped around her wrists. And at church, she would run and hide behind Miranda whenever anyone greeted her by an old family nickname. + +When they took in the toddler, neither Miranda nor Matthew knew very much about what had happened to her. But while sitting in on Leizza Adams’s sentencing hearing, they learned about the repeated rapes, the videos, and the fact that church bishops knew about the abuse of the older daughter and did nothing to stop it. + +The Whitworths were converts to the Mormon faith and, like many new followers of a religion, they were especially enthusiastic about The Church of Jesus Christ of Latter-day Saints. In particular, they appreciated the efforts Mormons make to help fellow church members in times of need through church organizations established to give special attention to women, teens and children. + +“It’s all about family,” Miranda said. “That’s one of the things we absolutely loved.” + +But after learning about what Adams did to their new daughter, and the failure of the church to stop him, the scales fell from their eyes. “We decided to remove our records from the church,” said Matthew Whitworth. “I personally couldn’t continue to provide tithing money to a church that would allow young children to be abused and not do anything to prevent it.” + +Unlike the Whitworths, Nancy Salminen has never been a member of the Mormon church. But as a special needs teacher and a rape victim herself, she has a special affinity for MJ and others like her. Over the last five years, she has opened her home to 17 girls and boys who needed a safe place to stay. Her house is a modest, ranch-style structure she bought out of foreclosure. + +“Everything’s a little broken here and that’s perfect because so are we,” she said. + +Salminen said she met MJ after receiving an urgent call on a Friday evening to rescue a 12-year-old from another family. “She was pretty scared and pretty confused when I picked her up,” Salminen recalled. “She spent a lot of time in her closet in her room when we got home, but we got to know each other and got to like each other.” + +Like the Whitworths, Salminen knew very little about what MJ had endured until Leizza Adams’s sentencing hearing. + +“What I heard made me want to throw up,” she said. “And the more I learned the more I wanted to help her fight this fight that she didn’t even know about.” + +Safely settled in Salminen’s household — which today includes a foster girl Salminen also plans to adopt — MJ has been transformed from a victim of unimaginable abuse to a bubbly 16-year-old who plays in the high school band and proudly dons a crisp, new uniform for her job at a fast-food restaurant. + +“She had every excuse to fail and to just fold into herself and run away,” Salminen said. “But instead, she came back stronger than anyone I’ve ever known.” + +So strong that she appears eager to play an active role in the battle she and her two siblings are waging against The Church of Jesus Christ of Latter-day Saints. “I just want them to do what they’re supposed to do and report to the police,” MJ said. + +The adoptive parents of the third Adams child who has filed suit declined to speak to the AP about the case. Like MJ, Miranda and Matthew Whitworth said they joined the lawsuit against the church on behalf of their young daughter not in hopes of a payday, but to change church policy so that any instance of child sexual abuse is immediately reported to civil authorities. “We just don’t understand why they’re paying all these lawyers to fight this,” Matthew Whitworth said. “Just change the policy.” + +THE PRIVILEGE + +That policy is the key to the church’s defense. In a recent filing asking a Superior Court judge to dismiss the case, Maledon and other lawyers for the church said the case “hinges entirely on whether Arizona’s child abuse reporting statute required two church bishops ... to report to authorities confidential confessions made to them by plaintiffs’ father.” + +Whatever moral or public policy arguments one could make that the church should have told authorities that Paul Adams was raping his daughters are irrelevant, the lawyers argued. “Arizona’s reporting statute broadly exempts confidential communications with clergy, as determined by the clergyman himself,” according to the church motion to dismiss the case. “Reasonable people can debate whether this is the best public policy choice. But that is not an issue for a jury or this court.” + +Bishop Herrod, in his recorded interview, said church officials told him he had to keep what Adams told him confidential or he could be sued if he went to authorities. + +But McIntyre, the Cochise County attorney, said that’s false, noting the Arizona reporting law says that anyone reporting a belief that child sex abuse occurred “is immune from any civil or criminal liability.” + +Aside from the legal arguments over whether Bishops Herrod and Mauzy were excused from their reporting obligations under the clergy-penitent privilege, critics of the inaction by the two bishops and the broader church have raised ethical issues. + +Gerard Moretz, a seasoned child sex abuse investigator for the Pima County, Arizona, Sheriff’s Department and an expert witness for the Adams children, is one of them. + +“What aspect of your religious practice are you advancing if you don’t report something like this?” he asked. + +\_\_\_ + +Associated Press editor Brady McCombs in Salt Lake City and investigative researcher Randy Herschaft in New York contributed to this story. + +To contact the AP’s investigations team, email investigative@ap.org. + +\_\_\_ + +Associated Press religion coverage receives support through the AP’s collaboration with The Conversation US, with funding from Lilly Endowment Inc. The AP is solely responsible for this content. + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/The Most Surveilled Place in America.md b/00.03 News/The Most Surveilled Place in America.md new file mode 100644 index 00000000..a1bab08c --- /dev/null +++ b/00.03 News/The Most Surveilled Place in America.md @@ -0,0 +1,209 @@ +--- + +Tag: ["Society", "US", "Immigration"] +Date: 2022-08-07 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2022-08-07 +Link: https://www.theverge.com/c/23203881/border-patrol-wall-surveillance-tech +location: +CollapseMetaTable: Yes + +--- + +Parent:: [[@News|News]] +Read:: No + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-TheMostSurveilledPlaceinAmericaNSave + +  + +# The Most Surveilled Place in America + +![](https://cdn.vox-cdn.com/csk/7213cdd3-52b6-4d15-82c6-73b0882b082c/e8b3ec22-a08c-49c6-a1da-3b7153c7e678/images/svg/cream_cross.svg) + +![](https://cdn.vox-cdn.com/csk/7213cdd3-52b6-4d15-82c6-73b0882b082c/e8b3ec22-a08c-49c6-a1da-3b7153c7e678/images/svg/its_unlikely_the.svg) It’s unlikely the hikers knew they were being watched. They had tried to blend in: all 11 were wearing camouflage with the intention of vanishing into the desert scrub. They were on a remote mountain trail on the outskirts of Ajo, Arizona, a former mining town of about 3,000 people just a few dozen miles north of the Mexican border. It was a warm November morning, still early enough in the day that the sun must have felt good on their skin — the air is cold up in the mountains, colder still in the dry desert winter, though the heat always finds you eventually. The sky was bright and endless, punctuated by just a few clouds. But even if the migrants looked closely, there’s no way they could have noticed the MQ-9 Predator B drone stalking them from 20,000 feet above. + +Nearly 150 miles away at the Davis-Monthan Air Force Base in Tucson, Arizona, the migrants were on display. Two Customs and Border Protection agents tracked the group from a cramped shipping container on base that was being used as a temporary ground control station. Each agent sat before five monitors: the pilot flew the drone while the camera operator focused on tracking the group’s movements. The 11 migrants appeared as small figures on a pair of screens, bright white smudges moving across a gray background. Their clothing may have helped them blend in with the cholla cacti and spiky ocotillo plants of the Sonoran Desert, but it couldn’t fool the Predator’s infrared camera. They had been betrayed by their own body heat. + +The migrants must have noticed the helicopter first: an EC-120 Colibrí, Spanish for “hummingbird.” Then came a pair of Border Patrol agents on foot. “On your tail, there’s another group of two, probably about 50 yards behind you,” the camera operator in Tucson told one of the ground agents by radio. + +Then he turned to me and explained what we were looking at. “That’s the agent,” he said, pointing at a vaguely person-shaped silhouette on one of the screens. He had to raise his voice so I could hear him over the endless hum of the servers that took up half the 16-by-20-foot room. “He just apprehended that guy, and that’s the group right there.” We watched as one member of the group tried to wrestle the Border Patrol agent. The others walked toward him, ready to give up. + + CBP agents monitor remote camera feeds from scores of cameras. + +From the shipping container, it was impossible to know anything about the group aside from what was visible on-screen. They could have been from Guatemala or El Salvador or Mexico or anywhere else. They could have been asylum seekers or drug runners or neither. Maybe it was their first time trekking through the desert; maybe it was their fifth. Maybe they were headed for Phoenix or Boston or for one of those tiny towns that have become Central American enclaves through the availability of agricultural jobs and word of mouth. These details were irrelevant to the CBP drone operators watching the migrants from Tucson, the Border Patrol agents tracking them through the mountains, and the crew following along in the helicopter. Their job was to find and apprehend anyone crossing the border illegally, no matter who they were. + +The agents on the ground would get more details: names, ages, nationalities. After that, the specifics would matter a little. If the hikers were carrying drugs, they’d be prosecuted. If they had been deported before, they could be charged with illegal reentry. But if this was their first time — if they were crossing the border for work or to reunite with family on the other side or because they were in danger in their country — they’d likely be sent back to Mexico, regardless of where they had come from. There would be no hearing before an immigration judge, no chance to plead their case. And if the migrants were really desperate, they might try to cross again. Maybe they’d choose a different route. If they were with a smuggler, he’d know which trails to take to avoid the network of hidden cameras and underground sensors that CBP has scattered throughout the desert — but that route would likely be more remote and more treacherous than the one they were already on. All the surveillance technology in the world won’t stop people from trying to cross the border; it’s an obstacle, not, as Customs and Border Protection would have you believe, a deterrent.  + +Every unauthorized crossing is a justification for more drones in the air and boots on the ground, but none of that will stop people from coming. It just means more migrants are dying. + +**P**resident Joe Biden promised that “not another foot of wall” would be built if he was elected president. Instead, his administration would use “high-tech capacity” to secure the border. Drones, cameras, and sensors would be more effective and more humane than a physical barrier, he claimed. What Biden’s promises ignored, however, is that the federal government has spent billions on border surveillance technology for the past three decades — and that despite these efforts and aside from a brief lull in crossings early in the pandemic, the number of unauthorized border crossings has gone up year after year. Since the ’90s, the question hasn’t been whether to fund border technology but how to get more of it. The fact that some migrants still make it across the border undetected — or that they attempt the journey at all — isn’t seen as a failure of technology or policy. Instead, it is used to justify more surveillance, more spending, and more manpower. + +I first traveled to Arizona to meet with groups that wanted Biden to not only reverse Trump’s policies and halt construction but also to [tear the wall down](https://www.motherjones.com/politics/2021/02/joe-biden-trump-border-wall/). The wall, they said, was an ecological and humanitarian catastrophe; leaving it up wasn’t an option. Early on in Biden’s presidency, it seemed like such things were possible: in his first few months in office, he had sent a [comprehensive immigration reform bill](https://www.whitehouse.gov/briefing-room/statements-releases/2021/01/20/fact-sheet-president-biden-sends-immigration-bill-to-congress-as-part-of-his-commitment-to-modernize-our-immigration-system/) to Congress and ended Trump-era policies like the Muslim ban and Remain in Mexico. His administration had created an exemption process to Title 42, a public health policy implemented in March 2020 that lets Border Patrol agents quickly send migrants back to Mexico without a hearing. It seemed like the Biden administration would end the policy altogether [last summer](https://www.axios.com/2021/06/20/scoop-white-house-eyes-ending-migrant-family-expulsion). + +When I first started reporting this story in the spring of 2021, there was a feeling of cautious optimism in the air — a feeling that, with the right prodding, Biden would usher in a more welcoming immigration system. By the time I first visited Arizona last summer, that feeling was mostly gone. Migrant deaths in the desert were on the rise for the second consecutive year, and no one in the federal government seemed to be doing anything about it. The previous summer had been the hottest and driest in the state’s history — and the deadliest for migrants in a decade. The Pima County Medical Examiner’s Office recovered remains of 227 suspected border crossers in the desert in 2020, and the summer of 2021 was on track to be just as fatal. By the time I arrived in Tucson, there were 137 known migrant deaths that year. Another 10 sets of human remains were recovered in the nine days I spent in Arizona.  + +There were a few theories as to why migrant deaths in Arizona had reached the highest rate since 2010. Some speculated that the border wall had pushed border crossers into more isolated, dangerous terrain. Advocates suggested that Title 42 was encouraging repeat attempts across the border, often through more remote paths. Greg Hess, the chief medical examiner for Pima County, said two consecutive years of [record-breaking summer heat](https://www.climate.gov/news-features/event-tracker/record-breaking-june-2021-heatwave-impacts-us-west) was likely a contributing factor. Triple-digit temperatures made the difficult, often fatal journey through the Sonoran Desert that much more so. Maybe it was policy. Maybe it was the weather. Maybe it was both. The common denominator in all these explanations was the inhospitality of the desert, the ruggedness of the landscape. + + A Border Patrol agent demonstrates the Lockheed Martin Indago-3, a smaller drone used to track migrants through the desert. + +On a sweltering day in mid-July, I drove through Organ Pipe Cactus National Monument with Laiken Jordahl, who, at the time, worked for the Center for Biological Diversity. Organ Pipe is a federal wildlife refuge, but the Trump administration waived environmental protection laws to get the wall built quickly. Jordahl is a born-and-raised Arizonan, an easygoing skater whose reverence for the desert is obvious. “This area by the wall was a cactus graveyard,” Jordahl, who previously worked for the National Park Service, told me. “Every single one of these that has an arm is probably 100 years old. A lot of the ones that were bulldozed for the wall were 150, 200 years old.” + +The construction crew hired to build Trump’s wall in Arizona had ripped century-old saguaros, which are protected under state law, out of the ground. They [blew up Monument Hill](https://theintercept.com/2020/02/27/border-wall-construction-organ-pipe-explosion/) — a mountain sacred to the Tohono O’odham people, whose ancestors lived in the Sonoran Desert for millennia before Arizona or the United States existed — to ease construction. They pumped so much groundwater to mix concrete for the wall’s foundation that the Quitobaquito Springs, the site of a former O’odham village and [the only source of freshwater for hundreds of miles](https://theintercept.com/2021/11/03/trump-border-wall-protest-amber-ortega/), were drying up. + +Trump’s wall was massive but not insurmountable. Videos had emerged of migrants [scaling the structure with ladders](https://www.texasmonthly.com/news-politics/trump-border-wall-ladders/) and smugglers [sawing through its steel bollards](https://www.washingtonpost.com/national/smugglers-are-sawing-through-new-sections-of-trumps-border-wall/2019/11/01/25bf8ce0-fa72-11e9-ac8c-8eced29ca6ef_story.html). That day at Organ Pipe, its floodgates were wide open; anyone could have walked right through. All it takes to get past the 30-foot, $15 billion wall is a 31-foot, $5 ladder — or, as several residents of Ajo would later tell me, keys to the gates, which cartels on the other side were rumored to have. The wall is the easiest part, and even then, it comes with its own set of risks. One recent study found that trauma centers in San Diego reported a fivefold increase in migrants with severe injuries from 2019, when the wall’s height increased to 30 feet, to 2021. In Arizona, once migrants get across the line dividing Mexico and the United States, they have to hike through the desert for days, often without enough food or water to survive the journey. No part of the journey is without risk, but avoiding detection is the deadliest part. + +Jordahl and I were the only people around that day, but there were signs that people had recently crossed through Organ Pipe. Every few miles, we’d see a matte black water jug; migrants carry them because they believe clear plastic jugs reflect the light too easily. A sign at the park’s entrance warns visitors that “smuggling and illegal immigration may be encountered in this area.” As Jordahl maneuvered my rental car down Organ Pipe’s winding dirt roads, we noticed a white pickup truck with Border Patrol’s telltale green stripe headed in our direction. The agent pulled up next to us, rolled his window down, and asked if we had been down in the brush. + +“We picked you up on one of the cameras and thought you might be a pair of illegals,” the agent told us. I hadn’t seen any cameras, but they had seen us. + +**F**our months after my July 2021 visit to Organ Pipe, I was on the other side of CBP’s vast surveillance apparatus. Over the course of two and a half days last fall, CBP showed me its helicopters and drones, the X-ray scanners it uses at ports of entry to detect drugs hidden in freight trucks and passenger vehicles, the rescue beacons scattered throughout the desert, its retrofitted Ford F-150s equipped with surveillance towers, the night vision helmets agents wear in the field, and a foul-smelling tunnel under Nogales that was once used to smuggle cocaine and meth. It also showed me a lot of PowerPoints. + +Border Patrol’s Tucson sector, which encompasses more than 90,000 square miles, is one of the most surveilled areas in the country. More than 3,000 agents work the sector. They man the 11 checkpoints stationed on major highways, where certain passengers are asked whether they’re a US citizen and every single person who passes through has their car’s license plate scanned and their face photographed. From dimly lit rooms in generic-looking office buildings, they monitor the thousands of cameras and sensors hidden throughout the desert. They patrol on foot, in trucks and SUVs, on horseback and ATVs, looking for contraband and unauthorized migrants. + +The Tucson sector is fortified by 229 miles of fencing, 118 of which were built during Trump’s presidency. The physical wall is supplemented by a “virtual wall” of at least 55 [Integrated Fixed Towers](https://theintercept.com/2019/08/25/border-patrol-israel-elbit-surveillance/) — 120- to 180-foot surveillance systems equipped with infrared cameras and a built-in radar — mobile surveillance trucks, game cameras, motion sensors, and drones. As of 2018, CBP has nine Predator drones, according to the Cato Institute. (It used to have 11, but two of them crashed. During the 2020 Black Lives Matter protests, DHS dispatched helicopters, planes, and drones to [surveil 15 American cities](https://www.nytimes.com/2020/06/19/us/politics/george-floyd-protests-surveillance.html), including George Floyd’s home of Minneapolis.)  + +On a mountaintop north of Nogales, an agent gave me a demonstration of one of the smaller drones: a Lockheed Martin Indago 3. Right before he launched the drone, an elderly man with a hiking stick approached us on the hillside. He told us he lived in one of the houses down below and stayed long enough to watch the drone take off. After he left, we used the drone to follow him all the way down. + +“The idea is that if enough people get hurt, they’ll stop coming.” + +Border Patrol’s most powerful tool is not its fleet of drones and helicopters — it’s the desert itself. Since the mid-1990s, the agency has relied on a strategy called “prevention through deterrence” to reduce unauthorized border crossings. The idea is simple: if you put more manpower and surveillance technology in highly trafficked areas, including big border cities like Nogales, migrants will have no choice but to travel through “more hostile terrain, less suited for crossing and more suited for enforcement,” as Border Patrol’s 1994 strategic plan stated. + +“Early on, they were like, ‘If we’re going to do this, people are going to get hurt,’” Jason De León, an anthropology professor at UCLA and author of *The Land of Open Graves: Living and Dying on the Migrant Trail*, told me. “But the idea is that if enough people get hurt, they’ll stop coming.” + +The policy was a partial success. Migrants did stop crossing through big border cities. But the underlying problem — the fact that people want or need to come to the United States but have few, if any, legal avenues for doing so — persisted, and so did unauthorized crossings. Instead of discouraging migrants from making the journey to the US altogether, prevention through deterrence pushed them into more inhospitable areas. Crossings through the Sonoran Desert skyrocketed. What was once a quick hop over a border fence turned into a multiday trek through the desert. In 1994, the year prevention through deterrence went into effect, the Pima County Medical Examiner’s Office logged four migrant deaths in Arizona; 10 years later, that figure was 186. + +The death tolls of the summers of 2020 and 2021 were exceptionally high, but migrant deaths in the Arizona borderlands are far from unusual. It’s common knowledge in Arizona that every year, at least 100 people will lose their lives trying to make it to the United States. Most of these fatalities [happen on the Tohono O’odham Nation’s tribal lands](https://www.indianz.com/News/2017/10/27/cronkite-news-tohono-oodham-nation-consi.asp); CBP has responded to this crisis by installing [surveillance towers](https://theintercept.com/2019/08/25/border-patrol-israel-elbit-surveillance/) on the reservation, but the crossings and deaths haven’t stopped. Humanitarian aid groups do their best to prevent these deaths from happening: some dispatch search and rescue teams to look for migrants who have gone missing in the desert; others leave water jugs and other supplies on migrant trails in the hopes that they’ll save a life. When those efforts fail, they attempt to [log all the](https://humaneborders.info/app/map.asp) remains they find and identify the deceased. Despite their dedication, these groups lack the resources, manpower, and legal might of the federal government. Members of No More Deaths have been [arrested for leaving water in the desert](https://www.nytimes.com/2020/02/05/us/tucson-border-activists-conviction-reversed.html) and [accused of harboring migrants](https://www.theguardian.com/us-news/2019/nov/20/arizona-activist-migrants-trial-scott-warren). Two O’odham women were sent to a medium-security prison after being arrested for protesting wall construction on their ancestral land. The government isn’t just using its resources to surveil and arrest migrants; it’s also going after the people who might save their lives. + +**B**order Patrol’s Tucson sector headquarters has all the hallmarks of a government office building: harsh fluorescent lighting, wall-to-wall carpet, and a few small kitchens stocked with stale coffee and single-serving creamer. Photos of Border Patrol agents mounted on horseback and rappelling from helicopters line the walls. From a glass-walled conference room overlooking the parking lot, Steve Atkinson, the sector’s deputy chief, talked me through “some numbers and some statistics”: encounters of migrant families were up 186 percent from the previous fiscal year; rescues of migrants in distress had increased by 358 percent, though some of that could be attributed to a change in how “rescues” are reported, he explained. Still, the majority of people crossing through the Tucson sector were single adults. + +“We don’t get a lot of asylum claims,” Atkinson said. “That’s not the population we deal with.” + +Instead, the typical migrant who crosses through the Tucson sector is “dressed in head-to-toe camouflage, purposefully trying to avoid detection,” Atkinson continued. “On his shoes, he wears carpet booties: makeshift boots with carpet glued to the bottom,” which migrants believe helps conceal their footprints. Tucson, Atkinson emphasized, is not Del Rio, Texas, where Border Patrol agents on horseback [charged at Haitian asylum seekers and their young children](https://www.texastribune.org/2021/09/20/border-patrol-texas-del-rio/). + +Tucson sector officials used similar talking points in a 2021 interview with [CNN](https://www.cnn.com/2021/05/18/politics/border-patrol-tucson-arizona/index.html), causing the network to claim migrants who pass through the area use “military-style tactics” to avoid being caught. The camo clothing and the carpet shoes — the latter of which border crossers have donned for well over a decade — were presented as evidence that migrants were storming the border like an invading army. + +The business of migrant smuggling is as old as the border itself, but the enterprise has become hyper-professionalized over the past two decades. Several Border Patrol agents I spoke to noted the decline of so-called “mom and pop” migrant guides. Now smugglers either work directly for the drug cartels that control virtually all illicit business in northern Mexico, or they pay the cartels a tax — which comes directly from the fees migrants pay the smugglers — in order to pass through their territory unharmed. + +Most of the migrants who arrive at the border have no other way of getting to the United States. Few legal avenues exist for those who want to move to the US for work. Asylum seekers have no way of applying for protection from their home country; they must arrive in the US in order to do so. There’s no “line” for most people to get in — arriving at the border is the only option, even though most people who do so now end up getting expelled to Mexico or elsewhere.  + + The border wall in Nogales, Ariz. has a number of anti-personnel features. + +The lack of legal migration opportunities has been a windfall for two seemingly disparate groups: the smugglers, increasingly tied to cartels, who migrants hire to get them across the border; and the military and technology contractors who are paid billions to develop tools to catch migrants who try to get through the desert. Between 2008 and 2020, ICE and CBP issued more than $55 billion in contracts for detention, “smart border” technologies, and surveillance tools, a [report](https://www.immigrantdefenseproject.org/wp-content/uploads/smart_borders_humane_world_2021.pdf) by the Immigrant Defense Project found. The migrant smuggling industry is much more difficult to quantify, but one 2018 United Nations report [estimated](https://www.texastribune.org/2019/03/07/migration-us-border-generating-billions-smugglers/) its worldwide worth as somewhere between $5.7 and $7 billion. The two industries — one licit and one illicit — need each other to function. Both exist because legal migration is nearly impossible. + +For the cartels, migrants and drugs are different versions of the same thing: a commodity to move across the desert. The biggest difference is that, unlike drugs, it doesn’t matter to them whether migrants get to their final destination in one piece. Most border crossers pay up-front; if they get injured or die, or if Border Patrol catches them and sends them back across the line, that’s their problem and no one else’s. The Border Patrol agents and the humanitarian aid volunteers I spoke with disagree on just about everything, but both groups acknowledge that migrants who get injured or are too slow get left behind by their smugglers. + +“People often get confused and think we’re just the immigration police. As you can see, that’s not a migrant right there,” Atkinson said, showing me a picture of a group of drug runners. “I don’t think you want that in Albany, New York. If we don’t do what we do on a daily basis, who’s going to stop that from getting to Atlanta, Georgia? Who’s going to stop that from getting to a kid’s school?” When I asked what percentage of people apprehended in the Tucson sector were carrying drugs, Atkinson said there’s no way to know for sure. “I would say 99 percent are not smugglers,” he said, “but they’re still trying to get away and evade detection.” + +Sometimes smugglers will offer migrants a “deal” of a few hundred or thousand dollars off their fee if they agree to carry a backpack full of drugs with them. Sometimes the coyotes or polleros, as the smugglers are often called, will guide migrants to their final destinations; other times, their work is done the second the migrant makes it across the line. From that point on, they’re on their own. + +“In years past, we would have smugglers accompanying them,” Atkinson said. “We would have a group of 10, 15, 30, and the coyote would take them across.” Now migrants travel in smaller groups, and smugglers increasingly guide their clients remotely, via cell phone, if they guide them at all. Atkinson showed me a photo of a mountain pass with a bright green line crudely drawn on it. “This is something that we stole — that we got — from one of the phones they had used,” he said. A migrant had gotten lost, took a picture of his surroundings, texted his guide, and received an annotated picture showing him the path in response. “Which looks easy enough,” Atkinson said, “until you get up there and realize that’s 4,500 feet elevation. They’ve got to drop to 70 feet elevation, then go back up 6,500 feet to avoid detection.” + +It’s impossible for migrants to carry all the supplies they need to make it through the desert. Water, the most essential resource, is also the heaviest. Border crossers should drink at least two gallons of water per day to stave off dehydration, and a full gallon jug weighs just under eight and a half pounds. “Once we catch somebody,” Atkinson said, “they’ve spent a week in the desert.” + +**F**or more than two years, Title 42 has created a two-tiered migration system along the border. Some migrants try their hand at crossing, hiring a smuggler to guide them through — or, increasingly, to tell them how to get across — the rugged terrain of the Sonoran Desert. If they’re caught by Border Patrol and expelled to Mexico, they might try again. So far, during the 2022 fiscal year, which began last October, CBP reported 195,112 encounters in the Tucson sector, 79 percent of which resulted in expulsions. Other migrants have found themselves stranded in Mexico, either after being expelled or because they know there’s no way they’ll survive the journey across the border, where they wait for Title 42 to be lifted. The policy has turned Mexican border cities into waiting rooms for US-bound asylum seekers, some of whom have spent months living in shelters, rented apartments they share with other migrants, or on the streets, awaiting Title 42’s end. + +I met Andrea at one such shelter in Sonoyta, Mexico, just across the border from Lukeville, Arizona. The smuggler she hired to get her and her three children across the border last November told her they’d only have to walk for 40 minutes. “It turned into hours — three, four hours walking with my children,” she said. Andrea carried her youngest, who was just four years old at the time. Her 12-year-old daughter and 10-year-old son walked alongside them. They brought a little bit of water but no food, supplies, or extra clothing. They were freezing. The smuggler had them cross around midnight, and desert winters are unexpectedly cold. + +Border Patrol found Andrea and her children around 3AM and detained them until sunrise. By the next morning, Andrea and her children were back in Sonoyta. + +It was Andrea’s second failed attempt across the border, and it cost her $6,000. She had fled Honduras two months earlier with her children after she was harassed by a prominent member of her community and threatened for speaking out against him. Andrea, a single mother, found herself in an impossible position: she could stay in Honduras, where she feared for her children’s safety, or she could leave the only home she had ever known. (Andrea asked to be referred to by a pseudonym to protect her from retaliation and to not jeopardize the asylum case she hopes to file if she’s allowed into the US.) + +Before ending up in Sonoyta, Andrea and her children went to Matamoros, Mexico — across the border from Brownsville, Texas — where she found a smuggler who said he could get her and her children into the US. That attempt cost her $14,000. She told me she borrowed the money from someone in Honduras and promised to pay them back as soon as she found work. After walking for a couple of hours, Andrea used her cell phone to call Border Patrol, assuming they would help her once she explained that she was seeking asylum. + +The Sonoran Desert isn’t an untouched wilderness. It’s a massive unmarked grave. + +Andrea and her children spent the next week in a Border Patrol facility in Texas. She hardly slept for seven days — the rooms were cold, the blankets they had been given were made of thin, crinkly mylar, and her two oldest children had been taken to different cells. Every time Andrea tried to tell an agent she was seeking asylum, she was ignored. And then, one day, without any warning, she and her children were put on a bus and driven to an airport. She saw signs saying they were in Houston but had no idea where they would end up. “We got on the plane without knowing where we were going,” she said. “They don’t tell you where they’re taking you — just, ‘Get on, go.’” A few hours later, they were in Arizona. + +A Border Patrol bus drove Andrea, her children, and a group of other migrants from Phoenix to Nogales, where they were taken across the border to Mexico. Since March 2020, the federal government has used Title 42 to turn away most unauthorized immigrants who arrive at the border. These expulsions are intended to limit the “introduction or spread” of a communicable disease into the US, and in theory, they’re supposed to be done quickly. But since last January, the government of the Mexican state of Tamaulipas has [forbidden](https://www.americanimmigrationcouncil.org/research/guide-title-42-expulsions-border) expulsions of families with children aged seven or younger. Instead of allowing these families into the country to seek asylum, CBP has been “laterally” expelling them to other parts of the border. Put simply, when the agency can’t quickly expel migrants — which proponents of Title 42 say it needs to do for public health reasons — it detains them for prolonged periods of time, flies them across the country, and throws them out anyway. All told, Andrea and her children spent more than a week in Border Patrol custody and were expelled to a city more than a thousand miles away from where they had first crossed. + +“They just leave you there, thrown on the street without any idea what to do and with no money in your pocket,” she said. Andrea and her children spent the night with a group of migrants in a rented motel room. The next morning, a few women told her they met someone who promised to get them across the border — for a price. She called the person in Honduras who had lent her the money and asked if she could borrow more; she was desperate. + +The smuggler took the migrants to Caborca, two and a half hours southwest of Nogales. From there, they were taken to a beach town in western Sonora, then to an abandoned house in Sonoyta, right on the border with Arizona. Andrea said she and her children were kept in the house for about a week. When the smugglers finally let her go, they told her the journey across the desert would be quick. + +It only took a few hours for Border Patrol to find Andrea. If they hadn’t found her, she and her children might have walked for days or even weeks. One of the concrete walls in the migrant shelter where Andrea stayed hung the Pina County Medical Examiner’s map, which shows how long and dangerous the journey actually is. It’s a two-day walk to Ajo and two and a half weeks to get to Phoenix. The map is covered in hundreds of red dots, each representing a person who died along the way. A caption on the map’s upper-left corner pleads: “Don’t go! There isn’t enough water! It’s not worth it!” + +**A**t least once a week, Bob Kee goes on a hike with the intention of saving lives. Carrying gallon jugs of water and plastic bags stuffed with calorie-dense snacks — peanuts, cans of Vienna sausages, small pouches of gummy candies — Kee and other members of the Tucson Samaritans hike the same trails migrants traverse on their journeys north. Sometimes, Kee will come across people in need of help: dehydrated migrants who have been in the sun for too long, weary travelers with blisters on their feet and little food in their bellies. Water is the scarcest and most precious resource in the desert. For migrants, it’s often the difference between life and death. + +“To encounter someone is so serendipitous because you’ve got all this stuff for miles and miles, and then you happen to be at the same place at the same time as someone,” Kee told me on a humid mid-July day. We were on a trail outside Arivaca, a town of about 700 people located 60 miles south of Tucson and just north of the Mexican border. Kee gave me a walking stick and asked if I could carry a gallon of water in my other hand. It would be an easy hike, he said, just five miles round-trip. We ducked under branches and dropped rocks in the creek to cross without getting our shoes wet. Kee made small talk to keep my energy up, telling me about how he loves The Beatles, especially their 1969 album *Abbey Road*. At 72, he’s still an avid hiker, and it’s hard to keep up with him even though I can tell he’s going slow for my benefit. It rained earlier in the day, and the trail is slippery with mud. + +Sometimes, Kee doesn’t see a soul on his hikes. Even then, the signs of clandestine passage through the desert were everywhere: discarded packets of electrolyte powder, hastily torn open bags of jerky, tubes of applesauce emptied of every drop. Migrants try their best to pass through the desert undetected, but they can’t help leaving things behind. And sometimes, Kee or one of the many other Arizonans who have dedicated their free time to keeping migrants alive will encounter someone long after it’s too late to help them. + +We didn’t see anyone that day, but Kee told me about the people he’s encountered on other hikes. He interrupted himself often, pausing a story about a mother and daughter from Guerrero or a Salvadoran woman he used to visit in ICE detention to point out the hidden beauty of the desert: century-old saguaros with six arms, a single red flower blooming on the tip of an ocotillo plant. Once, he said, he came across a group of nine people who wanted to give up and turn themselves in to Border Patrol. “We waited for three and a half hours,” he said. In the meantime, they ran into a pair of birders who were looking for a small, puffy bird that only comes out at night. They stayed out until a quarter after eight — on a desert trail with no artificial light — waiting for Border Patrol, but the agents never came. + +During my two days of meetings with Border Patrol, every agent and official I spoke with claimed they respond to every single emergency call they receive. “We don’t want anybody to die,” said Jesus Vasavilbaso, an agent who was raised on the other side of the border in Nogales, Sonora. Border Patrol has 34 rescue beacons installed in the western edge of the Sonoran Desert. Each beacon has a sign in three languages — English, Spanish, and Tohono O’odham — explaining its purpose. “If you need help, push the red button. Rescue personnel will arrive shortly to help you. Do not leave this area.”  + +Vasavilbaso said the beacons are used less frequently now that most migrants have cell phones. The agency advises migrants to call 911 — rather than relatives, friends, or advocacy groups — if they get lost in the desert, and Border Patrol often publishes [press](https://www.cbp.gov/newsroom/local-media-release/video-release-air-and-marine-operations-black-hawk-rescue-baboquivari) [releases](https://www.cbp.gov/newsroom/local-media-release/video-release-air-and-marine-operations-aircraft-locate-and-rescue-lost) detailing its rescues of migrants in distress. + +But a [report](http://www.thedisappearedreport.org/uploads/8/3/5/1/83515082/left_to_die_-_english.pdf) from No More Deaths, another humanitarian aid group that leaves water in the desert, found that Border Patrol didn’t conduct search and rescue mobilizations in 63 percent of cases between 2015 and 2019. No More Deaths found “significant patterns of negligence” in 37 percent of the search and rescue missions that were conducted. + +The government’s relationship with humanitarian aid groups like No More Deaths and the Samaritans is often antagonistic. There’s evidence that Border Patrol agents [vandalize](https://www.theguardian.com/us-news/2018/jan/17/us-border-patrol-sabotage-aid-migrants-mexico-arizona) food, blankets, and water jugs that volunteers leave in the desert, sometimes slashing the jugs so the water pours out. Volunteers [have been arrested](https://www.nytimes.com/2020/02/05/us/tucson-border-activists-conviction-reversed.html) for leaving water jugs in the desert. Four No More Deaths volunteers were charged with operating a motor vehicle in a wilderness area, entering a wildlife refuge without a permit, and abandonment of property for leaving water in the Cabeza Prieta National Wildlife Refuge. “All of this, in addition to violating the law, erodes the national decision to maintain the Refuge in its pristine nature,” the federal judge who convicted them wrote in his decision. + +The desert — even in federally protected wildlife refuges like Cabeza Prieta and Organ Pipe — is far from pristine. There are hidden cameras and sensors everywhere. There’s detritus left behind by migrants passing through and tracks left by Border Patrol’s off-road vehicles. The signs of human movement through the desert are impossible to miss; so is the evidence of the government’s expensive, futile attempt to stop people from crossing.  + +The one thing that’s invisible to the untrained eye is the presence of the people making the journey. Those who make it go to great lengths to not be seen. Those who don’t — the ones who succumb to the elements despite their best efforts — often disappear into the landscape before they can be found. De León, the anthropologist, is the executive director of the Colibrí Center for Human Rights, an organization that helps locate migrants who have gone missing in the desert. In 2012, De León was part of a team of researchers who killed three pigs, dressed them in clothes similar to what migrants wear, and placed them in the desert. Their goal was to see how long it would take for the sun, sand, and scavenging animals to claim the pigs’ bodies. After a few days, turkey vultures feasted on their carcass. After five weeks, the researchers were only able to find 62 percent of one of the pigs’ skeletons. “With enough time,” De León wrote, “a person left to rot on the ground can disappear completely.” The Sonoran Desert isn’t an untouched wilderness. It’s a massive unmarked grave. + + The US border wall rips across undulating hills south of Arivaca. + +**F**ourteen years before Border Patrol first tested out its deterrence strategy, a group of war refugees from El Salvador set out across the Sonoran Desert hoping to find a safe haven in the United States. Dora Rodriguez, just 19 years old at the time, was among them. It was 1980, a year into El Salvador’s brutal civil war. Rodriguez and her fellow travelers fled their country hoping to make new lives — and, really, to avoid death — in the United States. Rodriguez and her cousin paid $1,300 each for the promise that it would be a quick, painless journey. That was a lie. They were part of a group of two dozen Salvadoran exiles, all middle-class people who could afford to pay the smuggler’s fee. + +Some of the ladies [wore high-heeled shoes](https://indiancountrytoday.com/news/landless-mayans-coups-and-death-squads); other members of the group carried rolling suitcases filled with nice clothing, toiletries, and cologne. Some of the women in the group would be reuniting with husbands who had made it to the United States and dressed up for the occasion. None of them were prepared for the harshness of the Sonoran Desert, for the way their feet would blister and swell after days of interminable walking. Nobody knew how hot it would get during the day — temperatures surpassed 110 degrees — or how frigid the nights could be. It felt like every single piece of the landscape — the punishing sun, the towering saguaro and organ pipe cacti, the spiky cholla shrubs, the coyotes, and turkey buzzards — had been designed to kill them.  + +“One of the compañeras had rollers in her hair so she would be ready,” Rodriguez told me, “and she died with her rollers in.” + +They had no idea where they were. The desert can have that effect on people; all you see in any direction is the orange dirt and bright blue sky. Shrewd travelers know which landmarks to look out for or which mountain to keep to their right if they want to walk north, but no one in Rodriguez’s group had that information. Their guide had abandoned them. They were only given a gallon of water each. People started to get sick, delirious from the heat and dehydration. They started to unpack, spreading their clothing over the desert shrubs so they could lie in the shade. A few people went to look for help and never came back. Thirteen of the migrants succumbed to the elements, dying of exposure. According to media reports from the time, the survivors drank aftershave, liquid deodorant, and the juice of nearby cacti to stay alive. + +“I never got asylum,” Rodriguez told me as we drove down to Sasabe, Sonora, where her organization Salvavision runs Casa de la Esperanza, a resource center for migrants.  + +She ended up marrying a US citizen, which gave her the ability to get a green card and, eventually, citizenship. Shortly after settling in the US, she got involved with the nascent Sanctuary Movement, a group of churches that tried to shield Central American asylum seekers from deportation. Over nearly four decades, she’s sponsored asylum seekers and let them stay in her home, gotten involved with the Samaritans, and participated in the occasional protest or water drop. But in 2015, after Trump announced his candidacy, Rodriguez became a full-time activist. “For six years now, it’s been nonstop,” she said. “They’re killing us.” + +Rodriguez noticed the Border Patrol bus in her rearview mirror. From our vantage point, it was hard to tell how many migrants were in the vehicle, but Rodriguez had a good idea of what was happening. The migrants were being expelled back to Mexico, either to Nogales or Sasabe. Rodriguez always drives the speed limit or just under it, making her a rarity among Arizona drivers I encountered. The bus sped past us. + + Dora Rodriguez showcases hand embroidered textiles from one of the women who works at Casa de la Esperanza helping deported migrants in Sasabe, Sonora Mexico. + +As we made our way toward the border, Rodriguez told me about the recent challenges Casa de la Esperanza had faced. The organization’s goal isn’t just to help migrants make it to the US but to give them the tools to stay home if they can. They have an embroidery program where women in Central America get paid to make blouses and other crafts that are then sold in Tucson — it works for people whose main concern is poverty. But higher wages can’t help people living amid cartel or gang violence.  + +Casa de la Esperanza had also tried setting up a service for migrants who wanted to turn back. They hired a local driver in Sasabe to take migrants back to Altar, a city about an hour and 45 minutes south of Sasabe that’s the first stop for migrants en route to the US via Arizona. Rodriguez said they had to stop after an armed man showed up at Casa de la Esperanza one day demanding to know where a certain migrant had gone. The service, called Regresa a Casa — Spanish for “Return Home” — is running again but only for migrants who never hired a smuggler. “There’s a lot of danger for us,” Rodriguez said. “We’re taking away their ‘merchandise,’ so to speak.”  + +There were only a handful of people at the resource center when we got there, none of whom were migrants. Two of the five women there were employees; the rest were Sasabe locals who were volunteering with the group. From the outset, Rodriguez wanted Casa de la Esperanza to be more than a place for migrants who were just passing through; she also wanted it to be a hub for members of the community, a place where women could stop by to chat or have a cup of coffee. + +The daughter of one of the resource center workers told Rodriguez that a group of migrants had come by earlier in the day but left quickly. They had been expelled with their guide, and the smuggler had no interest in what Casa de la Esperanza was offering. While we talked, a new group of a dozen migrants arrived. They anxiously huddled in a semicircle in the building’s backyard, checking their phones to see if their smuggler had contacted them.  + +“The normal Fourth Amendment rights for search and seizure do not apply here.” + +It was clear that the migrants had barely made it across the line before Border Patrol caught and expelled them. They seemed nervous but didn’t look tired; their clothes were clean, free of the dirt, sweat stains, and cactus burrs that would have accumulated if they’d made it onto the mountain trails. Their encounter with Border Patrol left them shaken up, but they hadn’t experienced the worst of the desert yet.  + +They stayed long enough for Rodriguez and the other volunteers to ask where they were from. In clipped accents betraying indigenous ancestry, one member of the group said they were from Chiapas, a state in southern Mexico bordering Guatemala. The volunteers gave each migrant a small nylon bag stuffed with winter clothes and a blanket. As soon as their smuggler called, they left. The scrambled eggs one of the volunteers had just finished cooking were fed to the shelter’s three-legged dog so they wouldn’t go to waste. + +I have no idea what happened next. There were [13,084 Title 42 expulsions in the Tucson sector](https://www.cbp.gov/newsroom/stats/southwest-land-border-encounters-by-component) in December, the month I visited Casa de la Esperanza. The 12 migrants from Chiapas comprised just a tiny fraction of that number. Maybe they got a little further on their second try and ended up trekking through the mountains. Maybe they came across a few gallons of water left behind by someone from the Samaritans or No More Deaths, which gave them the strength to keep going for a few hours. Maybe one of them got injured, and another member of the group stayed behind while the others looked for help. Maybe they never came back. Maybe they tripped a sensor or were picked up on a game camera, and Border Patrol found them again. Maybe they were expelled into Mexico, but maybe they weren’t.  + +Just over 2,600 people Border Patrol encountered in the Tucson sector that month were paroled into the country; more than half of them were unaccompanied children. Among the single adults, there were 370 Mexican nationals. Maybe the 12 migrants who stopped by Casa de la Esperanza on that warm December afternoon were among them. + + Rodriguez, left, pulls out Christmas decorations. + +**T**here are a few things I know for certain. Nearly every person I met in southern Arizona told me they keep a few gallon jugs of water in their car, just in case they happen to come across a migrant in distress on the side of the road. I started doing the same, but I never saw anyone; maybe I wasn’t looking hard enough. In the middle of my first trip to Arizona, I got pulled over by a Border Patrol agent on the road to Lukeville. I had six gallons of water in my trunk and, in the backseat, a pair of carpet shoes that Kee had found on a previous hike and given me to remember my trip. I hadn’t thought to hide the shoes or the water; I didn’t feel like I had anything to hide. But the longer the Border Patrol agent spoke to me, the more I worried about the items in my backseat and what they could signal. His aggressive line of questioning seemed designed to catch me in a lie. I felt at once defensive and scared, like any wrong answer would lead to him searching my car and arresting me. + +As the desert has become more difficult to cross, the people who dedicate their free time to saving migrant lives have been increasingly surveilled and criminalized. Giving a thirsty person water isn’t illegal in and of itself, but the most mundane acts of kindness take on highly political meaning in the borderlands. As one Customs and Border Protection agent told me while giving me a tour of the Mariposa port of entry in Nogales, “the normal Fourth Amendment rights for search and seizure do not apply here.” The same technology used to track migrants through the desert is used to monitor the members of humanitarian aid groups, the comings and goings of anyone who drives north on a highway in Arizona, and of people protesting police violence in Minneapolis and Buffalo.  + +When I toured a Border Patrol office in November, a big TV in the corner was set to Fox News. An anchor talked about how the agency was hemorrhaging agents because of low morale. The Biden administration had ushered in all these changes, the segment claimed; Border Patrol agents felt like their job description changed overnight. Instead of apprehending migrants, they were being told to welcome them. But really, very little has actually changed.   + +Summer is here again; the rising temperatures will likely contribute to a rise in deaths. Earlier this summer, more than 60 migrants climbed into the back of a hot, un-air conditioned tractor trailer, only to be [abandoned by their smuggler](https://www.texastribune.org/2022/07/02/mexico-texas-honduras-migrants-san-antonio/) just outside San Antonio. Fifty-three of them died; the youngest was 13 years old. + +Even now, nearly a year after my first visit, the dynamics I witnessed are still more or less the same. It’s hard to reckon with all this loss of life, with the knowledge that this happens by design, with the reality that this happens year after year with no end in sight. + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/While Britain burns, the Tories are … fiddling with themselves again Marina Hyde.md b/00.03 News/While Britain burns, the Tories are … fiddling with themselves again Marina Hyde.md new file mode 100644 index 00000000..0c79bdf6 --- /dev/null +++ b/00.03 News/While Britain burns, the Tories are … fiddling with themselves again Marina Hyde.md @@ -0,0 +1,62 @@ +--- + +Tag: ["Politics", "UK", "Tories"] +Date: 2022-08-07 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2022-08-07 +Link: https://www.theguardian.com/commentisfree/2022/jul/15/britain-burns-tories-leadership-contest +location: +CollapseMetaTable: Yes + +--- + +Parent:: [[@News|News]] +Read:: No + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-WhileBritainburnstheToriesareNSave + +  + +# While Britain burns, the Tories are … fiddling with themselves again | Marina Hyde + +I do hope you’re enjoying the triennial Conservative party leadership contest, which has frequently resembled tipping-out time at [Arkham Asylum](https://batman.fandom.com/wiki/Arkham_Asylum). Various insane claims have been made – “Rishi Sunak is a socialist”, “Only Liz Truss can save Brexit now” – and the UK remains very much in search of a costumed vigilante to rescue it. Boris Johnson insists he will leave Downing Street “with my head held high”. But by who? Which of our hopefuls will be grasping that severed noggin by the famously unkempt hair, and roaring something totally questionable about public service? + +We’ve already said goodbye to historical footnotes such as Jeremy Hunt; footnotes’ footnotes, such as Rehman Chishti; and verrucas on the footnotes, such as Suella Braverman. Making all the running is supposed cleanskin [Penny Mordaunt](https://www.theguardian.com/politics/2022/jul/14/rival-camps-uk-tory-leadership-race-aim-fire-penny-mordaunt), whose ascent from comparative obscurity to the office of prime minister would be like an arranged marriage, giving the British public and Penny all the time in the world to get to know each other after the event. The scale of the knifing operation against Mordaunt is laid bare by the [anonymous briefing](https://twitter.com/hzeffman/status/1547621878264504322?s=20&t=9SM32Eeja6JmsLTnsJn_GA) that she would make Andrea Leadsom her chancellor of the exchequer. I hear what you’re thinking: Andrea Leadsom? Chancellor? IN THIS ECONOMY?! But yes. Of course, *of course*. The second I heard it, given the experience of the past few years, I realised that I had long ago subconsciously accepted the inevitability that Andrea Leadsom hadn’t actually finished with us. In fact, I think I’ve … always known it. + +Anyway: on to Rishi Sunak, who, having once been relatively adored, is now about as popular with Tory members as shingles or contemporary art. Sunak is the sort of guy who wouldn’t have even tried a joint at university because he already wanted to go into politics: “Can’t risk it, mate.” He has the air of someone who has spent most of his adult life in a permanent state of path-plotting and calculation – yet was somehow unable to spot the biggest possible bear trap: his [wife’s non-dom status](https://www.theguardian.com/politics/2022/apr/06/rishi-sunaks-wife-claims-non-domicile-status). The best thing Sunak did this week was to patronise Johnson in a manner that will have sent the latter absolutely up the wall, declaring that the outgoing PM “[has a good heart](https://www.bbc.co.uk/news/uk-politics-62136098)”. Oof. Three weeks ago Johnson was telling people he’d be [in power till 2030](https://www.ft.com/content/4711150d-1d2d-417d-a14b-9a0c4fb1d8f3); this week, yesterday’s man was being firmly shunted into “he has a good heart” corner. Though not one of the truly great sports, politics – like tennis, or the various American ones – can be very watchable. + +Next up: Liz Truss, who [got lost](https://www.independent.co.uk/tv/news/liz-truss-tory-leadership-lost-b2123193.html) trying to exit the room in which her launch was held. Asked how she felt about trailing to Sunak and Mordaunt, [she ventured](https://twitter.com/AdamBienkov/status/1547510151132979200): “I’ve been focused on making sure Vladimir Putin is defeated.” Mm. But look – she’s still fighting for this title. And fighting dirty, according to the other campaigns. Indeed, there has been much talk about the so-called “dark arts”. I must say I have a slight issue with the term “art” in this context. Just as sledging is supposed to be an “art form” that can be mastered by any Australian cricketer who can call someone a fat prick, so the “dark arts” are something at which Gavin Williamson can be regarded as a virtuoso. + +The backdrop to all this is the government apparently [grinding to a halt](https://www.theguardian.com/politics/2022/jul/14/dominic-raab-priti-patel-absent-ministers-bill-of-rights). Johnson seems likely to bin off next week’s PMQs for a foreign visit, if he can find a country that will have him. Priti Patel this week refused to honour a scheduled appearance before the home affairs committee. Why bother? It was a question that led Dominic Raab to the same conclusion, as the justice secretary subsequently said he couldn’t make next Wednesday’s committee to discuss his dubious bill of rights. + +The [last time](https://www.theguardian.com/commentisfree/2019/mar/29/tory-leadership-contest-brexit-conservative-party) the Conservatives indulged in one of their leadership contests, during the Brexit wars of 2019, I thought it was a bit like that plaster cast victim from Pompeii who looks like he died masturbating. Volcanologists [say it’s unlikely](https://www.complex.com/life/2017/07/pompeii-masturbator-meme) that’s what he was doing, but we are in the realm of metaphor here. There’s a great river of molten horror approaching, but hey – let’s just crack out a nice, long, frenzied leadership contest. + +This time round, it feels like one of those movie scenes when the phone rings while the hero is involved in a life-or-death car chase. Because it’s the movies, the hero takes the call, usually with some version of the immortal cliche: “Sorry, I’m a little busy right now …” Something similar is happening to the country. As we speed further into the hideous known unknowns of various crises, the Conservative party is blithely dialling in with a two-month leadership contest that is apparently unrelated to reality. + +When I hear that the candidates made time this week to speak to the [Common Sense Group](https://bylinetimes.com/2021/09/14/ready-for-a-culture-war-meet-the-common-sense-conservative-mps-behind-the-anti-woke-manifesto/) of Tory MPs, who are obsessed with things like statues and the interpretation of British history, it would have been nice to think at least one of them had a sufficient sense of occasion to utter the words: “Sorry, I’m a little busy right now….” Honestly, is the cost of living crisis over? It had better be. Because I think we all need to know that Britain is on the immediate cusp of unprecedented prosperity before we can excuse any potential PMs spending so much as one nanosecond talking to some wingnuts about the culture wars. This is mad. No one – NO ONE – should have time for this stuff right now. It’s like the Republicans spending the buildup to the Iraq war making sure the French fries in the Congressional cafeterias were renamed “freedom fries”. + +Their own Commons chamber is leaking to the point of occasional closure, this week saw a [four-day fire](https://www.bbc.co.uk/news/uk-england-wiltshire-62153403) on Salisbury Plain, and [temperatures of 40C](https://www.theguardian.com/uk-news/2022/jul/14/uk-heatwave-nhs-braced-as-minister-says-temperatures-could-hit-40c) are forecast for next week. I’m not sure how much more the gods of metaphor can do to make the situation readable for these people. Let’s face it, they did pestilence for the past two years and got nowhere. + +To pluck a question that actually matters from the full banquet of them currently pressing on the nation: why can’t people see their GPs? Does any of the candidates want to talk about that material reality for much of the population? No. Instead we are subjected to endless speeches about how this or that person’s record of “delivery” speaks for itself. Oh right: *delivery*. I mean, look around you. They have delivered THIS. All they do is break eggs, but you never get an omelette. As we settle into the third [Conservative leadership](https://www.theguardian.com/politics/conservative-leadership) contest in just over six years, which will guarantee our fourth prime minister in the same time period, it increasingly feels as though the key question for the millions not focused on reality-avoidance is: “Where is our omelette? WHERE IS OUR FRICKING OMELETTE?” + +- Marina Hyde is a Guardian columnist + + +What Just Happened?! by Marina Hyde (Guardian Faber Publishing, £20). To support The Guardian and Observer, order your copy at [guardianbookshop.com](https://www.guardianbookshop.com/what-just-happened-9781783352593?utm_source=editoriallink&utm_medium=merch&utm_campaign=article). Delivery charges may apply. + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/01.01 Life Orga/@Finances.md b/01.01 Life Orga/@Finances.md index 68ea707e..aa2b4fb3 100644 --- a/01.01 Life Orga/@Finances.md +++ b/01.01 Life Orga/@Finances.md @@ -116,7 +116,8 @@ hide task count   -- [ ] :heavy_dollar_sign: [[@Finances]]: update crypto prices within Obsidian 🔼 🔁 every month on the 2nd Tuesday 📅 2022-08-09 +- [ ] :heavy_dollar_sign: [[@Finances]]: update crypto prices within Obsidian 🔼 🔁 every month on the 2nd Tuesday 📅 2022-09-13 +- [x] :heavy_dollar_sign: [[@Finances]]: update crypto prices within Obsidian 🔼 🔁 every month on the 2nd Tuesday 📅 2022-08-09 ✅ 2022-08-07 - [x] :heavy_dollar_sign: [[@Finances]]: update crypto prices within Obsidian 🔼 🔁 every month on the 2nd Tuesday 📅 2022-07-12 ✅ 2022-07-10 - [x] [[@Finances]]: update crypto prices within Obsidian 🔼 🔁 every month on the 2nd Tuesday 📅 2022-06-14 ✅ 2022-06-14 - [x] [[@Finances]]: update crypto prices within Obsidian 🔼 🔁 every month on the 2nd Tuesday 📅 2022-05-10 ✅ 2022-05-07 diff --git a/01.02 Home/Household.md b/01.02 Home/Household.md index ff647937..385575d9 100644 --- a/01.02 Home/Household.md +++ b/01.02 Home/Household.md @@ -109,7 +109,8 @@ This section on different household obligations. - [ ] 🛎 🛍 REMINDER [[Household]]: Monthly shop in France 🔁 every month on the last Saturday 🛫 2022-08-01 📅 2022-08-27 - [x] 🛎 🛍 REMINDER [[Household]]: Monthly shop in France 🔁 every month on the last Saturday 🛫 2022-07-04 📅 2022-07-30 ✅ 2022-07-29 - [x] 🛎 🛍 REMINDER [[Household]]: Monthly shop in France 🔁 every month on the last Saturday 🛫 2022-05-30 📅 2022-06-25 ✅ 2022-06-24 -- [ ] 🛎 🧻 REMINDER [[Household]]: check need for toilet paper 🔁 every week 📅 2022-08-08 +- [ ] 🛎 🧻 REMINDER [[Household]]: check need for toilet paper 🔁 every week 📅 2022-08-15 +- [x] 🛎 🧻 REMINDER [[Household]]: check need for toilet paper 🔁 every week 📅 2022-08-08 ✅ 2022-08-06 - [x] 🛎 🧻 REMINDER [[Household]]: check need for toilet paper 🔁 every week 📅 2022-08-01 ✅ 2022-07-31 - [x] 🛎 🧻 REMINDER [[Household]]: check need for toilet paper 🔁 every week 📅 2022-07-25 ✅ 2022-07-23 - [x] 🛎 🧻 REMINDER [[Household]]: check need for toilet paper 🔁 every week 📅 2022-07-18 ✅ 2022-07-15 diff --git a/05.02 Networks/Configuring UFW.md b/05.02 Networks/Configuring UFW.md index 9c0ce63a..01770b17 100644 --- a/05.02 Networks/Configuring UFW.md +++ b/05.02 Networks/Configuring UFW.md @@ -237,7 +237,8 @@ sudo bash /etc/addip4ban/addip4ban.sh #### Ban List Tasks -- [ ] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-08-06 +- [ ] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-08-13 +- [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-08-06 ✅ 2022-08-05 - [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-07-30 ✅ 2022-07-29 - [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-07-23 ✅ 2022-07-22 - [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-07-16 ✅ 2022-07-15 @@ -258,7 +259,8 @@ sudo bash /etc/addip4ban/addip4ban.sh - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-04-02 ✅ 2022-04-02 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-03-26 ✅ 2022-03-26 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-03-19 ✅ 2022-03-18 -- [ ] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-08-06 +- [ ] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-08-13 +- [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-08-06 ✅ 2022-08-05 - [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-07-30 ✅ 2022-07-29 - [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-07-23 ✅ 2022-07-22 - [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-07-16 ✅ 2022-07-15 diff --git a/06.02 Investments/Crypto Tasks.md b/06.02 Investments/Crypto Tasks.md index fad09f30..0cf240da 100644 --- a/06.02 Investments/Crypto Tasks.md +++ b/06.02 Investments/Crypto Tasks.md @@ -72,7 +72,8 @@ All tasks and to-dos Crypto-related. [[#^Top|TOP]]   -- [ ] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-08-05 +- [ ] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-08-12 +- [x] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-08-05 ✅ 2022-08-07 - [x] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-07-29 ✅ 2022-07-29 - [x] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-07-22 ✅ 2022-07-22 - [x] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-07-15 ✅ 2022-07-15 diff --git a/06.02 Investments/Equity Tasks.md b/06.02 Investments/Equity Tasks.md index a09f3c93..f26f51ad 100644 --- a/06.02 Investments/Equity Tasks.md +++ b/06.02 Investments/Equity Tasks.md @@ -72,7 +72,8 @@ Note summarising all tasks and to-dos for Listed Equity investments. [[#^Top|TOP]]   -- [ ] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-08-05 +- [ ] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-08-12 +- [x] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-08-05 ✅ 2022-08-07 - [x] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-07-29 ✅ 2022-07-29 - [x] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-07-22 ✅ 2022-07-22 - [x] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-07-15 ✅ 2022-07-15 diff --git a/06.02 Investments/VC Tasks.md b/06.02 Investments/VC Tasks.md index 2cdf4eef..39dd933a 100644 --- a/06.02 Investments/VC Tasks.md +++ b/06.02 Investments/VC Tasks.md @@ -72,7 +72,8 @@ Tasks and to-dos for VC investments. [[#^Top|TOP]]   -- [ ] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-08-05 +- [ ] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-08-12 +- [x] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-08-05 ✅ 2022-08-07 - [x] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-07-29 ✅ 2022-07-29 - [x] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-07-22 ✅ 2022-07-22 - [x] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-07-15 ✅ 2022-07-15