Fix File
•
/
home
/
sportsfe...
/
httpdocs
/
clone
/
wp-inclu...
/
js
/
dist
•
File:
components.js
•
Content:
ArrowDown(event) { event.preventDefault(); dispatch({ type: ToggleButtonKeyDownArrowDown, getItemNodeFromIndex, shiftKey: event.shiftKey }); }, ArrowUp(event) { event.preventDefault(); dispatch({ type: ToggleButtonKeyDownArrowUp, getItemNodeFromIndex, shiftKey: event.shiftKey }); } }), [dispatch, getItemNodeFromIndex]); const menuKeyDownHandlers = (0,external_React_.useMemo)(() => ({ ArrowDown(event) { event.preventDefault(); dispatch({ type: MenuKeyDownArrowDown, getItemNodeFromIndex, shiftKey: event.shiftKey }); }, ArrowUp(event) { event.preventDefault(); dispatch({ type: MenuKeyDownArrowUp, getItemNodeFromIndex, shiftKey: event.shiftKey }); }, Home(event) { event.preventDefault(); dispatch({ type: MenuKeyDownHome, getItemNodeFromIndex }); }, End(event) { event.preventDefault(); dispatch({ type: MenuKeyDownEnd, getItemNodeFromIndex }); }, Escape() { dispatch({ type: MenuKeyDownEscape }); }, Enter(event) { event.preventDefault(); dispatch({ type: MenuKeyDownEnter }); }, ' '(event) { event.preventDefault(); dispatch({ type: MenuKeyDownSpaceButton }); } }), [dispatch, getItemNodeFromIndex]); // Action functions. const toggleMenu = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionToggleMenu$1 }); }, [dispatch]); const closeMenu = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionCloseMenu$1 }); }, [dispatch]); const openMenu = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionOpenMenu$1 }); }, [dispatch]); const setHighlightedIndex = (0,external_React_.useCallback)(newHighlightedIndex => { dispatch({ type: FunctionSetHighlightedIndex$1, highlightedIndex: newHighlightedIndex }); }, [dispatch]); const selectItem = (0,external_React_.useCallback)(newSelectedItem => { dispatch({ type: FunctionSelectItem$1, selectedItem: newSelectedItem }); }, [dispatch]); const reset = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionReset$2 }); }, [dispatch]); const setInputValue = (0,external_React_.useCallback)(newInputValue => { dispatch({ type: FunctionSetInputValue$1, inputValue: newInputValue }); }, [dispatch]); // Getter functions. const getLabelProps = (0,external_React_.useCallback)(labelProps => ({ id: elementIds.labelId, htmlFor: elementIds.toggleButtonId, ...labelProps }), [elementIds]); const getMenuProps = (0,external_React_.useCallback)(function (_temp, _temp2) { let { onMouseLeave, refKey = 'ref', onKeyDown, onBlur, ref, ...rest } = _temp === void 0 ? {} : _temp; let { suppressRefError = false } = _temp2 === void 0 ? {} : _temp2; const latestState = latest.current.state; const menuHandleKeyDown = event => { const key = normalizeArrowKey(event); if (key && menuKeyDownHandlers[key]) { menuKeyDownHandlers[key](event); } else if (isAcceptedCharacterKey(key)) { dispatch({ type: MenuKeyDownCharacter, key, getItemNodeFromIndex }); } }; const menuHandleBlur = () => { // if the blur was a result of selection, we don't trigger this action. if (shouldBlurRef.current === false) { shouldBlurRef.current = true; return; } const shouldBlur = !mouseAndTouchTrackersRef.current.isMouseDown; /* istanbul ignore else */ if (shouldBlur) { dispatch({ type: MenuBlur }); } }; const menuHandleMouseLeave = () => { dispatch({ type: MenuMouseLeave$1 }); }; setGetterPropCallInfo('getMenuProps', suppressRefError, refKey, menuRef); return { [refKey]: handleRefs(ref, menuNode => { menuRef.current = menuNode; }), id: elementIds.menuId, role: 'listbox', 'aria-labelledby': elementIds.labelId, tabIndex: -1, ...(latestState.isOpen && latestState.highlightedIndex > -1 && { 'aria-activedescendant': elementIds.getItemId(latestState.highlightedIndex) }), onMouseLeave: callAllEventHandlers(onMouseLeave, menuHandleMouseLeave), onKeyDown: callAllEventHandlers(onKeyDown, menuHandleKeyDown), onBlur: callAllEventHandlers(onBlur, menuHandleBlur), ...rest }; }, [dispatch, latest, menuKeyDownHandlers, mouseAndTouchTrackersRef, setGetterPropCallInfo, elementIds, getItemNodeFromIndex]); const getToggleButtonProps = (0,external_React_.useCallback)(function (_temp3, _temp4) { let { onClick, onKeyDown, refKey = 'ref', ref, ...rest } = _temp3 === void 0 ? {} : _temp3; let { suppressRefError = false } = _temp4 === void 0 ? {} : _temp4; const toggleButtonHandleClick = () => { dispatch({ type: ToggleButtonClick$1 }); }; const toggleButtonHandleKeyDown = event => { const key = normalizeArrowKey(event); if (key && toggleButtonKeyDownHandlers[key]) { toggleButtonKeyDownHandlers[key](event); } else if (isAcceptedCharacterKey(key)) { dispatch({ type: ToggleButtonKeyDownCharacter, key, getItemNodeFromIndex }); } }; const toggleProps = { [refKey]: handleRefs(ref, toggleButtonNode => { toggleButtonRef.current = toggleButtonNode; }), id: elementIds.toggleButtonId, 'aria-haspopup': 'listbox', 'aria-expanded': latest.current.state.isOpen, 'aria-labelledby': `${elementIds.labelId} ${elementIds.toggleButtonId}`, ...rest }; if (!rest.disabled) { toggleProps.onClick = callAllEventHandlers(onClick, toggleButtonHandleClick); toggleProps.onKeyDown = callAllEventHandlers(onKeyDown, toggleButtonHandleKeyDown); } setGetterPropCallInfo('getToggleButtonProps', suppressRefError, refKey, toggleButtonRef); return toggleProps; }, [dispatch, latest, toggleButtonKeyDownHandlers, setGetterPropCallInfo, elementIds, getItemNodeFromIndex]); const getItemProps = (0,external_React_.useCallback)(function (_temp5) { let { item, index, onMouseMove, onClick, refKey = 'ref', ref, disabled, ...rest } = _temp5 === void 0 ? {} : _temp5; const { state: latestState, props: latestProps } = latest.current; const itemHandleMouseMove = () => { if (index === latestState.highlightedIndex) { return; } shouldScrollRef.current = false; dispatch({ type: ItemMouseMove$1, index, disabled }); }; const itemHandleClick = () => { dispatch({ type: ItemClick$1, index }); }; const itemIndex = getItemIndex(index, item, latestProps.items); if (itemIndex < 0) { throw new Error('Pass either item or item index in getItemProps!'); } const itemProps = { disabled, role: 'option', 'aria-selected': `${itemIndex === latestState.highlightedIndex}`, id: elementIds.getItemId(itemIndex), [refKey]: handleRefs(ref, itemNode => { if (itemNode) { itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode; } }), ...rest }; if (!disabled) { itemProps.onClick = callAllEventHandlers(onClick, itemHandleClick); } itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove); return itemProps; }, [dispatch, latest, shouldScrollRef, elementIds]); return { // prop getters. getToggleButtonProps, getLabelProps, getMenuProps, getItemProps, // actions. toggleMenu, openMenu, closeMenu, setHighlightedIndex, selectItem, reset, setInputValue, // state. highlightedIndex, isOpen, selectedItem, inputValue }; } const InputKeyDownArrowDown = false ? 0 : 0; const InputKeyDownArrowUp = false ? 0 : 1; const InputKeyDownEscape = false ? 0 : 2; const InputKeyDownHome = false ? 0 : 3; const InputKeyDownEnd = false ? 0 : 4; const InputKeyDownEnter = false ? 0 : 5; const InputChange = false ? 0 : 6; const InputBlur = false ? 0 : 7; const MenuMouseLeave = false ? 0 : 8; const ItemMouseMove = false ? 0 : 9; const ItemClick = false ? 0 : 10; const ToggleButtonClick = false ? 0 : 11; const FunctionToggleMenu = false ? 0 : 12; const FunctionOpenMenu = false ? 0 : 13; const FunctionCloseMenu = false ? 0 : 14; const FunctionSetHighlightedIndex = false ? 0 : 15; const FunctionSelectItem = false ? 0 : 16; const FunctionSetInputValue = false ? 0 : 17; const FunctionReset$1 = false ? 0 : 18; const ControlledPropUpdatedSelectedItem = false ? 0 : 19; var stateChangeTypes$1 = /*#__PURE__*/Object.freeze({ __proto__: null, InputKeyDownArrowDown: InputKeyDownArrowDown, InputKeyDownArrowUp: InputKeyDownArrowUp, InputKeyDownEscape: InputKeyDownEscape, InputKeyDownHome: InputKeyDownHome, InputKeyDownEnd: InputKeyDownEnd, InputKeyDownEnter: InputKeyDownEnter, InputChange: InputChange, InputBlur: InputBlur, MenuMouseLeave: MenuMouseLeave, ItemMouseMove: ItemMouseMove, ItemClick: ItemClick, ToggleButtonClick: ToggleButtonClick, FunctionToggleMenu: FunctionToggleMenu, FunctionOpenMenu: FunctionOpenMenu, FunctionCloseMenu: FunctionCloseMenu, FunctionSetHighlightedIndex: FunctionSetHighlightedIndex, FunctionSelectItem: FunctionSelectItem, FunctionSetInputValue: FunctionSetInputValue, FunctionReset: FunctionReset$1, ControlledPropUpdatedSelectedItem: ControlledPropUpdatedSelectedItem }); function getInitialState$1(props) { const initialState = getInitialState$2(props); const { selectedItem } = initialState; let { inputValue } = initialState; if (inputValue === '' && selectedItem && props.defaultInputValue === undefined && props.initialInputValue === undefined && props.inputValue === undefined) { inputValue = props.itemToString(selectedItem); } return { ...initialState, inputValue }; } const propTypes$1 = { items: (prop_types_default()).array.isRequired, itemToString: (prop_types_default()).func, getA11yStatusMessage: (prop_types_default()).func, getA11ySelectionMessage: (prop_types_default()).func, circularNavigation: (prop_types_default()).bool, highlightedIndex: (prop_types_default()).number, defaultHighlightedIndex: (prop_types_default()).number, initialHighlightedIndex: (prop_types_default()).number, isOpen: (prop_types_default()).bool, defaultIsOpen: (prop_types_default()).bool, initialIsOpen: (prop_types_default()).bool, selectedItem: (prop_types_default()).any, initialSelectedItem: (prop_types_default()).any, defaultSelectedItem: (prop_types_default()).any, inputValue: (prop_types_default()).string, defaultInputValue: (prop_types_default()).string, initialInputValue: (prop_types_default()).string, id: (prop_types_default()).string, labelId: (prop_types_default()).string, menuId: (prop_types_default()).string, getItemId: (prop_types_default()).func, inputId: (prop_types_default()).string, toggleButtonId: (prop_types_default()).string, stateReducer: (prop_types_default()).func, onSelectedItemChange: (prop_types_default()).func, onHighlightedIndexChange: (prop_types_default()).func, onStateChange: (prop_types_default()).func, onIsOpenChange: (prop_types_default()).func, onInputValueChange: (prop_types_default()).func, environment: prop_types_default().shape({ addEventListener: (prop_types_default()).func, removeEventListener: (prop_types_default()).func, document: prop_types_default().shape({ getElementById: (prop_types_default()).func, activeElement: (prop_types_default()).any, body: (prop_types_default()).any }) }) }; /** * The useCombobox version of useControlledReducer, which also * checks if the controlled prop selectedItem changed between * renders. If so, it will also update inputValue with its * string equivalent. It uses the common useEnhancedReducer to * compute the rest of the state. * * @param {Function} reducer Reducer function from downshift. * @param {Object} initialState Initial state of the hook. * @param {Object} props The hook props. * @returns {Array} An array with the state and an action dispatcher. */ function useControlledReducer(reducer, initialState, props) { const previousSelectedItemRef = (0,external_React_.useRef)(); const [state, dispatch] = useEnhancedReducer(reducer, initialState, props); // ToDo: if needed, make same approach as selectedItemChanged from Downshift. (0,external_React_.useEffect)(() => { if (isControlledProp(props, 'selectedItem')) { if (previousSelectedItemRef.current !== props.selectedItem) { dispatch({ type: ControlledPropUpdatedSelectedItem, inputValue: props.itemToString(props.selectedItem) }); } previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem; } }); return [getState(state, props), dispatch]; } // eslint-disable-next-line import/no-mutable-exports let validatePropTypes$1 = downshift_esm_noop; /* istanbul ignore next */ if (false) {} const defaultProps$1 = { ...defaultProps$3, getA11yStatusMessage: getA11yStatusMessage$1, circularNavigation: true }; /* eslint-disable complexity */ function downshiftUseComboboxReducer(state, action) { const { type, props, shiftKey } = action; let changes; switch (type) { case ItemClick: changes = { isOpen: getDefaultValue$1(props, 'isOpen'), highlightedIndex: getDefaultValue$1(props, 'highlightedIndex'), selectedItem: props.items[action.index], inputValue: props.itemToString(props.items[action.index]) }; break; case InputKeyDownArrowDown: if (state.isOpen) { changes = { highlightedIndex: getNextWrappingIndex(shiftKey ? 5 : 1, state.highlightedIndex, props.items.length, action.getItemNodeFromIndex, props.circularNavigation) }; } else { changes = { highlightedIndex: getHighlightedIndexOnOpen(props, state, 1, action.getItemNodeFromIndex), isOpen: props.items.length >= 0 }; } break; case InputKeyDownArrowUp: if (state.isOpen) { changes = { highlightedIndex: getNextWrappingIndex(shiftKey ? -5 : -1, state.highlightedIndex, props.items.length, action.getItemNodeFromIndex, props.circularNavigation) }; } else { changes = { highlightedIndex: getHighlightedIndexOnOpen(props, state, -1, action.getItemNodeFromIndex), isOpen: props.items.length >= 0 }; } break; case InputKeyDownEnter: changes = { ...(state.isOpen && state.highlightedIndex >= 0 && { selectedItem: props.items[state.highlightedIndex], isOpen: getDefaultValue$1(props, 'isOpen'), highlightedIndex: getDefaultValue$1(props, 'highlightedIndex'), inputValue: props.itemToString(props.items[state.highlightedIndex]) }) }; break; case InputKeyDownEscape: changes = { isOpen: false, highlightedIndex: -1, ...(!state.isOpen && { selectedItem: null, inputValue: '' }) }; break; case InputKeyDownHome: changes = { highlightedIndex: getNextNonDisabledIndex(1, 0, props.items.length, action.getItemNodeFromIndex, false) }; break; case InputKeyDownEnd: changes = { highlightedIndex: getNextNonDisabledIndex(-1, props.items.length - 1, props.items.length, action.getItemNodeFromIndex, false) }; break; case InputBlur: changes = { isOpen: false, highlightedIndex: -1, ...(state.highlightedIndex >= 0 && action.selectItem && { selectedItem: props.items[state.highlightedIndex], inputValue: props.itemToString(props.items[state.highlightedIndex]) }) }; break; case InputChange: changes = { isOpen: true, highlightedIndex: getDefaultValue$1(props, 'highlightedIndex'), inputValue: action.inputValue }; break; case FunctionSelectItem: changes = { selectedItem: action.selectedItem, inputValue: props.itemToString(action.selectedItem) }; break; case ControlledPropUpdatedSelectedItem: changes = { inputValue: action.inputValue }; break; default: return downshiftCommonReducer(state, action, stateChangeTypes$1); } return { ...state, ...changes }; } /* eslint-enable complexity */ /* eslint-disable max-statements */ useCombobox.stateChangeTypes = stateChangeTypes$1; function useCombobox(userProps) { if (userProps === void 0) { userProps = {}; } validatePropTypes$1(userProps, useCombobox); // Props defaults and destructuring. const props = { ...defaultProps$1, ...userProps }; const { initialIsOpen, defaultIsOpen, items, scrollIntoView, environment, getA11yStatusMessage, getA11ySelectionMessage, itemToString } = props; // Initial state depending on controlled props. const initialState = getInitialState$1(props); const [state, dispatch] = useControlledReducer(downshiftUseComboboxReducer, initialState, props); const { isOpen, highlightedIndex, selectedItem, inputValue } = state; // Element refs. const menuRef = (0,external_React_.useRef)(null); const itemRefs = (0,external_React_.useRef)({}); const inputRef = (0,external_React_.useRef)(null); const toggleButtonRef = (0,external_React_.useRef)(null); const comboboxRef = (0,external_React_.useRef)(null); const isInitialMountRef = (0,external_React_.useRef)(true); // prevent id re-generation between renders. const elementIds = useElementIds(props); // used to keep track of how many items we had on previous cycle. const previousResultCountRef = (0,external_React_.useRef)(); // utility callback to get item element. const latest = downshift_esm_useLatestRef({ state, props }); const getItemNodeFromIndex = (0,external_React_.useCallback)(index => itemRefs.current[elementIds.getItemId(index)], [elementIds]); // Effects. // Sets a11y status message on changes in state. useA11yMessageSetter(getA11yStatusMessage, [isOpen, highlightedIndex, inputValue, items], { isInitialMount: isInitialMountRef.current, previousResultCount: previousResultCountRef.current, items, environment, itemToString, ...state }); // Sets a11y status message on changes in selectedItem. useA11yMessageSetter(getA11ySelectionMessage, [selectedItem], { isInitialMount: isInitialMountRef.current, previousResultCount: previousResultCountRef.current, items, environment, itemToString, ...state }); // Scroll on highlighted item if change comes from keyboard. const shouldScrollRef = useScrollIntoView({ menuElement: menuRef.current, highlightedIndex, isOpen, itemRefs, scrollIntoView, getItemNodeFromIndex }); useControlPropsValidator({ isInitialMount: isInitialMountRef.current, props, state }); // Focus the input on first render if required. (0,external_React_.useEffect)(() => { const focusOnOpen = initialIsOpen || defaultIsOpen || isOpen; if (focusOnOpen && inputRef.current) { inputRef.current.focus(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); (0,external_React_.useEffect)(() => { if (isInitialMountRef.current) { return; } previousResultCountRef.current = items.length; }); // Add mouse/touch events to document. const mouseAndTouchTrackersRef = useMouseAndTouchTracker(isOpen, [comboboxRef, menuRef, toggleButtonRef], environment, () => { dispatch({ type: InputBlur, selectItem: false }); }); const setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getComboboxProps', 'getMenuProps'); // Make initial ref false. (0,external_React_.useEffect)(() => { isInitialMountRef.current = false; }, []); // Reset itemRefs on close. (0,external_React_.useEffect)(() => { if (!isOpen) { itemRefs.current = {}; } }, [isOpen]); /* Event handler functions */ const inputKeyDownHandlers = (0,external_React_.useMemo)(() => ({ ArrowDown(event) { event.preventDefault(); dispatch({ type: InputKeyDownArrowDown, shiftKey: event.shiftKey, getItemNodeFromIndex }); }, ArrowUp(event) { event.preventDefault(); dispatch({ type: InputKeyDownArrowUp, shiftKey: event.shiftKey, getItemNodeFromIndex }); }, Home(event) { if (!latest.current.state.isOpen) { return; } event.preventDefault(); dispatch({ type: InputKeyDownHome, getItemNodeFromIndex }); }, End(event) { if (!latest.current.state.isOpen) { return; } event.preventDefault(); dispatch({ type: InputKeyDownEnd, getItemNodeFromIndex }); }, Escape(event) { const latestState = latest.current.state; if (latestState.isOpen || latestState.inputValue || latestState.selectedItem || latestState.highlightedIndex > -1) { event.preventDefault(); dispatch({ type: InputKeyDownEscape }); } }, Enter(event) { const latestState = latest.current.state; // if closed or no highlighted index, do nothing. if (!latestState.isOpen || latestState.highlightedIndex < 0 || event.which === 229 // if IME composing, wait for next Enter keydown event. ) { return; } event.preventDefault(); dispatch({ type: InputKeyDownEnter, getItemNodeFromIndex }); } }), [dispatch, latest, getItemNodeFromIndex]); // Getter props. const getLabelProps = (0,external_React_.useCallback)(labelProps => ({ id: elementIds.labelId, htmlFor: elementIds.inputId, ...labelProps }), [elementIds]); const getMenuProps = (0,external_React_.useCallback)(function (_temp, _temp2) { let { onMouseLeave, refKey = 'ref', ref, ...rest } = _temp === void 0 ? {} : _temp; let { suppressRefError = false } = _temp2 === void 0 ? {} : _temp2; setGetterPropCallInfo('getMenuProps', suppressRefError, refKey, menuRef); return { [refKey]: handleRefs(ref, menuNode => { menuRef.current = menuNode; }), id: elementIds.menuId, role: 'listbox', 'aria-labelledby': elementIds.labelId, onMouseLeave: callAllEventHandlers(onMouseLeave, () => { dispatch({ type: MenuMouseLeave }); }), ...rest }; }, [dispatch, setGetterPropCallInfo, elementIds]); const getItemProps = (0,external_React_.useCallback)(function (_temp3) { let { item, index, refKey = 'ref', ref, onMouseMove, onMouseDown, onClick, onPress, disabled, ...rest } = _temp3 === void 0 ? {} : _temp3; const { props: latestProps, state: latestState } = latest.current; const itemIndex = getItemIndex(index, item, latestProps.items); if (itemIndex < 0) { throw new Error('Pass either item or item index in getItemProps!'); } const onSelectKey = 'onClick'; const customClickHandler = onClick; const itemHandleMouseMove = () => { if (index === latestState.highlightedIndex) { return; } shouldScrollRef.current = false; dispatch({ type: ItemMouseMove, index, disabled }); }; const itemHandleClick = () => { dispatch({ type: ItemClick, index }); }; const itemHandleMouseDown = e => e.preventDefault(); return { [refKey]: handleRefs(ref, itemNode => { if (itemNode) { itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode; } }), disabled, role: 'option', 'aria-selected': `${itemIndex === latestState.highlightedIndex}`, id: elementIds.getItemId(itemIndex), ...(!disabled && { [onSelectKey]: callAllEventHandlers(customClickHandler, itemHandleClick) }), onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove), onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown), ...rest }; }, [dispatch, latest, shouldScrollRef, elementIds]); const getToggleButtonProps = (0,external_React_.useCallback)(function (_temp4) { let { onClick, onPress, refKey = 'ref', ref, ...rest } = _temp4 === void 0 ? {} : _temp4; const toggleButtonHandleClick = () => { dispatch({ type: ToggleButtonClick }); if (!latest.current.state.isOpen && inputRef.current) { inputRef.current.focus(); } }; return { [refKey]: handleRefs(ref, toggleButtonNode => { toggleButtonRef.current = toggleButtonNode; }), id: elementIds.toggleButtonId, tabIndex: -1, ...(!rest.disabled && { ...({ onClick: callAllEventHandlers(onClick, toggleButtonHandleClick) }) }), ...rest }; }, [dispatch, latest, elementIds]); const getInputProps = (0,external_React_.useCallback)(function (_temp5, _temp6) { let { onKeyDown, onChange, onInput, onBlur, onChangeText, refKey = 'ref', ref, ...rest } = _temp5 === void 0 ? {} : _temp5; let { suppressRefError = false } = _temp6 === void 0 ? {} : _temp6; setGetterPropCallInfo('getInputProps', suppressRefError, refKey, inputRef); const latestState = latest.current.state; const inputHandleKeyDown = event => { const key = normalizeArrowKey(event); if (key && inputKeyDownHandlers[key]) { inputKeyDownHandlers[key](event); } }; const inputHandleChange = event => { dispatch({ type: InputChange, inputValue: event.target.value }); }; const inputHandleBlur = () => { /* istanbul ignore else */ if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) { dispatch({ type: InputBlur, selectItem: true }); } }; /* istanbul ignore next (preact) */ const onChangeKey = 'onChange'; let eventHandlers = {}; if (!rest.disabled) { eventHandlers = { [onChangeKey]: callAllEventHandlers(onChange, onInput, inputHandleChange), onKeyDown: callAllEventHandlers(onKeyDown, inputHandleKeyDown), onBlur: callAllEventHandlers(onBlur, inputHandleBlur) }; } return { [refKey]: handleRefs(ref, inputNode => { inputRef.current = inputNode; }), id: elementIds.inputId, 'aria-autocomplete': 'list', 'aria-controls': elementIds.menuId, ...(latestState.isOpen && latestState.highlightedIndex > -1 && { 'aria-activedescendant': elementIds.getItemId(latestState.highlightedIndex) }), 'aria-labelledby': elementIds.labelId, // https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion // revert back since autocomplete="nope" is ignored on latest Chrome and Opera autoComplete: 'off', value: latestState.inputValue, ...eventHandlers, ...rest }; }, [dispatch, inputKeyDownHandlers, latest, mouseAndTouchTrackersRef, setGetterPropCallInfo, elementIds]); const getComboboxProps = (0,external_React_.useCallback)(function (_temp7, _temp8) { let { refKey = 'ref', ref, ...rest } = _temp7 === void 0 ? {} : _temp7; let { suppressRefError = false } = _temp8 === void 0 ? {} : _temp8; setGetterPropCallInfo('getComboboxProps', suppressRefError, refKey, comboboxRef); return { [refKey]: handleRefs(ref, comboboxNode => { comboboxRef.current = comboboxNode; }), role: 'combobox', 'aria-haspopup': 'listbox', 'aria-owns': elementIds.menuId, 'aria-expanded': latest.current.state.isOpen, ...rest }; }, [latest, setGetterPropCallInfo, elementIds]); // returns const toggleMenu = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionToggleMenu }); }, [dispatch]); const closeMenu = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionCloseMenu }); }, [dispatch]); const openMenu = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionOpenMenu }); }, [dispatch]); const setHighlightedIndex = (0,external_React_.useCallback)(newHighlightedIndex => { dispatch({ type: FunctionSetHighlightedIndex, highlightedIndex: newHighlightedIndex }); }, [dispatch]); const selectItem = (0,external_React_.useCallback)(newSelectedItem => { dispatch({ type: FunctionSelectItem, selectedItem: newSelectedItem }); }, [dispatch]); const setInputValue = (0,external_React_.useCallback)(newInputValue => { dispatch({ type: FunctionSetInputValue, inputValue: newInputValue }); }, [dispatch]); const reset = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionReset$1 }); }, [dispatch]); return { // prop getters. getItemProps, getLabelProps, getMenuProps, getInputProps, getComboboxProps, getToggleButtonProps, // actions. toggleMenu, openMenu, closeMenu, setHighlightedIndex, setInputValue, selectItem, reset, // state. highlightedIndex, isOpen, selectedItem, inputValue }; } const defaultStateValues = { activeIndex: -1, selectedItems: [] }; /** * Returns the initial value for a state key in the following order: * 1. controlled prop, 2. initial prop, 3. default prop, 4. default * value from Downshift. * * @param {Object} props Props passed to the hook. * @param {string} propKey Props key to generate the value for. * @returns {any} The initial value for that prop. */ function getInitialValue(props, propKey) { return getInitialValue$1(props, propKey, defaultStateValues); } /** * Returns the default value for a state key in the following order: * 1. controlled prop, 2. default prop, 3. default value from Downshift. * * @param {Object} props Props passed to the hook. * @param {string} propKey Props key to generate the value for. * @returns {any} The initial value for that prop. */ function getDefaultValue(props, propKey) { return getDefaultValue$1(props, propKey, defaultStateValues); } /** * Gets the initial state based on the provided props. It uses initial, default * and controlled props related to state in order to compute the initial value. * * @param {Object} props Props passed to the hook. * @returns {Object} The initial state. */ function getInitialState(props) { const activeIndex = getInitialValue(props, 'activeIndex'); const selectedItems = getInitialValue(props, 'selectedItems'); return { activeIndex, selectedItems }; } /** * Returns true if dropdown keydown operation is permitted. Should not be * allowed on keydown with modifier keys (ctrl, alt, shift, meta), on * input element with text content that is either highlighted or selection * cursor is not at the starting position. * * @param {KeyboardEvent} event The event from keydown. * @returns {boolean} Whether the operation is allowed. */ function isKeyDownOperationPermitted(event) { if (event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) { return false; } const element = event.target; if (element instanceof HTMLInputElement && // if element is a text input element.value !== '' && ( // and we have text in it // and cursor is either not at the start or is currently highlighting text. element.selectionStart !== 0 || element.selectionEnd !== 0)) { return false; } return true; } /** * Returns a message to be added to aria-live region when item is removed. * * @param {Object} selectionParameters Parameters required to build the message. * @returns {string} The a11y message. */ function getA11yRemovalMessage(selectionParameters) { const { removedSelectedItem, itemToString: itemToStringLocal } = selectionParameters; return `${itemToStringLocal(removedSelectedItem)} has been removed.`; } const propTypes = { selectedItems: (prop_types_default()).array, initialSelectedItems: (prop_types_default()).array, defaultSelectedItems: (prop_types_default()).array, itemToString: (prop_types_default()).func, getA11yRemovalMessage: (prop_types_default()).func, stateReducer: (prop_types_default()).func, activeIndex: (prop_types_default()).number, initialActiveIndex: (prop_types_default()).number, defaultActiveIndex: (prop_types_default()).number, onActiveIndexChange: (prop_types_default()).func, onSelectedItemsChange: (prop_types_default()).func, keyNavigationNext: (prop_types_default()).string, keyNavigationPrevious: (prop_types_default()).string, environment: prop_types_default().shape({ addEventListener: (prop_types_default()).func, removeEventListener: (prop_types_default()).func, document: prop_types_default().shape({ getElementById: (prop_types_default()).func, activeElement: (prop_types_default()).any, body: (prop_types_default()).any }) }) }; const defaultProps = { itemToString: defaultProps$3.itemToString, stateReducer: defaultProps$3.stateReducer, environment: defaultProps$3.environment, getA11yRemovalMessage, keyNavigationNext: 'ArrowRight', keyNavigationPrevious: 'ArrowLeft' }; // eslint-disable-next-line import/no-mutable-exports let validatePropTypes = downshift_esm_noop; /* istanbul ignore next */ if (false) {} const SelectedItemClick = false ? 0 : 0; const SelectedItemKeyDownDelete = false ? 0 : 1; const SelectedItemKeyDownBackspace = false ? 0 : 2; const SelectedItemKeyDownNavigationNext = false ? 0 : 3; const SelectedItemKeyDownNavigationPrevious = false ? 0 : 4; const DropdownKeyDownNavigationPrevious = false ? 0 : 5; const DropdownKeyDownBackspace = false ? 0 : 6; const DropdownClick = false ? 0 : 7; const FunctionAddSelectedItem = false ? 0 : 8; const FunctionRemoveSelectedItem = false ? 0 : 9; const FunctionSetSelectedItems = false ? 0 : 10; const FunctionSetActiveIndex = false ? 0 : 11; const FunctionReset = false ? 0 : 12; var stateChangeTypes = /*#__PURE__*/Object.freeze({ __proto__: null, SelectedItemClick: SelectedItemClick, SelectedItemKeyDownDelete: SelectedItemKeyDownDelete, SelectedItemKeyDownBackspace: SelectedItemKeyDownBackspace, SelectedItemKeyDownNavigationNext: SelectedItemKeyDownNavigationNext, SelectedItemKeyDownNavigationPrevious: SelectedItemKeyDownNavigationPrevious, DropdownKeyDownNavigationPrevious: DropdownKeyDownNavigationPrevious, DropdownKeyDownBackspace: DropdownKeyDownBackspace, DropdownClick: DropdownClick, FunctionAddSelectedItem: FunctionAddSelectedItem, FunctionRemoveSelectedItem: FunctionRemoveSelectedItem, FunctionSetSelectedItems: FunctionSetSelectedItems, FunctionSetActiveIndex: FunctionSetActiveIndex, FunctionReset: FunctionReset }); /* eslint-disable complexity */ function downshiftMultipleSelectionReducer(state, action) { const { type, index, props, selectedItem } = action; const { activeIndex, selectedItems } = state; let changes; switch (type) { case SelectedItemClick: changes = { activeIndex: index }; break; case SelectedItemKeyDownNavigationPrevious: changes = { activeIndex: activeIndex - 1 < 0 ? 0 : activeIndex - 1 }; break; case SelectedItemKeyDownNavigationNext: changes = { activeIndex: activeIndex + 1 >= selectedItems.length ? -1 : activeIndex + 1 }; break; case SelectedItemKeyDownBackspace: case SelectedItemKeyDownDelete: { let newActiveIndex = activeIndex; if (selectedItems.length === 1) { newActiveIndex = -1; } else if (activeIndex === selectedItems.length - 1) { newActiveIndex = selectedItems.length - 2; } changes = { selectedItems: [...selectedItems.slice(0, activeIndex), ...selectedItems.slice(activeIndex + 1)], ...{ activeIndex: newActiveIndex } }; break; } case DropdownKeyDownNavigationPrevious: changes = { activeIndex: selectedItems.length - 1 }; break; case DropdownKeyDownBackspace: changes = { selectedItems: selectedItems.slice(0, selectedItems.length - 1) }; break; case FunctionAddSelectedItem: changes = { selectedItems: [...selectedItems, selectedItem] }; break; case DropdownClick: changes = { activeIndex: -1 }; break; case FunctionRemoveSelectedItem: { let newActiveIndex = activeIndex; const selectedItemIndex = selectedItems.indexOf(selectedItem); if (selectedItemIndex >= 0) { if (selectedItems.length === 1) { newActiveIndex = -1; } else if (selectedItemIndex === selectedItems.length - 1) { newActiveIndex = selectedItems.length - 2; } changes = { selectedItems: [...selectedItems.slice(0, selectedItemIndex), ...selectedItems.slice(selectedItemIndex + 1)], activeIndex: newActiveIndex }; } break; } case FunctionSetSelectedItems: { const { selectedItems: newSelectedItems } = action; changes = { selectedItems: newSelectedItems }; break; } case FunctionSetActiveIndex: { const { activeIndex: newActiveIndex } = action; changes = { activeIndex: newActiveIndex }; break; } case FunctionReset: changes = { activeIndex: getDefaultValue(props, 'activeIndex'), selectedItems: getDefaultValue(props, 'selectedItems') }; break; default: throw new Error('Reducer called without proper action type.'); } return { ...state, ...changes }; } useMultipleSelection.stateChangeTypes = stateChangeTypes; function useMultipleSelection(userProps) { if (userProps === void 0) { userProps = {}; } validatePropTypes(userProps, useMultipleSelection); // Props defaults and destructuring. const props = { ...defaultProps, ...userProps }; const { getA11yRemovalMessage, itemToString, environment, keyNavigationNext, keyNavigationPrevious } = props; // Reducer init. const [state, dispatch] = useControlledReducer$1(downshiftMultipleSelectionReducer, getInitialState(props), props); const { activeIndex, selectedItems } = state; // Refs. const isInitialMountRef = (0,external_React_.useRef)(true); const dropdownRef = (0,external_React_.useRef)(null); const previousSelectedItemsRef = (0,external_React_.useRef)(selectedItems); const selectedItemRefs = (0,external_React_.useRef)(); selectedItemRefs.current = []; const latest = downshift_esm_useLatestRef({ state, props }); // Effects. /* Sets a11y status message on changes in selectedItem. */ (0,external_React_.useEffect)(() => { if (isInitialMountRef.current) { return; } if (selectedItems.length < previousSelectedItemsRef.current.length) { const removedSelectedItem = previousSelectedItemsRef.current.find(item => selectedItems.indexOf(item) < 0); setStatus(getA11yRemovalMessage({ itemToString, resultCount: selectedItems.length, removedSelectedItem, activeIndex, activeSelectedItem: selectedItems[activeIndex] }), environment.document); } previousSelectedItemsRef.current = selectedItems; // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedItems.length]); // Sets focus on active item. (0,external_React_.useEffect)(() => { if (isInitialMountRef.current) { return; } if (activeIndex === -1 && dropdownRef.current) { dropdownRef.current.focus(); } else if (selectedItemRefs.current[activeIndex]) { selectedItemRefs.current[activeIndex].focus(); } }, [activeIndex]); useControlPropsValidator({ isInitialMount: isInitialMountRef.current, props, state }); const setGetterPropCallInfo = useGetterPropsCalledChecker('getDropdownProps'); // Make initial ref false. (0,external_React_.useEffect)(() => { isInitialMountRef.current = false; }, []); // Event handler functions. const selectedItemKeyDownHandlers = (0,external_React_.useMemo)(() => ({ [keyNavigationPrevious]() { dispatch({ type: SelectedItemKeyDownNavigationPrevious }); }, [keyNavigationNext]() { dispatch({ type: SelectedItemKeyDownNavigationNext }); }, Delete() { dispatch({ type: SelectedItemKeyDownDelete }); }, Backspace() { dispatch({ type: SelectedItemKeyDownBackspace }); } }), [dispatch, keyNavigationNext, keyNavigationPrevious]); const dropdownKeyDownHandlers = (0,external_React_.useMemo)(() => ({ [keyNavigationPrevious](event) { if (isKeyDownOperationPermitted(event)) { dispatch({ type: DropdownKeyDownNavigationPrevious }); } }, Backspace(event) { if (isKeyDownOperationPermitted(event)) { dispatch({ type: DropdownKeyDownBackspace }); } } }), [dispatch, keyNavigationPrevious]); // Getter props. const getSelectedItemProps = (0,external_React_.useCallback)(function (_temp) { let { refKey = 'ref', ref, onClick, onKeyDown, selectedItem, index, ...rest } = _temp === void 0 ? {} : _temp; const { state: latestState } = latest.current; const itemIndex = getItemIndex(index, selectedItem, latestState.selectedItems); if (itemIndex < 0) { throw new Error('Pass either selectedItem or index in getSelectedItemProps!'); } const selectedItemHandleClick = () => { dispatch({ type: SelectedItemClick, index }); }; const selectedItemHandleKeyDown = event => { const key = normalizeArrowKey(event); if (key && selectedItemKeyDownHandlers[key]) { selectedItemKeyDownHandlers[key](event); } }; return { [refKey]: handleRefs(ref, selectedItemNode => { if (selectedItemNode) { selectedItemRefs.current.push(selectedItemNode); } }), tabIndex: index === latestState.activeIndex ? 0 : -1, onClick: callAllEventHandlers(onClick, selectedItemHandleClick), onKeyDown: callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), ...rest }; }, [dispatch, latest, selectedItemKeyDownHandlers]); const getDropdownProps = (0,external_React_.useCallback)(function (_temp2, _temp3) { let { refKey = 'ref', ref, onKeyDown, onClick, preventKeyAction = false, ...rest } = _temp2 === void 0 ? {} : _temp2; let { suppressRefError = false } = _temp3 === void 0 ? {} : _temp3; setGetterPropCallInfo('getDropdownProps', suppressRefError, refKey, dropdownRef); const dropdownHandleKeyDown = event => { const key = normalizeArrowKey(event); if (key && dropdownKeyDownHandlers[key]) { dropdownKeyDownHandlers[key](event); } }; const dropdownHandleClick = () => { dispatch({ type: DropdownClick }); }; return { [refKey]: handleRefs(ref, dropdownNode => { if (dropdownNode) { dropdownRef.current = dropdownNode; } }), ...(!preventKeyAction && { onKeyDown: callAllEventHandlers(onKeyDown, dropdownHandleKeyDown), onClick: callAllEventHandlers(onClick, dropdownHandleClick) }), ...rest }; }, [dispatch, dropdownKeyDownHandlers, setGetterPropCallInfo]); // returns const addSelectedItem = (0,external_React_.useCallback)(selectedItem => { dispatch({ type: FunctionAddSelectedItem, selectedItem }); }, [dispatch]); const removeSelectedItem = (0,external_React_.useCallback)(selectedItem => { dispatch({ type: FunctionRemoveSelectedItem, selectedItem }); }, [dispatch]); const setSelectedItems = (0,external_React_.useCallback)(newSelectedItems => { dispatch({ type: FunctionSetSelectedItems, selectedItems: newSelectedItems }); }, [dispatch]); const setActiveIndex = (0,external_React_.useCallback)(newActiveIndex => { dispatch({ type: FunctionSetActiveIndex, activeIndex: newActiveIndex }); }, [dispatch]); const reset = (0,external_React_.useCallback)(() => { dispatch({ type: FunctionReset }); }, [dispatch]); return { getSelectedItemProps, getDropdownProps, addSelectedItem, removeSelectedItem, setSelectedItems, setActiveIndex, reset, selectedItems, activeIndex }; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/custom-select-control/index.js // @ts-nocheck /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const custom_select_control_itemToString = item => item?.name; // This is needed so that in Windows, where // the menu does not necessarily open on // key up/down, you can still switch between // options with the menu closed. const custom_select_control_stateReducer = ({ selectedItem }, { type, changes, props: { items } }) => { switch (type) { case useSelect.stateChangeTypes.ToggleButtonKeyDownArrowDown: // If we already have a selected item, try to select the next one, // without circular navigation. Otherwise, select the first item. return { selectedItem: items[selectedItem ? Math.min(items.indexOf(selectedItem) + 1, items.length - 1) : 0] }; case useSelect.stateChangeTypes.ToggleButtonKeyDownArrowUp: // If we already have a selected item, try to select the previous one, // without circular navigation. Otherwise, select the last item. return { selectedItem: items[selectedItem ? Math.max(items.indexOf(selectedItem) - 1, 0) : items.length - 1] }; default: return changes; } }; function CustomSelectControl(props) { const { /** Start opting into the larger default height that will become the default size in a future version. */ __next40pxDefaultSize = false, className, hideLabelFromVision, label, describedBy, options: items, onChange: onSelectedItemChange, /** @type {import('../select-control/types').SelectControlProps.size} */ size = 'default', value: _selectedItem, onMouseOver, onMouseOut, onFocus, onBlur, __experimentalShowSelectedHint = false } = useDeprecated36pxDefaultSizeProp(props); const { getLabelProps, getToggleButtonProps, getMenuProps, getItemProps, isOpen, highlightedIndex, selectedItem } = useSelect({ initialSelectedItem: items[0], items, itemToString: custom_select_control_itemToString, onSelectedItemChange, ...(typeof _selectedItem !== 'undefined' && _selectedItem !== null ? { selectedItem: _selectedItem } : undefined), stateReducer: custom_select_control_stateReducer }); function getDescribedBy() { if (describedBy) { return describedBy; } if (!selectedItem) { return (0,external_wp_i18n_namespaceObject.__)('No selection'); } // translators: %s: The selected option. return (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('Currently selected: %s'), selectedItem.name); } let menuProps = getMenuProps({ className: 'components-custom-select-control__menu', 'aria-hidden': !isOpen }); const onKeyDownHandler = (0,external_wp_element_namespaceObject.useCallback)(e => { e.stopPropagation(); menuProps?.onKeyDown?.(e); }, [menuProps]); // We need this here, because the null active descendant is not fully ARIA compliant. if (menuProps['aria-activedescendant']?.startsWith('downshift-null')) { const { 'aria-activedescendant': ariaActivedescendant, ...restMenuProps } = menuProps; menuProps = restMenuProps; } return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", { className: dist_clsx('components-custom-select-control', className), children: [hideLabelFromVision ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(visually_hidden_component, { as: "label", ...getLabelProps(), children: label }) : /*#__PURE__*/ /* eslint-disable-next-line jsx-a11y/label-has-associated-control, jsx-a11y/label-has-for */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(StyledLabel, { ...getLabelProps({ className: 'components-custom-select-control__label' }), children: label }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(input_base, { __next40pxDefaultSize: __next40pxDefaultSize, size: size, suffix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(select_control_chevron_down, {}), children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Select, { onMouseOver: onMouseOver, onMouseOut: onMouseOut, as: "button", onFocus: onFocus, onBlur: onBlur, selectSize: size, __next40pxDefaultSize: __next40pxDefaultSize, ...getToggleButtonProps({ // This is needed because some speech recognition software don't support `aria-labelledby`. 'aria-label': label, 'aria-labelledby': undefined, className: 'components-custom-select-control__button', describedBy: getDescribedBy() }), children: [custom_select_control_itemToString(selectedItem), __experimentalShowSelectedHint && selectedItem.__experimentalHint && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { className: "components-custom-select-control__hint", children: selectedItem.__experimentalHint })] }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { className: "components-custom-select-control__menu-wrapper", children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", { ...menuProps, onKeyDown: onKeyDownHandler, children: isOpen && items.map((item, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", { ...getItemProps({ item, index, className: dist_clsx(item.className, 'components-custom-select-control__item', { 'is-highlighted': index === highlightedIndex, 'has-hint': !!item.__experimentalHint, 'is-next-40px-default-size': __next40pxDefaultSize }), style: item.style }), children: [item.name, item.__experimentalHint && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { className: "components-custom-select-control__item-hint", children: item.__experimentalHint }), item === selectedItem && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(icons_build_module_icon, { icon: library_check, className: "components-custom-select-control__item-icon" })] }, item.key)) }) })] })] }); } function StableCustomSelectControl(props) { return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomSelectControl, { ...props, __experimentalShowSelectedHint: false }); } ;// CONCATENATED MODULE: ./node_modules/use-lilius/build/index.es.js /** * @name toDate * @category Common Helpers * @summary Convert the given argument to an instance of Date. * * @description * Convert the given argument to an instance of Date. * * If the argument is an instance of Date, the function returns its clone. * * If the argument is a number, it is treated as a timestamp. * * If the argument is none of the above, the function returns Invalid Date. * * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param argument - The value to convert * * @returns The parsed date in the local time zone * * @example * // Clone the date: * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) * //=> Tue Feb 11 2014 11:30:30 * * @example * // Convert the timestamp to date: * const result = toDate(1392098430000) * //=> Tue Feb 11 2014 11:30:30 */ function toDate(argument) { const argStr = Object.prototype.toString.call(argument); // Clone the date if ( argument instanceof Date || (typeof argument === "object" && argStr === "[object Date]") ) { // Prevent the date to lose the milliseconds when passed to new Date() in IE10 return new argument.constructor(+argument); } else if ( typeof argument === "number" || argStr === "[object Number]" || typeof argument === "string" || argStr === "[object String]" ) { // TODO: Can we get rid of as? return new Date(argument); } else { // TODO: Can we get rid of as? return new Date(NaN); } } /** * @name constructFrom * @category Generic Helpers * @summary Constructs a date using the reference date and the value * * @description * The function constructs a new date using the constructor from the reference * date and the given value. It helps to build generic functions that accept * date extensions. * * It defaults to `Date` if the passed reference date is a number or a string. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The reference date to take constructor from * @param value - The value to create the date * * @returns Date initialized using the given date and value * * @example * import { constructFrom } from 'date-fns' * * // A function that clones a date preserving the original type * function cloneDate<DateType extends Date(date: DateType): DateType { * return constructFrom( * date, // Use contrustor from the given date * date.getTime() // Use the date value to create a new date * ) * } */ function constructFrom(date, value) { if (date instanceof Date) { return new date.constructor(value); } else { return new Date(value); } } /** * @name addDays * @category Day Helpers * @summary Add the specified number of days to the given date. * * @description * Add the specified number of days to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of days to be added. * * @returns The new date with the days added * * @example * // Add 10 days to 1 September 2014: * const result = addDays(new Date(2014, 8, 1), 10) * //=> Thu Sep 11 2014 00:00:00 */ function addDays(date, amount) { const _date = toDate(date); if (isNaN(amount)) return constructFrom(date, NaN); if (!amount) { // If 0 days, no-op to avoid changing times in the hour before end of DST return _date; } _date.setDate(_date.getDate() + amount); return _date; } /** * @name addMonths * @category Month Helpers * @summary Add the specified number of months to the given date. * * @description * Add the specified number of months to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of months to be added. * * @returns The new date with the months added * * @example * // Add 5 months to 1 September 2014: * const result = addMonths(new Date(2014, 8, 1), 5) * //=> Sun Feb 01 2015 00:00:00 * * // Add one month to 30 January 2023: * const result = addMonths(new Date(2023, 0, 30), 1) * //=> Tue Feb 28 2023 00:00:00 */ function addMonths(date, amount) { const _date = toDate(date); if (isNaN(amount)) return constructFrom(date, NaN); if (!amount) { // If 0 months, no-op to avoid changing times in the hour before end of DST return _date; } const dayOfMonth = _date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we // want except that dates will wrap around the end of a month, meaning that // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So // we'll default to the end of the desired month by adding 1 to the desired // month and using a date of 0 to back up one day to the end of the desired // month. const endOfDesiredMonth = constructFrom(date, _date.getTime()); endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); const daysInMonth = endOfDesiredMonth.getDate(); if (dayOfMonth >= daysInMonth) { // If we're already at the end of the month, then this is the correct date // and we're done. return endOfDesiredMonth; } else { // Otherwise, we now know that setting the original day-of-month value won't // cause an overflow, so set the desired day-of-month. Note that we can't // just set the date of `endOfDesiredMonth` because that object may have had // its time changed in the unusual case where where a DST transition was on // the last day of the month and its local time was in the hour skipped or // repeated next to a DST transition. So we use `date` instead which is // guaranteed to still have the original time. _date.setFullYear( endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth, ); return _date; } } let index_es_defaultOptions = {}; function getDefaultOptions() { return index_es_defaultOptions; } /** * The {@link startOfWeek} function options. */ /** * @name startOfWeek * @category Week Helpers * @summary Return the start of a week for the given date. * * @description * Return the start of a week for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * @param options - An object with options * * @returns The start of a week * * @example * // The start of a week for 2 September 2014 11:55:00: * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Sun Aug 31 2014 00:00:00 * * @example * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00: * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) * //=> Mon Sep 01 2014 00:00:00 */ function startOfWeek(date, options) { const defaultOptions = getDefaultOptions(); const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions.weekStartsOn ?? defaultOptions.locale?.options?.weekStartsOn ?? 0; const _date = toDate(date); const day = _date.getDay(); const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; _date.setDate(_date.getDate() - diff); _date.setHours(0, 0, 0, 0); return _date; } /** * @name startOfDay * @category Day Helpers * @summary Return the start of a day for the given date. * * @description * Return the start of a day for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * * @returns The start of a day * * @example * // The start of a day for 2 September 2014 11:55:00: * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0)) * //=> Tue Sep 02 2014 00:00:00 */ function startOfDay(date) { const _date = toDate(date); _date.setHours(0, 0, 0, 0); return _date; } /** * @name addWeeks * @category Week Helpers * @summary Add the specified number of weeks to the given date. * * @description * Add the specified number of week to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of weeks to be added. * * @returns The new date with the weeks added * * @example * // Add 4 weeks to 1 September 2014: * const result = addWeeks(new Date(2014, 8, 1), 4) * //=> Mon Sep 29 2014 00:00:00 */ function addWeeks(date, amount) { const days = amount * 7; return addDays(date, days); } /** * @name addYears * @category Year Helpers * @summary Add the specified number of years to the given date. * * @description * Add the specified number of years to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of years to be added. * * @returns The new date with the years added * * @example * // Add 5 years to 1 September 2014: * const result = addYears(new Date(2014, 8, 1), 5) * //=> Sun Sep 01 2019 00:00:00 */ function addYears(date, amount) { return addMonths(date, amount * 12); } /** * @name endOfMonth * @category Month Helpers * @summary Return the end of a month for the given date. * * @description * Return the end of a month for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * * @returns The end of a month * * @example * // The end of a month for 2 September 2014 11:55:00: * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0)) * //=> Tue Sep 30 2014 23:59:59.999 */ function endOfMonth(date) { const _date = toDate(date); const month = _date.getMonth(); _date.setFullYear(_date.getFullYear(), month + 1, 0); _date.setHours(23, 59, 59, 999); return _date; } /** * The {@link eachDayOfInterval} function options. */ /** * @name eachDayOfInterval * @category Interval Helpers * @summary Return the array of dates within the specified time interval. * * @description * Return the array of dates within the specified time interval. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param interval - The interval. * @param options - An object with options. * * @returns The array with starts of days from the day of the interval start to the day of the interval end * * @example * // Each day between 6 October 2014 and 10 October 2014: * const result = eachDayOfInterval({ * start: new Date(2014, 9, 6), * end: new Date(2014, 9, 10) * }) * //=> [ * // Mon Oct 06 2014 00:00:00, * // Tue Oct 07 2014 00:00:00, * // Wed Oct 08 2014 00:00:00, * // Thu Oct 09 2014 00:00:00, * // Fri Oct 10 2014 00:00:00 * // ] */ function eachDayOfInterval(interval, options) { const startDate = toDate(interval.start); const endDate = toDate(interval.end); let reversed = +startDate > +endDate; const endTime = reversed ? +startDate : +endDate; const currentDate = reversed ? endDate : startDate; currentDate.setHours(0, 0, 0, 0); let step = options?.step ?? 1; if (!step) return []; if (step < 0) { step = -step; reversed = !reversed; } const dates = []; while (+currentDate <= endTime) { dates.push(toDate(currentDate)); currentDate.setDate(currentDate.getDate() + step); currentDate.setHours(0, 0, 0, 0); } return reversed ? dates.reverse() : dates; } /** * The {@link eachMonthOfInterval} function options. */ /** * @name eachMonthOfInterval * @category Interval Helpers * @summary Return the array of months within the specified time interval. * * @description * Return the array of months within the specified time interval. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param interval - The interval * * @returns The array with starts of months from the month of the interval start to the month of the interval end * * @example * // Each month between 6 February 2014 and 10 August 2014: * const result = eachMonthOfInterval({ * start: new Date(2014, 1, 6), * end: new Date(2014, 7, 10) * }) * //=> [ * // Sat Feb 01 2014 00:00:00, * // Sat Mar 01 2014 00:00:00, * // Tue Apr 01 2014 00:00:00, * // Thu May 01 2014 00:00:00, * // Sun Jun 01 2014 00:00:00, * // Tue Jul 01 2014 00:00:00, * // Fri Aug 01 2014 00:00:00 * // ] */ function eachMonthOfInterval(interval, options) { const startDate = toDate(interval.start); const endDate = toDate(interval.end); let reversed = +startDate > +endDate; const endTime = reversed ? +startDate : +endDate; const currentDate = reversed ? endDate : startDate; currentDate.setHours(0, 0, 0, 0); currentDate.setDate(1); let step = options?.step ?? 1; if (!step) return []; if (step < 0) { step = -step; reversed = !reversed; } const dates = []; while (+currentDate <= endTime) { dates.push(toDate(currentDate)); currentDate.setMonth(currentDate.getMonth() + step); } return reversed ? dates.reverse() : dates; } /** * The {@link eachWeekOfInterval} function options. */ /** * @name eachWeekOfInterval * @category Interval Helpers * @summary Return the array of weeks within the specified time interval. * * @description * Return the array of weeks within the specified time interval. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param interval - The interval. * @param options - An object with options. * * @returns The array with starts of weeks from the week of the interval start to the week of the interval end * * @example * // Each week within interval 6 October 2014 - 23 November 2014: * const result = eachWeekOfInterval({ * start: new Date(2014, 9, 6), * end: new Date(2014, 10, 23) * }) * //=> [ * // Sun Oct 05 2014 00:00:00, * // Sun Oct 12 2014 00:00:00, * // Sun Oct 19 2014 00:00:00, * // Sun Oct 26 2014 00:00:00, * // Sun Nov 02 2014 00:00:00, * // Sun Nov 09 2014 00:00:00, * // Sun Nov 16 2014 00:00:00, * // Sun Nov 23 2014 00:00:00 * // ] */ function eachWeekOfInterval(interval, options) { const startDate = toDate(interval.start); const endDate = toDate(interval.end); let reversed = +startDate > +endDate; const startDateWeek = reversed ? startOfWeek(endDate, options) : startOfWeek(startDate, options); const endDateWeek = reversed ? startOfWeek(startDate, options) : startOfWeek(endDate, options); // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet startDateWeek.setHours(15); endDateWeek.setHours(15); const endTime = +endDateWeek.getTime(); let currentDate = startDateWeek; let step = options?.step ?? 1; if (!step) return []; if (step < 0) { step = -step; reversed = !reversed; } const dates = []; while (+currentDate <= endTime) { currentDate.setHours(0); dates.push(toDate(currentDate)); currentDate = addWeeks(currentDate, step); currentDate.setHours(15); } return reversed ? dates.reverse() : dates; } /** * @name startOfMonth * @category Month Helpers * @summary Return the start of a month for the given date. * * @description * Return the start of a month for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * * @returns The start of a month * * @example * // The start of a month for 2 September 2014 11:55:00: * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0)) * //=> Mon Sep 01 2014 00:00:00 */ function startOfMonth(date) { const _date = toDate(date); _date.setDate(1); _date.setHours(0, 0, 0, 0); return _date; } /** * The {@link endOfWeek} function options. */ /** * @name endOfWeek * @category Week Helpers * @summary Return the end of a week for the given date. * * @description * Return the end of a week for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * @param options - An object with options * * @returns The end of a week * * @example * // The end of a week for 2 September 2014 11:55:00: * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Sat Sep 06 2014 23:59:59.999 * * @example * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00: * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) * //=> Sun Sep 07 2014 23:59:59.999 */ function endOfWeek(date, options) { const defaultOptions = getDefaultOptions(); const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions.weekStartsOn ?? defaultOptions.locale?.options?.weekStartsOn ?? 0; const _date = toDate(date); const day = _date.getDay(); const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); _date.setDate(_date.getDate() + diff); _date.setHours(23, 59, 59, 999); return _date; } /** * @name getDaysInMonth * @category Month Helpers * @summary Get the number of days in a month of the given date. * * @description * Get the number of days in a month of the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The given date * * @returns The number of days in a month * * @example * // How many days are in February 2000? * const result = getDaysInMonth(new Date(2000, 1)) * //=> 29 */ function getDaysInMonth(date) { const _date = toDate(date); const year = _date.getFullYear(); const monthIndex = _date.getMonth(); const lastDayOfMonth = constructFrom(date, 0); lastDayOfMonth.setFullYear(year, monthIndex + 1, 0); lastDayOfMonth.setHours(0, 0, 0, 0); return lastDayOfMonth.getDate(); } /** * @name isAfter * @category Common Helpers * @summary Is the first date after the second one? * * @description * Is the first date after the second one? * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date that should be after the other one to return true * @param dateToCompare - The date to compare with * * @returns The first date is after the second date * * @example * // Is 10 July 1989 after 11 February 1987? * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11)) * //=> true */ function isAfter(date, dateToCompare) { const _date = toDate(date); const _dateToCompare = toDate(dateToCompare); return _date.getTime() > _dateToCompare.getTime(); } /** * @name isBefore * @category Common Helpers * @summary Is the first date before the second one? * * @description * Is the first date before the second one? * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date that should be before the other one to return true * @param dateToCompare - The date to compare with * * @returns The first date is before the second date * * @example * // Is 10 July 1989 before 11 February 1987? * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11)) * //=> false */ function isBefore(date, dateToCompare) { const _date = toDate(date); const _dateToCompare = toDate(dateToCompare); return +_date < +_dateToCompare; } /** * @name isEqual * @category Common Helpers * @summary Are the given dates equal? * * @description * Are the given dates equal? * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param dateLeft - The first date to compare * @param dateRight - The second date to compare * * @returns The dates are equal * * @example * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal? * const result = isEqual( * new Date(2014, 6, 2, 6, 30, 45, 0), * new Date(2014, 6, 2, 6, 30, 45, 500) * ) * //=> false */ function isEqual(leftDate, rightDate) { const _dateLeft = toDate(leftDate); const _dateRight = toDate(rightDate); return +_dateLeft === +_dateRight; } /** * @name setMonth * @category Month Helpers * @summary Set the month to the given date. * * @description * Set the month to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param month - The month index to set (0-11) * * @returns The new date with the month set * * @example * // Set February to 1 September 2014: * const result = setMonth(new Date(2014, 8, 1), 1) * //=> Sat Feb 01 2014 00:00:00 */ function setMonth(date, month) { const _date = toDate(date); const year = _date.getFullYear(); const day = _date.getDate(); const dateWithDesiredMonth = constructFrom(date, 0); dateWithDesiredMonth.setFullYear(year, month, 15); dateWithDesiredMonth.setHours(0, 0, 0, 0); const daysInMonth = getDaysInMonth(dateWithDesiredMonth); // Set the last day of the new month // if the original date was the last day of the longer month _date.setMonth(month, Math.min(day, daysInMonth)); return _date; } /** * @name set * @category Common Helpers * @summary Set date values to a given date. * * @description * Set date values to a given date. * * Sets time values to date from object `values`. * A value is not set if it is undefined or null or doesn't exist in `values`. * * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts * to use native `Date#setX` methods. If you use this function, you may not want to include the * other `setX` functions that date-fns provides if you are concerned about the bundle size. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param values - The date values to be set * * @returns The new date with options set * * @example * // Transform 1 September 2014 into 20 October 2015 in a single line: * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 }) * //=> Tue Oct 20 2015 00:00:00 * * @example * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00: * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 }) * //=> Mon Sep 01 2014 12:23:45 */ function set(date, values) { let _date = toDate(date); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date if (isNaN(+_date)) { return constructFrom(date, NaN); } if (values.year != null) { _date.setFullYear(values.year); } if (values.month != null) { _date = setMonth(_date, values.month); } if (values.date != null) { _date.setDate(values.date); } if (values.hours != null) { _date.setHours(values.hours); } if (values.minutes != null) { _date.setMinutes(values.minutes); } if (values.seconds != null) { _date.setSeconds(values.seconds); } if (values.milliseconds != null) { _date.setMilliseconds(values.milliseconds); } return _date; } /** * @name setYear * @category Year Helpers * @summary Set the year to the given date. * * @description * Set the year to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param year - The year of the new date * * @returns The new date with the year set * * @example * // Set year 2013 to 1 September 2014: * const result = setYear(new Date(2014, 8, 1), 2013) * //=> Sun Sep 01 2013 00:00:00 */ function setYear(date, year) { const _date = toDate(date); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date if (isNaN(+_date)) { return constructFrom(date, NaN); } _date.setFullYear(year); return _date; } /** * @name startOfToday * @category Day Helpers * @summary Return the start of today. * @pure false * * @description * Return the start of today. * * @returns The start of today * * @example * // If today is 6 October 2014: * const result = startOfToday() * //=> Mon Oct 6 2014 00:00:00 */ function startOfToday() { return startOfDay(Date.now()); } /** * @name subMonths * @category Month Helpers * @summary Subtract the specified number of months from the given date. * * @description * Subtract the specified number of months from the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of months to be subtracted. * * @returns The new date with the months subtracted * * @example * // Subtract 5 months from 1 February 2015: * const result = subMonths(new Date(2015, 1, 1), 5) * //=> Mon Sep 01 2014 00:00:00 */ function subMonths(date, amount) { return addMonths(date, -amount); } /** * @name subYears * @category Year Helpers * @summary Subtract the specified number of years from the given date. * * @description * Subtract the specified number of years from the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of years to be subtracted. * * @returns The new date with the years subtracted * * @example * // Subtract 5 years from 1 September 2014: * const result = subYears(new Date(2014, 8, 1), 5) * //=> Tue Sep 01 2009 00:00:00 */ function subYears(date, amount) { return addYears(date, -amount); } var Month; (function (Month) { Month[Month["JANUARY"] = 0] = "JANUARY"; Month[Month["FEBRUARY"] = 1] = "FEBRUARY"; Month[Month["MARCH"] = 2] = "MARCH"; Month[Month["APRIL"] = 3] = "APRIL"; Month[Month["MAY"] = 4] = "MAY"; Month[Month["JUNE"] = 5] = "JUNE"; Month[Month["JULY"] = 6] = "JULY"; Month[Month["AUGUST"] = 7] = "AUGUST"; Month[Month["SEPTEMBER"] = 8] = "SEPTEMBER"; Month[Month["OCTOBER"] = 9] = "OCTOBER"; Month[Month["NOVEMBER"] = 10] = "NOVEMBER"; Month[Month["DECEMBER"] = 11] = "DECEMBER"; })(Month || (Month = {})); var Day; (function (Day) { Day[Day["SUNDAY"] = 0] = "SUNDAY"; Day[Day["MONDAY"] = 1] = "MONDAY"; Day[Day["TUESDAY"] = 2] = "TUESDAY"; Day[Day["WEDNESDAY"] = 3] = "WEDNESDAY"; Day[Day["THURSDAY"] = 4] = "THURSDAY"; Day[Day["FRIDAY"] = 5] = "FRIDAY"; Day[Day["SATURDAY"] = 6] = "SATURDAY"; })(Day || (Day = {})); var inRange = function (date, min, max) { return (isEqual(date, min) || isAfter(date, min)) && (isEqual(date, max) || isBefore(date, max)); }; var index_es_clearTime = function (date) { return set(date, { hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }); }; var useLilius = function (_a) { var _b = _a === void 0 ? {} : _a, _c = _b.weekStartsOn, weekStartsOn = _c === void 0 ? Day.SUNDAY : _c, _d = _b.viewing, initialViewing = _d === void 0 ? new Date() : _d, _e = _b.selected, initialSelected = _e === void 0 ? [] : _e, _f = _b.numberOfMonths, numberOfMonths = _f === void 0 ? 1 : _f; var _g = (0,external_React_.useState)(initialViewing), viewing = _g[0], setViewing = _g[1]; var viewToday = (0,external_React_.useCallback)(function () { return setViewing(startOfToday()); }, [setViewing]); var viewMonth = (0,external_React_.useCallback)(function (month) { return setViewing(function (v) { return setMonth(v, month); }); }, []); var viewPreviousMonth = (0,external_React_.useCallback)(function () { return setViewing(function (v) { return subMonths(v, 1); }); }, []); var viewNextMonth = (0,external_React_.useCallback)(function () { return setViewing(function (v) { return addMonths(v, 1); }); }, []); var viewYear = (0,external_React_.useCallback)(function (year) { return setViewing(function (v) { return setYear(v, year); }); }, []); var viewPreviousYear = (0,external_React_.useCallback)(function () { return setViewing(function (v) { return subYears(v, 1); }); }, []); var viewNextYear = (0,external_React_.useCallback)(function () { return setViewing(function (v) { return addYears(v, 1); }); }, []); var _h = (0,external_React_.useState)(initialSelected.map(index_es_clearTime)), selected = _h[0], setSelected = _h[1]; var clearSelected = function () { return setSelected([]); }; var isSelected = (0,external_React_.useCallback)(function (date) { return selected.findIndex(function (s) { return isEqual(s, date); }) > -1; }, [selected]); var select = (0,external_React_.useCallback)(function (date, replaceExisting) { if (replaceExisting) { setSelected(Array.isArray(date) ? date : [date]); } else { setSelected(function (selectedItems) { return selectedItems.concat(Array.isArray(date) ? date : [date]); }); } }, []); var deselect = (0,external_React_.useCallback)(function (date) { return setSelected(function (selectedItems) { return Array.isArray(date) ? selectedItems.filter(function (s) { return !date.map(function (d) { return d.getTime(); }).includes(s.getTime()); }) : selectedItems.filter(function (s) { return !isEqual(s, date); }); }); }, []); var toggle = (0,external_React_.useCallback)(function (date, replaceExisting) { return (isSelected(date) ? deselect(date) : select(date, replaceExisting)); }, [deselect, isSelected, select]); var selectRange = (0,external_React_.useCallback)(function (start, end, replaceExisting) { if (replaceExisting) { setSelected(eachDayOfInterval({ start: start, end: end })); } else { setSelected(function (selectedItems) { return selectedItems.concat(eachDayOfInterval({ start: start, end: end })); }); } }, []); var deselectRange = (0,external_React_.useCallback)(function (start, end) { setSelected(function (selectedItems) { return selectedItems.filter(function (s) { return !eachDayOfInterval({ start: start, end: end }) .map(function (d) { return d.getTime(); }) .includes(s.getTime()); }); }); }, []); var calendar = (0,external_React_.useMemo)(function () { return eachMonthOfInterval({ start: startOfMonth(viewing), end: endOfMonth(addMonths(viewing, numberOfMonths - 1)), }).map(function (month) { return eachWeekOfInterval({ start: startOfMonth(month), end: endOfMonth(month), }, { weekStartsOn: weekStartsOn }).map(function (week) { return eachDayOfInterval({ start: startOfWeek(week, { weekStartsOn: weekStartsOn }), end: endOfWeek(week, { weekStartsOn: weekStartsOn }), }); }); }); }, [viewing, weekStartsOn, numberOfMonths]); return { clearTime: index_es_clearTime, inRange: inRange, viewing: viewing, setViewing: setViewing, viewToday: viewToday, viewMonth: viewMonth, viewPreviousMonth: viewPreviousMonth, viewNextMonth: viewNextMonth, viewYear: viewYear, viewPreviousYear: viewPreviousYear, viewNextYear: viewNextYear, selected: selected, setSelected: setSelected, clearSelected: clearSelected, isSelected: isSelected, select: select, deselect: deselect, toggle: toggle, selectRange: selectRange, deselectRange: deselectRange, calendar: calendar, }; }; ;// CONCATENATED MODULE: ./node_modules/date-fns/toDate.mjs /** * @name toDate * @category Common Helpers * @summary Convert the given argument to an instance of Date. * * @description * Convert the given argument to an instance of Date. * * If the argument is an instance of Date, the function returns its clone. * * If the argument is a number, it is treated as a timestamp. * * If the argument is none of the above, the function returns Invalid Date. * * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param argument - The value to convert * * @returns The parsed date in the local time zone * * @example * // Clone the date: * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) * //=> Tue Feb 11 2014 11:30:30 * * @example * // Convert the timestamp to date: * const result = toDate(1392098430000) * //=> Tue Feb 11 2014 11:30:30 */ function toDate_toDate(argument) { const argStr = Object.prototype.toString.call(argument); // Clone the date if ( argument instanceof Date || (typeof argument === "object" && argStr === "[object Date]") ) { // Prevent the date to lose the milliseconds when passed to new Date() in IE10 return new argument.constructor(+argument); } else if ( typeof argument === "number" || argStr === "[object Number]" || typeof argument === "string" || argStr === "[object String]" ) { // TODO: Can we get rid of as? return new Date(argument); } else { // TODO: Can we get rid of as? return new Date(NaN); } } // Fallback for modularized imports: /* harmony default export */ const date_fns_toDate = ((/* unused pure expression or super */ null && (toDate_toDate))); ;// CONCATENATED MODULE: ./node_modules/date-fns/startOfDay.mjs /** * @name startOfDay * @category Day Helpers * @summary Return the start of a day for the given date. * * @description * Return the start of a day for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * * @returns The start of a day * * @example * // The start of a day for 2 September 2014 11:55:00: * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0)) * //=> Tue Sep 02 2014 00:00:00 */ function startOfDay_startOfDay(date) { const _date = toDate_toDate(date); _date.setHours(0, 0, 0, 0); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_startOfDay = ((/* unused pure expression or super */ null && (startOfDay_startOfDay))); ;// CONCATENATED MODULE: ./node_modules/date-fns/constructFrom.mjs /** * @name constructFrom * @category Generic Helpers * @summary Constructs a date using the reference date and the value * * @description * The function constructs a new date using the constructor from the reference * date and the given value. It helps to build generic functions that accept * date extensions. * * It defaults to `Date` if the passed reference date is a number or a string. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The reference date to take constructor from * @param value - The value to create the date * * @returns Date initialized using the given date and value * * @example * import { constructFrom } from 'date-fns' * * // A function that clones a date preserving the original type * function cloneDate<DateType extends Date(date: DateType): DateType { * return constructFrom( * date, // Use contrustor from the given date * date.getTime() // Use the date value to create a new date * ) * } */ function constructFrom_constructFrom(date, value) { if (date instanceof Date) { return new date.constructor(value); } else { return new Date(value); } } // Fallback for modularized imports: /* harmony default export */ const date_fns_constructFrom = ((/* unused pure expression or super */ null && (constructFrom_constructFrom))); ;// CONCATENATED MODULE: ./node_modules/date-fns/addMonths.mjs /** * @name addMonths * @category Month Helpers * @summary Add the specified number of months to the given date. * * @description * Add the specified number of months to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of months to be added. * * @returns The new date with the months added * * @example * // Add 5 months to 1 September 2014: * const result = addMonths(new Date(2014, 8, 1), 5) * //=> Sun Feb 01 2015 00:00:00 * * // Add one month to 30 January 2023: * const result = addMonths(new Date(2023, 0, 30), 1) * //=> Tue Feb 28 2023 00:00:00 */ function addMonths_addMonths(date, amount) { const _date = toDate_toDate(date); if (isNaN(amount)) return constructFrom_constructFrom(date, NaN); if (!amount) { // If 0 months, no-op to avoid changing times in the hour before end of DST return _date; } const dayOfMonth = _date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we // want except that dates will wrap around the end of a month, meaning that // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So // we'll default to the end of the desired month by adding 1 to the desired // month and using a date of 0 to back up one day to the end of the desired // month. const endOfDesiredMonth = constructFrom_constructFrom(date, _date.getTime()); endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); const daysInMonth = endOfDesiredMonth.getDate(); if (dayOfMonth >= daysInMonth) { // If we're already at the end of the month, then this is the correct date // and we're done. return endOfDesiredMonth; } else { // Otherwise, we now know that setting the original day-of-month value won't // cause an overflow, so set the desired day-of-month. Note that we can't // just set the date of `endOfDesiredMonth` because that object may have had // its time changed in the unusual case where where a DST transition was on // the last day of the month and its local time was in the hour skipped or // repeated next to a DST transition. So we use `date` instead which is // guaranteed to still have the original time. _date.setFullYear( endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth, ); return _date; } } // Fallback for modularized imports: /* harmony default export */ const date_fns_addMonths = ((/* unused pure expression or super */ null && (addMonths_addMonths))); ;// CONCATENATED MODULE: ./node_modules/date-fns/subMonths.mjs /** * @name subMonths * @category Month Helpers * @summary Subtract the specified number of months from the given date. * * @description * Subtract the specified number of months from the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of months to be subtracted. * * @returns The new date with the months subtracted * * @example * // Subtract 5 months from 1 February 2015: * const result = subMonths(new Date(2015, 1, 1), 5) * //=> Mon Sep 01 2014 00:00:00 */ function subMonths_subMonths(date, amount) { return addMonths_addMonths(date, -amount); } // Fallback for modularized imports: /* harmony default export */ const date_fns_subMonths = ((/* unused pure expression or super */ null && (subMonths_subMonths))); ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs const formatDistanceLocale = { lessThanXSeconds: { one: "less than a second", other: "less than {{count}} seconds", }, xSeconds: { one: "1 second", other: "{{count}} seconds", }, halfAMinute: "half a minute", lessThanXMinutes: { one: "less than a minute", other: "less than {{count}} minutes", }, xMinutes: { one: "1 minute", other: "{{count}} minutes", }, aboutXHours: { one: "about 1 hour", other: "about {{count}} hours", }, xHours: { one: "1 hour", other: "{{count}} hours", }, xDays: { one: "1 day", other: "{{count}} days", }, aboutXWeeks: { one: "about 1 week", other: "about {{count}} weeks", }, xWeeks: { one: "1 week", other: "{{count}} weeks", }, aboutXMonths: { one: "about 1 month", other: "about {{count}} months", }, xMonths: { one: "1 month", other: "{{count}} months", }, aboutXYears: { one: "about 1 year", other: "about {{count}} years", }, xYears: { one: "1 year", other: "{{count}} years", }, overXYears: { one: "over 1 year", other: "over {{count}} years", }, almostXYears: { one: "almost 1 year", other: "almost {{count}} years", }, }; const formatDistance = (token, count, options) => { let result; const tokenValue = formatDistanceLocale[token]; if (typeof tokenValue === "string") { result = tokenValue; } else if (count === 1) { result = tokenValue.one; } else { result = tokenValue.other.replace("{{count}}", count.toString()); } if (options?.addSuffix) { if (options.comparison && options.comparison > 0) { return "in " + result; } else { return result + " ago"; } } return result; }; ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs function buildFormatLongFn(args) { return (options = {}) => { // TODO: Remove String() const width = options.width ? String(options.width) : args.defaultWidth; const format = args.formats[width] || args.formats[args.defaultWidth]; return format; }; } ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/en-US/_lib/formatLong.mjs const dateFormats = { full: "EEEE, MMMM do, y", long: "MMMM do, y", medium: "MMM d, y", short: "MM/dd/yyyy", }; const timeFormats = { full: "h:mm:ss a zzzz", long: "h:mm:ss a z", medium: "h:mm:ss a", short: "h:mm a", }; const dateTimeFormats = { full: "{{date}} 'at' {{time}}", long: "{{date}} 'at' {{time}}", medium: "{{date}}, {{time}}", short: "{{date}}, {{time}}", }; const formatLong = { date: buildFormatLongFn({ formats: dateFormats, defaultWidth: "full", }), time: buildFormatLongFn({ formats: timeFormats, defaultWidth: "full", }), dateTime: buildFormatLongFn({ formats: dateTimeFormats, defaultWidth: "full", }), }; ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs const formatRelativeLocale = { lastWeek: "'last' eeee 'at' p", yesterday: "'yesterday at' p", today: "'today at' p", tomorrow: "'tomorrow at' p", nextWeek: "eeee 'at' p", other: "P", }; const formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token]; ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs /* eslint-disable no-unused-vars */ /** * The localize function argument callback which allows to convert raw value to * the actual type. * * @param value - The value to convert * * @returns The converted value */ /** * The map of localized values for each width. */ /** * The index type of the locale unit value. It types conversion of units of * values that don't start at 0 (i.e. quarters). */ /** * Converts the unit value to the tuple of values. */ /** * The tuple of localized era values. The first element represents BC, * the second element represents AD. */ /** * The tuple of localized quarter values. The first element represents Q1. */ /** * The tuple of localized day values. The first element represents Sunday. */ /** * The tuple of localized month values. The first element represents January. */ function buildLocalizeFn(args) { return (value, options) => { const context = options?.context ? String(options.context) : "standalone"; let valuesArray; if (context === "formatting" && args.formattingValues) { const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; const width = options?.width ? String(options.width) : defaultWidth; valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; } else { const defaultWidth = args.defaultWidth; const width = options?.width ? String(options.width) : args.defaultWidth; valuesArray = args.values[width] || args.values[defaultWidth]; } const index = args.argumentCallback ? args.argumentCallback(value) : value; // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it! return valuesArray[index]; }; } ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/en-US/_lib/localize.mjs const eraValues = { narrow: ["B", "A"], abbreviated: ["BC", "AD"], wide: ["Before Christ", "Anno Domini"], }; const quarterValues = { narrow: ["1", "2", "3", "4"], abbreviated: ["Q1", "Q2", "Q3", "Q4"], wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], }; // Note: in English, the names of days of the week and months are capitalized. // If you are making a new locale based on this one, check if the same is true for the language you're working on. // Generally, formatted dates should look like they are in the middle of a sentence, // e.g. in Spanish language the weekdays and months should be in the lowercase. const monthValues = { narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], abbreviated: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ], wide: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ], }; const dayValues = { narrow: ["S", "M", "T", "W", "T", "F", "S"], short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], wide: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", ], }; const dayPeriodValues = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night", }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night", }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night", }, }; const formattingDayPeriodValues = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night", }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night", }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night", }, }; const ordinalNumber = (dirtyNumber, _options) => { const number = Number(dirtyNumber); // If ordinal numbers depend on context, for example, // if they are different for different grammatical genders, // use `options.unit`. // // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear', // 'day', 'hour', 'minute', 'second'. const rem100 = number % 100; if (rem100 > 20 || rem100 < 10) { switch (rem100 % 10) { case 1: return number + "st"; case 2: return number + "nd"; case 3: return number + "rd"; } } return number + "th"; }; const localize = { ordinalNumber, era: buildLocalizeFn({ values: eraValues, defaultWidth: "wide", }), quarter: buildLocalizeFn({ values: quarterValues, defaultWidth: "wide", argumentCallback: (quarter) => quarter - 1, }), month: buildLocalizeFn({ values: monthValues, defaultWidth: "wide", }), day: buildLocalizeFn({ values: dayValues, defaultWidth: "wide", }), dayPeriod: buildLocalizeFn({ values: dayPeriodValues, defaultWidth: "wide", formattingValues: formattingDayPeriodValues, defaultFormattingWidth: "wide", }), }; ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/_lib/buildMatchFn.mjs function buildMatchFn(args) { return (string, options = {}) => { const width = options.width; const matchPattern = (width && args.matchPatterns[width]) || args.matchPatterns[args.defaultMatchWidth]; const matchResult = string.match(matchPattern); if (!matchResult) { return null; } const matchedString = matchResult[0]; const parsePatterns = (width && args.parsePatterns[width]) || args.parsePatterns[args.defaultParseWidth]; const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type findKey(parsePatterns, (pattern) => pattern.test(matchedString)); let value; value = args.valueCallback ? args.valueCallback(key) : key; value = options.valueCallback ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type options.valueCallback(value) : value; const rest = string.slice(matchedString.length); return { value, rest }; }; } function findKey(object, predicate) { for (const key in object) { if ( Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key]) ) { return key; } } return undefined; } function findIndex(array, predicate) { for (let key = 0; key < array.length; key++) { if (predicate(array[key])) { return key; } } return undefined; } ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs function buildMatchPatternFn(args) { return (string, options = {}) => { const matchResult = string.match(args.matchPattern); if (!matchResult) return null; const matchedString = matchResult[0]; const parseResult = string.match(args.parsePattern); if (!parseResult) return null; let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type value = options.valueCallback ? options.valueCallback(value) : value; const rest = string.slice(matchedString.length); return { value, rest }; }; } ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/en-US/_lib/match.mjs const matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; const parseOrdinalNumberPattern = /\d+/i; const matchEraPatterns = { narrow: /^(b|a)/i, abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, wide: /^(before christ|before common era|anno domini|common era)/i, }; const parseEraPatterns = { any: [/^b/i, /^(a|c)/i], }; const matchQuarterPatterns = { narrow: /^[1234]/i, abbreviated: /^q[1234]/i, wide: /^[1234](th|st|nd|rd)? quarter/i, }; const parseQuarterPatterns = { any: [/1/i, /2/i, /3/i, /4/i], }; const matchMonthPatterns = { narrow: /^[jfmasond]/i, abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i, }; const parseMonthPatterns = { narrow: [ /^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i, ], any: [ /^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i, ], }; const matchDayPatterns = { narrow: /^[smtwf]/i, short: /^(su|mo|tu|we|th|fr|sa)/i, abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i, }; const parseDayPatterns = { narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i], }; const matchDayPeriodPatterns = { narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i, }; const parseDayPeriodPatterns = { any: { am: /^a/i, pm: /^p/i, midnight: /^mi/i, noon: /^no/i, morning: /morning/i, afternoon: /afternoon/i, evening: /evening/i, night: /night/i, }, }; const match_match = { ordinalNumber: buildMatchPatternFn({ matchPattern: matchOrdinalNumberPattern, parsePattern: parseOrdinalNumberPattern, valueCallback: (value) => parseInt(value, 10), }), era: buildMatchFn({ matchPatterns: matchEraPatterns, defaultMatchWidth: "wide", parsePatterns: parseEraPatterns, defaultParseWidth: "any", }), quarter: buildMatchFn({ matchPatterns: matchQuarterPatterns, defaultMatchWidth: "wide", parsePatterns: parseQuarterPatterns, defaultParseWidth: "any", valueCallback: (index) => index + 1, }), month: buildMatchFn({ matchPatterns: matchMonthPatterns, defaultMatchWidth: "wide", parsePatterns: parseMonthPatterns, defaultParseWidth: "any", }), day: buildMatchFn({ matchPatterns: matchDayPatterns, defaultMatchWidth: "wide", parsePatterns: parseDayPatterns, defaultParseWidth: "any", }), dayPeriod: buildMatchFn({ matchPatterns: matchDayPeriodPatterns, defaultMatchWidth: "any", parsePatterns: parseDayPeriodPatterns, defaultParseWidth: "any", }), }; ;// CONCATENATED MODULE: ./node_modules/date-fns/locale/en-US.mjs /** * @category Locales * @summary English locale (United States). * @language English * @iso-639-2 eng * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp) * @author Lesha Koss [@leshakoss](https://github.com/leshakoss) */ const enUS = { code: "en-US", formatDistance: formatDistance, formatLong: formatLong, formatRelative: formatRelative, localize: localize, match: match_match, options: { weekStartsOn: 0 /* Sunday */, firstWeekContainsDate: 1, }, }; // Fallback for modularized imports: /* harmony default export */ const en_US = ((/* unused pure expression or super */ null && (enUS))); ;// CONCATENATED MODULE: ./node_modules/date-fns/_lib/defaultOptions.mjs let defaultOptions_defaultOptions = {}; function defaultOptions_getDefaultOptions() { return defaultOptions_defaultOptions; } function setDefaultOptions(newOptions) { defaultOptions_defaultOptions = newOptions; } ;// CONCATENATED MODULE: ./node_modules/date-fns/constants.mjs /** * @module constants * @summary Useful constants * @description * Collection of useful date constants. * * The constants could be imported from `date-fns/constants`: * * ```ts * import { maxTime, minTime } from "./constants/date-fns/constants"; * * function isAllowedTime(time) { * return time <= maxTime && time >= minTime; * } * ``` */ /** * @constant * @name daysInWeek * @summary Days in 1 week. */ const daysInWeek = 7; /** * @constant * @name daysInYear * @summary Days in 1 year. * * @description * How many days in a year. * * One years equals 365.2425 days according to the formula: * * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400. * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days */ const daysInYear = 365.2425; /** * @constant * @name maxTime * @summary Maximum allowed time. * * @example * import { maxTime } from "./constants/date-fns/constants"; * * const isValid = 8640000000000001 <= maxTime; * //=> false * * new Date(8640000000000001); * //=> Invalid Date */ const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000; /** * @constant * @name minTime * @summary Minimum allowed time. * * @example * import { minTime } from "./constants/date-fns/constants"; * * const isValid = -8640000000000001 >= minTime; * //=> false * * new Date(-8640000000000001) * //=> Invalid Date */ const minTime = -maxTime; /** * @constant * @name millisecondsInWeek * @summary Milliseconds in 1 week. */ const millisecondsInWeek = 604800000; /** * @constant * @name millisecondsInDay * @summary Milliseconds in 1 day. */ const millisecondsInDay = 86400000; /** * @constant * @name millisecondsInMinute * @summary Milliseconds in 1 minute */ const millisecondsInMinute = 60000; /** * @constant * @name millisecondsInHour * @summary Milliseconds in 1 hour */ const millisecondsInHour = 3600000; /** * @constant * @name millisecondsInSecond * @summary Milliseconds in 1 second */ const millisecondsInSecond = 1000; /** * @constant * @name minutesInYear * @summary Minutes in 1 year. */ const minutesInYear = 525600; /** * @constant * @name minutesInMonth * @summary Minutes in 1 month. */ const minutesInMonth = 43200; /** * @constant * @name minutesInDay * @summary Minutes in 1 day. */ const minutesInDay = 1440; /** * @constant * @name minutesInHour * @summary Minutes in 1 hour. */ const minutesInHour = 60; /** * @constant * @name monthsInQuarter * @summary Months in 1 quarter. */ const monthsInQuarter = 3; /** * @constant * @name monthsInYear * @summary Months in 1 year. */ const monthsInYear = 12; /** * @constant * @name quartersInYear * @summary Quarters in 1 year */ const quartersInYear = 4; /** * @constant * @name secondsInHour * @summary Seconds in 1 hour. */ const secondsInHour = 3600; /** * @constant * @name secondsInMinute * @summary Seconds in 1 minute. */ const secondsInMinute = 60; /** * @constant * @name secondsInDay * @summary Seconds in 1 day. */ const secondsInDay = secondsInHour * 24; /** * @constant * @name secondsInWeek * @summary Seconds in 1 week. */ const secondsInWeek = secondsInDay * 7; /** * @constant * @name secondsInYear * @summary Seconds in 1 year. */ const secondsInYear = secondsInDay * daysInYear; /** * @constant * @name secondsInMonth * @summary Seconds in 1 month */ const secondsInMonth = secondsInYear / 12; /** * @constant * @name secondsInQuarter * @summary Seconds in 1 quarter. */ const secondsInQuarter = secondsInMonth * 3; ;// CONCATENATED MODULE: ./node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs /** * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds. * They usually appear for dates that denote time before the timezones were introduced * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891 * and GMT+01:00:00 after that date) * * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above, * which would lead to incorrect calculations. * * This function returns the timezone offset in milliseconds that takes seconds in account. */ function getTimezoneOffsetInMilliseconds(date) { const _date = toDate_toDate(date); const utcDate = new Date( Date.UTC( _date.getFullYear(), _date.getMonth(), _date.getDate(), _date.getHours(), _date.getMinutes(), _date.getSeconds(), _date.getMilliseconds(), ), ); utcDate.setUTCFullYear(_date.getFullYear()); return +date - +utcDate; } ;// CONCATENATED MODULE: ./node_modules/date-fns/differenceInCalendarDays.mjs /** * @name differenceInCalendarDays * @category Day Helpers * @summary Get the number of calendar days between the given dates. * * @description * Get the number of calendar days between the given dates. This means that the times are removed * from the dates and then the difference in days is calculated. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param dateLeft - The later date * @param dateRight - The earlier date * * @returns The number of calendar days * * @example * // How many calendar days are between * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00? * const result = differenceInCalendarDays( * new Date(2012, 6, 2, 0, 0), * new Date(2011, 6, 2, 23, 0) * ) * //=> 366 * // How many calendar days are between * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00? * const result = differenceInCalendarDays( * new Date(2011, 6, 3, 0, 1), * new Date(2011, 6, 2, 23, 59) * ) * //=> 1 */ function differenceInCalendarDays(dateLeft, dateRight) { const startOfDayLeft = startOfDay_startOfDay(dateLeft); const startOfDayRight = startOfDay_startOfDay(dateRight); const timestampLeft = +startOfDayLeft - getTimezoneOffsetInMilliseconds(startOfDayLeft); const timestampRight = +startOfDayRight - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer because the number of // milliseconds in a day is not constant (e.g. it's different in the week of // the daylight saving time clock shift). return Math.round((timestampLeft - timestampRight) / millisecondsInDay); } // Fallback for modularized imports: /* harmony default export */ const date_fns_differenceInCalendarDays = ((/* unused pure expression or super */ null && (differenceInCalendarDays))); ;// CONCATENATED MODULE: ./node_modules/date-fns/startOfYear.mjs /** * @name startOfYear * @category Year Helpers * @summary Return the start of a year for the given date. * * @description * Return the start of a year for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * * @returns The start of a year * * @example * // The start of a year for 2 September 2014 11:55:00: * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00)) * //=> Wed Jan 01 2014 00:00:00 */ function startOfYear(date) { const cleanDate = toDate_toDate(date); const _date = constructFrom_constructFrom(date, 0); _date.setFullYear(cleanDate.getFullYear(), 0, 1); _date.setHours(0, 0, 0, 0); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_startOfYear = ((/* unused pure expression or super */ null && (startOfYear))); ;// CONCATENATED MODULE: ./node_modules/date-fns/getDayOfYear.mjs /** * @name getDayOfYear * @category Day Helpers * @summary Get the day of the year of the given date. * * @description * Get the day of the year of the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The given date * * @returns The day of year * * @example * // Which day of the year is 2 July 2014? * const result = getDayOfYear(new Date(2014, 6, 2)) * //=> 183 */ function getDayOfYear(date) { const _date = toDate_toDate(date); const diff = differenceInCalendarDays(_date, startOfYear(_date)); const dayOfYear = diff + 1; return dayOfYear; } // Fallback for modularized imports: /* harmony default export */ const date_fns_getDayOfYear = ((/* unused pure expression or super */ null && (getDayOfYear))); ;// CONCATENATED MODULE: ./node_modules/date-fns/startOfWeek.mjs /** * The {@link startOfWeek} function options. */ /** * @name startOfWeek * @category Week Helpers * @summary Return the start of a week for the given date. * * @description * Return the start of a week for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * @param options - An object with options * * @returns The start of a week * * @example * // The start of a week for 2 September 2014 11:55:00: * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Sun Aug 31 2014 00:00:00 * * @example * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00: * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) * //=> Mon Sep 01 2014 00:00:00 */ function startOfWeek_startOfWeek(date, options) { const defaultOptions = defaultOptions_getDefaultOptions(); const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions.weekStartsOn ?? defaultOptions.locale?.options?.weekStartsOn ?? 0; const _date = toDate_toDate(date); const day = _date.getDay(); const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; _date.setDate(_date.getDate() - diff); _date.setHours(0, 0, 0, 0); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_startOfWeek = ((/* unused pure expression or super */ null && (startOfWeek_startOfWeek))); ;// CONCATENATED MODULE: ./node_modules/date-fns/startOfISOWeek.mjs /** * @name startOfISOWeek * @category ISO Week Helpers * @summary Return the start of an ISO week for the given date. * * @description * Return the start of an ISO week for the given date. * The result will be in the local timezone. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * * @returns The start of an ISO week * * @example * // The start of an ISO week for 2 September 2014 11:55:00: * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Mon Sep 01 2014 00:00:00 */ function startOfISOWeek(date) { return startOfWeek_startOfWeek(date, { weekStartsOn: 1 }); } // Fallback for modularized imports: /* harmony default export */ const date_fns_startOfISOWeek = ((/* unused pure expression or super */ null && (startOfISOWeek))); ;// CONCATENATED MODULE: ./node_modules/date-fns/getISOWeekYear.mjs /** * @name getISOWeekYear * @category ISO Week-Numbering Year Helpers * @summary Get the ISO week-numbering year of the given date. * * @description * Get the ISO week-numbering year of the given date, * which always starts 3 days before the year's first Thursday. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The given date * * @returns The ISO week-numbering year * * @example * // Which ISO-week numbering year is 2 January 2005? * const result = getISOWeekYear(new Date(2005, 0, 2)) * //=> 2004 */ function getISOWeekYear(date) { const _date = toDate_toDate(date); const year = _date.getFullYear(); const fourthOfJanuaryOfNextYear = constructFrom_constructFrom(date, 0); fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); const fourthOfJanuaryOfThisYear = constructFrom_constructFrom(date, 0); fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); if (_date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (_date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } // Fallback for modularized imports: /* harmony default export */ const date_fns_getISOWeekYear = ((/* unused pure expression or super */ null && (getISOWeekYear))); ;// CONCATENATED MODULE: ./node_modules/date-fns/startOfISOWeekYear.mjs /** * @name startOfISOWeekYear * @category ISO Week-Numbering Year Helpers * @summary Return the start of an ISO week-numbering year for the given date. * * @description * Return the start of an ISO week-numbering year, * which always starts 3 days before the year's first Thursday. * The result will be in the local timezone. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * * @returns The start of an ISO week-numbering year * * @example * // The start of an ISO week-numbering year for 2 July 2005: * const result = startOfISOWeekYear(new Date(2005, 6, 2)) * //=> Mon Jan 03 2005 00:00:00 */ function startOfISOWeekYear(date) { const year = getISOWeekYear(date); const fourthOfJanuary = constructFrom_constructFrom(date, 0); fourthOfJanuary.setFullYear(year, 0, 4); fourthOfJanuary.setHours(0, 0, 0, 0); return startOfISOWeek(fourthOfJanuary); } // Fallback for modularized imports: /* harmony default export */ const date_fns_startOfISOWeekYear = ((/* unused pure expression or super */ null && (startOfISOWeekYear))); ;// CONCATENATED MODULE: ./node_modules/date-fns/getISOWeek.mjs /** * @name getISOWeek * @category ISO Week Helpers * @summary Get the ISO week of the given date. * * @description * Get the ISO week of the given date. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The given date * * @returns The ISO week * * @example * // Which week of the ISO-week numbering year is 2 January 2005? * const result = getISOWeek(new Date(2005, 0, 2)) * //=> 53 */ function getISOWeek(date) { const _date = toDate_toDate(date); const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); // Round the number of weeks to the nearest integer because the number of // milliseconds in a week is not constant (e.g. it's different in the week of // the daylight saving time clock shift). return Math.round(diff / millisecondsInWeek) + 1; } // Fallback for modularized imports: /* harmony default export */ const date_fns_getISOWeek = ((/* unused pure expression or super */ null && (getISOWeek))); ;// CONCATENATED MODULE: ./node_modules/date-fns/getWeekYear.mjs /** * The {@link getWeekYear} function options. */ /** * @name getWeekYear * @category Week-Numbering Year Helpers * @summary Get the local week-numbering year of the given date. * * @description * Get the local week-numbering year of the given date. * The exact calculation depends on the values of * `options.weekStartsOn` (which is the index of the first day of the week) * and `options.firstWeekContainsDate` (which is the day of January, which is always in * the first week of the week-numbering year) * * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The given date * @param options - An object with options. * * @returns The local week-numbering year * * @example * // Which week numbering year is 26 December 2004 with the default settings? * const result = getWeekYear(new Date(2004, 11, 26)) * //=> 2005 * * @example * // Which week numbering year is 26 December 2004 if week starts on Saturday? * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 }) * //=> 2004 * * @example * // Which week numbering year is 26 December 2004 if the first week contains 4 January? * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 }) * //=> 2004 */ function getWeekYear(date, options) { const _date = toDate_toDate(date); const year = _date.getFullYear(); const defaultOptions = defaultOptions_getDefaultOptions(); const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions.firstWeekContainsDate ?? defaultOptions.locale?.options?.firstWeekContainsDate ?? 1; const firstWeekOfNextYear = constructFrom_constructFrom(date, 0); firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); firstWeekOfNextYear.setHours(0, 0, 0, 0); const startOfNextYear = startOfWeek_startOfWeek(firstWeekOfNextYear, options); const firstWeekOfThisYear = constructFrom_constructFrom(date, 0); firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); firstWeekOfThisYear.setHours(0, 0, 0, 0); const startOfThisYear = startOfWeek_startOfWeek(firstWeekOfThisYear, options); if (_date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (_date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } // Fallback for modularized imports: /* harmony default export */ const date_fns_getWeekYear = ((/* unused pure expression or super */ null && (getWeekYear))); ;// CONCATENATED MODULE: ./node_modules/date-fns/startOfWeekYear.mjs /** * The {@link startOfWeekYear} function options. */ /** * @name startOfWeekYear * @category Week-Numbering Year Helpers * @summary Return the start of a local week-numbering year for the given date. * * @description * Return the start of a local week-numbering year. * The exact calculation depends on the values of * `options.weekStartsOn` (which is the index of the first day of the week) * and `options.firstWeekContainsDate` (which is the day of January, which is always in * the first week of the week-numbering year) * * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * @param options - An object with options * * @returns The start of a week-numbering year * * @example * // The start of an a week-numbering year for 2 July 2005 with default settings: * const result = startOfWeekYear(new Date(2005, 6, 2)) * //=> Sun Dec 26 2004 00:00:00 * * @example * // The start of a week-numbering year for 2 July 2005 * // if Monday is the first day of week * // and 4 January is always in the first week of the year: * const result = startOfWeekYear(new Date(2005, 6, 2), { * weekStartsOn: 1, * firstWeekContainsDate: 4 * }) * //=> Mon Jan 03 2005 00:00:00 */ function startOfWeekYear(date, options) { const defaultOptions = defaultOptions_getDefaultOptions(); const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions.firstWeekContainsDate ?? defaultOptions.locale?.options?.firstWeekContainsDate ?? 1; const year = getWeekYear(date, options); const firstWeek = constructFrom_constructFrom(date, 0); firstWeek.setFullYear(year, 0, firstWeekContainsDate); firstWeek.setHours(0, 0, 0, 0); const _date = startOfWeek_startOfWeek(firstWeek, options); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_startOfWeekYear = ((/* unused pure expression or super */ null && (startOfWeekYear))); ;// CONCATENATED MODULE: ./node_modules/date-fns/getWeek.mjs /** * The {@link getWeek} function options. */ /** * @name getWeek * @category Week Helpers * @summary Get the local week index of the given date. * * @description * Get the local week index of the given date. * The exact calculation depends on the values of * `options.weekStartsOn` (which is the index of the first day of the week) * and `options.firstWeekContainsDate` (which is the day of January, which is always in * the first week of the week-numbering year) * * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The given date * @param options - An object with options * * @returns The week * * @example * // Which week of the local week numbering year is 2 January 2005 with default options? * const result = getWeek(new Date(2005, 0, 2)) * //=> 2 * * @example * // Which week of the local week numbering year is 2 January 2005, * // if Monday is the first day of the week, * // and the first week of the year always contains 4 January? * const result = getWeek(new Date(2005, 0, 2), { * weekStartsOn: 1, * firstWeekContainsDate: 4 * }) * //=> 53 */ function getWeek(date, options) { const _date = toDate_toDate(date); const diff = +startOfWeek_startOfWeek(_date, options) - +startOfWeekYear(_date, options); // Round the number of weeks to the nearest integer because the number of // milliseconds in a week is not constant (e.g. it's different in the week of // the daylight saving time clock shift). return Math.round(diff / millisecondsInWeek) + 1; } // Fallback for modularized imports: /* harmony default export */ const date_fns_getWeek = ((/* unused pure expression or super */ null && (getWeek))); ;// CONCATENATED MODULE: ./node_modules/date-fns/_lib/addLeadingZeros.mjs function addLeadingZeros(number, targetLength) { const sign = number < 0 ? "-" : ""; const output = Math.abs(number).toString().padStart(targetLength, "0"); return sign + output; } ;// CONCATENATED MODULE: ./node_modules/date-fns/_lib/format/lightFormatters.mjs /* * | | Unit | | Unit | * |-----|--------------------------------|-----|--------------------------------| * | a | AM, PM | A* | | * | d | Day of month | D | | * | h | Hour [1-12] | H | Hour [0-23] | * | m | Minute | M | Month | * | s | Second | S | Fraction of second | * | y | Year (abs) | Y | | * * Letters marked by * are not implemented but reserved by Unicode standard. */ const lightFormatters = { // Year y(date, token) { // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens // | Year | y | yy | yyy | yyyy | yyyyy | // |----------|-------|----|-------|-------|-------| // | AD 1 | 1 | 01 | 001 | 0001 | 00001 | // | AD 12 | 12 | 12 | 012 | 0012 | 00012 | // | AD 123 | 123 | 23 | 123 | 0123 | 00123 | // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 | // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 | const signedYear = date.getFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript) const year = signedYear > 0 ? signedYear : 1 - signedYear; return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); }, // Month M(date, token) { const month = date.getMonth(); return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); }, // Day of the month d(date, token) { return addLeadingZeros(date.getDate(), token.length); }, // AM or PM a(date, token) { const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; switch (token) { case "a": case "aa": return dayPeriodEnumValue.toUpperCase(); case "aaa": return dayPeriodEnumValue; case "aaaaa": return dayPeriodEnumValue[0]; case "aaaa": default: return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; } }, // Hour [1-12] h(date, token) { return addLeadingZeros(date.getHours() % 12 || 12, token.length); }, // Hour [0-23] H(date, token) { return addLeadingZeros(date.getHours(), token.length); }, // Minute m(date, token) { return addLeadingZeros(date.getMinutes(), token.length); }, // Second s(date, token) { return addLeadingZeros(date.getSeconds(), token.length); }, // Fraction of second S(date, token) { const numberOfDigits = token.length; const milliseconds = date.getMilliseconds(); const fractionalSeconds = Math.trunc( milliseconds * Math.pow(10, numberOfDigits - 3), ); return addLeadingZeros(fractionalSeconds, token.length); }, }; ;// CONCATENATED MODULE: ./node_modules/date-fns/_lib/format/formatters.mjs const dayPeriodEnum = { am: "am", pm: "pm", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night", }; /* * | | Unit | | Unit | * |-----|--------------------------------|-----|--------------------------------| * | a | AM, PM | A* | Milliseconds in day | * | b | AM, PM, noon, midnight | B | Flexible day period | * | c | Stand-alone local day of week | C* | Localized hour w/ day period | * | d | Day of month | D | Day of year | * | e | Local day of week | E | Day of week | * | f | | F* | Day of week in month | * | g* | Modified Julian day | G | Era | * | h | Hour [1-12] | H | Hour [0-23] | * | i! | ISO day of week | I! | ISO week of year | * | j* | Localized hour w/ day period | J* | Localized hour w/o day period | * | k | Hour [1-24] | K | Hour [0-11] | * | l* | (deprecated) | L | Stand-alone month | * | m | Minute | M | Month | * | n | | N | | * | o! | Ordinal number modifier | O | Timezone (GMT) | * | p! | Long localized time | P! | Long localized date | * | q | Stand-alone quarter | Q | Quarter | * | r* | Related Gregorian year | R! | ISO week-numbering year | * | s | Second | S | Fraction of second | * | t! | Seconds timestamp | T! | Milliseconds timestamp | * | u | Extended year | U* | Cyclic year | * | v* | Timezone (generic non-locat.) | V* | Timezone (location) | * | w | Local week of year | W* | Week of month | * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) | * | y | Year (abs) | Y | Local week-numbering year | * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) | * * Letters marked by * are not implemented but reserved by Unicode standard. * * Letters marked by ! are non-standard, but implemented by date-fns: * - `o` modifies the previous token to turn it into an ordinal (see `format` docs) * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days, * i.e. 7 for Sunday, 1 for Monday, etc. * - `I` is ISO week of year, as opposed to `w` which is local week of year. * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year. * `R` is supposed to be used in conjunction with `I` and `i` * for universal ISO week-numbering date, whereas * `Y` is supposed to be used in conjunction with `w` and `e` * for week-numbering date specific to the locale. * - `P` is long localized date format * - `p` is long localized time format */ const formatters = { // Era G: function (date, token, localize) { const era = date.getFullYear() > 0 ? 1 : 0; switch (token) { // AD, BC case "G": case "GG": case "GGG": return localize.era(era, { width: "abbreviated" }); // A, B case "GGGGG": return localize.era(era, { width: "narrow" }); // Anno Domini, Before Christ case "GGGG": default: return localize.era(era, { width: "wide" }); } }, // Year y: function (date, token, localize) { // Ordinal number if (token === "yo") { const signedYear = date.getFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript) const year = signedYear > 0 ? signedYear : 1 - signedYear; return localize.ordinalNumber(year, { unit: "year" }); } return lightFormatters.y(date, token); }, // Local week-numbering year Y: function (date, token, localize, options) { const signedWeekYear = getWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript) const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year if (token === "YY") { const twoDigitYear = weekYear % 100; return addLeadingZeros(twoDigitYear, 2); } // Ordinal number if (token === "Yo") { return localize.ordinalNumber(weekYear, { unit: "year" }); } // Padding return addLeadingZeros(weekYear, token.length); }, // ISO week-numbering year R: function (date, token) { const isoWeekYear = getISOWeekYear(date); // Padding return addLeadingZeros(isoWeekYear, token.length); }, // Extended year. This is a single number designating the year of this calendar system. // The main difference between `y` and `u` localizers are B.C. years: // | Year | `y` | `u` | // |------|-----|-----| // | AC 1 | 1 | 1 | // | BC 1 | 1 | 0 | // | BC 2 | 2 | -1 | // Also `yy` always returns the last two digits of a year, // while `uu` pads single digit years to 2 characters and returns other years unchanged. u: function (date, token) { const year = date.getFullYear(); return addLeadingZeros(year, token.length); }, // Quarter Q: function (date, token, localize) { const quarter = Math.ceil((date.getMonth() + 1) / 3); switch (token) { // 1, 2, 3, 4 case "Q": return String(quarter); // 01, 02, 03, 04 case "QQ": return addLeadingZeros(quarter, 2); // 1st, 2nd, 3rd, 4th case "Qo": return localize.ordinalNumber(quarter, { unit: "quarter" }); // Q1, Q2, Q3, Q4 case "QQQ": return localize.quarter(quarter, { width: "abbreviated", context: "formatting", }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) case "QQQQQ": return localize.quarter(quarter, { width: "narrow", context: "formatting", }); // 1st quarter, 2nd quarter, ... case "QQQQ": default: return localize.quarter(quarter, { width: "wide", context: "formatting", }); } }, // Stand-alone quarter q: function (date, token, localize) { const quarter = Math.ceil((date.getMonth() + 1) / 3); switch (token) { // 1, 2, 3, 4 case "q": return String(quarter); // 01, 02, 03, 04 case "qq": return addLeadingZeros(quarter, 2); // 1st, 2nd, 3rd, 4th case "qo": return localize.ordinalNumber(quarter, { unit: "quarter" }); // Q1, Q2, Q3, Q4 case "qqq": return localize.quarter(quarter, { width: "abbreviated", context: "standalone", }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) case "qqqqq": return localize.quarter(quarter, { width: "narrow", context: "standalone", }); // 1st quarter, 2nd quarter, ... case "qqqq": default: return localize.quarter(quarter, { width: "wide", context: "standalone", }); } }, // Month M: function (date, token, localize) { const month = date.getMonth(); switch (token) { case "M": case "MM": return lightFormatters.M(date, token); // 1st, 2nd, ..., 12th case "Mo": return localize.ordinalNumber(month + 1, { unit: "month" }); // Jan, Feb, ..., Dec case "MMM": return localize.month(month, { width: "abbreviated", context: "formatting", }); // J, F, ..., D case "MMMMM": return localize.month(month, { width: "narrow", context: "formatting", }); // January, February, ..., December case "MMMM": default: return localize.month(month, { width: "wide", context: "formatting" }); } }, // Stand-alone month L: function (date, token, localize) { const month = date.getMonth(); switch (token) { // 1, 2, ..., 12 case "L": return String(month + 1); // 01, 02, ..., 12 case "LL": return addLeadingZeros(month + 1, 2); // 1st, 2nd, ..., 12th case "Lo": return localize.ordinalNumber(month + 1, { unit: "month" }); // Jan, Feb, ..., Dec case "LLL": return localize.month(month, { width: "abbreviated", context: "standalone", }); // J, F, ..., D case "LLLLL": return localize.month(month, { width: "narrow", context: "standalone", }); // January, February, ..., December case "LLLL": default: return localize.month(month, { width: "wide", context: "standalone" }); } }, // Local week of year w: function (date, token, localize, options) { const week = getWeek(date, options); if (token === "wo") { return localize.ordinalNumber(week, { unit: "week" }); } return addLeadingZeros(week, token.length); }, // ISO week of year I: function (date, token, localize) { const isoWeek = getISOWeek(date); if (token === "Io") { return localize.ordinalNumber(isoWeek, { unit: "week" }); } return addLeadingZeros(isoWeek, token.length); }, // Day of the month d: function (date, token, localize) { if (token === "do") { return localize.ordinalNumber(date.getDate(), { unit: "date" }); } return lightFormatters.d(date, token); }, // Day of year D: function (date, token, localize) { const dayOfYear = getDayOfYear(date); if (token === "Do") { return localize.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); } return addLeadingZeros(dayOfYear, token.length); }, // Day of week E: function (date, token, localize) { const dayOfWeek = date.getDay(); switch (token) { // Tue case "E": case "EE": case "EEE": return localize.day(dayOfWeek, { width: "abbreviated", context: "formatting", }); // T case "EEEEE": return localize.day(dayOfWeek, { width: "narrow", context: "formatting", }); // Tu case "EEEEEE": return localize.day(dayOfWeek, { width: "short", context: "formatting", }); // Tuesday case "EEEE": default: return localize.day(dayOfWeek, { width: "wide", context: "formatting", }); } }, // Local day of week e: function (date, token, localize, options) { const dayOfWeek = date.getDay(); const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { // Numerical value (Nth day of week with current locale or weekStartsOn) case "e": return String(localDayOfWeek); // Padded numerical value case "ee": return addLeadingZeros(localDayOfWeek, 2); // 1st, 2nd, ..., 7th case "eo": return localize.ordinalNumber(localDayOfWeek, { unit: "day" }); case "eee": return localize.day(dayOfWeek, { width: "abbreviated", context: "formatting", }); // T case "eeeee": return localize.day(dayOfWeek, { width: "narrow", context: "formatting", }); // Tu case "eeeeee": return localize.day(dayOfWeek, { width: "short", context: "formatting", }); // Tuesday case "eeee": default: return localize.day(dayOfWeek, { width: "wide", context: "formatting", }); } }, // Stand-alone local day of week c: function (date, token, localize, options) { const dayOfWeek = date.getDay(); const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { // Numerical value (same as in `e`) case "c": return String(localDayOfWeek); // Padded numerical value case "cc": return addLeadingZeros(localDayOfWeek, token.length); // 1st, 2nd, ..., 7th case "co": return localize.ordinalNumber(localDayOfWeek, { unit: "day" }); case "ccc": return localize.day(dayOfWeek, { width: "abbreviated", context: "standalone", }); // T case "ccccc": return localize.day(dayOfWeek, { width: "narrow", context: "standalone", }); // Tu case "cccccc": return localize.day(dayOfWeek, { width: "short", context: "standalone", }); // Tuesday case "cccc": default: return localize.day(dayOfWeek, { width: "wide", context: "standalone", }); } }, // ISO day of week i: function (date, token, localize) { const dayOfWeek = date.getDay(); const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; switch (token) { // 2 case "i": return String(isoDayOfWeek); // 02 case "ii": return addLeadingZeros(isoDayOfWeek, token.length); // 2nd case "io": return localize.ordinalNumber(isoDayOfWeek, { unit: "day" }); // Tue case "iii": return localize.day(dayOfWeek, { width: "abbreviated", context: "formatting", }); // T case "iiiii": return localize.day(dayOfWeek, { width: "narrow", context: "formatting", }); // Tu case "iiiiii": return localize.day(dayOfWeek, { width: "short", context: "formatting", }); // Tuesday case "iiii": default: return localize.day(dayOfWeek, { width: "wide", context: "formatting", }); } }, // AM or PM a: function (date, token, localize) { const hours = date.getHours(); const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; switch (token) { case "a": case "aa": return localize.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting", }); case "aaa": return localize .dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting", }) .toLowerCase(); case "aaaaa": return localize.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting", }); case "aaaa": default: return localize.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting", }); } }, // AM, PM, midnight, noon b: function (date, token, localize) { const hours = date.getHours(); let dayPeriodEnumValue; if (hours === 12) { dayPeriodEnumValue = dayPeriodEnum.noon; } else if (hours === 0) { dayPeriodEnumValue = dayPeriodEnum.midnight; } else { dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; } switch (token) { case "b": case "bb": return localize.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting", }); case "bbb": return localize .dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting", }) .toLowerCase(); case "bbbbb": return localize.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting", }); case "bbbb": default: return localize.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting", }); } }, // in the morning, in the afternoon, in the evening, at night B: function (date, token, localize) { const hours = date.getHours(); let dayPeriodEnumValue; if (hours >= 17) { dayPeriodEnumValue = dayPeriodEnum.evening; } else if (hours >= 12) { dayPeriodEnumValue = dayPeriodEnum.afternoon; } else if (hours >= 4) { dayPeriodEnumValue = dayPeriodEnum.morning; } else { dayPeriodEnumValue = dayPeriodEnum.night; } switch (token) { case "B": case "BB": case "BBB": return localize.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting", }); case "BBBBB": return localize.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting", }); case "BBBB": default: return localize.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting", }); } }, // Hour [1-12] h: function (date, token, localize) { if (token === "ho") { let hours = date.getHours() % 12; if (hours === 0) hours = 12; return localize.ordinalNumber(hours, { unit: "hour" }); } return lightFormatters.h(date, token); }, // Hour [0-23] H: function (date, token, localize) { if (token === "Ho") { return localize.ordinalNumber(date.getHours(), { unit: "hour" }); } return lightFormatters.H(date, token); }, // Hour [0-11] K: function (date, token, localize) { const hours = date.getHours() % 12; if (token === "Ko") { return localize.ordinalNumber(hours, { unit: "hour" }); } return addLeadingZeros(hours, token.length); }, // Hour [1-24] k: function (date, token, localize) { let hours = date.getHours(); if (hours === 0) hours = 24; if (token === "ko") { return localize.ordinalNumber(hours, { unit: "hour" }); } return addLeadingZeros(hours, token.length); }, // Minute m: function (date, token, localize) { if (token === "mo") { return localize.ordinalNumber(date.getMinutes(), { unit: "minute" }); } return lightFormatters.m(date, token); }, // Second s: function (date, token, localize) { if (token === "so") { return localize.ordinalNumber(date.getSeconds(), { unit: "second" }); } return lightFormatters.s(date, token); }, // Fraction of second S: function (date, token) { return lightFormatters.S(date, token); }, // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) X: function (date, token, _localize) { const timezoneOffset = date.getTimezoneOffset(); if (timezoneOffset === 0) { return "Z"; } switch (token) { // Hours and optional minutes case "X": return formatTimezoneWithOptionalMinutes(timezoneOffset); // Hours, minutes and optional seconds without `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `XX` case "XXXX": case "XX": // Hours and minutes without `:` delimiter return formatTimezone(timezoneOffset); // Hours, minutes and optional seconds with `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `XXX` case "XXXXX": case "XXX": // Hours and minutes with `:` delimiter default: return formatTimezone(timezoneOffset, ":"); } }, // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) x: function (date, token, _localize) { const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Hours and optional minutes case "x": return formatTimezoneWithOptionalMinutes(timezoneOffset); // Hours, minutes and optional seconds without `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `xx` case "xxxx": case "xx": // Hours and minutes without `:` delimiter return formatTimezone(timezoneOffset); // Hours, minutes and optional seconds with `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `xxx` case "xxxxx": case "xxx": // Hours and minutes with `:` delimiter default: return formatTimezone(timezoneOffset, ":"); } }, // Timezone (GMT) O: function (date, token, _localize) { const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Short case "O": case "OO": case "OOO": return "GMT" + formatTimezoneShort(timezoneOffset, ":"); // Long case "OOOO": default: return "GMT" + formatTimezone(timezoneOffset, ":"); } }, // Timezone (specific non-location) z: function (date, token, _localize) { const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Short case "z": case "zz": case "zzz": return "GMT" + formatTimezoneShort(timezoneOffset, ":"); // Long case "zzzz": default: return "GMT" + formatTimezone(timezoneOffset, ":"); } }, // Seconds timestamp t: function (date, token, _localize) { const timestamp = Math.trunc(date.getTime() / 1000); return addLeadingZeros(timestamp, token.length); }, // Milliseconds timestamp T: function (date, token, _localize) { const timestamp = date.getTime(); return addLeadingZeros(timestamp, token.length); }, }; function formatTimezoneShort(offset, delimiter = "") { const sign = offset > 0 ? "-" : "+"; const absOffset = Math.abs(offset); const hours = Math.trunc(absOffset / 60); const minutes = absOffset % 60; if (minutes === 0) { return sign + String(hours); } return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); } function formatTimezoneWithOptionalMinutes(offset, delimiter) { if (offset % 60 === 0) { const sign = offset > 0 ? "-" : "+"; return sign + addLeadingZeros(Math.abs(offset) / 60, 2); } return formatTimezone(offset, delimiter); } function formatTimezone(offset, delimiter = "") { const sign = offset > 0 ? "-" : "+"; const absOffset = Math.abs(offset); const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2); const minutes = addLeadingZeros(absOffset % 60, 2); return sign + hours + delimiter + minutes; } ;// CONCATENATED MODULE: ./node_modules/date-fns/_lib/format/longFormatters.mjs const dateLongFormatter = (pattern, formatLong) => { switch (pattern) { case "P": return formatLong.date({ width: "short" }); case "PP": return formatLong.date({ width: "medium" }); case "PPP": return formatLong.date({ width: "long" }); case "PPPP": default: return formatLong.date({ width: "full" }); } }; const timeLongFormatter = (pattern, formatLong) => { switch (pattern) { case "p": return formatLong.time({ width: "short" }); case "pp": return formatLong.time({ width: "medium" }); case "ppp": return formatLong.time({ width: "long" }); case "pppp": default: return formatLong.time({ width: "full" }); } }; const dateTimeLongFormatter = (pattern, formatLong) => { const matchResult = pattern.match(/(P+)(p+)?/) || []; const datePattern = matchResult[1]; const timePattern = matchResult[2]; if (!timePattern) { return dateLongFormatter(pattern, formatLong); } let dateTimeFormat; switch (datePattern) { case "P": dateTimeFormat = formatLong.dateTime({ width: "short" }); break; case "PP": dateTimeFormat = formatLong.dateTime({ width: "medium" }); break; case "PPP": dateTimeFormat = formatLong.dateTime({ width: "long" }); break; case "PPPP": default: dateTimeFormat = formatLong.dateTime({ width: "full" }); break; } return dateTimeFormat .replace("{{date}}", dateLongFormatter(datePattern, formatLong)) .replace("{{time}}", timeLongFormatter(timePattern, formatLong)); }; const longFormatters = { p: timeLongFormatter, P: dateTimeLongFormatter, }; ;// CONCATENATED MODULE: ./node_modules/date-fns/_lib/protectedTokens.mjs const dayOfYearTokenRE = /^D+$/; const weekYearTokenRE = /^Y+$/; const throwTokens = ["D", "DD", "YY", "YYYY"]; function isProtectedDayOfYearToken(token) { return dayOfYearTokenRE.test(token); } function isProtectedWeekYearToken(token) { return weekYearTokenRE.test(token); } function warnOrThrowProtectedError(token, format, input) { const _message = message(token, format, input); console.warn(_message); if (throwTokens.includes(token)) throw new RangeError(_message); } function message(token, format, input) { const subject = token[0] === "Y" ? "years" : "days of the month"; return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; } ;// CONCATENATED MODULE: ./node_modules/date-fns/isDate.mjs /** * @name isDate * @category Common Helpers * @summary Is the given value a date? * * @description * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes. * * @param value - The value to check * * @returns True if the given value is a date * * @example * // For a valid date: * const result = isDate(new Date()) * //=> true * * @example * // For an invalid date: * const result = isDate(new Date(NaN)) * //=> true * * @example * // For some value: * const result = isDate('2014-02-31') * //=> false * * @example * // For an object: * const result = isDate({}) * //=> false */ function isDate(value) { return ( value instanceof Date || (typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]") ); } // Fallback for modularized imports: /* harmony default export */ const date_fns_isDate = ((/* unused pure expression or super */ null && (isDate))); ;// CONCATENATED MODULE: ./node_modules/date-fns/isValid.mjs /** * @name isValid * @category Common Helpers * @summary Is the given date valid? * * @description * Returns false if argument is Invalid Date and true otherwise. * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate) * Invalid Date is a Date, whose time value is NaN. * * Time value of Date: http://es5.github.io/#x15.9.1.1 * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to check * * @returns The date is valid * * @example * // For the valid date: * const result = isValid(new Date(2014, 1, 31)) * //=> true * * @example * // For the value, convertable into a date: * const result = isValid(1393804800000) * //=> true * * @example * // For the invalid date: * const result = isValid(new Date('')) * //=> false */ function isValid(date) { if (!isDate(date) && typeof date !== "number") { return false; } const _date = toDate_toDate(date); return !isNaN(Number(_date)); } // Fallback for modularized imports: /* harmony default export */ const date_fns_isValid = ((/* unused pure expression or super */ null && (isValid))); ;// CONCATENATED MODULE: ./node_modules/date-fns/format.mjs // Rexports of internal for libraries to use. // See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874 // This RegExp consists of three parts separated by `|`: // - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token // (one of the certain letters followed by `o`) // - (\w)\1* matches any sequences of the same letter // - '' matches two quote characters in a row // - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), // except a single quote symbol, which ends the sequence. // Two quote characters do not end the sequence. // If there is no matching single quote // then the sequence will continue until the end of the string. // - . matches any single character unmatched by previous parts of the RegExps const formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also // sequences of symbols P, p, and the combinations like `PPPPPPPppppp` const longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; const escapedStringRegExp = /^'([^]*?)'?$/; const doubleQuoteRegExp = /''/g; const unescapedLatinCharacterRegExp = /[a-zA-Z]/; /** * The {@link format} function options. */ /** * @name format * @alias formatDate * @category Common Helpers * @summary Format the date. * * @description * Return the formatted date string in the given format. The result may vary by locale. * * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * The characters wrapped between two single quotes characters (') are escaped. * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. * (see the last example) * * Format of the string is based on Unicode Technical Standard #35: * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table * with a few additions (see note 7 below the table). * * Accepted patterns: * | Unit | Pattern | Result examples | Notes | * |---------------------------------|---------|-----------------------------------|-------| * | Era | G..GGG | AD, BC | | * | | GGGG | Anno Domini, Before Christ | 2 | * | | GGGGG | A, B | | * | Calendar year | y | 44, 1, 1900, 2017 | 5 | * | | yo | 44th, 1st, 0th, 17th | 5,7 | * | | yy | 44, 01, 00, 17 | 5 | * | | yyy | 044, 001, 1900, 2017 | 5 | * | | yyyy | 0044, 0001, 1900, 2017 | 5 | * | | yyyyy | ... | 3,5 | * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 | * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 | * | | YY | 44, 01, 00, 17 | 5,8 | * | | YYY | 044, 001, 1900, 2017 | 5 | * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 | * | | YYYYY | ... | 3,5 | * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 | * | | RR | -43, 00, 01, 1900, 2017 | 5,7 | * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 | * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 | * | | RRRRR | ... | 3,5,7 | * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 | * | | uu | -43, 01, 1900, 2017 | 5 | * | | uuu | -043, 001, 1900, 2017 | 5 | * | | uuuu | -0043, 0001, 1900, 2017 | 5 | * | | uuuuu | ... | 3,5 | * | Quarter (formatting) | Q | 1, 2, 3, 4 | | * | | Qo | 1st, 2nd, 3rd, 4th | 7 | * | | QQ | 01, 02, 03, 04 | | * | | QQQ | Q1, Q2, Q3, Q4 | | * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | * | | QQQQQ | 1, 2, 3, 4 | 4 | * | Quarter (stand-alone) | q | 1, 2, 3, 4 | | * | | qo | 1st, 2nd, 3rd, 4th | 7 | * | | qq | 01, 02, 03, 04 | | * | | qqq | Q1, Q2, Q3, Q4 | | * | | qqqq | 1st quarter, 2nd quarter, ... | 2 | * | | qqqqq | 1, 2, 3, 4 | 4 | * | Month (formatting) | M | 1, 2, ..., 12 | | * | | Mo | 1st, 2nd, ..., 12th | 7 | * | | MM | 01, 02, ..., 12 | | * | | MMM | Jan, Feb, ..., Dec | | * | | MMMM | January, February, ..., December | 2 | * | | MMMMM | J, F, ..., D | | * | Month (stand-alone) | L | 1, 2, ..., 12 | | * | | Lo | 1st, 2nd, ..., 12th | 7 | * | | LL | 01, 02, ..., 12 | | * | | LLL | Jan, Feb, ..., Dec | | * | | LLLL | January, February, ..., December | 2 | * | | LLLLL | J, F, ..., D | | * | Local week of year | w | 1, 2, ..., 53 | | * | | wo | 1st, 2nd, ..., 53th | 7 | * | | ww | 01, 02, ..., 53 | | * | ISO week of year | I | 1, 2, ..., 53 | 7 | * | | Io | 1st, 2nd, ..., 53th | 7 | * | | II | 01, 02, ..., 53 | 7 | * | Day of month | d | 1, 2, ..., 31 | | * | | do | 1st, 2nd, ..., 31st | 7 | * | | dd | 01, 02, ..., 31 | | * | Day of year | D | 1, 2, ..., 365, 366 | 9 | * | | Do | 1st, 2nd, ..., 365th, 366th | 7 | * | | DD | 01, 02, ..., 365, 366 | 9 | * | | DDD | 001, 002, ..., 365, 366 | | * | | DDDD | ... | 3 | * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | | * | | EEEE | Monday, Tuesday, ..., Sunday | 2 | * | | EEEEE | M, T, W, T, F, S, S | | * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | | * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 | * | | io | 1st, 2nd, ..., 7th | 7 | * | | ii | 01, 02, ..., 07 | 7 | * | | iii | Mon, Tue, Wed, ..., Sun | 7 | * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 | * | | iiiii | M, T, W, T, F, S, S | 7 | * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 | * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | | * | | eo | 2nd, 3rd, ..., 1st | 7 | * | | ee | 02, 03, ..., 01 | | * | | eee | Mon, Tue, Wed, ..., Sun | | * | | eeee | Monday, Tuesday, ..., Sunday | 2 | * | | eeeee | M, T, W, T, F, S, S | | * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | | * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | | * | | co | 2nd, 3rd, ..., 1st | 7 | * | | cc | 02, 03, ..., 01 | | * | | ccc | Mon, Tue, Wed, ..., Sun | | * | | cccc | Monday, Tuesday, ..., Sunday | 2 | * | | ccccc | M, T, W, T, F, S, S | | * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | | * | AM, PM | a..aa | AM, PM | | * | | aaa | am, pm | | * | | aaaa | a.m., p.m. | 2 | * | | aaaaa | a, p | | * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | | * | | bbb | am, pm, noon, midnight | | * | | bbbb | a.m., p.m., noon, midnight | 2 | * | | bbbbb | a, p, n, mi | | * | Flexible day period | B..BBB | at night, in the morning, ... | | * | | BBBB | at night, in the morning, ... | 2 | * | | BBBBB | at night, in the morning, ... | | * | Hour [1-12] | h | 1, 2, ..., 11, 12 | | * | | ho | 1st, 2nd, ..., 11th, 12th | 7 | * | | hh | 01, 02, ..., 11, 12 | | * | Hour [0-23] | H | 0, 1, 2, ..., 23 | | * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 | * | | HH | 00, 01, 02, ..., 23 | | * | Hour [0-11] | K | 1, 2, ..., 11, 0 | | * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 | * | | KK | 01, 02, ..., 11, 00 | | * | Hour [1-24] | k | 24, 1, 2, ..., 23 | | * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 | * | | kk | 24, 01, 02, ..., 23 | | * | Minute | m | 0, 1, ..., 59 | | * | | mo | 0th, 1st, ..., 59th | 7 | * | | mm | 00, 01, ..., 59 | | * | Second | s | 0, 1, ..., 59 | | * | | so | 0th, 1st, ..., 59th | 7 | * | | ss | 00, 01, ..., 59 | | * | Fraction of second | S | 0, 1, ..., 9 | | * | | SS | 00, 01, ..., 99 | | * | | SSS | 000, 001, ..., 999 | | * | | SSSS | ... | 3 | * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | | * | | XX | -0800, +0530, Z | | * | | XXX | -08:00, +05:30, Z | | * | | XXXX | -0800, +0530, Z, +123456 | 2 | * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | | * | | xx | -0800, +0530, +0000 | | * | | xxx | -08:00, +05:30, +00:00 | 2 | * | | xxxx | -0800, +0530, +0000, +123456 | | * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | | * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 | * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 | * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 | * | Seconds timestamp | t | 512969520 | 7 | * | | tt | ... | 3,7 | * | Milliseconds timestamp | T | 512969520900 | 7 | * | | TT | ... | 3,7 | * | Long localized date | P | 04/29/1453 | 7 | * | | PP | Apr 29, 1453 | 7 | * | | PPP | April 29th, 1453 | 7 | * | | PPPP | Friday, April 29th, 1453 | 2,7 | * | Long localized time | p | 12:00 AM | 7 | * | | pp | 12:00:00 AM | 7 | * | | ppp | 12:00:00 AM GMT+2 | 7 | * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 | * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 | * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 | * | | PPPppp | April 29th, 1453 at ... | 7 | * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 | * Notes: * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale * are the same as "stand-alone" units, but are different in some languages. * "Formatting" units are declined according to the rules of the language * in the context of a date. "Stand-alone" units are always nominative singular: * * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` * * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` * * 2. Any sequence of the identical letters is a pattern, unless it is escaped by * the single quote characters (see below). * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`) * the output will be the same as default pattern for this unit, usually * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units * are marked with "2" in the last column of the table. * * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'` * * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'` * * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'` * * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'` * * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'` * * 3. Some patterns could be unlimited length (such as `yyyyyyyy`). * The output will be padded with zeros to match the length of the pattern. * * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'` * * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. * These tokens represent the shortest form of the quarter. * * 5. The main difference between `y` and `u` patterns are B.C. years: * * | Year | `y` | `u` | * |------|-----|-----| * | AC 1 | 1 | 1 | * | BC 1 | 1 | 0 | * | BC 2 | 2 | -1 | * * Also `yy` always returns the last two digits of a year, * while `uu` pads single digit years to 2 characters and returns other years unchanged: * * | Year | `yy` | `uu` | * |------|------|------| * | 1 | 01 | 01 | * | 14 | 14 | 14 | * | 376 | 76 | 376 | * | 1453 | 53 | 1453 | * * The same difference is true for local and ISO week-numbering years (`Y` and `R`), * except local week-numbering years are dependent on `options.weekStartsOn` * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear) * and [getWeekYear](https://date-fns.org/docs/getWeekYear)). * * 6. Specific non-location timezones are currently unavailable in `date-fns`, * so right now these tokens fall back to GMT timezones. * * 7. These patterns are not in the Unicode Technical Standard #35: * - `i`: ISO day of week * - `I`: ISO week of year * - `R`: ISO week-numbering year * - `t`: seconds timestamp * - `T`: milliseconds timestamp * - `o`: ordinal number modifier * - `P`: long localized date * - `p`: long localized time * * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month. * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * @param format - The string of tokens * @param options - An object with options * * @returns The formatted date string * * @throws `date` must not be Invalid Date * @throws `options.locale` must contain `localize` property * @throws `options.locale` must contain `formatLong` property * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws format string contains an unescaped latin alphabet character * * @example * // Represent 11 February 2014 in middle-endian format: * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy') * //=> '02/11/2014' * * @example * // Represent 2 July 2014 in Esperanto: * import { eoLocale } from 'date-fns/locale/eo' * const result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", { * locale: eoLocale * }) * //=> '2-a de julio 2014' * * @example * // Escape string by single quote characters: * const result = format(new Date(2014, 6, 2, 15), "h 'o''clock'") * //=> "3 o'clock" */ function format(date, formatStr, options) { const defaultOptions = defaultOptions_getDefaultOptions(); const locale = options?.locale ?? defaultOptions.locale ?? enUS; const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions.firstWeekContainsDate ?? defaultOptions.locale?.options?.firstWeekContainsDate ?? 1; const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions.weekStartsOn ?? defaultOptions.locale?.options?.weekStartsOn ?? 0; const originalDate = toDate_toDate(date); if (!isValid(originalDate)) { throw new RangeError("Invalid time value"); } let parts = formatStr .match(longFormattingTokensRegExp) .map((substring) => { const firstCharacter = substring[0]; if (firstCharacter === "p" || firstCharacter === "P") { const longFormatter = longFormatters[firstCharacter]; return longFormatter(substring, locale.formatLong); } return substring; }) .join("") .match(formattingTokensRegExp) .map((substring) => { // Replace two single quote characters with one single quote character if (substring === "''") { return { isToken: false, value: "'" }; } const firstCharacter = substring[0]; if (firstCharacter === "'") { return { isToken: false, value: cleanEscapedString(substring) }; } if (formatters[firstCharacter]) { return { isToken: true, value: substring }; } if (firstCharacter.match(unescapedLatinCharacterRegExp)) { throw new RangeError( "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`", ); } return { isToken: false, value: substring }; }); // invoke localize preprocessor (only for french locales at the moment) if (locale.localize.preprocessor) { parts = locale.localize.preprocessor(originalDate, parts); } const formatterOptions = { firstWeekContainsDate, weekStartsOn, locale, }; return parts .map((part) => { if (!part.isToken) return part.value; const token = part.value; if ( (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) || (!options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) ) { warnOrThrowProtectedError(token, formatStr, String(date)); } const formatter = formatters[token[0]]; return formatter(originalDate, token, locale.localize, formatterOptions); }) .join(""); } function cleanEscapedString(input) { const matched = input.match(escapedStringRegExp); if (!matched) { return input; } return matched[1].replace(doubleQuoteRegExp, "'"); } // Fallback for modularized imports: /* harmony default export */ const date_fns_format = ((/* unused pure expression or super */ null && (format))); ;// CONCATENATED MODULE: ./node_modules/date-fns/isSameMonth.mjs /** * @name isSameMonth * @category Month Helpers * @summary Are the given dates in the same month (and year)? * * @description * Are the given dates in the same month (and year)? * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param dateLeft - The first date to check * @param dateRight - The second date to check * * @returns The dates are in the same month (and year) * * @example * // Are 2 September 2014 and 25 September 2014 in the same month? * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25)) * //=> true * * @example * // Are 2 September 2014 and 25 September 2015 in the same month? * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25)) * //=> false */ function isSameMonth(dateLeft, dateRight) { const _dateLeft = toDate_toDate(dateLeft); const _dateRight = toDate_toDate(dateRight); return ( _dateLeft.getFullYear() === _dateRight.getFullYear() && _dateLeft.getMonth() === _dateRight.getMonth() ); } // Fallback for modularized imports: /* harmony default export */ const date_fns_isSameMonth = ((/* unused pure expression or super */ null && (isSameMonth))); ;// CONCATENATED MODULE: ./node_modules/date-fns/isEqual.mjs /** * @name isEqual * @category Common Helpers * @summary Are the given dates equal? * * @description * Are the given dates equal? * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param dateLeft - The first date to compare * @param dateRight - The second date to compare * * @returns The dates are equal * * @example * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal? * const result = isEqual( * new Date(2014, 6, 2, 6, 30, 45, 0), * new Date(2014, 6, 2, 6, 30, 45, 500) * ) * //=> false */ function isEqual_isEqual(leftDate, rightDate) { const _dateLeft = toDate_toDate(leftDate); const _dateRight = toDate_toDate(rightDate); return +_dateLeft === +_dateRight; } // Fallback for modularized imports: /* harmony default export */ const date_fns_isEqual = ((/* unused pure expression or super */ null && (isEqual_isEqual))); ;// CONCATENATED MODULE: ./node_modules/date-fns/isSameDay.mjs /** * @name isSameDay * @category Day Helpers * @summary Are the given dates in the same day (and year and month)? * * @description * Are the given dates in the same day (and year and month)? * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param dateLeft - The first date to check * @param dateRight - The second date to check * @returns The dates are in the same day (and year and month) * * @example * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day? * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0)) * //=> true * * @example * // Are 4 September and 4 October in the same day? * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4)) * //=> false * * @example * // Are 4 September, 2014 and 4 September, 2015 in the same day? * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4)) * //=> false */ function isSameDay(dateLeft, dateRight) { const dateLeftStartOfDay = startOfDay_startOfDay(dateLeft); const dateRightStartOfDay = startOfDay_startOfDay(dateRight); return +dateLeftStartOfDay === +dateRightStartOfDay; } // Fallback for modularized imports: /* harmony default export */ const date_fns_isSameDay = ((/* unused pure expression or super */ null && (isSameDay))); ;// CONCATENATED MODULE: ./node_modules/date-fns/addDays.mjs /** * @name addDays * @category Day Helpers * @summary Add the specified number of days to the given date. * * @description * Add the specified number of days to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of days to be added. * * @returns The new date with the days added * * @example * // Add 10 days to 1 September 2014: * const result = addDays(new Date(2014, 8, 1), 10) * //=> Thu Sep 11 2014 00:00:00 */ function addDays_addDays(date, amount) { const _date = toDate_toDate(date); if (isNaN(amount)) return constructFrom_constructFrom(date, NaN); if (!amount) { // If 0 days, no-op to avoid changing times in the hour before end of DST return _date; } _date.setDate(_date.getDate() + amount); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_addDays = ((/* unused pure expression or super */ null && (addDays_addDays))); ;// CONCATENATED MODULE: ./node_modules/date-fns/addWeeks.mjs /** * @name addWeeks * @category Week Helpers * @summary Add the specified number of weeks to the given date. * * @description * Add the specified number of week to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of weeks to be added. * * @returns The new date with the weeks added * * @example * // Add 4 weeks to 1 September 2014: * const result = addWeeks(new Date(2014, 8, 1), 4) * //=> Mon Sep 29 2014 00:00:00 */ function addWeeks_addWeeks(date, amount) { const days = amount * 7; return addDays_addDays(date, days); } // Fallback for modularized imports: /* harmony default export */ const date_fns_addWeeks = ((/* unused pure expression or super */ null && (addWeeks_addWeeks))); ;// CONCATENATED MODULE: ./node_modules/date-fns/subWeeks.mjs /** * @name subWeeks * @category Week Helpers * @summary Subtract the specified number of weeks from the given date. * * @description * Subtract the specified number of weeks from the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param amount - The amount of weeks to be subtracted. * * @returns The new date with the weeks subtracted * * @example * // Subtract 4 weeks from 1 September 2014: * const result = subWeeks(new Date(2014, 8, 1), 4) * //=> Mon Aug 04 2014 00:00:00 */ function subWeeks(date, amount) { return addWeeks_addWeeks(date, -amount); } // Fallback for modularized imports: /* harmony default export */ const date_fns_subWeeks = ((/* unused pure expression or super */ null && (subWeeks))); ;// CONCATENATED MODULE: ./node_modules/date-fns/endOfWeek.mjs /** * The {@link endOfWeek} function options. */ /** * @name endOfWeek * @category Week Helpers * @summary Return the end of a week for the given date. * * @description * Return the end of a week for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * @param options - An object with options * * @returns The end of a week * * @example * // The end of a week for 2 September 2014 11:55:00: * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Sat Sep 06 2014 23:59:59.999 * * @example * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00: * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) * //=> Sun Sep 07 2014 23:59:59.999 */ function endOfWeek_endOfWeek(date, options) { const defaultOptions = defaultOptions_getDefaultOptions(); const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions.weekStartsOn ?? defaultOptions.locale?.options?.weekStartsOn ?? 0; const _date = toDate_toDate(date); const day = _date.getDay(); const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); _date.setDate(_date.getDate() + diff); _date.setHours(23, 59, 59, 999); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_endOfWeek = ((/* unused pure expression or super */ null && (endOfWeek_endOfWeek))); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/arrow-right.js /** * WordPress dependencies */ const arrowRight = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) }); /* harmony default export */ const arrow_right = (arrowRight); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/arrow-left.js /** * WordPress dependencies */ const arrowLeft = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) }); /* harmony default export */ const arrow_left = (arrowLeft); ;// CONCATENATED MODULE: external ["wp","date"] const external_wp_date_namespaceObject = window["wp"]["date"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/date/styles.js function date_styles_EMOTION_STRINGIFIED_CSS_ERROR_() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /** * External dependencies */ /** * Internal dependencies */ const styles_Wrapper = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "e105ri6r5" } : 0)( true ? { name: "1khn195", styles: "box-sizing:border-box" } : 0); const Navigator = /*#__PURE__*/emotion_styled_base_browser_esm(h_stack_component, true ? { target: "e105ri6r4" } : 0)("margin-bottom:", space(4), ";" + ( true ? "" : 0)); const NavigatorHeading = /*#__PURE__*/emotion_styled_base_browser_esm(heading_component, true ? { target: "e105ri6r3" } : 0)("font-size:", config_values.fontSize, ";font-weight:", config_values.fontWeight, ";strong{font-weight:", config_values.fontWeightHeading, ";}" + ( true ? "" : 0)); const Calendar = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "e105ri6r2" } : 0)("column-gap:", space(2), ";display:grid;grid-template-columns:0.5fr repeat( 5, 1fr ) 0.5fr;justify-items:center;row-gap:", space(2), ";" + ( true ? "" : 0)); const DayOfWeek = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "e105ri6r1" } : 0)("color:", COLORS.gray[700], ";font-size:", config_values.fontSize, ";line-height:", config_values.fontLineHeightBase, ";&:nth-of-type( 1 ){justify-self:start;}&:nth-of-type( 7 ){justify-self:end;}" + ( true ? "" : 0)); const DayButton = /*#__PURE__*/emotion_styled_base_browser_esm(build_module_button, true ? { shouldForwardProp: prop => !['column', 'isSelected', 'isToday', 'hasEvents'].includes(prop), target: "e105ri6r0" } : 0)("grid-column:", props => props.column, ";position:relative;justify-content:center;", props => props.column === 1 && ` justify-self: start; `, " ", props => props.column === 7 && ` justify-self: end; `, " ", props => props.disabled && ` pointer-events: none; `, " &&&{border-radius:100%;height:", space(7), ";width:", space(7), ";", props => props.isSelected && ` background: ${COLORS.theme.accent}; color: ${COLORS.white}; `, " ", props => !props.isSelected && props.isToday && ` background: ${COLORS.gray[200]}; `, ";}", props => props.hasEvents && ` ::before { background: ${props.isSelected ? COLORS.white : COLORS.theme.accent}; border-radius: 2px; bottom: 2px; content: " "; height: 4px; left: 50%; margin-left: -2px; position: absolute; width: 4px; } `, ";" + ( true ? "" : 0)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/utils.js /** * External dependencies */ /** * Like date-fn's toDate, but tries to guess the format when a string is * given. * * @param input Value to turn into a date. */ function inputToDate(input) { if (typeof input === 'string') { return new Date(input); } return toDate_toDate(input); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/constants.js const TIMEZONELESS_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/date/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * DatePicker is a React component that renders a calendar for date selection. * * ```jsx * import { DatePicker } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const MyDatePicker = () => { * const [ date, setDate ] = useState( new Date() ); * * return ( * <DatePicker * currentDate={ date } * onChange={ ( newDate ) => setDate( newDate ) } * /> * ); * }; * ``` */ function DatePicker({ currentDate, onChange, events = [], isInvalidDate, onMonthPreviewed, startOfWeek: weekStartsOn = 0 }) { const date = currentDate ? inputToDate(currentDate) : new Date(); const { calendar, viewing, setSelected, setViewing, isSelected, viewPreviousMonth, viewNextMonth } = useLilius({ selected: [startOfDay_startOfDay(date)], viewing: startOfDay_startOfDay(date), weekStartsOn }); // Used to implement a roving tab index. Tracks the day that receives focus // when the user tabs into the calendar. const [focusable, setFocusable] = (0,external_wp_element_namespaceObject.useState)(startOfDay_startOfDay(date)); // Allows us to only programmatically focus() a day when focus was already // within the calendar. This stops us stealing focus from e.g. a TimePicker // input. const [isFocusWithinCalendar, setIsFocusWithinCalendar] = (0,external_wp_element_namespaceObject.useState)(false); // Update internal state when currentDate prop changes. const [prevCurrentDate, setPrevCurrentDate] = (0,external_wp_element_namespaceObject.useState)(currentDate); if (currentDate !== prevCurrentDate) { setPrevCurrentDate(currentDate); setSelected([startOfDay_startOfDay(date)]); setViewing(startOfDay_startOfDay(date)); setFocusable(startOfDay_startOfDay(date)); } return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(styles_Wrapper, { className: "components-datetime__date", role: "application", "aria-label": (0,external_wp_i18n_namespaceObject.__)('Calendar'), children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Navigator, { children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_button, { icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? arrow_right : arrow_left, variant: "tertiary", "aria-label": (0,external_wp_i18n_namespaceObject.__)('View previous month'), onClick: () => { viewPreviousMonth(); setFocusable(subMonths_subMonths(focusable, 1)); onMonthPreviewed?.(format(subMonths_subMonths(viewing, 1), TIMEZONELESS_FORMAT)); } }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(NavigatorHeading, { level: 3, children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("strong", { children: (0,external_wp_date_namespaceObject.dateI18n)('F', viewing, -viewing.getTimezoneOffset()) }), ' ', (0,external_wp_date_namespaceObject.dateI18n)('Y', viewing, -viewing.getTimezoneOffset())] }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_button, { icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? arrow_left : arrow_right, variant: "tertiary", "aria-label": (0,external_wp_i18n_namespaceObject.__)('View next month'), onClick: () => { viewNextMonth(); setFocusable(addMonths_addMonths(focusable, 1)); onMonthPreviewed?.(format(addMonths_addMonths(viewing, 1), TIMEZONELESS_FORMAT)); } })] }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Calendar, { onFocus: () => setIsFocusWithinCalendar(true), onBlur: () => setIsFocusWithinCalendar(false), children: [calendar[0][0].map(day => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DayOfWeek, { children: (0,external_wp_date_namespaceObject.dateI18n)('D', day, -day.getTimezoneOffset()) }, day.toString())), calendar[0].map(week => week.map((day, index) => { if (!isSameMonth(day, viewing)) { return null; } return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(date_Day, { day: day, column: index + 1, isSelected: isSelected(day), isFocusable: isEqual_isEqual(day, focusable), isFocusAllowed: isFocusWithinCalendar, isToday: isSameDay(day, new Date()), isInvalid: isInvalidDate ? isInvalidDate(day) : false, numEvents: events.filter(event => isSameDay(event.date, day)).length, onClick: () => { setSelected([day]); setFocusable(day); onChange?.(format( // Don't change the selected date's time fields. new Date(day.getFullYear(), day.getMonth(), day.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()), TIMEZONELESS_FORMAT)); }, onKeyDown: event => { let nextFocusable; if (event.key === 'ArrowLeft') { nextFocusable = addDays_addDays(day, (0,external_wp_i18n_namespaceObject.isRTL)() ? 1 : -1); } if (event.key === 'ArrowRight') { nextFocusable = addDays_addDays(day, (0,external_wp_i18n_namespaceObject.isRTL)() ? -1 : 1); } if (event.key === 'ArrowUp') { nextFocusable = subWeeks(day, 1); } if (event.key === 'ArrowDown') { nextFocusable = addWeeks_addWeeks(day, 1); } if (event.key === 'PageUp') { nextFocusable = subMonths_subMonths(day, 1); } if (event.key === 'PageDown') { nextFocusable = addMonths_addMonths(day, 1); } if (event.key === 'Home') { nextFocusable = startOfWeek_startOfWeek(day); } if (event.key === 'End') { nextFocusable = startOfDay_startOfDay(endOfWeek_endOfWeek(day)); } if (nextFocusable) { event.preventDefault(); setFocusable(nextFocusable); if (!isSameMonth(nextFocusable, viewing)) { setViewing(nextFocusable); onMonthPreviewed?.(format(nextFocusable, TIMEZONELESS_FORMAT)); } } } }, day.toString()); }))] })] }); } function date_Day({ day, column, isSelected, isFocusable, isFocusAllowed, isToday, isInvalid, numEvents, onClick, onKeyDown }) { const ref = (0,external_wp_element_namespaceObject.useRef)(); // Focus the day when it becomes focusable, e.g. because an arrow key is // pressed. Only do this if focus is allowed - this stops us stealing focus // from e.g. a TimePicker input. (0,external_wp_element_namespaceObject.useEffect)(() => { if (ref.current && isFocusable && isFocusAllowed) { ref.current.focus(); } // isFocusAllowed is not a dep as there is no point calling focus() on // an already focused element. // eslint-disable-next-line react-hooks/exhaustive-deps }, [isFocusable]); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DayButton, { ref: ref, className: "components-datetime__date__day" // Unused, for backwards compatibility. , disabled: isInvalid, tabIndex: isFocusable ? 0 : -1, "aria-label": getDayLabel(day, isSelected, numEvents), column: column, isSelected: isSelected, isToday: isToday, hasEvents: numEvents > 0, onClick: onClick, onKeyDown: onKeyDown, children: (0,external_wp_date_namespaceObject.dateI18n)('j', day, -day.getTimezoneOffset()) }); } function getDayLabel(date, isSelected, numEvents) { const { formats } = (0,external_wp_date_namespaceObject.getSettings)(); const localizedDate = (0,external_wp_date_namespaceObject.dateI18n)(formats.date, date, -date.getTimezoneOffset()); if (isSelected && numEvents > 0) { return (0,external_wp_i18n_namespaceObject.sprintf)( // translators: 1: The calendar date. 2: Number of events on the calendar date. (0,external_wp_i18n_namespaceObject._n)('%1$s. Selected. There is %2$d event', '%1$s. Selected. There are %2$d events', numEvents), localizedDate, numEvents); } else if (isSelected) { return (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: The calendar date. (0,external_wp_i18n_namespaceObject.__)('%1$s. Selected'), localizedDate); } else if (numEvents > 0) { return (0,external_wp_i18n_namespaceObject.sprintf)( // translators: 1: The calendar date. 2: Number of events on the calendar date. (0,external_wp_i18n_namespaceObject._n)('%1$s. There is %2$d event', '%1$s. There are %2$d events', numEvents), localizedDate, numEvents); } return localizedDate; } /* harmony default export */ const date = (DatePicker); ;// CONCATENATED MODULE: ./node_modules/date-fns/startOfMinute.mjs /** * @name startOfMinute * @category Minute Helpers * @summary Return the start of a minute for the given date. * * @description * Return the start of a minute for the given date. * The result will be in the local timezone. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The original date * * @returns The start of a minute * * @example * // The start of a minute for 1 December 2014 22:15:45.400: * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400)) * //=> Mon Dec 01 2014 22:15:00 */ function startOfMinute(date) { const _date = toDate_toDate(date); _date.setSeconds(0, 0); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_startOfMinute = ((/* unused pure expression or super */ null && (startOfMinute))); ;// CONCATENATED MODULE: ./node_modules/date-fns/getDaysInMonth.mjs /** * @name getDaysInMonth * @category Month Helpers * @summary Get the number of days in a month of the given date. * * @description * Get the number of days in a month of the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The given date * * @returns The number of days in a month * * @example * // How many days are in February 2000? * const result = getDaysInMonth(new Date(2000, 1)) * //=> 29 */ function getDaysInMonth_getDaysInMonth(date) { const _date = toDate_toDate(date); const year = _date.getFullYear(); const monthIndex = _date.getMonth(); const lastDayOfMonth = constructFrom_constructFrom(date, 0); lastDayOfMonth.setFullYear(year, monthIndex + 1, 0); lastDayOfMonth.setHours(0, 0, 0, 0); return lastDayOfMonth.getDate(); } // Fallback for modularized imports: /* harmony default export */ const date_fns_getDaysInMonth = ((/* unused pure expression or super */ null && (getDaysInMonth_getDaysInMonth))); ;// CONCATENATED MODULE: ./node_modules/date-fns/setMonth.mjs /** * @name setMonth * @category Month Helpers * @summary Set the month to the given date. * * @description * Set the month to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param month - The month index to set (0-11) * * @returns The new date with the month set * * @example * // Set February to 1 September 2014: * const result = setMonth(new Date(2014, 8, 1), 1) * //=> Sat Feb 01 2014 00:00:00 */ function setMonth_setMonth(date, month) { const _date = toDate_toDate(date); const year = _date.getFullYear(); const day = _date.getDate(); const dateWithDesiredMonth = constructFrom_constructFrom(date, 0); dateWithDesiredMonth.setFullYear(year, month, 15); dateWithDesiredMonth.setHours(0, 0, 0, 0); const daysInMonth = getDaysInMonth_getDaysInMonth(dateWithDesiredMonth); // Set the last day of the new month // if the original date was the last day of the longer month _date.setMonth(month, Math.min(day, daysInMonth)); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_setMonth = ((/* unused pure expression or super */ null && (setMonth_setMonth))); ;// CONCATENATED MODULE: ./node_modules/date-fns/set.mjs /** * @name set * @category Common Helpers * @summary Set date values to a given date. * * @description * Set date values to a given date. * * Sets time values to date from object `values`. * A value is not set if it is undefined or null or doesn't exist in `values`. * * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts * to use native `Date#setX` methods. If you use this function, you may not want to include the * other `setX` functions that date-fns provides if you are concerned about the bundle size. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param values - The date values to be set * * @returns The new date with options set * * @example * // Transform 1 September 2014 into 20 October 2015 in a single line: * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 }) * //=> Tue Oct 20 2015 00:00:00 * * @example * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00: * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 }) * //=> Mon Sep 01 2014 12:23:45 */ function set_set(date, values) { let _date = toDate_toDate(date); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date if (isNaN(+_date)) { return constructFrom_constructFrom(date, NaN); } if (values.year != null) { _date.setFullYear(values.year); } if (values.month != null) { _date = setMonth_setMonth(_date, values.month); } if (values.date != null) { _date.setDate(values.date); } if (values.hours != null) { _date.setHours(values.hours); } if (values.minutes != null) { _date.setMinutes(values.minutes); } if (values.seconds != null) { _date.setSeconds(values.seconds); } if (values.milliseconds != null) { _date.setMilliseconds(values.milliseconds); } return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_set = ((/* unused pure expression or super */ null && (set_set))); ;// CONCATENATED MODULE: ./node_modules/date-fns/setHours.mjs /** * @name setHours * @category Hour Helpers * @summary Set the hours to the given date. * * @description * Set the hours to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param hours - The hours of the new date * * @returns The new date with the hours set * * @example * // Set 4 hours to 1 September 2014 11:30:00: * const result = setHours(new Date(2014, 8, 1, 11, 30), 4) * //=> Mon Sep 01 2014 04:30:00 */ function setHours(date, hours) { const _date = toDate_toDate(date); _date.setHours(hours); return _date; } // Fallback for modularized imports: /* harmony default export */ const date_fns_setHours = ((/* unused pure expression or super */ null && (setHours))); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/time/styles.js function time_styles_EMOTION_STRINGIFIED_CSS_ERROR_() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /** * External dependencies */ /** * Internal dependencies */ const time_styles_Wrapper = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "evcr2319" } : 0)("box-sizing:border-box;font-size:", config_values.fontSize, ";" + ( true ? "" : 0)); const Fieldset = /*#__PURE__*/emotion_styled_base_browser_esm("fieldset", true ? { target: "evcr2318" } : 0)("border:0;margin:0 0 ", space(2 * 2), " 0;padding:0;&:last-child{margin-bottom:0;}" + ( true ? "" : 0)); const TimeWrapper = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "evcr2317" } : 0)( true ? { name: "pd0mhc", styles: "direction:ltr;display:flex" } : 0); const baseInput = /*#__PURE__*/emotion_react_browser_esm_css("&&& ", Input, "{padding-left:", space(2), ";padding-right:", space(2), ";text-align:center;}" + ( true ? "" : 0), true ? "" : 0); const HoursInput = /*#__PURE__*/emotion_styled_base_browser_esm(number_control, true ? { target: "evcr2316" } : 0)(baseInput, " width:", space(9), ";&&& ", Input, "{padding-right:0;}&&& ", BackdropUI, "{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0;}" + ( true ? "" : 0)); const TimeSeparator = /*#__PURE__*/emotion_styled_base_browser_esm("span", true ? { target: "evcr2315" } : 0)("border-top:", config_values.borderWidth, " solid ", COLORS.gray[700], ";border-bottom:", config_values.borderWidth, " solid ", COLORS.gray[700], ";line-height:calc(\n\t\t", config_values.controlHeight, " - ", config_values.borderWidth, " * 2\n\t);display:inline-block;" + ( true ? "" : 0)); const MinutesInput = /*#__PURE__*/emotion_styled_base_browser_esm(number_control, true ? { target: "evcr2314" } : 0)(baseInput, " width:", space(9), ";&&& ", Input, "{padding-left:0;}&&& ", BackdropUI, "{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;}" + ( true ? "" : 0)); // Ideally we wouldn't need a wrapper, but can't otherwise target the // <BaseControl> in <SelectControl> const MonthSelectWrapper = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "evcr2313" } : 0)( true ? { name: "1ff36h2", styles: "flex-grow:1" } : 0); const DayInput = /*#__PURE__*/emotion_styled_base_browser_esm(number_control, true ? { target: "evcr2312" } : 0)(baseInput, " width:", space(9), ";" + ( true ? "" : 0)); const YearInput = /*#__PURE__*/emotion_styled_base_browser_esm(number_control, true ? { target: "evcr2311" } : 0)(baseInput, " width:", space(14), ";" + ( true ? "" : 0)); const TimeZone = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "evcr2310" } : 0)( true ? { name: "ebu3jh", styles: "text-decoration:underline dotted" } : 0); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/time/timezone.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Displays timezone information when user timezone is different from site * timezone. */ const timezone_TimeZone = () => { const { timezone } = (0,external_wp_date_namespaceObject.getSettings)(); // Convert timezone offset to hours. const userTimezoneOffset = -1 * (new Date().getTimezoneOffset() / 60); // System timezone and user timezone match, nothing needed. // Compare as numbers because it comes over as string. if (Number(timezone.offset) === userTimezoneOffset) { return null; } const offsetSymbol = Number(timezone.offset) >= 0 ? '+' : ''; const zoneAbbr = '' !== timezone.abbr && isNaN(Number(timezone.abbr)) ? timezone.abbr : `UTC${offsetSymbol}${timezone.offsetFormatted}`; // Replace underscore with space in strings like `America/Costa_Rica`. const prettyTimezoneString = timezone.string.replace('_', ' '); const timezoneDetail = 'UTC' === timezone.string ? (0,external_wp_i18n_namespaceObject.__)('Coordinated Universal Time') : `(${zoneAbbr}) ${prettyTimezoneString}`; // When the prettyTimezoneString is empty, there is no additional timezone // detail information to show in a Tooltip. const hasNoAdditionalTimezoneDetail = prettyTimezoneString.trim().length === 0; return hasNoAdditionalTimezoneDetail ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TimeZone, { className: "components-datetime__timezone", children: zoneAbbr }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(tooltip, { placement: "top", text: timezoneDetail, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TimeZone, { className: "components-datetime__timezone", children: zoneAbbr }) }); }; /* harmony default export */ const timezone = (timezone_TimeZone); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/time/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function from12hTo24h(hours, isPm) { return isPm ? (hours % 12 + 12) % 24 : hours % 12; } /** * Creates an InputControl reducer used to pad an input so that it is always a * given width. For example, the hours and minutes inputs are padded to 2 so * that '4' appears as '04'. * * @param pad How many digits the value should be. */ function buildPadInputStateReducer(pad) { return (state, action) => { const nextState = { ...state }; if (action.type === COMMIT || action.type === PRESS_UP || action.type === PRESS_DOWN) { if (nextState.value !== undefined) { nextState.value = nextState.value.toString().padStart(pad, '0'); } } return nextState; }; } /** * TimePicker is a React component that renders a clock for time selection. * * ```jsx * import { TimePicker } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const MyTimePicker = () => { * const [ time, setTime ] = useState( new Date() ); * * return ( * <TimePicker * currentTime={ date } * onChange={ ( newTime ) => setTime( newTime ) } * is12Hour * /> * ); * }; * ``` */ function TimePicker({ is12Hour, currentTime, onChange }) { const [date, setDate] = (0,external_wp_element_namespaceObject.useState)(() => // Truncate the date at the minutes, see: #15495. currentTime ? startOfMinute(inputToDate(currentTime)) : new Date()); // Reset the state when currentTime changed. // TODO: useEffect() shouldn't be used like this, causes an unnecessary render (0,external_wp_element_namespaceObject.useEffect)(() => { setDate(currentTime ? startOfMinute(inputToDate(currentTime)) : new Date()); }, [currentTime]); const { day, month, year, minutes, hours, am } = (0,external_wp_element_namespaceObject.useMemo)(() => ({ day: format(date, 'dd'), month: format(date, 'MM'), year: format(date, 'yyyy'), minutes: format(date, 'mm'), hours: format(date, is12Hour ? 'hh' : 'HH'), am: format(date, 'a') }), [date, is12Hour]); const buildNumberControlChangeCallback = method => { const callback = (value, { event }) => { var _ownerDocument$defaul; // `instanceof` checks need to get the instance definition from the // corresponding window object — therefore, the following logic makes // the component work correctly even when rendered inside an iframe. const HTMLInputElementInstance = (_ownerDocument$defaul = event.target?.ownerDocument.defaultView?.HTMLInputElement) !== null && _ownerDocument$defaul !== void 0 ? _ownerDocument$defaul : HTMLInputElement; if (!(event.target instanceof HTMLInputElementInstance)) { return; } if (!event.target.validity.valid) { return; } // We can safely assume value is a number if target is valid. let numberValue = Number(value); // If the 12-hour format is being used and the 'PM' period is // selected, then the incoming value (which ranges 1-12) should be // increased by 12 to match the expected 24-hour format. if (method === 'hours' && is12Hour) { numberValue = from12hTo24h(numberValue, am === 'PM'); } const newDate = set_set(date, { [method]: numberValue }); setDate(newDate); onChange?.(format(newDate, TIMEZONELESS_FORMAT)); }; return callback; }; function buildAmPmChangeCallback(value) { return () => { if (am === value) { return; } const parsedHours = parseInt(hours, 10); const newDate = setHours(date, from12hTo24h(parsedHours, value === 'PM')); setDate(newDate); onChange?.(format(newDate, TIMEZONELESS_FORMAT)); }; } const dayField = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DayInput, { className: "components-datetime__time-field components-datetime__time-field-day" // Unused, for backwards compatibility. , label: (0,external_wp_i18n_namespaceObject.__)('Day'), hideLabelFromVision: true, __next40pxDefaultSize: true, value: day, step: 1, min: 1, max: 31, required: true, spinControls: "none", isPressEnterToChange: true, isDragEnabled: false, isShiftStepEnabled: false, onChange: buildNumberControlChangeCallback('date') }); const monthField = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MonthSelectWrapper, { children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(select_control, { className: "components-datetime__time-field components-datetime__time-field-month" // Unused, for backwards compatibility. , label: (0,external_wp_i18n_namespaceObject.__)('Month'), hideLabelFromVision: true, __next40pxDefaultSize: true, __nextHasNoMarginBottom: true, value: month, options: [{ value: '01', label: (0,external_wp_i18n_namespaceObject.__)('January') }, { value: '02', label: (0,external_wp_i18n_namespaceObject.__)('February') }, { value: '03', label: (0,external_wp_i18n_namespaceObject.__)('March') }, { value: '04', label: (0,external_wp_i18n_namespaceObject.__)('April') }, { value: '05', label: (0,external_wp_i18n_namespaceObject.__)('May') }, { value: '06', label: (0,external_wp_i18n_namespaceObject.__)('June') }, { value: '07', label: (0,external_wp_i18n_namespaceObject.__)('July') }, { value: '08', label: (0,external_wp_i18n_namespaceObject.__)('August') }, { value: '09', label: (0,external_wp_i18n_namespaceObject.__)('September') }, { value: '10', label: (0,external_wp_i18n_namespaceObject.__)('October') }, { value: '11', label: (0,external_wp_i18n_namespaceObject.__)('November') }, { value: '12', label: (0,external_wp_i18n_namespaceObject.__)('December') }], onChange: value => { const newDate = setMonth_setMonth(date, Number(value) - 1); setDate(newDate); onChange?.(format(newDate, TIMEZONELESS_FORMAT)); } }) }); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(time_styles_Wrapper, { className: "components-datetime__time" // Unused, for backwards compatibility. , children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Fieldset, { children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(base_control.VisualLabel, { as: "legend", className: "components-datetime__time-legend" // Unused, for backwards compatibility. , children: (0,external_wp_i18n_namespaceObject.__)('Time') }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(h_stack_component, { className: "components-datetime__time-wrapper" // Unused, for backwards compatibility. , children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(TimeWrapper, { className: "components-datetime__time-field components-datetime__time-field-time" // Unused, for backwards compatibility. , children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(HoursInput, { className: "components-datetime__time-field-hours-input" // Unused, for backwards compatibility. , label: (0,external_wp_i18n_namespaceObject.__)('Hours'), hideLabelFromVision: true, __next40pxDefaultSize: true, value: hours, step: 1, min: is12Hour ? 1 : 0, max: is12Hour ? 12 : 23, required: true, spinControls: "none", isPressEnterToChange: true, isDragEnabled: false, isShiftStepEnabled: false, onChange: buildNumberControlChangeCallback('hours'), __unstableStateReducer: buildPadInputStateReducer(2) }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TimeSeparator, { className: "components-datetime__time-separator" // Unused, for backwards compatibility. , "aria-hidden": "true", children: ":" }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MinutesInput, { className: "components-datetime__time-field-minutes-input" // Unused, for backwards compatibility. , label: (0,external_wp_i18n_namespaceObject.__)('Minutes'), hideLabelFromVision: true, __next40pxDefaultSize: true, value: minutes, step: 1, min: 0, max: 59, required: true, spinControls: "none", isPressEnterToChange: true, isDragEnabled: false, isShiftStepEnabled: false, onChange: buildNumberControlChangeCallback('minutes'), __unstableStateReducer: buildPadInputStateReducer(2) })] }), is12Hour && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(button_group, { className: "components-datetime__time-field components-datetime__time-field-am-pm" // Unused, for backwards compatibility. , children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_button, { className: "components-datetime__time-am-button" // Unused, for backwards compatibility. , variant: am === 'AM' ? 'primary' : 'secondary', __next40pxDefaultSize: true, onClick: buildAmPmChangeCallback('AM'), children: (0,external_wp_i18n_namespaceObject.__)('AM') }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_button, { className: "components-datetime__time-pm-button" // Unused, for backwards compatibility. , variant: am === 'PM' ? 'primary' : 'secondary', __next40pxDefaultSize: true, onClick: buildAmPmChangeCallback('PM'), children: (0,external_wp_i18n_namespaceObject.__)('PM') })] }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(spacer_component, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(timezone, {})] })] }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Fieldset, { children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(base_control.VisualLabel, { as: "legend", className: "components-datetime__time-legend" // Unused, for backwards compatibility. , children: (0,external_wp_i18n_namespaceObject.__)('Date') }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(h_stack_component, { className: "components-datetime__time-wrapper" // Unused, for backwards compatibility. , children: [is12Hour ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { children: [monthField, dayField] }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { children: [dayField, monthField] }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(YearInput, { className: "components-datetime__time-field components-datetime__time-field-year" // Unused, for backwards compatibility. , label: (0,external_wp_i18n_namespaceObject.__)('Year'), hideLabelFromVision: true, __next40pxDefaultSize: true, value: year, step: 1, min: 1, max: 9999, required: true, spinControls: "none", isPressEnterToChange: true, isDragEnabled: false, isShiftStepEnabled: false, onChange: buildNumberControlChangeCallback('year'), __unstableStateReducer: buildPadInputStateReducer(4) })] })] })] }); } /* harmony default export */ const date_time_time = (TimePicker); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/date-time/styles.js function date_time_styles_EMOTION_STRINGIFIED_CSS_ERROR_() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /** * External dependencies */ /** * Internal dependencies */ const date_time_styles_Wrapper = /*#__PURE__*/emotion_styled_base_browser_esm(v_stack_component, true ? { target: "e1p5onf00" } : 0)( true ? { name: "1khn195", styles: "box-sizing:border-box" } : 0); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/date-time/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const date_time_noop = () => {}; function UnforwardedDateTimePicker({ currentDate, is12Hour, isInvalidDate, onMonthPreviewed = date_time_noop, onChange, events, startOfWeek }, ref) { return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(date_time_styles_Wrapper, { ref: ref, className: "components-datetime", spacing: 4, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(date_time_time, { currentTime: currentDate, onChange: onChange, is12Hour: is12Hour }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(date, { currentDate: currentDate, onChange: onChange, isInvalidDate: isInvalidDate, events: events, onMonthPreviewed: onMonthPreviewed, startOfWeek: startOfWeek })] }) }); } /** * DateTimePicker is a React component that renders a calendar and clock for * date and time selection. The calendar and clock components can be accessed * individually using the `DatePicker` and `TimePicker` components respectively. * * ```jsx * import { DateTimePicker } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const MyDateTimePicker = () => { * const [ date, setDate ] = useState( new Date() ); * * return ( * <DateTimePicker * currentDate={ date } * onChange={ ( newDate ) => setDate( newDate ) } * is12Hour * /> * ); * }; * ``` */ const DateTimePicker = (0,external_wp_element_namespaceObject.forwardRef)(UnforwardedDateTimePicker); /* harmony default export */ const date_time = (DateTimePicker); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/date-time/index.js /** * Internal dependencies */ /* harmony default export */ const build_module_date_time = (date_time); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/dimension-control/sizes.js /** * Sizes * * defines the sizes used in dimension controls * all hardcoded `size` values are based on the value of * the Sass variable `$block-padding` from * `packages/block-editor/src/components/dimension-control/sizes.js`. */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * Finds the correct size object from the provided sizes * table by size slug (eg: `medium`) * * @param sizes containing objects for each size definition. * @param slug a string representation of the size (eg: `medium`). */ const findSizeBySlug = (sizes, slug) => sizes.find(size => slug === size.slug); /* harmony default export */ const dimension_control_sizes = ([{ name: (0,external_wp_i18n_namespaceObject._x)('None', 'Size of a UI element'), slug: 'none' }, { name: (0,external_wp_i18n_namespaceObject._x)('Small', 'Size of a UI element'), slug: 'small' }, { name: (0,external_wp_i18n_namespaceObject._x)('Medium', 'Size of a UI element'), slug: 'medium' }, { name: (0,external_wp_i18n_namespaceObject._x)('Large', 'Size of a UI element'), slug: 'large' }, { name: (0,external_wp_i18n_namespaceObject._x)('Extra Large', 'Size of a UI element'), slug: 'xlarge' }]); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/dimension-control/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * `DimensionControl` is a component designed to provide a UI to control spacing and/or dimensions. * * This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes. * * ```jsx * import { __experimentalDimensionControl as DimensionControl } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * export default function MyCustomDimensionControl() { * const [ paddingSize, setPaddingSize ] = useState( '' ); * * return ( * <DimensionControl * label={ 'Padding' } * icon={ 'desktop' } * onChange={ ( value ) => setPaddingSize( value ) } * value={ paddingSize } * /> * ); * } * ``` */ function DimensionControl(props) { const { __next40pxDefaultSize = false, label, value, sizes = dimension_control_sizes, icon, onChange, className = '' } = props; const onChangeSpacingSize = val => { const theSize = findSizeBySlug(sizes, val); if (!theSize || value === theSize.slug) { onChange?.(undefined); } else if (typeof onChange === 'function') { onChange(theSize.slug); } }; const formatSizesAsOptions = theSizes => { const options = theSizes.map(({ name, slug }) => ({ label: name, value: slug })); return [{ label: (0,external_wp_i18n_namespaceObject.__)('Default'), value: '' }, ...options]; }; const selectLabel = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { children: [icon && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, { icon: icon }), label] }); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(select_control, { __next40pxDefaultSize: __next40pxDefaultSize, className: dist_clsx(className, 'block-editor-dimension-control'), label: selectLabel, hideLabelFromVision: false, value: value, onChange: onChangeSpacingSize, options: formatSizesAsOptions(sizes) }); } /* harmony default export */ const dimension_control = (DimensionControl); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/disabled/styles/disabled-styles.js function disabled_styles_EMOTION_STRINGIFIED_CSS_ERROR_() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /** * External dependencies */ const disabled_styles_disabledStyles = true ? { name: "u2jump", styles: "position:relative;pointer-events:none;&::after{content:'';position:absolute;top:0;right:0;bottom:0;left:0;}*{pointer-events:none;}" } : 0; ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/disabled/index.js /** * WordPress dependencies */ /** * Internal dependencies */ const Context = (0,external_wp_element_namespaceObject.createContext)(false); const { Consumer, Provider: disabled_Provider } = Context; /** * `Disabled` is a component which disables descendant tabbable elements and * prevents pointer interaction. * * _Note: this component may not behave as expected in browsers that don't * support the `inert` HTML attribute. We recommend adding the official WICG * polyfill when using this component in your project._ * * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert * * ```jsx * import { Button, Disabled, TextControl } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const MyDisabled = () => { * const [ isDisabled, setIsDisabled ] = useState( true ); * * let input = <TextControl label="Input" onChange={ () => {} } />; * if ( isDisabled ) { * input = <Disabled>{ input }</Disabled>; * } * * const toggleDisabled = () => { * setIsDisabled( ( state ) => ! state ); * }; * * return ( * <div> * { input } * <Button variant="primary" onClick={ toggleDisabled }> * Toggle Disabled * </Button> * </div> * ); * }; * ``` */ function Disabled({ className, children, isDisabled = true, ...props }) { const cx = useCx(); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(disabled_Provider, { value: isDisabled, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { // @ts-ignore Reason: inert is a recent HTML attribute inert: isDisabled ? 'true' : undefined, className: isDisabled ? cx(disabled_styles_disabledStyles, className, 'components-disabled') : undefined, ...props, children: children }) }); } Disabled.Context = Context; Disabled.Consumer = Consumer; /* harmony default export */ const disabled = (Disabled); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/disclosure/index.js /** * External dependencies */ // eslint-disable-next-line no-restricted-imports /** * WordPress dependencies */ /** * Internal dependencies */ /** * Accessible Disclosure component that controls visibility of a section of * content. It follows the WAI-ARIA Disclosure Pattern. */ const UnforwardedDisclosureContent = ({ visible, children, ...props }, ref) => { const disclosure = useDisclosureStore({ open: visible }); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DisclosureContent, { store: disclosure, ref: ref, ...props, children: children }); }; const disclosure_DisclosureContent = (0,external_wp_element_namespaceObject.forwardRef)(UnforwardedDisclosureContent); /* harmony default export */ const disclosure = ((/* unused pure expression or super */ null && (disclosure_DisclosureContent))); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/draggable/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const dragImageClass = 'components-draggable__invisible-drag-image'; const cloneWrapperClass = 'components-draggable__clone'; const clonePadding = 0; const bodyClass = 'is-dragging-components-draggable'; /** * `Draggable` is a Component that provides a way to set up a cross-browser * (including IE) customizable drag image and the transfer data for the drag * event. It decouples the drag handle and the element to drag: use it by * wrapping the component that will become the drag handle and providing the DOM * ID of the element to drag. * * Note that the drag handle needs to declare the `draggable="true"` property * and bind the `Draggable`s `onDraggableStart` and `onDraggableEnd` event * handlers to its own `onDragStart` and `onDragEnd` respectively. `Draggable` * takes care of the logic to setup the drag image and the transfer data, but is * not concerned with creating an actual DOM element that is draggable. * * ```jsx * import { Draggable, Panel, PanelBody } from '@wordpress/components'; * import { Icon, more } from '@wordpress/icons'; * * const MyDraggable = () => ( * <div id="draggable-panel"> * <Panel header="Draggable panel"> * <PanelBody> * <Draggable elementId="draggable-panel" transferData={ {} }> * { ( { onDraggableStart, onDraggableEnd } ) => ( * <div * className="example-drag-handle" * draggable * onDragStart={ onDraggableStart } * onDragEnd={ onDraggableEnd } * > * <Icon icon={ more } /> * </div> * ) } * </Draggable> * </PanelBody> * </Panel> * </div> * ); * ``` */ function Draggable({ children, onDragStart, onDragOver, onDragEnd, appendToOwnerDocument = false, cloneClassname, elementId, transferData, __experimentalTransferDataType: transferDataType = 'text', __experimentalDragComponent: dragComponent }) { const dragComponentRef = (0,external_wp_element_namespaceObject.useRef)(null); const cleanup = (0,external_wp_element_namespaceObject.useRef)(() => {}); /** * Removes the element clone, resets cursor, and removes drag listener. * * @param event The non-custom DragEvent. */ function end(event) { event.preventDefault(); cleanup.current(); if (onDragEnd) { onDragEnd(event); } } /** * This method does a couple of things: * * - Clones the current element and spawns clone over original element. * - Adds a fake temporary drag image to avoid browser defaults. * - Sets transfer data. * - Adds dragover listener. * * @param event The non-custom DragEvent. */ function start(event) { const { ownerDocument } = event.target; event.dataTransfer.setData(transferDataType, JSON.stringify(transferData)); const cloneWrapper = ownerDocument.createElement('div'); // Reset position to 0,0. Natural stacking order will position this lower, even with a transform otherwise. cloneWrapper.style.top = '0'; cloneWrapper.style.left = '0'; const dragImage = ownerDocument.createElement('div'); // Set a fake drag image to avoid browser defaults. Remove from DOM // right after. event.dataTransfer.setDragImage is not supported yet in // IE, we need to check for its existence first. if ('function' === typeof event.dataTransfer.setDragImage) { dragImage.classList.add(dragImageClass); ownerDocument.body.appendChild(dragImage); event.dataTransfer.setDragImage(dragImage, 0, 0); } cloneWrapper.classList.add(cloneWrapperClass); if (cloneClassname) { cloneWrapper.classList.add(cloneClassname); } let x = 0; let y = 0; // If a dragComponent is defined, the following logic will clone the // HTML node and inject it into the cloneWrapper. if (dragComponentRef.current) { // Position dragComponent at the same position as the cursor. x = event.clientX; y = event.clientY; cloneWrapper.style.transform = `translate( ${x}px, ${y}px )`; const clonedDragComponent = ownerDocument.createElement('div'); clonedDragComponent.innerHTML = dragComponentRef.current.innerHTML; cloneWrapper.appendChild(clonedDragComponent); // Inject the cloneWrapper into the DOM. ownerDocument.body.appendChild(cloneWrapper); } else { const element = ownerDocument.getElementById(elementId); // Prepare element clone and append to element wrapper. const elementRect = element.getBoundingClientRect(); const elementWrapper = element.parentNode; const elementTopOffset = elementRect.top; const elementLeftOffset = elementRect.left; cloneWrapper.style.width = `${elementRect.width + clonePadding * 2}px`; const clone = element.cloneNode(true); clone.id = `clone-${elementId}`; // Position clone right over the original element (20px padding). x = elementLeftOffset - clonePadding; y = elementTopOffset - clonePadding; cloneWrapper.style.transform = `translate( ${x}px, ${y}px )`; // Hack: Remove iFrames as it's causing the embeds drag clone to freeze. Array.from(clone.querySelectorAll('iframe')).forEach(child => child.parentNode?.removeChild(child)); cloneWrapper.appendChild(clone); // Inject the cloneWrapper into the DOM. if (appendToOwnerDocument) { ownerDocument.body.appendChild(cloneWrapper); } else { elementWrapper?.appendChild(cloneWrapper); } } // Mark the current cursor coordinates. let cursorLeft = event.clientX; let cursorTop = event.clientY; function over(e) { // Skip doing any work if mouse has not moved. if (cursorLeft === e.clientX && cursorTop === e.clientY) { return; } const nextX = x + e.clientX - cursorLeft; const nextY = y + e.clientY - cursorTop; cloneWrapper.style.transform = `translate( ${nextX}px, ${nextY}px )`; cursorLeft = e.clientX; cursorTop = e.clientY; x = nextX; y = nextY; if (onDragOver) { onDragOver(e); } } // Aim for 60fps (16 ms per frame) for now. We can potentially use requestAnimationFrame (raf) instead, // note that browsers may throttle raf below 60fps in certain conditions. // @ts-ignore const throttledDragOver = (0,external_wp_compose_namespaceObject.throttle)(over, 16); ownerDocument.addEventListener('dragover', throttledDragOver); // Update cursor to 'grabbing', document wide. ownerDocument.body.classList.add(bodyClass); if (onDragStart) { onDragStart(event); } cleanup.current = () => { // Remove drag clone. if (cloneWrapper && cloneWrapper.parentNode) { cloneWrapper.parentNode.removeChild(cloneWrapper); } if (dragImage && dragImage.parentNode) { dragImage.parentNode.removeChild(dragImage); } // Reset cursor. ownerDocument.body.classList.remove(bodyClass); ownerDocument.removeEventListener('dragover', throttledDragOver); }; } (0,external_wp_element_namespaceObject.useEffect)(() => () => { cleanup.current(); }, []); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { children: [children({ onDraggableStart: start, onDraggableEnd: end }), dragComponent && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { className: "components-draggable-drag-component-root", style: { display: 'none' }, ref: dragComponentRef, children: dragComponent })] }); } /* harmony default export */ const draggable = (Draggable); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/upload.js /** * WordPress dependencies */ const upload = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { d: "M18.5 15v3.5H13V6.7l4.5 4.1 1-1.1-6.2-5.8-5.8 5.8 1 1.1 4-4v11.7h-6V15H4v5h16v-5z" }) }); /* harmony default export */ const library_upload = (upload); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/drop-zone/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const drop_zone_backdrop = { hidden: { opacity: 0 }, show: { opacity: 1, transition: { type: 'tween', duration: 0.2, delay: 0, delayChildren: 0.1 } }, exit: { opacity: 0, transition: { duration: 0.2, delayChildren: 0 } } }; const foreground = { hidden: { opacity: 0, scale: 0.9 }, show: { opacity: 1, scale: 1, transition: { duration: 0.1 } }, exit: { opacity: 0, scale: 0.9 } }; function DropIndicator({ label }) { const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)(); const children = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(motion.div, { variants: drop_zone_backdrop, initial: disableMotion ? 'show' : 'hidden', animate: "show", exit: disableMotion ? 'show' : 'exit', className: "components-drop-zone__content" // Without this, when this div is shown, // Safari calls a onDropZoneLeave causing a loop because of this bug // https://bugs.webkit.org/show_bug.cgi?id=66547 , style: { pointerEvents: 'none' }, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(motion.div, { variants: foreground, children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(icons_build_module_icon, { icon: library_upload, className: "components-drop-zone__content-icon" }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { className: "components-drop-zone__content-text", children: label ? label : (0,external_wp_i18n_namespaceObject.__)('Drop files to upload') })] }) }); if (disableMotion) { return children; } return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AnimatePresence, { children: children }); } /** * `DropZone` is a component creating a drop zone area taking the full size of its parent element. It supports dropping files, HTML content or any other HTML drop event. * * ```jsx * import { DropZone } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const MyDropZone = () => { * const [ hasDropped, setHasDropped ] = useState( false ); * * return ( * <div> * { hasDropped ? 'Dropped!' : 'Drop something here' } * <DropZone * onFilesDrop={ () => setHasDropped( true ) } * onHTMLDrop={ () => setHasDropped( true ) } * onDrop={ () => setHasDropped( true ) } * /> * </div> * ); * } * ``` */ function DropZoneComponent({ className, label, onFilesDrop, onHTMLDrop, onDrop, ...restProps }) { const [isDraggingOverDocument, setIsDraggingOverDocument] = (0,external_wp_element_namespaceObject.useState)(); const [isDraggingOverElement, setIsDraggingOverElement] = (0,external_wp_element_namespaceObject.useState)(); const [type, setType] = (0,external_wp_element_namespaceObject.useState)(); const ref = (0,external_wp_compose_namespaceObject.__experimentalUseDropZone)({ onDrop(event) { const files = event.dataTransfer ? (0,external_wp_dom_namespaceObject.getFilesFromDataTransfer)(event.dataTransfer) : []; const html = event.dataTransfer?.getData('text/html'); /** * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML. * The order of the checks is important to recognise the HTML drop. */ if (html && onHTMLDrop) { onHTMLDrop(html); } else if (files.length && onFilesDrop) { onFilesDrop(files); } else if (onDrop) { onDrop(event); } }, onDragStart(event) { setIsDraggingOverDocument(true); let _type = 'default'; /** * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML. * The order of the checks is important to recognise the HTML drop. */ if (event.dataTransfer?.types.includes('text/html')) { _type = 'html'; } else if ( // Check for the types because sometimes the files themselves // are only available on drop. event.dataTransfer?.types.includes('Files') || (event.dataTransfer ? (0,external_wp_dom_namespaceObject.getFilesFromDataTransfer)(event.dataTransfer) : []).length > 0) { _type = 'file'; } setType(_type); }, onDragEnd() { setIsDraggingOverDocument(false); setType(undefined); }, onDragEnter() { setIsDraggingOverElement(true); }, onDragLeave() { setIsDraggingOverElement(false); } }); const classes = dist_clsx('components-drop-zone', className, { 'is-active': (isDraggingOverDocument || isDraggingOverElement) && (type === 'file' && onFilesDrop || type === 'html' && onHTMLDrop || type === 'default' && onDrop), 'is-dragging-over-document': isDraggingOverDocument, 'is-dragging-over-element': isDraggingOverElement, [`is-dragging-${type}`]: !!type }); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { ...restProps, ref: ref, className: classes, children: isDraggingOverElement && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DropIndicator, { label: label }) }); } /* harmony default export */ const drop_zone = (DropZoneComponent); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/drop-zone/provider.js /** * WordPress dependencies */ function DropZoneProvider({ children }) { external_wp_deprecated_default()('wp.components.DropZoneProvider', { since: '5.8', hint: 'wp.component.DropZone no longer needs a provider. wp.components.DropZoneProvider is safe to remove from your code.' }); return children; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/swatch.js /** * WordPress dependencies */ const swatch = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { d: "M5 17.7c.4.5.8.9 1.2 1.2l1.1-1.4c-.4-.3-.7-.6-1-1L5 17.7zM5 6.3l1.4 1.1c.3-.4.6-.7 1-1L6.3 5c-.5.4-.9.8-1.3 1.3zm.1 7.8l-1.7.5c.2.6.4 1.1.7 1.6l1.5-.8c-.2-.4-.4-.8-.5-1.3zM4.8 12v-.7L3 11.1v1.8l1.7-.2c.1-.2.1-.5.1-.7zm3 7.9c.5.3 1.1.5 1.6.7l.5-1.7c-.5-.1-.9-.3-1.3-.5l-.8 1.5zM19 6.3c-.4-.5-.8-.9-1.2-1.2l-1.1 1.4c.4.3.7.6 1 1L19 6.3zm-.1 3.6l1.7-.5c-.2-.6-.4-1.1-.7-1.6l-1.5.8c.2.4.4.8.5 1.3zM5.6 8.6l-1.5-.8c-.3.5-.5 1-.7 1.6l1.7.5c.1-.5.3-.9.5-1.3zm2.2-4.5l.8 1.5c.4-.2.8-.4 1.3-.5l-.5-1.7c-.6.2-1.1.4-1.6.7zm8.8 13.5l1.1 1.4c.5-.4.9-.8 1.2-1.2l-1.4-1.1c-.2.3-.5.6-.9.9zm1.8-2.2l1.5.8c.3-.5.5-1.1.7-1.6l-1.7-.5c-.1.5-.3.9-.5 1.3zm2.6-4.3l-1.7.2v1.4l1.7.2V12v-.9zM11.1 3l.2 1.7h1.4l.2-1.7h-1.8zm3 2.1c.5.1.9.3 1.3.5l.8-1.5c-.5-.3-1.1-.5-1.6-.7l-.5 1.7zM12 19.2h-.7l-.2 1.8h1.8l-.2-1.7c-.2-.1-.5-.1-.7-.1zm2.1-.3l.5 1.7c.6-.2 1.1-.4 1.6-.7l-.8-1.5c-.4.2-.8.4-1.3.5z" }) }); /* harmony default export */ const library_swatch = (swatch); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/duotone-picker/utils.js /** * External dependencies */ /** * Internal dependencies */ k([names]); /** * Object representation for a color. * * @typedef {Object} RGBColor * @property {number} r Red component of the color in the range [0,1]. * @property {number} g Green component of the color in the range [0,1]. * @property {number} b Blue component of the color in the range [0,1]. */ /** * Calculate the brightest and darkest values from a color palette. * * @param palette Color palette for the theme. * * @return Tuple of the darkest color and brightest color. */ function getDefaultColors(palette) { // A default dark and light color are required. if (!palette || palette.length < 2) { return ['#000', '#fff']; } return palette.map(({ color }) => ({ color, brightness: w(color).brightness() })).reduce(([min, max], current) => { return [current.brightness <= min.brightness ? current : min, current.brightness >= max.brightness ? current : max]; }, [{ brightness: 1, color: '' }, { brightness: 0, color: '' }]).map(({ color }) => color); } /** * Generate a duotone gradient from a list of colors. * * @param colors CSS color strings. * @param angle CSS gradient angle. * * @return CSS gradient string for the duotone swatch. */ function getGradientFromCSSColors(colors = [], angle = '90deg') { const l = 100 / colors.length; const stops = colors.map((c, i) => `${c} ${i * l}%, ${c} ${(i + 1) * l}%`).join(', '); return `linear-gradient( ${angle}, ${stops} )`; } /** * Convert a color array to an array of color stops. * * @param colors CSS colors array * * @return Color stop information. */ function getColorStopsFromColors(colors) { return colors.map((color, i) => ({ position: i * 100 / (colors.length - 1), color })); } /** * Convert a color stop array to an array colors. * * @param colorStops Color stop information. * * @return CSS colors array. */ function getColorsFromColorStops(colorStops = []) { return colorStops.map(({ color }) => color); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/duotone-picker/duotone-swatch.js /** * WordPress dependencies */ /** * Internal dependencies */ function DuotoneSwatch({ values }) { return values ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(color_indicator, { colorValue: getGradientFromCSSColors(values, '135deg') }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, { icon: library_swatch }); } /* harmony default export */ const duotone_swatch = (DuotoneSwatch); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/duotone-picker/color-list-picker/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function ColorOption({ label, value, colors, disableCustomColors, enableAlpha, onChange }) { const [isOpen, setIsOpen] = (0,external_wp_element_namespaceObject.useState)(false); const idRoot = (0,external_wp_compose_namespaceObject.useInstanceId)(ColorOption, 'color-list-picker-option'); const labelId = `${idRoot}__label`; const contentId = `${idRoot}__content`; return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_button, { className: "components-color-list-picker__swatch-button", onClick: () => setIsOpen(prev => !prev), "aria-expanded": isOpen, "aria-controls": contentId, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(h_stack_component, { justify: "flex-start", spacing: 2, children: [value ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(color_indicator, { colorValue: value, className: "components-color-list-picker__swatch-color" }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, { icon: library_swatch }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { id: labelId, children: label })] }) }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { role: "group", id: contentId, "aria-labelledby": labelId, "aria-hidden": !isOpen, children: isOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(color_palette, { "aria-label": (0,external_wp_i18n_namespaceObject.__)('Color options'), className: "components-color-list-picker__color-picker", colors: colors, value: value, clearable: false, onChange: onChange, disableCustomColors: disableCustomColors, enableAlpha: enableAlpha }) })] }); } function ColorListPicker({ colors, labels, value = [], disableCustomColors, enableAlpha, onChange }) { return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { className: "components-color-list-picker", children: labels.map((label, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ColorOption, { label: label, value: value[index], colors: colors, disableCustomColors: disableCustomColors, enableAlpha: enableAlpha, onChange: newColor => { const newColors = value.slice(); newColors[index] = newColor; onChange(newColors); } }, index)) }); } /* harmony default export */ const color_list_picker = (ColorListPicker); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/duotone-picker/custom-duotone-bar.js /** * Internal dependencies */ const PLACEHOLDER_VALUES = ['#333', '#CCC']; function CustomDuotoneBar({ value, onChange }) { const hasGradient = !!value; const values = hasGradient ? value : PLACEHOLDER_VALUES; const background = getGradientFromCSSColors(values); const controlPoints = getColorStopsFromColors(values); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomGradientBar, { disableInserter: true, background: background, hasGradient: hasGradient, value: controlPoints, onChange: newColorStops => { const newValue = getColorsFromColorStops(newColorStops); onChange(newValue); } }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/duotone-picker/duotone-picker.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * ```jsx * import { DuotonePicker, DuotoneSwatch } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const DUOTONE_PALETTE = [ * { colors: [ '#8c00b7', '#fcff41' ], name: 'Purple and yellow', slug: 'purple-yellow' }, * { colors: [ '#000097', '#ff4747' ], name: 'Blue and red', slug: 'blue-red' }, * ]; * * const COLOR_PALETTE = [ * { color: '#ff4747', name: 'Red', slug: 'red' }, * { color: '#fcff41', name: 'Yellow', slug: 'yellow' }, * { color: '#000097', name: 'Blue', slug: 'blue' }, * { color: '#8c00b7', name: 'Purple', slug: 'purple' }, * ]; * * const Example = () => { * const [ duotone, setDuotone ] = useState( [ '#000000', '#ffffff' ] ); * return ( * <> * <DuotonePicker * duotonePalette={ DUOTONE_PALETTE } * colorPalette={ COLOR_PALETTE } * value={ duotone } * onChange={ setDuotone } * /> * <DuotoneSwatch values={ duotone } /> * </> * ); * }; * ``` */ function DuotonePicker({ asButtons, loop, clearable = true, unsetable = true, colorPalette, duotonePalette, disableCustomColors, disableCustomDuotone, value, onChange, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, ...otherProps }) { const [defaultDark, defaultLight] = (0,external_wp_element_namespaceObject.useMemo)(() => getDefaultColors(colorPalette), [colorPalette]); const isUnset = value === 'unset'; const unsetOptionLabel = (0,external_wp_i18n_namespaceObject.__)('Unset'); const unsetOption = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_circular_option_picker.Option, { value: "unset", isSelected: isUnset, tooltipText: unsetOptionLabel, "aria-label": unsetOptionLabel, className: "components-duotone-picker__color-indicator", onClick: () => { onChange(isUnset ? undefined : 'unset'); } }, "unset"); const duotoneOptions = duotonePalette.map(({ colors, slug, name }) => { const style = { background: getGradientFromCSSColors(colors, '135deg'), color: 'transparent' }; const tooltipText = name !== null && name !== void 0 ? name : (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: duotone code e.g: "dark-grayscale" or "7f7f7f-ffffff". (0,external_wp_i18n_namespaceObject.__)('Duotone code: %s'), slug); const label = name ? (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: The name of the option e.g: "Dark grayscale". (0,external_wp_i18n_namespaceObject.__)('Duotone: %s'), name) : tooltipText; const isSelected = es6_default()(colors, value); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_circular_option_picker.Option, { value: colors, isSelected: isSelected, "aria-label": label, tooltipText: tooltipText, style: style, onClick: () => { onChange(isSelected ? undefined : colors); } }, slug); }); let metaProps; if (asButtons) { metaProps = { asButtons: true }; } else { const _metaProps = { asButtons: false, loop }; if (ariaLabel) { metaProps = { ..._metaProps, 'aria-label': ariaLabel }; } else if (ariaLabelledby) { metaProps = { ..._metaProps, 'aria-labelledby': ariaLabelledby }; } else { metaProps = { ..._metaProps, 'aria-label': (0,external_wp_i18n_namespaceObject.__)('Custom color picker.') }; } } const options = unsetable ? [unsetOption, ...duotoneOptions] : duotoneOptions; return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_circular_option_picker, { ...otherProps, ...metaProps, options: options, actions: !!clearable && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_circular_option_picker.ButtonAction, { onClick: () => onChange(undefined), children: (0,external_wp_i18n_namespaceObject.__)('Clear') }), children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(spacer_component, { paddingTop: options.length === 0 ? 0 : 4, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(v_stack_component, { spacing: 3, children: [!disableCustomColors && !disableCustomDuotone && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomDuotoneBar, { value: isUnset ? undefined : value, onChange: onChange }), !disableCustomDuotone && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(color_list_picker, { labels: [(0,external_wp_i18n_namespaceObject.__)('Shadows'), (0,external_wp_i18n_namespaceObject.__)('Highlights')], colors: colorPalette, value: isUnset ? undefined : value, disableCustomColors: disableCustomColors, enableAlpha: true, onChange: newColors => { if (!newColors[0]) { newColors[0] = defaultDark; } if (!newColors[1]) { newColors[1] = defaultLight; } const newValue = newColors.length >= 2 ? newColors : undefined; // @ts-expect-error TODO: The color arrays for a DuotonePicker should be a tuple of two colors, // but it's currently typed as a string[]. // See also https://github.com/WordPress/gutenberg/pull/49060#discussion_r1136951035 onChange(newValue); } })] }) }) }); } /* harmony default export */ const duotone_picker = (DuotonePicker); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/external-link/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function UnforwardedExternalLink(props, ref) { const { href, children, className, rel = '', ...additionalProps } = props; const optimizedRel = [...new Set([...rel.split(' '), 'external', 'noreferrer', 'noopener'].filter(Boolean))].join(' '); const classes = dist_clsx('components-external-link', className); /* Anchor links are perceived as external links. This constant helps check for on page anchor links, to prevent them from being opened in the editor. */ const isInternalAnchor = !!href?.startsWith('#'); const onClickHandler = event => { if (isInternalAnchor) { event.preventDefault(); } if (props.onClick) { props.onClick(event); } }; return ( /*#__PURE__*/ /* eslint-disable react/jsx-no-target-blank */ (0,external_ReactJSXRuntime_namespaceObject.jsxs)("a", { ...additionalProps, className: classes, href: href, onClick: onClickHandler, target: "_blank", rel: optimizedRel, ref: ref, children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { className: "components-external-link__contents", children: children }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { className: "components-external-link__icon", "aria-label": /* translators: accessibility text */ (0,external_wp_i18n_namespaceObject.__)('(opens in a new tab)'), children: "\u2197" })] }) /* eslint-enable react/jsx-no-target-blank */ ); } /** * Link to an external resource. * * ```jsx * import { ExternalLink } from '@wordpress/components'; * * const MyExternalLink = () => ( * <ExternalLink href="https://wordpress.org">WordPress.org</ExternalLink> * ); * ``` */ const ExternalLink = (0,external_wp_element_namespaceObject.forwardRef)(UnforwardedExternalLink); /* harmony default export */ const external_link = (ExternalLink); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focal-point-picker/utils.js const INITIAL_BOUNDS = { width: 200, height: 170 }; const VIDEO_EXTENSIONS = ['avi', 'mpg', 'mpeg', 'mov', 'mp4', 'm4v', 'ogg', 'ogv', 'webm', 'wmv']; /** * Gets the extension of a file name. * * @param filename The file name. * @return The extension of the file name. */ function getExtension(filename = '') { const parts = filename.split('.'); return parts[parts.length - 1]; } /** * Checks if a file is a video. * * @param filename The file name. * @return Whether the file is a video. */ function isVideoType(filename = '') { if (!filename) { return false; } return filename.startsWith('data:video/') || VIDEO_EXTENSIONS.includes(getExtension(filename)); } /** * Transforms a fraction value to a percentage value. * * @param fraction The fraction value. * @return A percentage value. */ function fractionToPercentage(fraction) { return Math.round(fraction * 100); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focal-point-picker/styles/focal-point-picker-style.js function focal_point_picker_style_EMOTION_STRINGIFIED_CSS_ERROR_() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /** * External dependencies */ /** * Internal dependencies */ const MediaWrapper = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "eeew7dm8" } : 0)( true ? { name: "jqnsxy", styles: "background-color:transparent;display:flex;text-align:center;width:100%" } : 0); const MediaContainer = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "eeew7dm7" } : 0)("align-items:center;border-radius:", config_values.radiusBlockUi, ";cursor:pointer;display:inline-flex;justify-content:center;margin:auto;position:relative;height:100%;&:after{border-radius:inherit;bottom:0;box-shadow:inset 0 0 0 1px rgba( 0, 0, 0, 0.1 );content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;}img,video{border-radius:inherit;box-sizing:border-box;display:block;height:auto;margin:0;max-height:100%;max-width:100%;pointer-events:none;user-select:none;width:auto;}" + ( true ? "" : 0)); const MediaPlaceholder = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "eeew7dm6" } : 0)("background:", COLORS.gray[100], ";border-radius:inherit;box-sizing:border-box;height:", INITIAL_BOUNDS.height, "px;max-width:280px;min-width:", INITIAL_BOUNDS.width, "px;width:100%;" + ( true ? "" : 0)); const focal_point_picker_style_StyledUnitControl = /*#__PURE__*/emotion_styled_base_browser_esm(unit_control, true ? { target: "eeew7dm5" } : 0)( true ? { name: "1d3w5wq", styles: "width:100%" } : 0); var focal_point_picker_style_ref2 = true ? { name: "1mn7kwb", styles: "padding-bottom:1em" } : 0; const deprecatedBottomMargin = ({ __nextHasNoMarginBottom }) => { return !__nextHasNoMarginBottom ? focal_point_picker_style_ref2 : undefined; }; var focal_point_picker_style_ref = true ? { name: "1mn7kwb", styles: "padding-bottom:1em" } : 0; const extraHelpTextMargin = ({ hasHelpText = false }) => { return hasHelpText ? focal_point_picker_style_ref : undefined; }; const ControlWrapper = /*#__PURE__*/emotion_styled_base_browser_esm(flex_component, true ? { target: "eeew7dm4" } : 0)("max-width:320px;padding-top:1em;", extraHelpTextMargin, " ", deprecatedBottomMargin, ";" + ( true ? "" : 0)); const GridView = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "eeew7dm3" } : 0)("left:50%;overflow:hidden;pointer-events:none;position:absolute;top:50%;transform:translate3d( -50%, -50%, 0 );z-index:1;@media not ( prefers-reduced-motion ){transition:opacity 100ms linear;}opacity:", ({ showOverlay }) => showOverlay ? 1 : 0, ";" + ( true ? "" : 0)); const GridLine = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "eeew7dm2" } : 0)( true ? { name: "1yzbo24", styles: "background:rgba( 255, 255, 255, 0.4 );backdrop-filter:blur( 16px ) saturate( 180% );position:absolute;transform:translateZ( 0 )" } : 0); const GridLineX = /*#__PURE__*/emotion_styled_base_browser_esm(GridLine, true ? { target: "eeew7dm1" } : 0)( true ? { name: "1sw8ur", styles: "height:1px;left:1px;right:1px" } : 0); const GridLineY = /*#__PURE__*/emotion_styled_base_browser_esm(GridLine, true ? { target: "eeew7dm0" } : 0)( true ? { name: "188vg4t", styles: "width:1px;top:1px;bottom:1px" } : 0); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focal-point-picker/controls.js /** * WordPress dependencies */ /** * Internal dependencies */ const TEXTCONTROL_MIN = 0; const TEXTCONTROL_MAX = 100; const controls_noop = () => {}; function FocalPointPickerControls({ __nextHasNoMarginBottom, __next40pxDefaultSize, hasHelpText, onChange = controls_noop, point = { x: 0.5, y: 0.5 } }) { const valueX = fractionToPercentage(point.x); const valueY = fractionToPercentage(point.y); const handleChange = (value, axis) => { if (value === undefined) { return; } const num = parseInt(value, 10); if (!isNaN(num)) { onChange({ ...point, [axis]: num / 100 }); } }; return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(ControlWrapper, { className: "focal-point-picker__controls", __nextHasNoMarginBottom: __nextHasNoMarginBottom, hasHelpText: hasHelpText, gap: 4, children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FocalPointUnitControl, { __next40pxDefaultSize: __next40pxDefaultSize, label: (0,external_wp_i18n_namespaceObject.__)('Left'), "aria-label": (0,external_wp_i18n_namespaceObject.__)('Focal point left position'), value: [valueX, '%'].join(''), onChange: next => handleChange(next, 'x'), dragDirection: "e" }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FocalPointUnitControl, { __next40pxDefaultSize: __next40pxDefaultSize, label: (0,external_wp_i18n_namespaceObject.__)('Top'), "aria-label": (0,external_wp_i18n_namespaceObject.__)('Focal point top position'), value: [valueY, '%'].join(''), onChange: next => handleChange(next, 'y'), dragDirection: "s" })] }); } function FocalPointUnitControl(props) { return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(focal_point_picker_style_StyledUnitControl, { className: "focal-point-picker__controls-position-unit-control", labelPosition: "top", max: TEXTCONTROL_MAX, min: TEXTCONTROL_MIN, units: [{ value: '%', label: '%' }], ...props }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focal-point-picker/styles/focal-point-style.js /** * External dependencies */ const PointerCircle = /*#__PURE__*/emotion_styled_base_browser_esm("div", true ? { target: "e19snlhg0" } : 0)("background-color:transparent;cursor:grab;height:40px;margin:-20px 0 0 -20px;position:absolute;user-select:none;width:40px;will-change:transform;z-index:10000;background:rgba( 255, 255, 255, 0.4 );border:1px solid rgba( 255, 255, 255, 0.4 );border-radius:50%;backdrop-filter:blur( 16px ) saturate( 180% );box-shadow:rgb( 0 0 0 / 10% ) 0px 0px 8px;@media not ( prefers-reduced-motion ){transition:transform 100ms linear;}", ({ isDragging }) => isDragging && ` box-shadow: rgb( 0 0 0 / 12% ) 0px 0px 10px; transform: scale( 1.1 ); cursor: grabbing; `, ";" + ( true ? "" : 0)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focal-point-picker/focal-point.js /** * Internal dependencies */ /** * External dependencies */ function FocalPoint({ left = '50%', top = '50%', ...props }) { const style = { left, top }; return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PointerCircle, { ...props, className: "components-focal-point-picker__icon_container", style: style }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focal-point-picker/grid.js /** * Internal dependencies */ function FocalPointPickerGrid({ bounds, ...props }) { return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(GridView, { ...props, className: "components-focal-point-picker__grid", style: { width: bounds.width, height: bounds.height }, children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLineX, { style: { top: '33%' } }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLineX, { style: { top: '66%' } }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLineY, { style: { left: '33%' } }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLineY, { style: { left: '66%' } })] }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focal-point-picker/media.js /** * External dependencies */ /** * Internal dependencies */ function media_Media({ alt, autoPlay, src, onLoad, mediaRef, // Exposing muted prop for test rendering purposes // https://github.com/testing-library/react-testing-library/issues/470 muted = true, ...props }) { if (!src) { return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MediaPlaceholder, { className: "components-focal-point-picker__media components-focal-point-picker__media--placeholder", ref: mediaRef, ...props }); } const isVideo = isVideoType(src); return isVideo ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("video", { ...props, autoPlay: autoPlay, className: "components-focal-point-picker__media components-focal-point-picker__media--video", loop: true, muted: muted, onLoadedData: onLoad, ref: mediaRef, src: src }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", { ...props, alt: alt, className: "components-focal-point-picker__media components-focal-point-picker__media--image", onLoad: onLoad, ref: mediaRef, src: src }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focal-point-picker/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const GRID_OVERLAY_TIMEOUT = 600; /** * Focal Point Picker is a component which creates a UI for identifying the most important visual point of an image. * * This component addresses a specific problem: with large background images it is common to see undesirable crops, * especially when viewing on smaller viewports such as mobile phones. This component allows the selection of * the point with the most important visual information and returns it as a pair of numbers between 0 and 1. * This value can be easily converted into the CSS `background-position` attribute, and will ensure that the * focal point is never cropped out, regardless of viewport. * * - Example focal point picker value: `{ x: 0.5, y: 0.1 }` * - Corresponding CSS: `background-position: 50% 10%;` * * ```jsx * import { FocalPointPicker } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const Example = () => { * const [ focalPoint, setFocalPoint ] = useState( { * x: 0.5, * y: 0.5, * } ); * * const url = '/path/to/image'; * * // Example function to render the CSS styles based on Focal Point Picker value * const style = { * backgroundImage: `url(${ url })`, * backgroundPosition: `${ focalPoint.x * 100 }% ${ focalPoint.y * 100 }%`, * }; * * return ( * <> * <FocalPointPicker * url={ url } * value={ focalPoint } * onDragStart={ setFocalPoint } * onDrag={ setFocalPoint } * onChange={ setFocalPoint } * /> * <div style={ style } /> * </> * ); * }; * ``` */ function FocalPointPicker({ __nextHasNoMarginBottom, __next40pxDefaultSize = false, autoPlay = true, className, help, label, onChange, onDrag, onDragEnd, onDragStart, resolvePoint, url, value: valueProp = { x: 0.5, y: 0.5 }, ...restProps }) { const [point, setPoint] = (0,external_wp_element_namespaceObject.useState)(valueProp); const [showGridOverlay, setShowGridOverlay] = (0,external_wp_element_namespaceObject.useState)(false); const { startDrag, endDrag, isDragging } = (0,external_wp_compose_namespaceObject.__experimentalUseDragging)({ onDragStart: event => { dragAreaRef.current?.focus(); const value = getValueWithinDragArea(event); // `value` can technically be undefined if getValueWithinDragArea() is // called before dragAreaRef is set, but this shouldn't happen in reality. if (!value) { return; } onDragStart?.(value, event); setPoint(value); }, onDragMove: event => { // Prevents text-selection when dragging. event.preventDefault(); const value = getValueWithinDragArea(event); if (!value) { return; } onDrag?.(value, event); setPoint(value); }, onDragEnd: () => { onDragEnd?.(); onChange?.(point); } }); // Uses the internal point while dragging or else the value from props. const { x, y } = isDragging ? point : valueProp; const dragAreaRef = (0,external_wp_element_namespaceObject.useRef)(null); const [bounds, setBounds] = (0,external_wp_element_namespaceObject.useState)(INITIAL_BOUNDS); const refUpdateBounds = (0,external_wp_element_namespaceObject.useRef)(() => { if (!dragAreaRef.current) { return; } const { clientWidth: width, clientHeight: height } = dragAreaRef.current; // Falls back to initial bounds if the ref has no size. Since styles // give the drag area dimensions even when the media has not loaded // this should only happen in unit tests (jsdom). setBounds(width > 0 && height > 0 ? { width, height } : { ...INITIAL_BOUNDS }); }); (0,external_wp_element_namespaceObject.useEffect)(() => { const updateBounds = refUpdateBounds.current; if (!dragAreaRef.current) { return; } const { defaultView } = dragAreaRef.current.ownerDocument; defaultView?.addEventListener('resize', updateBounds); return () => defaultView?.removeEventListener('resize', updateBounds); }, []); // Updates the bounds to cover cases of unspecified media or load failures. (0,external_wp_compose_namespaceObject.useIsomorphicLayoutEffect)(() => void refUpdateBounds.current(), []); // TODO: Consider refactoring getValueWithinDragArea() into a pure function. // https://github.com/WordPress/gutenberg/pull/43872#discussion_r963455173 const getValueWithinDragArea = ({ clientX, clientY, shiftKey }) => { if (!dragAreaRef.current) { return; } const { top, left } = dragAreaRef.current.getBoundingClientRect(); let nextX = (clientX - left) / bounds.width; let nextY = (clientY - top) / bounds.height; // Enables holding shift to jump values by 10%. if (shiftKey) { nextX = Math.round(nextX / 0.1) * 0.1; nextY = Math.round(nextY / 0.1) * 0.1; } return getFinalValue({ x: nextX, y: nextY }); }; const getFinalValue = value => { var _resolvePoint; const resolvedValue = (_resolvePoint = resolvePoint?.(value)) !== null && _resolvePoint !== void 0 ? _resolvePoint : value; resolvedValue.x = Math.max(0, Math.min(resolvedValue.x, 1)); resolvedValue.y = Math.max(0, Math.min(resolvedValue.y, 1)); const roundToTwoDecimalPlaces = n => Math.round(n * 1e2) / 1e2; return { x: roundToTwoDecimalPlaces(resolvedValue.x), y: roundToTwoDecimalPlaces(resolvedValue.y) }; }; const arrowKeyStep = event => { const { code, shiftKey } = event; if (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(code)) { return; } event.preventDefault(); const value = { x, y }; const step = shiftKey ? 0.1 : 0.01; const delta = code === 'ArrowUp' || code === 'ArrowLeft' ? -1 * step : step; const axis = code === 'ArrowUp' || code === 'ArrowDown' ? 'y' : 'x'; value[axis] = value[axis] + delta; onChange?.(getFinalValue(value)); }; const focalPointPosition = { left: x !== undefined ? x * bounds.width : 0.5 * bounds.width, top: y !== undefined ? y * bounds.height : 0.5 * bounds.height }; const classes = dist_clsx('components-focal-point-picker-control', className); const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(FocalPointPicker); const id = `inspector-focal-point-picker-control-${instanceId}`; use_update_effect(() => { setShowGridOverlay(true); const timeout = window.setTimeout(() => { setShowGridOverlay(false); }, GRID_OVERLAY_TIMEOUT); return () => window.clearTimeout(timeout); }, [x, y]); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(base_control, { ...restProps, __nextHasNoMarginBottom: __nextHasNoMarginBottom, label: label, id: id, help: help, className: classes, children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MediaWrapper, { className: "components-focal-point-picker-wrapper", children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(MediaContainer, { className: "components-focal-point-picker", onKeyDown: arrowKeyStep, onMouseDown: startDrag, onBlur: () => { if (isDragging) { endDrag(); } }, ref: dragAreaRef, role: "button", tabIndex: -1, children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FocalPointPickerGrid, { bounds: bounds, showOverlay: showGridOverlay }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(media_Media, { alt: (0,external_wp_i18n_namespaceObject.__)('Media preview'), autoPlay: autoPlay, onLoad: refUpdateBounds.current, src: url }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FocalPoint, { ...focalPointPosition, isDragging: isDragging })] }) }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FocalPointPickerControls, { __nextHasNoMarginBottom: __nextHasNoMarginBottom, __next40pxDefaultSize: __next40pxDefaultSize, hasHelpText: !!help, point: { x, y }, onChange: value => { onChange?.(getFinalValue(value)); } })] }); } /* harmony default export */ const focal_point_picker = (FocalPointPicker); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/focusable-iframe/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function FocusableIframe({ iframeRef, ...props }) { const ref = (0,external_wp_compose_namespaceObject.useMergeRefs)([iframeRef, (0,external_wp_compose_namespaceObject.useFocusableIframe)()]); external_wp_deprecated_default()('wp.components.FocusableIframe', { since: '5.9', alternative: 'wp.compose.useFocusableIframe' }); // Disable reason: The rendered iframe is a pass-through component, // assigning props inherited from the rendering parent. It's the // responsibility of the parent to assign a title. // eslint-disable-next-line jsx-a11y/iframe-has-title return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("iframe", { ref: ref, ...props }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/settings.js /** * WordPress dependencies */ const settings = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { d: "m19 7.5h-7.628c-.3089-.87389-1.1423-1.5-2.122-1.5-.97966 0-1.81309.62611-2.12197 1.5h-2.12803v1.5h2.12803c.30888.87389 1.14231 1.5 2.12197 1.5.9797 0 1.8131-.62611 2.122-1.5h7.628z" }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { d: "m19 15h-2.128c-.3089-.8739-1.1423-1.5-2.122-1.5s-1.8131.6261-2.122 1.5h-7.628v1.5h7.628c.3089.8739 1.1423 1.5 2.122 1.5s1.8131-.6261 2.122-1.5h2.128z" })] }); /* harmony default export */ const library_settings = (settings); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/font-size-picker/utils.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Some themes use css vars for their font sizes, so until we * have the way of calculating them don't display them. * * @param value The value that is checked. * @return Whether the value is a simple css value. */ function isSimpleCssValue(value) { const sizeRegex = /^[\d\.]+(px|em|rem|vw|vh|%|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)?$/i; return sizeRegex.test(String(value)); } /** * If all of the given font sizes have the same unit (e.g. 'px'), return that * unit. Otherwise return null. * * @param fontSizes List of font sizes. * @return The common unit, or null. */ function getCommonSizeUnit(fontSizes) { const [firstFontSize, ...otherFontSizes] = fontSizes; if (!firstFontSize) { return null; } const [, firstUnit] = parseQuantityAndUnitFromRawValue(firstFontSize.size); const areAllSizesSameUnit = otherFontSizes.every(fontSize => { const [, unit] = parseQuantityAndUnitFromRawValue(fontSize.size); return unit === firstUnit; }); return areAllSizesSameUnit ? firstUnit : null; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/font-size-picker/styles.js function font_size_picker_styles_EMOTION_STRINGIFIED_CSS_ERROR_() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /** * External dependencies */ /** * Internal dependencies */ const styles_Container = /*#__PURE__*/emotion_styled_base_browser_esm("fieldset", true ? { target: "e8tqeku4" } : 0)( true ? { name: "1t1ytme", styles: "border:0;margin:0;padding:0" } : 0); const styles_Header = /*#__PURE__*/emotion_styled_base_browser_esm(h_stack_component, true ? { target: "e8tqeku3" } : 0)("height:", space(4), ";" + ( true ? "" : 0)); const HeaderToggle = /*#__PURE__*/emotion_styled_base_browser_esm(build_module_button, true ? { target: "e8tqeku2" } : 0)("margin-top:", space(-1), ";" + ( true ? "" : 0)); const HeaderLabel = /*#__PURE__*/emotion_styled_base_browser_esm(base_control.VisualLabel, true ? { target: "e8tqeku1" } : 0)("display:flex;gap:", space(1), ";justify-content:flex-start;margin-bottom:0;" + ( true ? "" : 0)); const HeaderHint = /*#__PURE__*/emotion_styled_base_browser_esm("span", true ? { target: "e8tqeku0" } : 0)("color:", COLORS.gray[700], ";" + ( true ? "" : 0)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/font-size-picker/font-size-picker-select.js /** * WordPress dependencies */ /** * Internal dependencies */ const DEFAULT_OPTION = { key: 'default', name: (0,external_wp_i18n_namespaceObject.__)('Default'), value: undefined }; const CUSTOM_OPTION = { key: 'custom', name: (0,external_wp_i18n_namespaceObject.__)('Custom') }; const FontSizePickerSelect = props => { var _options$find; const { __next40pxDefaultSize, fontSizes, value, disableCustomFontSizes, size, onChange, onSelectCustom } = props; const areAllSizesSameUnit = !!getCommonSizeUnit(fontSizes); const options = [DEFAULT_OPTION, ...fontSizes.map(fontSize => { let hint; if (areAllSizesSameUnit) { const [quantity] = parseQuantityAndUnitFromRawValue(fontSize.size); if (quantity !== undefined) { hint = String(quantity); } } else if (isSimpleCssValue(fontSize.size)) { hint = String(fontSize.size); } return { key: fontSize.slug, name: fontSize.name || fontSize.slug, value: fontSize.size, __experimentalHint: hint }; }), ...(disableCustomFontSizes ? [] : [CUSTOM_OPTION])]; const selectedOption = value ? (_options$find = options.find(option => option.value === value)) !== null && _options$find !== void 0 ? _options$find : CUSTOM_OPTION : DEFAULT_OPTION; return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomSelectControl, { __next40pxDefaultSize: __next40pxDefaultSize, className: "components-font-size-picker__select", label: (0,external_wp_i18n_namespaceObject.__)('Font size'), hideLabelFromVision: true, describedBy: (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: Currently selected font size. (0,external_wp_i18n_namespaceObject.__)('Currently selected font size: %s'), selectedOption.name), options: options, value: selectedOption, __experimentalShowSelectedHint: true, onChange: ({ selectedItem }) => { if (selectedItem === CUSTOM_OPTION) { onSelectCustom(); } else { onChange(selectedItem.value); } }, size: size }); }; /* harmony default export */ const font_size_picker_select = (FontSizePickerSelect); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/toggle-group-control/toggle-group-control-option/component.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function UnforwardedToggleGroupControlOption(props, ref) { const { label, ...restProps } = props; const optionLabel = restProps['aria-label'] || label; return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(toggle_group_control_option_base_component, { ...restProps, "aria-label": optionLabel, ref: ref, children: label }); } /** * `ToggleGroupControlOption` is a form component and is meant to be used as a * child of `ToggleGroupControl`. * * ```jsx * import { * __experimentalToggleGroupControl as ToggleGroupControl, * __experimentalToggleGroupControlOption as ToggleGroupControlOption, * } from '@wordpress/components'; * * function Example() { * return ( * <ToggleGroupControl label="my label" value="vertical" isBlock> * <ToggleGroupControlOption value="horizontal" label="Horizontal" /> * <ToggleGroupControlOption value="vertical" label="Vertical" /> * </ToggleGroupControl> * ); * } * ``` */ const ToggleGroupControlOption = (0,external_wp_element_namespaceObject.forwardRef)(UnforwardedToggleGroupControlOption); /* harmony default export */ const toggle_group_control_option_component = (ToggleGroupControlOption); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/font-size-picker/constants.js /** * WordPress dependencies */ /** * List of T-shirt abbreviations. * * When there are 5 font sizes or fewer, we assume that the font sizes are * ordered by size and show T-shirt labels. */ const T_SHIRT_ABBREVIATIONS = [/* translators: S stands for 'small' and is a size label. */ (0,external_wp_i18n_namespaceObject.__)('S'), /* translators: M stands for 'medium' and is a size label. */ (0,external_wp_i18n_namespaceObject.__)('M'), /* translators: L stands for 'large' and is a size label. */ (0,external_wp_i18n_namespaceObject.__)('L'), /* translators: XL stands for 'extra large' and is a size label. */ (0,external_wp_i18n_namespaceObject.__)('XL'), /* translators: XXL stands for 'extra extra large' and is a size label. */ (0,external_wp_i18n_namespaceObject.__)('XXL')]; /** * List of T-shirt names. * * When there are 5 font sizes or fewer, we assume that the font sizes are * ordered by size and show T-shirt labels. */ const T_SHIRT_NAMES = [(0,external_wp_i18n_namespaceObject.__)('Small'), (0,external_wp_i18n_namespaceObject.__)('Medium'), (0,external_wp_i18n_namespaceObject.__)('Large'), (0,external_wp_i18n_namespaceObject.__)('Extra Large'), (0,external_wp_i18n_namespaceObject.__)('Extra Extra Large')]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/font-size-picker/font-size-picker-toggle-group.js /** * WordPress dependencies */ /** * Internal dependencies */ const FontSizePickerToggleGroup = props => { const { fontSizes, value, __next40pxDefaultSize, size, onChange } = props; return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(toggle_group_control_component, { __nextHasNoMarginBottom: true, __next40pxDefaultSize: __next40pxDefaultSize, label: (0,external_wp_i18n_namespaceObject.__)('Font size'), hideLabelFromVision: true, value: value, onChange: onChange, isBlock: true, size: size, children: fontSizes.map((fontSize, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(toggle_group_control_option_component, { value: fontSize.size, label: T_SHIRT_ABBREVIATIONS[index], "aria-label": fontSize.name || T_SHIRT_NAMES[index], showTooltip: true }, fontSize.slug)) }); }; /* harmony default export */ const font_size_picker_toggle_group = (FontSizePickerToggleGroup); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/font-size-picker/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const DEFAULT_UNITS = ['px', 'em', 'rem', 'vw', 'vh']; const UnforwardedFontSizePicker = (props, ref) => { const { __next40pxDefaultSize = false, fallbackFontSize, fontSizes = [], disableCustomFontSizes = false, onChange, size = 'default', units: unitsProp = DEFAULT_UNITS, value, withSlider = false, withReset = true } = props; const units = useCustomUnits({ availableUnits: unitsProp }); const shouldUseSelectControl = fontSizes.length > 5; const selectedFontSize = fontSizes.find(fontSize => fontSize.size === value); const isCustomValue = !!value && !selectedFontSize; const [showCustomValueControl, setShowCustomValueControl] = (0,external_wp_element_namespaceObject.useState)(!disableCustomFontSizes && isCustomValue); const headerHint = (0,external_wp_element_namespaceObject.useMemo)(() => { if (showCustomValueControl) { return (0,external_wp_i18n_namespaceObject.__)('Custom'); } if (!shouldUseSelectControl) { if (selectedFontSize) { return selectedFontSize.name || T_SHIRT_NAMES[fontSizes.indexOf(selectedFontSize)]; } return ''; } const commonUnit = getCommonSizeUnit(fontSizes); if (commonUnit) { return `(${commonUnit})`; } return ''; }, [showCustomValueControl, shouldUseSelectControl, selectedFontSize, fontSizes]); if (fontSizes.length === 0 && disableCustomFontSizes) { return null; } // If neither the value or first font size is a string, then FontSizePicker // operates in a legacy "unitless" mode where UnitControl can only be used // to select px values and onChange() is always called with number values. const hasUnits = typeof value === 'string' || typeof fontSizes[0]?.size === 'string'; const [valueQuantity, valueUnit] = parseQuantityAndUnitFromRawValue(value, units); const isValueUnitRelative = !!valueUnit && ['em', 'rem', 'vw', 'vh'].includes(valueUnit); const isDisabled = value === undefined; return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(styles_Container, { ref: ref, className: "components-font-size-picker", children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(visually_hidden_component, { as: "legend", children: (0,external_wp_i18n_namespaceObject.__)('Font size') }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(spacer_component, { children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(styles_Header, { className: "components-font-size-picker__header", children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(HeaderLabel, { "aria-label": `${(0,external_wp_i18n_namespaceObject.__)('Size')} ${headerHint || ''}`, children: [(0,external_wp_i18n_namespaceObject.__)('Size'), headerHint && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(HeaderHint, { className: "components-font-size-picker__header__hint", children: headerHint })] }), !disableCustomFontSizes && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(HeaderToggle, { label: showCustomValueControl ? (0,external_wp_i18n_namespaceObject.__)('Use size preset') : (0,external_wp_i18n_namespaceObject.__)('Set custom size'), icon: library_settings, onClick: () => { setShowCustomValueControl(!showCustomValueControl); }, isPressed: showCustomValueControl, size: "small" })] }) }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", { children: [!!fontSizes.length && shouldUseSelectControl && !showCustomValueControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_size_picker_select, { __next40pxDefaultSize: __next40pxDefaultSize, fontSizes: fontSizes, value: value, disableCustomFontSizes: disableCustomFontSizes, size: size, onChange: newValue => { if (newValue === undefined) { onChange?.(undefined); } else { onChange?.(hasUnits ? newValue : Number(newValue), fontSizes.find(fontSize => fontSize.size === newValue)); } }, onSelectCustom: () => setShowCustomValueControl(true) }), !shouldUseSelectControl && !showCustomValueControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_size_picker_toggle_group, { fontSizes: fontSizes, value: value, __next40pxDefaultSize: __next40pxDefaultSize, size: size, onChange: newValue => { if (newValue === undefined) { onChange?.(undefined); } else { onChange?.(hasUnits ? newValue : Number(newValue), fontSizes.find(fontSize => fontSize.size === newValue)); } } }), !disableCustomFontSizes && showCustomValueControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(flex_component, { className: "components-font-size-picker__custom-size-control", children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(flex_item_component, { isBlock: true, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(unit_control, { __next40pxDefaultSize: __next40pxDefaultSize, label: (0,external_wp_i18n_namespaceObject.__)('Custom'), labelPosition: "top", hideLabelFromVision: true, value: value, onChange: newValue => { if (newValue === undefined) { onChange?.(undefined); } else { onChange?.(hasUnits ? newValue : parseInt(newValue, 10)); } }, size: size, units: hasUnits ? units : [], min: 0 }) }), withSlider && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(flex_item_component, { isBlock: true, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(spacer_component, { marginX: 2, marginBottom: 0, children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(range_control, { __nextHasNoMarginBottom: true, __next40pxDefaultSize: __next40pxDefaultSize, className: "components-font-size-picker__custom-input", label: (0,external_wp_i18n_namespaceObject.__)('Custom Size'), hideLabelFromVision: true, value: valueQuantity, initialPosition: fallbackFontSize, withInputField: false, onChange: newValue => { if (newValue === undefined) { onChange?.(undefined); } else if (hasUnits) { onChange?.(newValue + (valueUnit !== null && valueUnit !== void 0 ? valueUnit : 'px')); } else { onChange?.(newValue); } }, min: 0, max: isValueUnitRelative ? 10 : 100, step: isValueUnitRelative ? 0.1 : 1 }) }) }), withReset && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(flex_item_component, { children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Button, { disabled: isDisabled, __experimentalIsFocusable: true, onClick: () => { onChange?.(undefined); }, variant: "secondary", __next40pxDefaultSize: true, size: size === '__unstable-large' || props.__next40pxDefaultSize ? 'default' : 'small', children: (0,external_wp_i18n_namespaceObject.__)('Reset') }) })] })] })] }); }; const FontSizePicker = (0,external_wp_element_namespaceObject.forwardRef)(UnforwardedFontSizePicker); /* harmony default export */ const font_size_picker = (FontSizePicker); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/form-file-upload/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * FormFileUpload is a component that allows users to select files from their local device. * * ```jsx * import { FormFileUpload } from '@wordpress/components'; * * const MyFormFileUpload = () => ( * <FormFileUpload * accept="image/*" * onChange={ ( event ) => console.log( event.currentTarget.files ) } * > * Upload * </FormFileUpload> * ); * ``` */ function FormFileUpload({ accept, children, multiple = false, onChange, onClick, render, ...props }) { const ref = (0,external_wp_element_namespaceObject.useRef)(null); const openFileDialog = () => { ref.current?.click(); }; const ui = render ? render({ openFileDialog }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_button, { onClick: openFileDialog, ...props, children: children }); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", { className: "components-form-file-upload", children: [ui, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("input", { type: "file", ref: ref, multiple: multiple, style: { display: 'none' }, accept: accept, onChange: onChange, onClick: onClick, "data-testid": "form-file-upload-input" })] }); } /* harmony default export */ const form_file_upload = (FormFileUpload); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/form-toggle/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const form_toggle_noop = () => {}; /** * FormToggle switches a single setting on or off. * * ```jsx * import { FormToggle } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * const MyFormToggle = () => { * const [ isChecked, setChecked ] = useState( true ); * * return ( * <FormToggle * checked={ isChecked } * onChange={ () => setChecked( ( state ) => ! state ) } * /> * ); * }; * ``` */ function FormToggle(props, ref) { const { className, checked, id, disabled, onChange = form_toggle_noop, ...additionalProps } = props; const wrapperClasses = dist_clsx('components-form-toggle', className, { 'is-checked': checked, 'is-disabled': disabled }); return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", { className: wrapperClasses, children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("input", { className: "components-form-toggle__input", id: id, type: "checkbox", checked: checked, onChange: onChange, disabled: disabled, ...additionalProps, ref: ref }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { className: "components-form-toggle__track" }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { className: "components-form-toggle__thumb" })] }); } /* harmony default export */ const form_toggle = ((0,external_wp_element_namespaceObject.forwardRef)(FormToggle)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/components/build-module/form-token-field/token.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const token_noop = () => {}; function Token({ value, status, title, displayTransform, isBorderless = false, disabled = false, onClickRemove = token_noop, onMouseEnter, onMouseLeave, messages, termPosition, termsCount }) { const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(Token); const tokenClasses = dist_clsx('components-form-token-field__token', { 'is-error': 'error' === status, 'is-success': 'success' === status, 'is-validating': 'validating' === status, 'is-borderless': isBorderless, 'is-disabled': disabled }); const onClick = () => onClickRemove({ value }); const transformedValue = displayTransform(value); const termPositionAndCount = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: 1: term name, 2: term position in a set of terms, 3: total term set count. */
•
Search:
•
Replace:
1
...
3
4
5
6
7
8
Function
Edit by line
Download
Information
Rename
Copy
Move
Delete
Chmod
List