@react-aria/combobox
Advanced tools
Comparing version
@@ -6,2 +6,3 @@ var $8d1e5da058b86bb9$exports = require("./intlStrings.main.js"); | ||
var $BGXP4$reactariautils = require("@react-aria/utils"); | ||
var $BGXP4$reactariafocus = require("@react-aria/focus"); | ||
var $BGXP4$react = require("react"); | ||
@@ -47,5 +48,8 @@ var $BGXP4$reactstatelycollections = require("@react-stately/collections"); | ||
function $242452271d1e4c0e$export$8c18d1b4f7232bbf(props, state) { | ||
let { buttonRef: buttonRef, popoverRef: popoverRef, inputRef: inputRef, listBoxRef: listBoxRef, keyboardDelegate: keyboardDelegate, layoutDelegate: layoutDelegate, shouldFocusWrap: // completionMode = 'suggest', | ||
shouldFocusWrap, isReadOnly: isReadOnly, isDisabled: isDisabled } = props; | ||
let backupBtnRef = (0, $BGXP4$react.useRef)(null); | ||
buttonRef = buttonRef !== null && buttonRef !== void 0 ? buttonRef : backupBtnRef; | ||
let stringFormatter = (0, $BGXP4$reactariai18n.useLocalizedStringFormatter)((0, ($parcel$interopDefault($8d1e5da058b86bb9$exports))), '@react-aria/combobox'); | ||
@@ -97,9 +101,7 @@ let { menuTriggerProps: menuTriggerProps, menuProps: menuProps } = (0, $BGXP4$reactariamenu.useMenuTrigger)({ | ||
// If the focused item is a link, trigger opening it. Items that are links are not selectable. | ||
if (state.isOpen && state.selectionManager.focusedKey != null && state.selectionManager.isLink(state.selectionManager.focusedKey)) { | ||
if (e.key === 'Enter') { | ||
let item = listBoxRef.current.querySelector(`[data-key="${CSS.escape(state.selectionManager.focusedKey.toString())}"]`); | ||
if (item instanceof HTMLAnchorElement) { | ||
let collectionItem = state.collection.getItem(state.selectionManager.focusedKey); | ||
router.open(item, e, collectionItem.props.href, collectionItem.props.routerOptions); | ||
} | ||
if (state.isOpen && listBoxRef.current && state.selectionManager.focusedKey != null && state.selectionManager.isLink(state.selectionManager.focusedKey)) { | ||
let item = listBoxRef.current.querySelector(`[data-key="${CSS.escape(state.selectionManager.focusedKey.toString())}"]`); | ||
if (e.key === 'Enter' && item instanceof HTMLAnchorElement) { | ||
let collectionItem = state.collection.getItem(state.selectionManager.focusedKey); | ||
if (collectionItem) router.open(item, e, collectionItem.props.href, collectionItem.props.routerOptions); | ||
} | ||
@@ -146,2 +148,3 @@ state.close(); | ||
value: state.inputValue, | ||
defaultValue: state.defaultInputValue, | ||
onFocus: onFocus, | ||
@@ -155,4 +158,5 @@ autoComplete: 'off', | ||
if (e.pointerType === 'touch') { | ||
// Focus the input field in case it isn't focused yet | ||
inputRef.current.focus(); | ||
var // Focus the input field in case it isn't focused yet | ||
_inputRef_current; | ||
(_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus(); | ||
state.toggle(null, 'manual'); | ||
@@ -163,3 +167,4 @@ } | ||
if (e.pointerType !== 'touch') { | ||
inputRef.current.focus(); | ||
var _inputRef_current; | ||
(_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus(); | ||
state.toggle(e.pointerType === 'keyboard' || e.pointerType === 'virtual' ? 'first' : null, 'manual'); | ||
@@ -184,4 +189,5 @@ } | ||
if (e.timeStamp - lastEventTime.current < 500) { | ||
var _inputRef_current; | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
(_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus(); | ||
return; | ||
@@ -194,4 +200,5 @@ } | ||
if (touch.clientX === centerX && touch.clientY === centerY) { | ||
var _inputRef_current1; | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
(_inputRef_current1 = inputRef.current) === null || _inputRef_current1 === void 0 ? void 0 : _inputRef_current1.focus(); | ||
state.toggle(null, 'manual'); | ||
@@ -212,8 +219,9 @@ lastEventTime.current = e.timeStamp; | ||
(0, $BGXP4$react.useEffect)(()=>{ | ||
if ((0, $BGXP4$reactariautils.isAppleDevice)() && focusedItem != null && itemKey !== lastItem.current) { | ||
if ((0, $BGXP4$reactariautils.isAppleDevice)() && focusedItem != null && itemKey != null && itemKey !== lastItem.current) { | ||
let isSelected = state.selectionManager.isSelected(itemKey); | ||
let section = sectionKey != null ? state.collection.getItem(sectionKey) : null; | ||
let sectionTitle = (section === null || section === void 0 ? void 0 : section['aria-label']) || (typeof (section === null || section === void 0 ? void 0 : section.rendered) === 'string' ? section.rendered : '') || ''; | ||
var _ref; | ||
let announcement = stringFormatter.format('focusAnnouncement', { | ||
isGroupChange: section && sectionKey !== lastSection.current, | ||
isGroupChange: (_ref = section && sectionKey !== lastSection.current) !== null && _ref !== void 0 ? _ref : false, | ||
groupTitle: sectionTitle, | ||
@@ -265,3 +273,3 @@ groupCount: section ? [ | ||
popoverRef.current | ||
]); | ||
].filter((element)=>element != null)); | ||
}, [ | ||
@@ -272,2 +280,8 @@ state.isOpen, | ||
]); | ||
(0, $BGXP4$reactariautils.useUpdateEffect)(()=>{ | ||
// Re-show focus ring when there is no virtually focused item. | ||
if (!focusedItem && inputRef.current && (0, $BGXP4$reactariautils.getActiveElement)((0, $BGXP4$reactariautils.getOwnerDocument)(inputRef.current)) === inputRef.current) (0, $BGXP4$reactariafocus.dispatchVirtualFocus)(inputRef.current, null); | ||
}, [ | ||
focusedItem | ||
]); | ||
return { | ||
@@ -298,3 +312,3 @@ labelProps: labelProps, | ||
listBoxProps: (0, $BGXP4$reactariautils.mergeProps)(menuProps, listBoxProps, { | ||
autoFocus: state.focusStrategy, | ||
autoFocus: state.focusStrategy || true, | ||
shouldUseVirtualFocus: true, | ||
@@ -301,0 +315,0 @@ shouldSelectOnPressUp: true, |
@@ -5,4 +5,5 @@ import $dShfP$intlStringsmodulejs from "./intlStrings.module.js"; | ||
import {listData as $dShfP$listData, getItemId as $dShfP$getItemId} from "@react-aria/listbox"; | ||
import {useRouter as $dShfP$useRouter, chain as $dShfP$chain, useLabels as $dShfP$useLabels, isAppleDevice as $dShfP$isAppleDevice, mergeProps as $dShfP$mergeProps} from "@react-aria/utils"; | ||
import {useMemo as $dShfP$useMemo, useRef as $dShfP$useRef, useEffect as $dShfP$useEffect} from "react"; | ||
import {useRouter as $dShfP$useRouter, chain as $dShfP$chain, useLabels as $dShfP$useLabels, isAppleDevice as $dShfP$isAppleDevice, useUpdateEffect as $dShfP$useUpdateEffect, getActiveElement as $dShfP$getActiveElement, getOwnerDocument as $dShfP$getOwnerDocument, mergeProps as $dShfP$mergeProps} from "@react-aria/utils"; | ||
import {dispatchVirtualFocus as $dShfP$dispatchVirtualFocus} from "@react-aria/focus"; | ||
import {useRef as $dShfP$useRef, useMemo as $dShfP$useMemo, useEffect as $dShfP$useEffect} from "react"; | ||
import {getChildNodes as $dShfP$getChildNodes, getItemCount as $dShfP$getItemCount} from "@react-stately/collections"; | ||
@@ -41,5 +42,8 @@ import {ListKeyboardDelegate as $dShfP$ListKeyboardDelegate, useSelectableCollection as $dShfP$useSelectableCollection} from "@react-aria/selection"; | ||
function $c350ade66beef0af$export$8c18d1b4f7232bbf(props, state) { | ||
let { buttonRef: buttonRef, popoverRef: popoverRef, inputRef: inputRef, listBoxRef: listBoxRef, keyboardDelegate: keyboardDelegate, layoutDelegate: layoutDelegate, shouldFocusWrap: // completionMode = 'suggest', | ||
shouldFocusWrap, isReadOnly: isReadOnly, isDisabled: isDisabled } = props; | ||
let backupBtnRef = (0, $dShfP$useRef)(null); | ||
buttonRef = buttonRef !== null && buttonRef !== void 0 ? buttonRef : backupBtnRef; | ||
let stringFormatter = (0, $dShfP$useLocalizedStringFormatter)((0, ($parcel$interopDefault($dShfP$intlStringsmodulejs))), '@react-aria/combobox'); | ||
@@ -91,9 +95,7 @@ let { menuTriggerProps: menuTriggerProps, menuProps: menuProps } = (0, $dShfP$useMenuTrigger)({ | ||
// If the focused item is a link, trigger opening it. Items that are links are not selectable. | ||
if (state.isOpen && state.selectionManager.focusedKey != null && state.selectionManager.isLink(state.selectionManager.focusedKey)) { | ||
if (e.key === 'Enter') { | ||
let item = listBoxRef.current.querySelector(`[data-key="${CSS.escape(state.selectionManager.focusedKey.toString())}"]`); | ||
if (item instanceof HTMLAnchorElement) { | ||
let collectionItem = state.collection.getItem(state.selectionManager.focusedKey); | ||
router.open(item, e, collectionItem.props.href, collectionItem.props.routerOptions); | ||
} | ||
if (state.isOpen && listBoxRef.current && state.selectionManager.focusedKey != null && state.selectionManager.isLink(state.selectionManager.focusedKey)) { | ||
let item = listBoxRef.current.querySelector(`[data-key="${CSS.escape(state.selectionManager.focusedKey.toString())}"]`); | ||
if (e.key === 'Enter' && item instanceof HTMLAnchorElement) { | ||
let collectionItem = state.collection.getItem(state.selectionManager.focusedKey); | ||
if (collectionItem) router.open(item, e, collectionItem.props.href, collectionItem.props.routerOptions); | ||
} | ||
@@ -140,2 +142,3 @@ state.close(); | ||
value: state.inputValue, | ||
defaultValue: state.defaultInputValue, | ||
onFocus: onFocus, | ||
@@ -149,4 +152,5 @@ autoComplete: 'off', | ||
if (e.pointerType === 'touch') { | ||
// Focus the input field in case it isn't focused yet | ||
inputRef.current.focus(); | ||
var // Focus the input field in case it isn't focused yet | ||
_inputRef_current; | ||
(_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus(); | ||
state.toggle(null, 'manual'); | ||
@@ -157,3 +161,4 @@ } | ||
if (e.pointerType !== 'touch') { | ||
inputRef.current.focus(); | ||
var _inputRef_current; | ||
(_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus(); | ||
state.toggle(e.pointerType === 'keyboard' || e.pointerType === 'virtual' ? 'first' : null, 'manual'); | ||
@@ -178,4 +183,5 @@ } | ||
if (e.timeStamp - lastEventTime.current < 500) { | ||
var _inputRef_current; | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
(_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus(); | ||
return; | ||
@@ -188,4 +194,5 @@ } | ||
if (touch.clientX === centerX && touch.clientY === centerY) { | ||
var _inputRef_current1; | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
(_inputRef_current1 = inputRef.current) === null || _inputRef_current1 === void 0 ? void 0 : _inputRef_current1.focus(); | ||
state.toggle(null, 'manual'); | ||
@@ -206,8 +213,9 @@ lastEventTime.current = e.timeStamp; | ||
(0, $dShfP$useEffect)(()=>{ | ||
if ((0, $dShfP$isAppleDevice)() && focusedItem != null && itemKey !== lastItem.current) { | ||
if ((0, $dShfP$isAppleDevice)() && focusedItem != null && itemKey != null && itemKey !== lastItem.current) { | ||
let isSelected = state.selectionManager.isSelected(itemKey); | ||
let section = sectionKey != null ? state.collection.getItem(sectionKey) : null; | ||
let sectionTitle = (section === null || section === void 0 ? void 0 : section['aria-label']) || (typeof (section === null || section === void 0 ? void 0 : section.rendered) === 'string' ? section.rendered : '') || ''; | ||
var _ref; | ||
let announcement = stringFormatter.format('focusAnnouncement', { | ||
isGroupChange: section && sectionKey !== lastSection.current, | ||
isGroupChange: (_ref = section && sectionKey !== lastSection.current) !== null && _ref !== void 0 ? _ref : false, | ||
groupTitle: sectionTitle, | ||
@@ -259,3 +267,3 @@ groupCount: section ? [ | ||
popoverRef.current | ||
]); | ||
].filter((element)=>element != null)); | ||
}, [ | ||
@@ -266,2 +274,8 @@ state.isOpen, | ||
]); | ||
(0, $dShfP$useUpdateEffect)(()=>{ | ||
// Re-show focus ring when there is no virtually focused item. | ||
if (!focusedItem && inputRef.current && (0, $dShfP$getActiveElement)((0, $dShfP$getOwnerDocument)(inputRef.current)) === inputRef.current) (0, $dShfP$dispatchVirtualFocus)(inputRef.current, null); | ||
}, [ | ||
focusedItem | ||
]); | ||
return { | ||
@@ -292,3 +306,3 @@ labelProps: labelProps, | ||
listBoxProps: (0, $dShfP$mergeProps)(menuProps, listBoxProps, { | ||
autoFocus: state.focusStrategy, | ||
autoFocus: state.focusStrategy || true, | ||
shouldUseVirtualFocus: true, | ||
@@ -295,0 +309,0 @@ shouldSelectOnPressUp: true, |
{ | ||
"name": "@react-aria/combobox", | ||
"version": "3.0.0-nightly-8ab4f20de-240913", | ||
"version": "3.0.0-nightly-8c5b7a011-250827", | ||
"description": "Spectrum UI components in React", | ||
@@ -9,3 +9,7 @@ "license": "Apache-2.0", | ||
"exports": { | ||
"types": "./dist/types.d.ts", | ||
"source": "./src/index.ts", | ||
"types": [ | ||
"./dist/types.d.ts", | ||
"./src/index.ts" | ||
], | ||
"import": "./dist/import.mjs", | ||
@@ -26,26 +30,26 @@ "require": "./dist/main.js" | ||
"dependencies": { | ||
"@react-aria/i18n": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-aria/listbox": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-aria/live-announcer": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-aria/menu": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-aria/overlays": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-aria/selection": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-aria/textfield": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-aria/utils": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-stately/collections": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-stately/combobox": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-stately/form": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-types/button": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-types/combobox": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-types/shared": "^3.0.0-nightly-8ab4f20de-240913", | ||
"@react-aria/focus": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-aria/i18n": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-aria/listbox": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-aria/live-announcer": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-aria/menu": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-aria/overlays": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-aria/selection": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-aria/textfield": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-aria/utils": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-stately/collections": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-stately/combobox": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-stately/form": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-types/button": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-types/combobox": "3.0.0-nightly-8c5b7a011-250827", | ||
"@react-types/shared": "3.0.0-nightly-8c5b7a011-250827", | ||
"@swc/helpers": "^0.5.0" | ||
}, | ||
"peerDependencies": { | ||
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", | ||
"react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" | ||
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", | ||
"react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" | ||
}, | ||
"publishConfig": { | ||
"access": "public" | ||
}, | ||
"stableVersion": "3.10.3" | ||
} | ||
} |
# @react-aria/combobox | ||
This package is part of [react-spectrum](https://github.com/adobe-private/react-spectrum-v3). See the repo for more details. | ||
This package is part of [react-spectrum](https://github.com/adobe/react-spectrum). See the repo for more details. |
@@ -19,4 +19,5 @@ /* | ||
import {BaseEvent, DOMAttributes, KeyboardDelegate, LayoutDelegate, PressEvent, RefObject, RouterOptions, ValidationResult} from '@react-types/shared'; | ||
import {chain, isAppleDevice, mergeProps, useLabels, useRouter} from '@react-aria/utils'; | ||
import {chain, getActiveElement, getOwnerDocument, isAppleDevice, mergeProps, useLabels, useRouter, useUpdateEffect} from '@react-aria/utils'; | ||
import {ComboBoxState} from '@react-stately/combobox'; | ||
import {dispatchVirtualFocus} from '@react-aria/focus'; | ||
import {FocusEvent, InputHTMLAttributes, KeyboardEvent, TouchEvent, useEffect, useMemo, useRef} from 'react'; | ||
@@ -85,2 +86,4 @@ import {getChildNodes, getItemCount} from '@react-stately/collections'; | ||
} = props; | ||
let backupBtnRef = useRef(null); | ||
buttonRef = buttonRef ?? backupBtnRef; | ||
@@ -141,7 +144,7 @@ let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/combobox'); | ||
// If the focused item is a link, trigger opening it. Items that are links are not selectable. | ||
if (state.isOpen && state.selectionManager.focusedKey != null && state.selectionManager.isLink(state.selectionManager.focusedKey)) { | ||
if (e.key === 'Enter') { | ||
let item = listBoxRef.current.querySelector(`[data-key="${CSS.escape(state.selectionManager.focusedKey.toString())}"]`); | ||
if (item instanceof HTMLAnchorElement) { | ||
let collectionItem = state.collection.getItem(state.selectionManager.focusedKey); | ||
if (state.isOpen && listBoxRef.current && state.selectionManager.focusedKey != null && state.selectionManager.isLink(state.selectionManager.focusedKey)) { | ||
let item = listBoxRef.current.querySelector(`[data-key="${CSS.escape(state.selectionManager.focusedKey.toString())}"]`); | ||
if (e.key === 'Enter' && item instanceof HTMLAnchorElement) { | ||
let collectionItem = state.collection.getItem(state.selectionManager.focusedKey); | ||
if (collectionItem) { | ||
router.open(item, e, collectionItem.props.href, collectionItem.props.routerOptions as RouterOptions); | ||
@@ -213,2 +216,3 @@ } | ||
value: state.inputValue, | ||
defaultValue: state.defaultInputValue, | ||
onFocus, | ||
@@ -224,3 +228,3 @@ autoComplete: 'off', | ||
// Focus the input field in case it isn't focused yet | ||
inputRef.current.focus(); | ||
inputRef.current?.focus(); | ||
state.toggle(null, 'manual'); | ||
@@ -232,3 +236,3 @@ } | ||
if (e.pointerType !== 'touch') { | ||
inputRef.current.focus(); | ||
inputRef.current?.focus(); | ||
state.toggle((e.pointerType === 'keyboard' || e.pointerType === 'virtual') ? 'first' : null, 'manual'); | ||
@@ -260,3 +264,3 @@ } | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
inputRef.current?.focus(); | ||
return; | ||
@@ -273,3 +277,3 @@ } | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
inputRef.current?.focus(); | ||
state.toggle(null, 'manual'); | ||
@@ -292,3 +296,3 @@ | ||
useEffect(() => { | ||
if (isAppleDevice() && focusedItem != null && itemKey !== lastItem.current) { | ||
if (isAppleDevice() && focusedItem != null && itemKey != null && itemKey !== lastItem.current) { | ||
let isSelected = state.selectionManager.isSelected(itemKey); | ||
@@ -299,3 +303,3 @@ let section = sectionKey != null ? state.collection.getItem(sectionKey) : null; | ||
let announcement = stringFormatter.format('focusAnnouncement', { | ||
isGroupChange: section && sectionKey !== lastSection.current, | ||
isGroupChange: (section && sectionKey !== lastSection.current) ?? false, | ||
groupTitle: sectionTitle, | ||
@@ -349,6 +353,13 @@ groupCount: section ? [...getChildNodes(section, state.collection)].length : 0, | ||
if (state.isOpen) { | ||
return ariaHideOutside([inputRef.current, popoverRef.current]); | ||
return ariaHideOutside([inputRef.current, popoverRef.current].filter(element => element != null)); | ||
} | ||
}, [state.isOpen, inputRef, popoverRef]); | ||
useUpdateEffect(() => { | ||
// Re-show focus ring when there is no virtually focused item. | ||
if (!focusedItem && inputRef.current && getActiveElement(getOwnerDocument(inputRef.current)) === inputRef.current) { | ||
dispatchVirtualFocus(inputRef.current, null); | ||
} | ||
}, [focusedItem]); | ||
return { | ||
@@ -379,3 +390,3 @@ labelProps, | ||
listBoxProps: mergeProps(menuProps, listBoxProps, { | ||
autoFocus: state.focusStrategy, | ||
autoFocus: state.focusStrategy || true, | ||
shouldUseVirtualFocus: true, | ||
@@ -382,0 +393,0 @@ shouldSelectOnPressUp: true, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
352297
0.88%3739
1.38%18
5.88%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated