@react-aria/combobox
Advanced tools
Comparing version 3.0.0-nightly.2813 to 3.0.0-nightly-641446f65-240905
465
dist/main.js
@@ -1,457 +0,22 @@ | ||
var { | ||
useTextField | ||
} = require("@react-aria/textfield"); | ||
var $242452271d1e4c0e$exports = require("./useComboBox.main.js"); | ||
var { | ||
useMessageFormatter | ||
} = require("@react-aria/i18n"); | ||
var { | ||
useMenuTrigger | ||
} = require("@react-aria/menu"); | ||
var { | ||
ListKeyboardDelegate, | ||
useSelectableCollection | ||
} = require("@react-aria/selection"); | ||
var { | ||
getItemCount | ||
} = require("@react-stately/collections"); | ||
var { | ||
useEffect, | ||
useMemo, | ||
useRef | ||
} = require("react"); | ||
var { | ||
chain, | ||
isAppleDevice, | ||
mergeProps, | ||
useLabels | ||
} = require("@react-aria/utils"); | ||
var { | ||
getItemId, | ||
listData | ||
} = require("@react-aria/listbox"); | ||
var { | ||
ariaHideOutside | ||
} = require("@react-aria/overlays"); | ||
var { | ||
announce | ||
} = require("@react-aria/live-announcer"); | ||
var _babelRuntimeHelpersInteropRequireDefault = $parcel$interopDefault(require("@babel/runtime/helpers/interopRequireDefault")); | ||
var _babelRuntimeHelpersExtends = $parcel$interopDefault(require("@babel/runtime/helpers/extends")); | ||
function $parcel$interopDefault(a) { | ||
return a && a.__esModule ? a.default : a; | ||
function $parcel$export(e, n, v, s) { | ||
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); | ||
} | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ar-AE.json | ||
var $d3abd1c94a8091e6bea5d25566d34f3b$exports = {}; | ||
$d3abd1c94a8091e6bea5d25566d34f3b$exports = JSON.parse("{\"buttonLabel\":\"عرض المقترحات\",\"countAnnouncement\":\"{optionCount, plural, one {# خيار} other {# خيارات}} متاحة.\",\"focusAnnouncement\":\"{isGroupChange, select, true {المجموعة المدخلة {groupTitle}, مع {groupCount, plural, one {# خيار} other {# خيارات}}. } other {}}{optionText}{isSelected, select, true {, محدد} other {}}\",\"listboxLabel\":\"مقترحات\",\"selectedAnnouncement\":\"{optionText}، محدد\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/bg-BG.json | ||
var $e68f714a4c0d09d95c33770e06f8$exports = {}; | ||
$e68f714a4c0d09d95c33770e06f8$exports = JSON.parse("{\"buttonLabel\":\"Покажи предложения\",\"countAnnouncement\":\"{optionCount, plural, one {# опция} other {# опции}} на разположение.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Въведена група {groupTitle}, с {groupCount, plural, one {# опция} other {# опции}}. } other {}}{optionText}{isSelected, select, true {, избрани} other {}}\",\"listboxLabel\":\"Предложения\",\"selectedAnnouncement\":\"{optionText}, избрани\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/cs-CZ.json | ||
var $a500a0b3a3619656e27bf5600e433c24$exports = {}; | ||
$a500a0b3a3619656e27bf5600e433c24$exports = JSON.parse("{\"buttonLabel\":\"Zobrazit doporučení\",\"countAnnouncement\":\"K dispozici {optionCount, plural, one {je # možnost} other {jsou/je # možnosti/-í}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Zadaná skupina „{groupTitle}“ {groupCount, plural, one {s # možností} other {se # možnostmi}}. } other {}}{optionText}{isSelected, select, true { (vybráno)} other {}}\",\"listboxLabel\":\"Návrhy\",\"selectedAnnouncement\":\"{optionText}, vybráno\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/da-DK.json | ||
var $e49da863b7bd600c177b6a36f118$exports = {}; | ||
$e49da863b7bd600c177b6a36f118$exports = JSON.parse("{\"buttonLabel\":\"Vis forslag\",\"countAnnouncement\":\"{optionCount, plural, one {# mulighed tilgængelig} other {# muligheder tilgængelige}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Angivet gruppe {groupTitle}, med {groupCount, plural, one {# mulighed} other {# muligheder}}. } other {}}{optionText}{isSelected, select, true {, valgt} other {}}\",\"listboxLabel\":\"Forslag\",\"selectedAnnouncement\":\"{optionText}, valgt\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/de-DE.json | ||
var $ee8337d033bc8022023cbd1e81c99e0f$exports = {}; | ||
$ee8337d033bc8022023cbd1e81c99e0f$exports = JSON.parse("{\"buttonLabel\":\"Empfehlungen anzeigen\",\"countAnnouncement\":\"{optionCount, plural, one {# Option} other {# Optionen}} verfügbar.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Eingetretene Gruppe {groupTitle}, mit {groupCount, plural, one {# Option} other {# Optionen}}. } other {}}{optionText}{isSelected, select, true {, ausgewählt} other {}}\",\"listboxLabel\":\"Empfehlungen\",\"selectedAnnouncement\":\"{optionText}, ausgewählt\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/el-GR.json | ||
var $b80f3d468ed1c259fafa109ac82f$exports = {}; | ||
$b80f3d468ed1c259fafa109ac82f$exports = JSON.parse("{\"buttonLabel\":\"Προβολή προτάσεων\",\"countAnnouncement\":\"{optionCount, plural, one {# επιλογή} other {# επιλογές }} διαθέσιμες.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Εισαγμένη ομάδα {groupTitle}, με {groupCount, plural, one {# επιλογή} other {# επιλογές}}. } other {}}{optionText}{isSelected, select, true {, επιλεγμένο} other {}}\",\"listboxLabel\":\"Προτάσεις\",\"selectedAnnouncement\":\"{optionText}, επιλέχθηκε\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/en-US.json | ||
var $bf7e6d52e99e0a0de8c556ddb07fc5a$exports = {}; | ||
$bf7e6d52e99e0a0de8c556ddb07fc5a$exports = JSON.parse("{\"focusAnnouncement\":\"{isGroupChange, select, true {Entered group {groupTitle}, with {groupCount, plural, one {# option} other {# options}}. } other {}}{optionText}{isSelected, select, true {, selected} other {}}\",\"countAnnouncement\":\"{optionCount, plural, one {# option} other {# options}} available.\",\"selectedAnnouncement\":\"{optionText}, selected\",\"buttonLabel\":\"Show suggestions\",\"listboxLabel\":\"Suggestions\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/es-ES.json | ||
var $a10df97a05936d5ade08a757b8203$exports = {}; | ||
$a10df97a05936d5ade08a757b8203$exports = JSON.parse("{\"buttonLabel\":\"Mostrar sugerencias\",\"countAnnouncement\":\"{optionCount, plural, one {# opción} other {# opciones}} disponible(s).\",\"focusAnnouncement\":\"{isGroupChange, select, true {Se ha unido al grupo {groupTitle}, con {groupCount, plural, one {# opción} other {# opciones}}. } other {}}{optionText}{isSelected, select, true {, seleccionado} other {}}\",\"listboxLabel\":\"Sugerencias\",\"selectedAnnouncement\":\"{optionText}, seleccionado\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/et-EE.json | ||
var $f3ceb8fdb1d42883b88768afca1419$exports = {}; | ||
$f3ceb8fdb1d42883b88768afca1419$exports = JSON.parse("{\"buttonLabel\":\"Kuva soovitused\",\"countAnnouncement\":\"{optionCount, plural, one {# valik} other {# valikud}} saadaval.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Sisestatud rühm {groupTitle}, valikuga {groupCount, plural, one {# valik} other {# valikud}}. } other {}}{optionText}{isSelected, select, true {, valitud} other {}}\",\"listboxLabel\":\"Soovitused\",\"selectedAnnouncement\":\"{optionText}, valitud\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/fi-FI.json | ||
var $f1743c0157b8801e8cb7483c8ad$exports = {}; | ||
$f1743c0157b8801e8cb7483c8ad$exports = JSON.parse("{\"buttonLabel\":\"Näytä ehdotukset\",\"countAnnouncement\":\"{optionCount, plural, one {# vaihtoehto} other {# vaihtoehdot}} saatavilla.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Mentiin ryhmään {groupTitle}, {groupCount, plural, one {# vaihtoehdon} other {# vaihtoehdon}} kanssa.} other {}}{optionText}{isSelected, select, true {, valittu} other {}}\",\"listboxLabel\":\"Ehdotukset\",\"selectedAnnouncement\":\"{optionText}, valittu\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/fr-FR.json | ||
var $dc583336acdeed35267661d22$exports = {}; | ||
$dc583336acdeed35267661d22$exports = JSON.parse("{\"buttonLabel\":\"Afficher les suggestions\",\"countAnnouncement\":\"{optionCount, plural, one {# option} other {# options}} disponible(s).\",\"focusAnnouncement\":\"{isGroupChange, select, true {Groupe {groupTitle} saisi, avec {groupCount, plural, one {# option} other {# options}}. } other {}}{optionText}{isSelected, select, true {, sélectionné(s)} other {}}\",\"listboxLabel\":\"Suggestions\",\"selectedAnnouncement\":\"{optionText}, sélectionné\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/he-IL.json | ||
var $e8d5cdaf06bc2fff1bfdce0b70eaee1$exports = {}; | ||
$e8d5cdaf06bc2fff1bfdce0b70eaee1$exports = JSON.parse("{\"buttonLabel\":\"הצג הצעות\",\"countAnnouncement\":\"{optionCount, plural, one {אפשרות #} other {# אפשרויות}} במצב זמין.\",\"focusAnnouncement\":\"{isGroupChange, select, true {נכנס לקבוצה {groupTitle}, עם {groupCount, plural, one {אפשרות #} other {# אפשרויות}}. } other {}}{optionText}{isSelected, select, true {, נבחר} other {}}\",\"listboxLabel\":\"הצעות\",\"selectedAnnouncement\":\"{optionText}, נבחר\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/hr-HR.json | ||
var $a09462ff6f02eb4bf7658204c3f6e15$exports = {}; | ||
$a09462ff6f02eb4bf7658204c3f6e15$exports = JSON.parse("{\"buttonLabel\":\"Prikaži prijedloge\",\"countAnnouncement\":\"Dostupno još: {optionCount, plural, one {# opcija} other {# opcije/a}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Unesena skupina {groupTitle}, s {groupCount, plural, one {# opcijom} other {# opcije/a}}. } other {}}{optionText}{isSelected, select, true {, odabranih} other {}}\",\"listboxLabel\":\"Prijedlozi\",\"selectedAnnouncement\":\"{optionText}, odabrano\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/hu-HU.json | ||
var $a51a94bb99ac070324d83d28741ff6a3$exports = {}; | ||
$a51a94bb99ac070324d83d28741ff6a3$exports = JSON.parse("{\"buttonLabel\":\"Javaslatok megjelenítése\",\"countAnnouncement\":\"{optionCount, plural, one {# lehetőség} other {# lehetőség}} áll rendelkezésre.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Belépett a(z) {groupTitle} csoportba, amely {groupCount, plural, one {# lehetőséget} other {# lehetőséget}} tartalmaz. } other {}}{optionText}{isSelected, select, true {, kijelölve} other {}}\",\"listboxLabel\":\"Javaslatok\",\"selectedAnnouncement\":\"{optionText}, kijelölve\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/it-IT.json | ||
var $dc21b3c22ee0c88b8141ebe9086768be$exports = {}; | ||
$dc21b3c22ee0c88b8141ebe9086768be$exports = JSON.parse("{\"buttonLabel\":\"Mostra suggerimenti\",\"countAnnouncement\":\"{optionCount, plural, one {# opzione disponibile} other {# opzioni disponibili}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Ingresso nel gruppo {groupTitle}, con {groupCount, plural, one {# opzione} other {# opzioni}}. } other {}}{optionText}{isSelected, select, true {, selezionato} other {}}\",\"listboxLabel\":\"Suggerimenti\",\"selectedAnnouncement\":\"{optionText}, selezionato\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ja-JP.json | ||
var $a4da3b639472f5f28d54905e8d8b311$exports = {}; | ||
$a4da3b639472f5f28d54905e8d8b311$exports = JSON.parse("{\"buttonLabel\":\"候補を表示\",\"countAnnouncement\":\"{optionCount, plural, one {# 個のオプション} other {# 個のオプション}}を利用できます。\",\"focusAnnouncement\":\"{isGroupChange, select, true {入力されたグループ {groupTitle}、{groupCount, plural, one {# 個のオプション} other {# 個のオプション}}を含む。} other {}}{optionText}{isSelected, select, true {、選択済み} other {}}\",\"listboxLabel\":\"候補\",\"selectedAnnouncement\":\"{optionText}、選択済み\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ko-KR.json | ||
var $fcdb1200b0b078125505411250b3da8$exports = {}; | ||
$fcdb1200b0b078125505411250b3da8$exports = JSON.parse("{\"buttonLabel\":\"제안 사항 표시\",\"countAnnouncement\":\"{optionCount, plural, one {#개 옵션} other {#개 옵션}}을 사용할 수 있습니다.\",\"focusAnnouncement\":\"{isGroupChange, select, true {입력한 그룹 {groupTitle}, {groupCount, plural, one {#개 옵션} other {#개 옵션}}. } other {}}{optionText}{isSelected, select, true {, 선택됨} other {}}\",\"listboxLabel\":\"제안\",\"selectedAnnouncement\":\"{optionText}, 선택됨\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/lt-LT.json | ||
var $ae7d46453e48caf5831bf917e3f7f4$exports = {}; | ||
$ae7d46453e48caf5831bf917e3f7f4$exports = JSON.parse("{\"buttonLabel\":\"Rodyti pasiūlymus\",\"countAnnouncement\":\"Yra {optionCount, plural, one {# parinktis} other {# parinktys (-ių)}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Įvesta grupė {groupTitle}, su {groupCount, plural, one {# parinktimi} other {# parinktimis (-ių)}}. } other {}}{optionText}{isSelected, select, true {, pasirinkta} other {}}\",\"listboxLabel\":\"Pasiūlymai\",\"selectedAnnouncement\":\"{optionText}, pasirinkta\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/lv-LV.json | ||
var $d008ca76e03db31d004b0e4f3f5574a$exports = {}; | ||
$d008ca76e03db31d004b0e4f3f5574a$exports = JSON.parse("{\"buttonLabel\":\"Rādīt ieteikumus\",\"countAnnouncement\":\"Pieejamo opciju skaits: {optionCount, plural, one {# opcija} other {# opcijas}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Ievadīta grupa {groupTitle}, ar {groupCount, plural, one {# opciju} other {# opcijām}}. } other {}}{optionText}{isSelected, select, true {, atlasīta} other {}}\",\"listboxLabel\":\"Ieteikumi\",\"selectedAnnouncement\":\"{optionText}, atlasīta\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/nb-NO.json | ||
var $dcaa72b3e8623f0d734c2b2e58a$exports = {}; | ||
$dcaa72b3e8623f0d734c2b2e58a$exports = JSON.parse("{\"buttonLabel\":\"Vis forslag\",\"countAnnouncement\":\"{optionCount, plural, one {# alternativ} other {# alternativer}} finnes.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Angitt gruppe {groupTitle}, med {groupCount, plural, one {# alternativ} other {# alternativer}}. } other {}}{optionText}{isSelected, select, true {, valgt} other {}}\",\"listboxLabel\":\"Forslag\",\"selectedAnnouncement\":\"{optionText}, valgt\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/nl-NL.json | ||
var $a7a8fb75c57944677d9c6bf80bbe$exports = {}; | ||
$a7a8fb75c57944677d9c6bf80bbe$exports = JSON.parse("{\"buttonLabel\":\"Suggesties weergeven\",\"countAnnouncement\":\"{optionCount, plural, one {# optie} other {# opties}} beschikbaar.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Groep {groupTitle} ingevoerd met {groupCount, plural, one {# optie} other {# opties}}. } other {}}{optionText}{isSelected, select, true {, geselecteerd} other {}}\",\"listboxLabel\":\"Suggesties\",\"selectedAnnouncement\":\"{optionText}, geselecteerd\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/pl-PL.json | ||
var $ed7527596f583bb2411b6e63181c828$exports = {}; | ||
$ed7527596f583bb2411b6e63181c828$exports = JSON.parse("{\"buttonLabel\":\"Wyświetlaj sugestie\",\"countAnnouncement\":\"dostępna/dostępne(-nych) {optionCount, plural, one {# opcja} other {# opcje(-i)}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Dołączono do grupy {groupTitle}, z {groupCount, plural, one {# opcją} other {# opcjami}}. } other {}}{optionText}{isSelected, select, true {, wybrano} other {}}\",\"listboxLabel\":\"Sugestie\",\"selectedAnnouncement\":\"{optionText}, wybrano\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/pt-BR.json | ||
var $df7ce3597cba6c589fe1547e9398a1$exports = {}; | ||
$df7ce3597cba6c589fe1547e9398a1$exports = JSON.parse("{\"buttonLabel\":\"Mostrar sugestões\",\"countAnnouncement\":\"{optionCount, plural, one {# opção} other {# opções}} disponível.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Grupo inserido {groupTitle}, com {groupCount, plural, one {# opção} other {# opções}}. } other {}}{optionText}{isSelected, select, true {, selecionado} other {}}\",\"listboxLabel\":\"Sugestões\",\"selectedAnnouncement\":\"{optionText}, selecionado\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/pt-PT.json | ||
var $af7a1745d38e51c65b0133f60a0$exports = {}; | ||
$af7a1745d38e51c65b0133f60a0$exports = JSON.parse("{\"buttonLabel\":\"Apresentar sugestões\",\"countAnnouncement\":\"{optionCount, plural, one {# opção} other {# opções}} disponível.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Grupo introduzido {groupTitle}, com {groupCount, plural, one {# opção} other {# opções}}. } other {}}{optionText}{isSelected, select, true {, selecionado} other {}}\",\"listboxLabel\":\"Sugestões\",\"selectedAnnouncement\":\"{optionText}, selecionado\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ro-RO.json | ||
var $a05b7681dd40a3dd5d6e247465fb2$exports = {}; | ||
$a05b7681dd40a3dd5d6e247465fb2$exports = JSON.parse("{\"buttonLabel\":\"Afișare sugestii\",\"countAnnouncement\":\"{optionCount, plural, one {# opțiune} other {# opțiuni}} disponibile.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Grup {groupTitle} introdus, cu {groupCount, plural, one {# opțiune} other {# opțiuni}}. } other {}}{optionText}{isSelected, select, true {, selectat} other {}}\",\"listboxLabel\":\"Sugestii\",\"selectedAnnouncement\":\"{optionText}, selectat\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ru-RU.json | ||
var $a3e6ad485d388d34644c7738b17894$exports = {}; | ||
$a3e6ad485d388d34644c7738b17894$exports = JSON.parse("{\"buttonLabel\":\"Показать предложения\",\"countAnnouncement\":\"{optionCount, plural, one {# параметр} other {# параметров}} доступно.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Введенная группа {groupTitle}, с {groupCount, plural, one {# параметром} other {# параметрами}}. } other {}}{optionText}{isSelected, select, true {, выбранными} other {}}\",\"listboxLabel\":\"Предложения\",\"selectedAnnouncement\":\"{optionText}, выбрано\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/sk-SK.json | ||
var $e0b1ab042642593eb7294132e50b46b$exports = {}; | ||
$e0b1ab042642593eb7294132e50b46b$exports = JSON.parse("{\"buttonLabel\":\"Zobraziť návrhy\",\"countAnnouncement\":\"{optionCount, plural, one {# možnosť} other {# možnosti/-í}} k dispozícii.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Zadaná skupina {groupTitle}, s {groupCount, plural, one {# možnosťou} other {# možnosťami}}. } other {}}{optionText}{isSelected, select, true {, vybraté} other {}}\",\"listboxLabel\":\"Návrhy\",\"selectedAnnouncement\":\"{optionText}, vybraté\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/sl-SI.json | ||
var $bf5ec183b7bd0eecdc06625a9a73fa9d$exports = {}; | ||
$bf5ec183b7bd0eecdc06625a9a73fa9d$exports = JSON.parse("{\"buttonLabel\":\"Prikaži predloge\",\"countAnnouncement\":\"Na voljo je {optionCount, plural, one {# opcija} other {# opcije}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Vnesena skupina {groupTitle}, z {groupCount, plural, one {# opcija} other {# opcije}}. } other {}}{optionText}{isSelected, select, true {, izbrano} other {}}\",\"listboxLabel\":\"Predlogi\",\"selectedAnnouncement\":\"{optionText}, izbrano\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/sr-SP.json | ||
var $aa293a3771d0b4cc15832591bc00b93d$exports = {}; | ||
$aa293a3771d0b4cc15832591bc00b93d$exports = JSON.parse("{\"buttonLabel\":\"Prikaži predloge\",\"countAnnouncement\":\"Dostupno još: {optionCount, plural, one {# opcija} other {# opcije/a}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Unesena grupa {groupTitle}, s {groupCount, plural, one {# opcijom} other {# optione/a}}. } other {}}{optionText}{isSelected, select, true {, izabranih} other {}}\",\"listboxLabel\":\"Predlozi\",\"selectedAnnouncement\":\"{optionText}, izabrano\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/sv-SE.json | ||
var $d15eef346cfbe2e9dc1d93abc4c6e5a$exports = {}; | ||
$d15eef346cfbe2e9dc1d93abc4c6e5a$exports = JSON.parse("{\"buttonLabel\":\"Visa förslag\",\"countAnnouncement\":\"{optionCount, plural, one {# alternativ} other {# alternativ}} tillgängliga.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Ingick i gruppen {groupTitle} med {groupCount, plural, one {# alternativ} other {# alternativ}}. } other {}}{optionText}{isSelected, select, true {, valda} other {}}\",\"listboxLabel\":\"Förslag\",\"selectedAnnouncement\":\"{optionText}, valda\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/tr-TR.json | ||
var $d70b2a82645d0b4b2c9cef7d29890$exports = {}; | ||
$d70b2a82645d0b4b2c9cef7d29890$exports = JSON.parse("{\"buttonLabel\":\"Önerileri göster\",\"countAnnouncement\":\"{optionCount, plural, one {# seçenek} other {# seçenekler}} kullanılabilir.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Girilen grup {groupTitle}, ile {groupCount, plural, one {# seçenek} other {# seçenekler}}. } other {}}{optionText}{isSelected, select, true {, seçildi} other {}}\",\"listboxLabel\":\"Öneriler\",\"selectedAnnouncement\":\"{optionText}, seçildi\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/uk-UA.json | ||
var $ab1fe27a4f39549d797837c26e78fd16$exports = {}; | ||
$ab1fe27a4f39549d797837c26e78fd16$exports = JSON.parse("{\"buttonLabel\":\"Показати пропозиції\",\"countAnnouncement\":\"{optionCount, plural, one {# параметр} other {# параметри(-ів)}} доступно.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Введена група {groupTitle}, з {groupCount, plural, one {# параметр} other {# параметри(-ів)}}. } other {}}{optionText}{isSelected, select, true {, вибрано} other {}}\",\"listboxLabel\":\"Пропозиції\",\"selectedAnnouncement\":\"{optionText}, вибрано\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/zh-CN.json | ||
var $fe62c244e0490ab4a42af68a4b80$exports = {}; | ||
$fe62c244e0490ab4a42af68a4b80$exports = JSON.parse("{\"buttonLabel\":\"显示建议\",\"countAnnouncement\":\"有 {optionCount, plural, one {# 个选项} other {# 个选项}}可用。\",\"focusAnnouncement\":\"{isGroupChange, select, true {进入了 {groupTitle} 组,其中有 {groupCount, plural, one {# 个选项} other {# 个选项}}. } other {}}{optionText}{isSelected, select, true {, 已选择} other {}}\",\"listboxLabel\":\"建议\",\"selectedAnnouncement\":\"{optionText}, 已选择\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/zh-TW.json | ||
var $fa0b480f785921c54bbc13041b14dc$exports = {}; | ||
$fa0b480f785921c54bbc13041b14dc$exports = JSON.parse("{\"buttonLabel\":\"顯示建議\",\"countAnnouncement\":\"{optionCount, plural, one {# 選項} other {# 選項}} 可用。\",\"focusAnnouncement\":\"{isGroupChange, select, true {輸入的群組 {groupTitle}, 有 {groupCount, plural, one {# 選項} other {# 選項}}. } other {}}{optionText}{isSelected, select, true {, 已選取} other {}}\",\"listboxLabel\":\"建議\",\"selectedAnnouncement\":\"{optionText}, 已選取\"}"); | ||
// @ts-ignore | ||
const $fa71f27c5feed757eb58cfe0179b$var$intlMessages = { | ||
"ar-AE": _babelRuntimeHelpersInteropRequireDefault($d3abd1c94a8091e6bea5d25566d34f3b$exports).default, | ||
"bg-BG": _babelRuntimeHelpersInteropRequireDefault($e68f714a4c0d09d95c33770e06f8$exports).default, | ||
"cs-CZ": _babelRuntimeHelpersInteropRequireDefault($a500a0b3a3619656e27bf5600e433c24$exports).default, | ||
"da-DK": _babelRuntimeHelpersInteropRequireDefault($e49da863b7bd600c177b6a36f118$exports).default, | ||
"de-DE": _babelRuntimeHelpersInteropRequireDefault($ee8337d033bc8022023cbd1e81c99e0f$exports).default, | ||
"el-GR": _babelRuntimeHelpersInteropRequireDefault($b80f3d468ed1c259fafa109ac82f$exports).default, | ||
"en-US": _babelRuntimeHelpersInteropRequireDefault($bf7e6d52e99e0a0de8c556ddb07fc5a$exports).default, | ||
"es-ES": _babelRuntimeHelpersInteropRequireDefault($a10df97a05936d5ade08a757b8203$exports).default, | ||
"et-EE": _babelRuntimeHelpersInteropRequireDefault($f3ceb8fdb1d42883b88768afca1419$exports).default, | ||
"fi-FI": _babelRuntimeHelpersInteropRequireDefault($f1743c0157b8801e8cb7483c8ad$exports).default, | ||
"fr-FR": _babelRuntimeHelpersInteropRequireDefault($dc583336acdeed35267661d22$exports).default, | ||
"he-IL": _babelRuntimeHelpersInteropRequireDefault($e8d5cdaf06bc2fff1bfdce0b70eaee1$exports).default, | ||
"hr-HR": _babelRuntimeHelpersInteropRequireDefault($a09462ff6f02eb4bf7658204c3f6e15$exports).default, | ||
"hu-HU": _babelRuntimeHelpersInteropRequireDefault($a51a94bb99ac070324d83d28741ff6a3$exports).default, | ||
"it-IT": _babelRuntimeHelpersInteropRequireDefault($dc21b3c22ee0c88b8141ebe9086768be$exports).default, | ||
"ja-JP": _babelRuntimeHelpersInteropRequireDefault($a4da3b639472f5f28d54905e8d8b311$exports).default, | ||
"ko-KR": _babelRuntimeHelpersInteropRequireDefault($fcdb1200b0b078125505411250b3da8$exports).default, | ||
"lt-LT": _babelRuntimeHelpersInteropRequireDefault($ae7d46453e48caf5831bf917e3f7f4$exports).default, | ||
"lv-LV": _babelRuntimeHelpersInteropRequireDefault($d008ca76e03db31d004b0e4f3f5574a$exports).default, | ||
"nb-NO": _babelRuntimeHelpersInteropRequireDefault($dcaa72b3e8623f0d734c2b2e58a$exports).default, | ||
"nl-NL": _babelRuntimeHelpersInteropRequireDefault($a7a8fb75c57944677d9c6bf80bbe$exports).default, | ||
"pl-PL": _babelRuntimeHelpersInteropRequireDefault($ed7527596f583bb2411b6e63181c828$exports).default, | ||
"pt-BR": _babelRuntimeHelpersInteropRequireDefault($df7ce3597cba6c589fe1547e9398a1$exports).default, | ||
"pt-PT": _babelRuntimeHelpersInteropRequireDefault($af7a1745d38e51c65b0133f60a0$exports).default, | ||
"ro-RO": _babelRuntimeHelpersInteropRequireDefault($a05b7681dd40a3dd5d6e247465fb2$exports).default, | ||
"ru-RU": _babelRuntimeHelpersInteropRequireDefault($a3e6ad485d388d34644c7738b17894$exports).default, | ||
"sk-SK": _babelRuntimeHelpersInteropRequireDefault($e0b1ab042642593eb7294132e50b46b$exports).default, | ||
"sl-SI": _babelRuntimeHelpersInteropRequireDefault($bf5ec183b7bd0eecdc06625a9a73fa9d$exports).default, | ||
"sr-SP": _babelRuntimeHelpersInteropRequireDefault($aa293a3771d0b4cc15832591bc00b93d$exports).default, | ||
"sv-SE": _babelRuntimeHelpersInteropRequireDefault($d15eef346cfbe2e9dc1d93abc4c6e5a$exports).default, | ||
"tr-TR": _babelRuntimeHelpersInteropRequireDefault($d70b2a82645d0b4b2c9cef7d29890$exports).default, | ||
"uk-UA": _babelRuntimeHelpersInteropRequireDefault($ab1fe27a4f39549d797837c26e78fd16$exports).default, | ||
"zh-CN": _babelRuntimeHelpersInteropRequireDefault($fe62c244e0490ab4a42af68a4b80$exports).default, | ||
"zh-TW": _babelRuntimeHelpersInteropRequireDefault($fa0b480f785921c54bbc13041b14dc$exports).default | ||
}; | ||
$parcel$export(module.exports, "useComboBox", () => $242452271d1e4c0e$exports.useComboBox); | ||
/* | ||
* Copyright 2020 Adobe. All rights reserved. | ||
* This file is licensed to you under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. You may obtain a copy | ||
* of the License at http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software distributed under | ||
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
* OF ANY KIND, either express or implied. See the License for the specific language | ||
* governing permissions and limitations under the License. | ||
*/ | ||
/** | ||
* Provides the behavior and accessibility implementation for a combo box component. | ||
* A combo box combines a text input with a listbox, allowing users to filter a list of options to items matching a query. | ||
* @param props - Props for the combo box. | ||
* @param state - State for the select, as returned by `useComboBoxState`. | ||
*/ | ||
function useComboBox(props, state) { | ||
var _focusedItem$parentKe, _state$selectionManag; | ||
let { | ||
buttonRef, | ||
popoverRef, | ||
inputRef, | ||
listBoxRef, | ||
keyboardDelegate, | ||
// completionMode = 'suggest', | ||
isReadOnly, | ||
isDisabled | ||
} = props; | ||
let formatMessage = useMessageFormatter($fa71f27c5feed757eb58cfe0179b$var$intlMessages); | ||
let { | ||
menuTriggerProps, | ||
menuProps | ||
} = useMenuTrigger({ | ||
type: 'listbox' | ||
}, state, buttonRef); // Set listbox id so it can be used when calling getItemId later | ||
listData.set(state, { | ||
id: menuProps.id | ||
}); // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down). | ||
// When virtualized, the layout object will be passed in as a prop and override this. | ||
let delegate = useMemo(() => keyboardDelegate || new ListKeyboardDelegate(state.collection, state.disabledKeys, listBoxRef), [keyboardDelegate, state.collection, state.disabledKeys, listBoxRef]); // Use useSelectableCollection to get the keyboard handlers to apply to the textfield | ||
let { | ||
collectionProps | ||
} = useSelectableCollection({ | ||
selectionManager: state.selectionManager, | ||
keyboardDelegate: delegate, | ||
disallowTypeAhead: true, | ||
disallowEmptySelection: true, | ||
ref: inputRef | ||
}); // For textfield specific keydown operations | ||
let onKeyDown = e => { | ||
switch (e.key) { | ||
case 'Enter': | ||
case 'Tab': | ||
// Prevent form submission if menu is open since we may be selecting a option | ||
if (state.isOpen && e.key === 'Enter') { | ||
e.preventDefault(); | ||
} | ||
state.commit(); | ||
break; | ||
case 'Escape': | ||
state.revert(); | ||
break; | ||
case 'ArrowDown': | ||
state.open('first', 'manual'); | ||
break; | ||
case 'ArrowUp': | ||
state.open('last', 'manual'); | ||
break; | ||
case 'ArrowLeft': | ||
case 'ArrowRight': | ||
state.selectionManager.setFocusedKey(null); | ||
break; | ||
} | ||
}; | ||
let onBlur = e => { | ||
var _popoverRef$current; | ||
// Ignore blur if focused moved to the button or into the popover. | ||
if (e.relatedTarget === (buttonRef == null ? void 0 : buttonRef.current) || (_popoverRef$current = popoverRef.current) != null && _popoverRef$current.contains(e.relatedTarget)) { | ||
return; | ||
} | ||
if (props.onBlur) { | ||
props.onBlur(e); | ||
} | ||
state.setFocused(false); | ||
}; | ||
let onFocus = e => { | ||
if (state.isFocused) { | ||
return; | ||
} | ||
if (props.onFocus) { | ||
props.onFocus(e); | ||
} | ||
state.setFocused(true); | ||
}; | ||
let { | ||
labelProps, | ||
inputProps | ||
} = useTextField(_babelRuntimeHelpersExtends({}, props, { | ||
onChange: state.setInputValue, | ||
onKeyDown: !isReadOnly && chain(state.isOpen && collectionProps.onKeyDown, onKeyDown), | ||
onBlur, | ||
value: state.inputValue, | ||
onFocus, | ||
autoComplete: 'off' | ||
}), inputRef); // Press handlers for the ComboBox button | ||
let onPress = e => { | ||
if (e.pointerType === 'touch') { | ||
// Focus the input field in case it isn't focused yet | ||
inputRef.current.focus(); | ||
state.toggle(null, 'manual'); | ||
} | ||
}; | ||
let onPressStart = e => { | ||
if (e.pointerType !== 'touch') { | ||
inputRef.current.focus(); | ||
state.toggle(e.pointerType === 'keyboard' || e.pointerType === 'virtual' ? 'first' : null, 'manual'); | ||
} | ||
}; | ||
let triggerLabelProps = useLabels({ | ||
id: menuTriggerProps.id, | ||
'aria-label': formatMessage('buttonLabel'), | ||
'aria-labelledby': props['aria-labelledby'] || labelProps.id | ||
}); | ||
let listBoxProps = useLabels({ | ||
id: menuProps.id, | ||
'aria-label': formatMessage('listboxLabel'), | ||
'aria-labelledby': props['aria-labelledby'] || labelProps.id | ||
}); // If a touch happens on direct center of ComboBox input, might be virtual click from iPad so open ComboBox menu | ||
let lastEventTime = useRef(0); | ||
let onTouchEnd = e => { | ||
if (isDisabled || isReadOnly) { | ||
return; | ||
} // Sometimes VoiceOver on iOS fires two touchend events in quick succession. Ignore the second one. | ||
if (e.timeStamp - lastEventTime.current < 500) { | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
return; | ||
} | ||
let rect = e.target.getBoundingClientRect(); | ||
let touch = e.changedTouches[0]; | ||
let centerX = Math.ceil(rect.left + .5 * rect.width); | ||
let centerY = Math.ceil(rect.top + .5 * rect.height); | ||
if (touch.clientX === centerX && touch.clientY === centerY) { | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
state.toggle(null, 'manual'); | ||
lastEventTime.current = e.timeStamp; | ||
} | ||
}; // VoiceOver has issues with announcing aria-activedescendant properly on change | ||
// (especially on iOS). We use a live region announcer to announce focus changes | ||
// manually. In addition, section titles are announced when navigating into a new section. | ||
let focusedItem = state.selectionManager.focusedKey != null && state.isOpen ? state.collection.getItem(state.selectionManager.focusedKey) : undefined; | ||
let sectionKey = (_focusedItem$parentKe = focusedItem == null ? void 0 : focusedItem.parentKey) != null ? _focusedItem$parentKe : null; | ||
let itemKey = (_state$selectionManag = state.selectionManager.focusedKey) != null ? _state$selectionManag : null; | ||
let lastSection = useRef(sectionKey); | ||
let lastItem = useRef(itemKey); | ||
useEffect(() => { | ||
if (isAppleDevice() && focusedItem != null && itemKey !== lastItem.current) { | ||
let isSelected = state.selectionManager.isSelected(itemKey); | ||
let section = sectionKey != null ? state.collection.getItem(sectionKey) : null; | ||
let sectionTitle = (section == null ? void 0 : section['aria-label']) || (typeof (section == null ? void 0 : section.rendered) === 'string' ? section.rendered : '') || ''; | ||
let announcement = formatMessage('focusAnnouncement', { | ||
isGroupChange: section && sectionKey !== lastSection.current, | ||
groupTitle: sectionTitle, | ||
groupCount: section ? [...section.childNodes].length : 0, | ||
optionText: focusedItem['aria-label'] || focusedItem.textValue || '', | ||
isSelected | ||
}); | ||
announce(announcement); | ||
} | ||
lastSection.current = sectionKey; | ||
lastItem.current = itemKey; | ||
}); // Announce the number of available suggestions when it changes | ||
let optionCount = getItemCount(state.collection); | ||
let lastSize = useRef(optionCount); | ||
let lastOpen = useRef(state.isOpen); | ||
useEffect(() => { | ||
// Only announce the number of options available when the menu opens if there is no | ||
// focused item, otherwise screen readers will typically read e.g. "1 of 6". | ||
// The exception is VoiceOver since this isn't included in the message above. | ||
let didOpenWithoutFocusedItem = state.isOpen !== lastOpen.current && (state.selectionManager.focusedKey == null || isAppleDevice()); | ||
if (state.isOpen && (didOpenWithoutFocusedItem || optionCount !== lastSize.current)) { | ||
let announcement = formatMessage('countAnnouncement', { | ||
optionCount | ||
}); | ||
announce(announcement); | ||
} | ||
lastSize.current = optionCount; | ||
lastOpen.current = state.isOpen; | ||
}); // Announce when a selection occurs for VoiceOver. Other screen readers typically do this automatically. | ||
let lastSelectedKey = useRef(state.selectedKey); | ||
useEffect(() => { | ||
if (isAppleDevice() && state.isFocused && state.selectedItem && state.selectedKey !== lastSelectedKey.current) { | ||
let optionText = state.selectedItem['aria-label'] || state.selectedItem.textValue || ''; | ||
let announcement = formatMessage('selectedAnnouncement', { | ||
optionText | ||
}); | ||
announce(announcement); | ||
} | ||
lastSelectedKey.current = state.selectedKey; | ||
}); | ||
useEffect(() => { | ||
if (state.isOpen) { | ||
return ariaHideOutside([inputRef.current, popoverRef.current]); | ||
} | ||
}, [state.isOpen, inputRef, popoverRef]); | ||
return { | ||
labelProps, | ||
buttonProps: _babelRuntimeHelpersExtends({}, menuTriggerProps, triggerLabelProps, { | ||
excludeFromTabOrder: true, | ||
onPress, | ||
onPressStart | ||
}), | ||
inputProps: mergeProps(inputProps, { | ||
role: 'combobox', | ||
'aria-expanded': menuTriggerProps['aria-expanded'], | ||
'aria-controls': state.isOpen ? menuProps.id : undefined, | ||
// TODO: readd proper logic for completionMode = complete (aria-autocomplete: both) | ||
'aria-autocomplete': 'list', | ||
'aria-activedescendant': focusedItem ? getItemId(state, focusedItem.key) : undefined, | ||
onTouchEnd, | ||
// This disable's iOS's autocorrect suggestions, since the combo box provides its own suggestions. | ||
autoCorrect: 'off', | ||
// This disable's the macOS Safari spell check auto corrections. | ||
spellCheck: 'false' | ||
}), | ||
listBoxProps: mergeProps(menuProps, listBoxProps, { | ||
autoFocus: state.focusStrategy, | ||
shouldUseVirtualFocus: true, | ||
shouldSelectOnPressUp: true, | ||
shouldFocusOnHover: true | ||
}) | ||
}; | ||
} | ||
exports.useComboBox = useComboBox; | ||
//# sourceMappingURL=main.js.map |
@@ -1,412 +0,17 @@ | ||
import { useTextField } from "@react-aria/textfield"; | ||
import { useMessageFormatter } from "@react-aria/i18n"; | ||
import { useMenuTrigger } from "@react-aria/menu"; | ||
import { ListKeyboardDelegate, useSelectableCollection } from "@react-aria/selection"; | ||
import { getItemCount } from "@react-stately/collections"; | ||
import { useEffect, useMemo, useRef } from "react"; | ||
import { chain, isAppleDevice, mergeProps, useLabels } from "@react-aria/utils"; | ||
import { getItemId, listData } from "@react-aria/listbox"; | ||
import { ariaHideOutside } from "@react-aria/overlays"; | ||
import { announce } from "@react-aria/live-announcer"; | ||
import _babelRuntimeHelpersEsmInteropRequireDefault from "@babel/runtime/helpers/esm/interopRequireDefault"; | ||
import _babelRuntimeHelpersEsmExtends from "@babel/runtime/helpers/esm/extends"; | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ar-AE.json | ||
var $d78683a0e7fef7294b62031fc43054c6$exports = {}; | ||
$d78683a0e7fef7294b62031fc43054c6$exports = JSON.parse("{\"buttonLabel\":\"عرض المقترحات\",\"countAnnouncement\":\"{optionCount, plural, one {# خيار} other {# خيارات}} متاحة.\",\"focusAnnouncement\":\"{isGroupChange, select, true {المجموعة المدخلة {groupTitle}, مع {groupCount, plural, one {# خيار} other {# خيارات}}. } other {}}{optionText}{isSelected, select, true {, محدد} other {}}\",\"listboxLabel\":\"مقترحات\",\"selectedAnnouncement\":\"{optionText}، محدد\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/bg-BG.json | ||
var $f98ae6ce2700d4a20c4e60ff9d68eed9$exports = {}; | ||
$f98ae6ce2700d4a20c4e60ff9d68eed9$exports = JSON.parse("{\"buttonLabel\":\"Покажи предложения\",\"countAnnouncement\":\"{optionCount, plural, one {# опция} other {# опции}} на разположение.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Въведена група {groupTitle}, с {groupCount, plural, one {# опция} other {# опции}}. } other {}}{optionText}{isSelected, select, true {, избрани} other {}}\",\"listboxLabel\":\"Предложения\",\"selectedAnnouncement\":\"{optionText}, избрани\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/cs-CZ.json | ||
var $e18f88738dd7cf3410585df50c4a$exports = {}; | ||
$e18f88738dd7cf3410585df50c4a$exports = JSON.parse("{\"buttonLabel\":\"Zobrazit doporučení\",\"countAnnouncement\":\"K dispozici {optionCount, plural, one {je # možnost} other {jsou/je # možnosti/-í}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Zadaná skupina „{groupTitle}“ {groupCount, plural, one {s # možností} other {se # možnostmi}}. } other {}}{optionText}{isSelected, select, true { (vybráno)} other {}}\",\"listboxLabel\":\"Návrhy\",\"selectedAnnouncement\":\"{optionText}, vybráno\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/da-DK.json | ||
var $bc87a01dd17f8e08d9b5f2d709d95ab$exports = {}; | ||
$bc87a01dd17f8e08d9b5f2d709d95ab$exports = JSON.parse("{\"buttonLabel\":\"Vis forslag\",\"countAnnouncement\":\"{optionCount, plural, one {# mulighed tilgængelig} other {# muligheder tilgængelige}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Angivet gruppe {groupTitle}, med {groupCount, plural, one {# mulighed} other {# muligheder}}. } other {}}{optionText}{isSelected, select, true {, valgt} other {}}\",\"listboxLabel\":\"Forslag\",\"selectedAnnouncement\":\"{optionText}, valgt\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/de-DE.json | ||
var $a2876bc991816077d10a6a3c448303e$exports = {}; | ||
$a2876bc991816077d10a6a3c448303e$exports = JSON.parse("{\"buttonLabel\":\"Empfehlungen anzeigen\",\"countAnnouncement\":\"{optionCount, plural, one {# Option} other {# Optionen}} verfügbar.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Eingetretene Gruppe {groupTitle}, mit {groupCount, plural, one {# Option} other {# Optionen}}. } other {}}{optionText}{isSelected, select, true {, ausgewählt} other {}}\",\"listboxLabel\":\"Empfehlungen\",\"selectedAnnouncement\":\"{optionText}, ausgewählt\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/el-GR.json | ||
var $b2fff3cd75c7191d2e6133d07588de86$exports = {}; | ||
$b2fff3cd75c7191d2e6133d07588de86$exports = JSON.parse("{\"buttonLabel\":\"Προβολή προτάσεων\",\"countAnnouncement\":\"{optionCount, plural, one {# επιλογή} other {# επιλογές }} διαθέσιμες.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Εισαγμένη ομάδα {groupTitle}, με {groupCount, plural, one {# επιλογή} other {# επιλογές}}. } other {}}{optionText}{isSelected, select, true {, επιλεγμένο} other {}}\",\"listboxLabel\":\"Προτάσεις\",\"selectedAnnouncement\":\"{optionText}, επιλέχθηκε\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/en-US.json | ||
var $f1639f2754c31f58763b8cb015a6ecd6$exports = {}; | ||
$f1639f2754c31f58763b8cb015a6ecd6$exports = JSON.parse("{\"focusAnnouncement\":\"{isGroupChange, select, true {Entered group {groupTitle}, with {groupCount, plural, one {# option} other {# options}}. } other {}}{optionText}{isSelected, select, true {, selected} other {}}\",\"countAnnouncement\":\"{optionCount, plural, one {# option} other {# options}} available.\",\"selectedAnnouncement\":\"{optionText}, selected\",\"buttonLabel\":\"Show suggestions\",\"listboxLabel\":\"Suggestions\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/es-ES.json | ||
var $f0fff8208defd2a975d21faa464abfd$exports = {}; | ||
$f0fff8208defd2a975d21faa464abfd$exports = JSON.parse("{\"buttonLabel\":\"Mostrar sugerencias\",\"countAnnouncement\":\"{optionCount, plural, one {# opción} other {# opciones}} disponible(s).\",\"focusAnnouncement\":\"{isGroupChange, select, true {Se ha unido al grupo {groupTitle}, con {groupCount, plural, one {# opción} other {# opciones}}. } other {}}{optionText}{isSelected, select, true {, seleccionado} other {}}\",\"listboxLabel\":\"Sugerencias\",\"selectedAnnouncement\":\"{optionText}, seleccionado\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/et-EE.json | ||
var $c22ee6a7566d1cf5578bf8d4f5c2a6$exports = {}; | ||
$c22ee6a7566d1cf5578bf8d4f5c2a6$exports = JSON.parse("{\"buttonLabel\":\"Kuva soovitused\",\"countAnnouncement\":\"{optionCount, plural, one {# valik} other {# valikud}} saadaval.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Sisestatud rühm {groupTitle}, valikuga {groupCount, plural, one {# valik} other {# valikud}}. } other {}}{optionText}{isSelected, select, true {, valitud} other {}}\",\"listboxLabel\":\"Soovitused\",\"selectedAnnouncement\":\"{optionText}, valitud\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/fi-FI.json | ||
var $c0df15e7925dcb04d7c1787b03a5e$exports = {}; | ||
$c0df15e7925dcb04d7c1787b03a5e$exports = JSON.parse("{\"buttonLabel\":\"Näytä ehdotukset\",\"countAnnouncement\":\"{optionCount, plural, one {# vaihtoehto} other {# vaihtoehdot}} saatavilla.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Mentiin ryhmään {groupTitle}, {groupCount, plural, one {# vaihtoehdon} other {# vaihtoehdon}} kanssa.} other {}}{optionText}{isSelected, select, true {, valittu} other {}}\",\"listboxLabel\":\"Ehdotukset\",\"selectedAnnouncement\":\"{optionText}, valittu\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/fr-FR.json | ||
var $b36e7dd5de5dec60de8490c4382ec$exports = {}; | ||
$b36e7dd5de5dec60de8490c4382ec$exports = JSON.parse("{\"buttonLabel\":\"Afficher les suggestions\",\"countAnnouncement\":\"{optionCount, plural, one {# option} other {# options}} disponible(s).\",\"focusAnnouncement\":\"{isGroupChange, select, true {Groupe {groupTitle} saisi, avec {groupCount, plural, one {# option} other {# options}}. } other {}}{optionText}{isSelected, select, true {, sélectionné(s)} other {}}\",\"listboxLabel\":\"Suggestions\",\"selectedAnnouncement\":\"{optionText}, sélectionné\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/he-IL.json | ||
var $c0bb0e2e7b387fc7e7e478556f7f7d7$exports = {}; | ||
$c0bb0e2e7b387fc7e7e478556f7f7d7$exports = JSON.parse("{\"buttonLabel\":\"הצג הצעות\",\"countAnnouncement\":\"{optionCount, plural, one {אפשרות #} other {# אפשרויות}} במצב זמין.\",\"focusAnnouncement\":\"{isGroupChange, select, true {נכנס לקבוצה {groupTitle}, עם {groupCount, plural, one {אפשרות #} other {# אפשרויות}}. } other {}}{optionText}{isSelected, select, true {, נבחר} other {}}\",\"listboxLabel\":\"הצעות\",\"selectedAnnouncement\":\"{optionText}, נבחר\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/hr-HR.json | ||
var $c2ad6267acd85a3c0b84c89b176b1b$exports = {}; | ||
$c2ad6267acd85a3c0b84c89b176b1b$exports = JSON.parse("{\"buttonLabel\":\"Prikaži prijedloge\",\"countAnnouncement\":\"Dostupno još: {optionCount, plural, one {# opcija} other {# opcije/a}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Unesena skupina {groupTitle}, s {groupCount, plural, one {# opcijom} other {# opcije/a}}. } other {}}{optionText}{isSelected, select, true {, odabranih} other {}}\",\"listboxLabel\":\"Prijedlozi\",\"selectedAnnouncement\":\"{optionText}, odabrano\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/hu-HU.json | ||
var $b72435e6c734787569d9dde4943b4667$exports = {}; | ||
$b72435e6c734787569d9dde4943b4667$exports = JSON.parse("{\"buttonLabel\":\"Javaslatok megjelenítése\",\"countAnnouncement\":\"{optionCount, plural, one {# lehetőség} other {# lehetőség}} áll rendelkezésre.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Belépett a(z) {groupTitle} csoportba, amely {groupCount, plural, one {# lehetőséget} other {# lehetőséget}} tartalmaz. } other {}}{optionText}{isSelected, select, true {, kijelölve} other {}}\",\"listboxLabel\":\"Javaslatok\",\"selectedAnnouncement\":\"{optionText}, kijelölve\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/it-IT.json | ||
var $ec385ad6d76803c0e13ef3155a37731f$exports = {}; | ||
$ec385ad6d76803c0e13ef3155a37731f$exports = JSON.parse("{\"buttonLabel\":\"Mostra suggerimenti\",\"countAnnouncement\":\"{optionCount, plural, one {# opzione disponibile} other {# opzioni disponibili}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Ingresso nel gruppo {groupTitle}, con {groupCount, plural, one {# opzione} other {# opzioni}}. } other {}}{optionText}{isSelected, select, true {, selezionato} other {}}\",\"listboxLabel\":\"Suggerimenti\",\"selectedAnnouncement\":\"{optionText}, selezionato\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ja-JP.json | ||
var $f6712684539b6a07d53079e26b70d9df$exports = {}; | ||
$f6712684539b6a07d53079e26b70d9df$exports = JSON.parse("{\"buttonLabel\":\"候補を表示\",\"countAnnouncement\":\"{optionCount, plural, one {# 個のオプション} other {# 個のオプション}}を利用できます。\",\"focusAnnouncement\":\"{isGroupChange, select, true {入力されたグループ {groupTitle}、{groupCount, plural, one {# 個のオプション} other {# 個のオプション}}を含む。} other {}}{optionText}{isSelected, select, true {、選択済み} other {}}\",\"listboxLabel\":\"候補\",\"selectedAnnouncement\":\"{optionText}、選択済み\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ko-KR.json | ||
var $c670ae89d3913146f04a762d163$exports = {}; | ||
$c670ae89d3913146f04a762d163$exports = JSON.parse("{\"buttonLabel\":\"제안 사항 표시\",\"countAnnouncement\":\"{optionCount, plural, one {#개 옵션} other {#개 옵션}}을 사용할 수 있습니다.\",\"focusAnnouncement\":\"{isGroupChange, select, true {입력한 그룹 {groupTitle}, {groupCount, plural, one {#개 옵션} other {#개 옵션}}. } other {}}{optionText}{isSelected, select, true {, 선택됨} other {}}\",\"listboxLabel\":\"제안\",\"selectedAnnouncement\":\"{optionText}, 선택됨\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/lt-LT.json | ||
var $a36750eea27db776e11cc103d172017$exports = {}; | ||
$a36750eea27db776e11cc103d172017$exports = JSON.parse("{\"buttonLabel\":\"Rodyti pasiūlymus\",\"countAnnouncement\":\"Yra {optionCount, plural, one {# parinktis} other {# parinktys (-ių)}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Įvesta grupė {groupTitle}, su {groupCount, plural, one {# parinktimi} other {# parinktimis (-ių)}}. } other {}}{optionText}{isSelected, select, true {, pasirinkta} other {}}\",\"listboxLabel\":\"Pasiūlymai\",\"selectedAnnouncement\":\"{optionText}, pasirinkta\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/lv-LV.json | ||
var $e840ed8916bd1f210105d1fb3f88697$exports = {}; | ||
$e840ed8916bd1f210105d1fb3f88697$exports = JSON.parse("{\"buttonLabel\":\"Rādīt ieteikumus\",\"countAnnouncement\":\"Pieejamo opciju skaits: {optionCount, plural, one {# opcija} other {# opcijas}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Ievadīta grupa {groupTitle}, ar {groupCount, plural, one {# opciju} other {# opcijām}}. } other {}}{optionText}{isSelected, select, true {, atlasīta} other {}}\",\"listboxLabel\":\"Ieteikumi\",\"selectedAnnouncement\":\"{optionText}, atlasīta\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/nb-NO.json | ||
var $a9d36ce32fd5aea219762aea75a1360$exports = {}; | ||
$a9d36ce32fd5aea219762aea75a1360$exports = JSON.parse("{\"buttonLabel\":\"Vis forslag\",\"countAnnouncement\":\"{optionCount, plural, one {# alternativ} other {# alternativer}} finnes.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Angitt gruppe {groupTitle}, med {groupCount, plural, one {# alternativ} other {# alternativer}}. } other {}}{optionText}{isSelected, select, true {, valgt} other {}}\",\"listboxLabel\":\"Forslag\",\"selectedAnnouncement\":\"{optionText}, valgt\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/nl-NL.json | ||
var $c4a143186784391623f115223360f80$exports = {}; | ||
$c4a143186784391623f115223360f80$exports = JSON.parse("{\"buttonLabel\":\"Suggesties weergeven\",\"countAnnouncement\":\"{optionCount, plural, one {# optie} other {# opties}} beschikbaar.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Groep {groupTitle} ingevoerd met {groupCount, plural, one {# optie} other {# opties}}. } other {}}{optionText}{isSelected, select, true {, geselecteerd} other {}}\",\"listboxLabel\":\"Suggesties\",\"selectedAnnouncement\":\"{optionText}, geselecteerd\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/pl-PL.json | ||
var $a32834a3efc5c6ca32d91bd08$exports = {}; | ||
$a32834a3efc5c6ca32d91bd08$exports = JSON.parse("{\"buttonLabel\":\"Wyświetlaj sugestie\",\"countAnnouncement\":\"dostępna/dostępne(-nych) {optionCount, plural, one {# opcja} other {# opcje(-i)}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Dołączono do grupy {groupTitle}, z {groupCount, plural, one {# opcją} other {# opcjami}}. } other {}}{optionText}{isSelected, select, true {, wybrano} other {}}\",\"listboxLabel\":\"Sugestie\",\"selectedAnnouncement\":\"{optionText}, wybrano\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/pt-BR.json | ||
var $e1b551c29bce2e3141bec9bc8b1ddba1$exports = {}; | ||
$e1b551c29bce2e3141bec9bc8b1ddba1$exports = JSON.parse("{\"buttonLabel\":\"Mostrar sugestões\",\"countAnnouncement\":\"{optionCount, plural, one {# opção} other {# opções}} disponível.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Grupo inserido {groupTitle}, com {groupCount, plural, one {# opção} other {# opções}}. } other {}}{optionText}{isSelected, select, true {, selecionado} other {}}\",\"listboxLabel\":\"Sugestões\",\"selectedAnnouncement\":\"{optionText}, selecionado\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/pt-PT.json | ||
var $e10cdad02310abdd1550ffa8b7db9ba$exports = {}; | ||
$e10cdad02310abdd1550ffa8b7db9ba$exports = JSON.parse("{\"buttonLabel\":\"Apresentar sugestões\",\"countAnnouncement\":\"{optionCount, plural, one {# opção} other {# opções}} disponível.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Grupo introduzido {groupTitle}, com {groupCount, plural, one {# opção} other {# opções}}. } other {}}{optionText}{isSelected, select, true {, selecionado} other {}}\",\"listboxLabel\":\"Sugestões\",\"selectedAnnouncement\":\"{optionText}, selecionado\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ro-RO.json | ||
var $ca354d1ee6bae344a049de3e819052c$exports = {}; | ||
$ca354d1ee6bae344a049de3e819052c$exports = JSON.parse("{\"buttonLabel\":\"Afișare sugestii\",\"countAnnouncement\":\"{optionCount, plural, one {# opțiune} other {# opțiuni}} disponibile.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Grup {groupTitle} introdus, cu {groupCount, plural, one {# opțiune} other {# opțiuni}}. } other {}}{optionText}{isSelected, select, true {, selectat} other {}}\",\"listboxLabel\":\"Sugestii\",\"selectedAnnouncement\":\"{optionText}, selectat\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/ru-RU.json | ||
var $f7006032145148654e07a693955fb9c2$exports = {}; | ||
$f7006032145148654e07a693955fb9c2$exports = JSON.parse("{\"buttonLabel\":\"Показать предложения\",\"countAnnouncement\":\"{optionCount, plural, one {# параметр} other {# параметров}} доступно.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Введенная группа {groupTitle}, с {groupCount, plural, one {# параметром} other {# параметрами}}. } other {}}{optionText}{isSelected, select, true {, выбранными} other {}}\",\"listboxLabel\":\"Предложения\",\"selectedAnnouncement\":\"{optionText}, выбрано\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/sk-SK.json | ||
var $c60520bb4ea0d2c95ea4b69dc1046132$exports = {}; | ||
$c60520bb4ea0d2c95ea4b69dc1046132$exports = JSON.parse("{\"buttonLabel\":\"Zobraziť návrhy\",\"countAnnouncement\":\"{optionCount, plural, one {# možnosť} other {# možnosti/-í}} k dispozícii.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Zadaná skupina {groupTitle}, s {groupCount, plural, one {# možnosťou} other {# možnosťami}}. } other {}}{optionText}{isSelected, select, true {, vybraté} other {}}\",\"listboxLabel\":\"Návrhy\",\"selectedAnnouncement\":\"{optionText}, vybraté\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/sl-SI.json | ||
var $fd97d8e462e8521b6da71e6762a5c$exports = {}; | ||
$fd97d8e462e8521b6da71e6762a5c$exports = JSON.parse("{\"buttonLabel\":\"Prikaži predloge\",\"countAnnouncement\":\"Na voljo je {optionCount, plural, one {# opcija} other {# opcije}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Vnesena skupina {groupTitle}, z {groupCount, plural, one {# opcija} other {# opcije}}. } other {}}{optionText}{isSelected, select, true {, izbrano} other {}}\",\"listboxLabel\":\"Predlogi\",\"selectedAnnouncement\":\"{optionText}, izbrano\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/sr-SP.json | ||
var $b615e8cf79bac7ecb7173b279f2a7$exports = {}; | ||
$b615e8cf79bac7ecb7173b279f2a7$exports = JSON.parse("{\"buttonLabel\":\"Prikaži predloge\",\"countAnnouncement\":\"Dostupno još: {optionCount, plural, one {# opcija} other {# opcije/a}}.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Unesena grupa {groupTitle}, s {groupCount, plural, one {# opcijom} other {# optione/a}}. } other {}}{optionText}{isSelected, select, true {, izabranih} other {}}\",\"listboxLabel\":\"Predlozi\",\"selectedAnnouncement\":\"{optionText}, izabrano\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/sv-SE.json | ||
var $f7c7084482b80ff47daa2804ba64c$exports = {}; | ||
$f7c7084482b80ff47daa2804ba64c$exports = JSON.parse("{\"buttonLabel\":\"Visa förslag\",\"countAnnouncement\":\"{optionCount, plural, one {# alternativ} other {# alternativ}} tillgängliga.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Ingick i gruppen {groupTitle} med {groupCount, plural, one {# alternativ} other {# alternativ}}. } other {}}{optionText}{isSelected, select, true {, valda} other {}}\",\"listboxLabel\":\"Förslag\",\"selectedAnnouncement\":\"{optionText}, valda\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/tr-TR.json | ||
var $cee59db5f22d3d988bb91129e61c1b$exports = {}; | ||
$cee59db5f22d3d988bb91129e61c1b$exports = JSON.parse("{\"buttonLabel\":\"Önerileri göster\",\"countAnnouncement\":\"{optionCount, plural, one {# seçenek} other {# seçenekler}} kullanılabilir.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Girilen grup {groupTitle}, ile {groupCount, plural, one {# seçenek} other {# seçenekler}}. } other {}}{optionText}{isSelected, select, true {, seçildi} other {}}\",\"listboxLabel\":\"Öneriler\",\"selectedAnnouncement\":\"{optionText}, seçildi\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/uk-UA.json | ||
var $dc5dd33b9d2d8eb21d5be848da84b518$exports = {}; | ||
$dc5dd33b9d2d8eb21d5be848da84b518$exports = JSON.parse("{\"buttonLabel\":\"Показати пропозиції\",\"countAnnouncement\":\"{optionCount, plural, one {# параметр} other {# параметри(-ів)}} доступно.\",\"focusAnnouncement\":\"{isGroupChange, select, true {Введена група {groupTitle}, з {groupCount, plural, one {# параметр} other {# параметри(-ів)}}. } other {}}{optionText}{isSelected, select, true {, вибрано} other {}}\",\"listboxLabel\":\"Пропозиції\",\"selectedAnnouncement\":\"{optionText}, вибрано\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/zh-CN.json | ||
var $b630874da1ff9a0aebc4f95508e93369$exports = {}; | ||
$b630874da1ff9a0aebc4f95508e93369$exports = JSON.parse("{\"buttonLabel\":\"显示建议\",\"countAnnouncement\":\"有 {optionCount, plural, one {# 个选项} other {# 个选项}}可用。\",\"focusAnnouncement\":\"{isGroupChange, select, true {进入了 {groupTitle} 组,其中有 {groupCount, plural, one {# 个选项} other {# 个选项}}. } other {}}{optionText}{isSelected, select, true {, 已选择} other {}}\",\"listboxLabel\":\"建议\",\"selectedAnnouncement\":\"{optionText}, 已选择\"}"); | ||
// ASSET: /home/circleci/react-spectrum/packages/@react-aria/combobox/intl/zh-TW.json | ||
var $da4492b53f7bfcb42b50dfd904cc8dc9$exports = {}; | ||
$da4492b53f7bfcb42b50dfd904cc8dc9$exports = JSON.parse("{\"buttonLabel\":\"顯示建議\",\"countAnnouncement\":\"{optionCount, plural, one {# 選項} other {# 選項}} 可用。\",\"focusAnnouncement\":\"{isGroupChange, select, true {輸入的群組 {groupTitle}, 有 {groupCount, plural, one {# 選項} other {# 選項}}. } other {}}{optionText}{isSelected, select, true {, 已選取} other {}}\",\"listboxLabel\":\"建議\",\"selectedAnnouncement\":\"{optionText}, 已選取\"}"); | ||
// @ts-ignore | ||
const $be26f9e765ed670e72d5b46ae9eff69a$var$intlMessages = { | ||
"ar-AE": _babelRuntimeHelpersEsmInteropRequireDefault($d78683a0e7fef7294b62031fc43054c6$exports).default, | ||
"bg-BG": _babelRuntimeHelpersEsmInteropRequireDefault($f98ae6ce2700d4a20c4e60ff9d68eed9$exports).default, | ||
"cs-CZ": _babelRuntimeHelpersEsmInteropRequireDefault($e18f88738dd7cf3410585df50c4a$exports).default, | ||
"da-DK": _babelRuntimeHelpersEsmInteropRequireDefault($bc87a01dd17f8e08d9b5f2d709d95ab$exports).default, | ||
"de-DE": _babelRuntimeHelpersEsmInteropRequireDefault($a2876bc991816077d10a6a3c448303e$exports).default, | ||
"el-GR": _babelRuntimeHelpersEsmInteropRequireDefault($b2fff3cd75c7191d2e6133d07588de86$exports).default, | ||
"en-US": _babelRuntimeHelpersEsmInteropRequireDefault($f1639f2754c31f58763b8cb015a6ecd6$exports).default, | ||
"es-ES": _babelRuntimeHelpersEsmInteropRequireDefault($f0fff8208defd2a975d21faa464abfd$exports).default, | ||
"et-EE": _babelRuntimeHelpersEsmInteropRequireDefault($c22ee6a7566d1cf5578bf8d4f5c2a6$exports).default, | ||
"fi-FI": _babelRuntimeHelpersEsmInteropRequireDefault($c0df15e7925dcb04d7c1787b03a5e$exports).default, | ||
"fr-FR": _babelRuntimeHelpersEsmInteropRequireDefault($b36e7dd5de5dec60de8490c4382ec$exports).default, | ||
"he-IL": _babelRuntimeHelpersEsmInteropRequireDefault($c0bb0e2e7b387fc7e7e478556f7f7d7$exports).default, | ||
"hr-HR": _babelRuntimeHelpersEsmInteropRequireDefault($c2ad6267acd85a3c0b84c89b176b1b$exports).default, | ||
"hu-HU": _babelRuntimeHelpersEsmInteropRequireDefault($b72435e6c734787569d9dde4943b4667$exports).default, | ||
"it-IT": _babelRuntimeHelpersEsmInteropRequireDefault($ec385ad6d76803c0e13ef3155a37731f$exports).default, | ||
"ja-JP": _babelRuntimeHelpersEsmInteropRequireDefault($f6712684539b6a07d53079e26b70d9df$exports).default, | ||
"ko-KR": _babelRuntimeHelpersEsmInteropRequireDefault($c670ae89d3913146f04a762d163$exports).default, | ||
"lt-LT": _babelRuntimeHelpersEsmInteropRequireDefault($a36750eea27db776e11cc103d172017$exports).default, | ||
"lv-LV": _babelRuntimeHelpersEsmInteropRequireDefault($e840ed8916bd1f210105d1fb3f88697$exports).default, | ||
"nb-NO": _babelRuntimeHelpersEsmInteropRequireDefault($a9d36ce32fd5aea219762aea75a1360$exports).default, | ||
"nl-NL": _babelRuntimeHelpersEsmInteropRequireDefault($c4a143186784391623f115223360f80$exports).default, | ||
"pl-PL": _babelRuntimeHelpersEsmInteropRequireDefault($a32834a3efc5c6ca32d91bd08$exports).default, | ||
"pt-BR": _babelRuntimeHelpersEsmInteropRequireDefault($e1b551c29bce2e3141bec9bc8b1ddba1$exports).default, | ||
"pt-PT": _babelRuntimeHelpersEsmInteropRequireDefault($e10cdad02310abdd1550ffa8b7db9ba$exports).default, | ||
"ro-RO": _babelRuntimeHelpersEsmInteropRequireDefault($ca354d1ee6bae344a049de3e819052c$exports).default, | ||
"ru-RU": _babelRuntimeHelpersEsmInteropRequireDefault($f7006032145148654e07a693955fb9c2$exports).default, | ||
"sk-SK": _babelRuntimeHelpersEsmInteropRequireDefault($c60520bb4ea0d2c95ea4b69dc1046132$exports).default, | ||
"sl-SI": _babelRuntimeHelpersEsmInteropRequireDefault($fd97d8e462e8521b6da71e6762a5c$exports).default, | ||
"sr-SP": _babelRuntimeHelpersEsmInteropRequireDefault($b615e8cf79bac7ecb7173b279f2a7$exports).default, | ||
"sv-SE": _babelRuntimeHelpersEsmInteropRequireDefault($f7c7084482b80ff47daa2804ba64c$exports).default, | ||
"tr-TR": _babelRuntimeHelpersEsmInteropRequireDefault($cee59db5f22d3d988bb91129e61c1b$exports).default, | ||
"uk-UA": _babelRuntimeHelpersEsmInteropRequireDefault($dc5dd33b9d2d8eb21d5be848da84b518$exports).default, | ||
"zh-CN": _babelRuntimeHelpersEsmInteropRequireDefault($b630874da1ff9a0aebc4f95508e93369$exports).default, | ||
"zh-TW": _babelRuntimeHelpersEsmInteropRequireDefault($da4492b53f7bfcb42b50dfd904cc8dc9$exports).default | ||
}; | ||
import {useComboBox as $c350ade66beef0af$export$8c18d1b4f7232bbf} from "./useComboBox.module.js"; | ||
/** | ||
* Provides the behavior and accessibility implementation for a combo box component. | ||
* A combo box combines a text input with a listbox, allowing users to filter a list of options to items matching a query. | ||
* @param props - Props for the combo box. | ||
* @param state - State for the select, as returned by `useComboBoxState`. | ||
*/ | ||
export function useComboBox(props, state) { | ||
var _focusedItem$parentKe, _state$selectionManag; | ||
/* | ||
* Copyright 2020 Adobe. All rights reserved. | ||
* This file is licensed to you under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. You may obtain a copy | ||
* of the License at http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software distributed under | ||
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
* OF ANY KIND, either express or implied. See the License for the specific language | ||
* governing permissions and limitations under the License. | ||
*/ | ||
let { | ||
buttonRef, | ||
popoverRef, | ||
inputRef, | ||
listBoxRef, | ||
keyboardDelegate, | ||
// completionMode = 'suggest', | ||
isReadOnly, | ||
isDisabled | ||
} = props; | ||
let formatMessage = useMessageFormatter($be26f9e765ed670e72d5b46ae9eff69a$var$intlMessages); | ||
let { | ||
menuTriggerProps, | ||
menuProps | ||
} = useMenuTrigger({ | ||
type: 'listbox' | ||
}, state, buttonRef); // Set listbox id so it can be used when calling getItemId later | ||
listData.set(state, { | ||
id: menuProps.id | ||
}); // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down). | ||
// When virtualized, the layout object will be passed in as a prop and override this. | ||
let delegate = useMemo(() => keyboardDelegate || new ListKeyboardDelegate(state.collection, state.disabledKeys, listBoxRef), [keyboardDelegate, state.collection, state.disabledKeys, listBoxRef]); // Use useSelectableCollection to get the keyboard handlers to apply to the textfield | ||
let { | ||
collectionProps | ||
} = useSelectableCollection({ | ||
selectionManager: state.selectionManager, | ||
keyboardDelegate: delegate, | ||
disallowTypeAhead: true, | ||
disallowEmptySelection: true, | ||
ref: inputRef | ||
}); // For textfield specific keydown operations | ||
let onKeyDown = e => { | ||
switch (e.key) { | ||
case 'Enter': | ||
case 'Tab': | ||
// Prevent form submission if menu is open since we may be selecting a option | ||
if (state.isOpen && e.key === 'Enter') { | ||
e.preventDefault(); | ||
} | ||
state.commit(); | ||
break; | ||
case 'Escape': | ||
state.revert(); | ||
break; | ||
case 'ArrowDown': | ||
state.open('first', 'manual'); | ||
break; | ||
case 'ArrowUp': | ||
state.open('last', 'manual'); | ||
break; | ||
case 'ArrowLeft': | ||
case 'ArrowRight': | ||
state.selectionManager.setFocusedKey(null); | ||
break; | ||
} | ||
}; | ||
let onBlur = e => { | ||
var _popoverRef$current; | ||
// Ignore blur if focused moved to the button or into the popover. | ||
if (e.relatedTarget === (buttonRef == null ? void 0 : buttonRef.current) || (_popoverRef$current = popoverRef.current) != null && _popoverRef$current.contains(e.relatedTarget)) { | ||
return; | ||
} | ||
if (props.onBlur) { | ||
props.onBlur(e); | ||
} | ||
state.setFocused(false); | ||
}; | ||
let onFocus = e => { | ||
if (state.isFocused) { | ||
return; | ||
} | ||
if (props.onFocus) { | ||
props.onFocus(e); | ||
} | ||
state.setFocused(true); | ||
}; | ||
let { | ||
labelProps, | ||
inputProps | ||
} = useTextField(_babelRuntimeHelpersEsmExtends({}, props, { | ||
onChange: state.setInputValue, | ||
onKeyDown: !isReadOnly && chain(state.isOpen && collectionProps.onKeyDown, onKeyDown), | ||
onBlur, | ||
value: state.inputValue, | ||
onFocus, | ||
autoComplete: 'off' | ||
}), inputRef); // Press handlers for the ComboBox button | ||
let onPress = e => { | ||
if (e.pointerType === 'touch') { | ||
// Focus the input field in case it isn't focused yet | ||
inputRef.current.focus(); | ||
state.toggle(null, 'manual'); | ||
} | ||
}; | ||
let onPressStart = e => { | ||
if (e.pointerType !== 'touch') { | ||
inputRef.current.focus(); | ||
state.toggle(e.pointerType === 'keyboard' || e.pointerType === 'virtual' ? 'first' : null, 'manual'); | ||
} | ||
}; | ||
let triggerLabelProps = useLabels({ | ||
id: menuTriggerProps.id, | ||
'aria-label': formatMessage('buttonLabel'), | ||
'aria-labelledby': props['aria-labelledby'] || labelProps.id | ||
}); | ||
let listBoxProps = useLabels({ | ||
id: menuProps.id, | ||
'aria-label': formatMessage('listboxLabel'), | ||
'aria-labelledby': props['aria-labelledby'] || labelProps.id | ||
}); // If a touch happens on direct center of ComboBox input, might be virtual click from iPad so open ComboBox menu | ||
let lastEventTime = useRef(0); | ||
let onTouchEnd = e => { | ||
if (isDisabled || isReadOnly) { | ||
return; | ||
} // Sometimes VoiceOver on iOS fires two touchend events in quick succession. Ignore the second one. | ||
if (e.timeStamp - lastEventTime.current < 500) { | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
return; | ||
} | ||
let rect = e.target.getBoundingClientRect(); | ||
let touch = e.changedTouches[0]; | ||
let centerX = Math.ceil(rect.left + .5 * rect.width); | ||
let centerY = Math.ceil(rect.top + .5 * rect.height); | ||
if (touch.clientX === centerX && touch.clientY === centerY) { | ||
e.preventDefault(); | ||
inputRef.current.focus(); | ||
state.toggle(null, 'manual'); | ||
lastEventTime.current = e.timeStamp; | ||
} | ||
}; // VoiceOver has issues with announcing aria-activedescendant properly on change | ||
// (especially on iOS). We use a live region announcer to announce focus changes | ||
// manually. In addition, section titles are announced when navigating into a new section. | ||
let focusedItem = state.selectionManager.focusedKey != null && state.isOpen ? state.collection.getItem(state.selectionManager.focusedKey) : undefined; | ||
let sectionKey = (_focusedItem$parentKe = focusedItem == null ? void 0 : focusedItem.parentKey) != null ? _focusedItem$parentKe : null; | ||
let itemKey = (_state$selectionManag = state.selectionManager.focusedKey) != null ? _state$selectionManag : null; | ||
let lastSection = useRef(sectionKey); | ||
let lastItem = useRef(itemKey); | ||
useEffect(() => { | ||
if (isAppleDevice() && focusedItem != null && itemKey !== lastItem.current) { | ||
let isSelected = state.selectionManager.isSelected(itemKey); | ||
let section = sectionKey != null ? state.collection.getItem(sectionKey) : null; | ||
let sectionTitle = (section == null ? void 0 : section['aria-label']) || (typeof (section == null ? void 0 : section.rendered) === 'string' ? section.rendered : '') || ''; | ||
let announcement = formatMessage('focusAnnouncement', { | ||
isGroupChange: section && sectionKey !== lastSection.current, | ||
groupTitle: sectionTitle, | ||
groupCount: section ? [...section.childNodes].length : 0, | ||
optionText: focusedItem['aria-label'] || focusedItem.textValue || '', | ||
isSelected | ||
}); | ||
announce(announcement); | ||
} | ||
lastSection.current = sectionKey; | ||
lastItem.current = itemKey; | ||
}); // Announce the number of available suggestions when it changes | ||
let optionCount = getItemCount(state.collection); | ||
let lastSize = useRef(optionCount); | ||
let lastOpen = useRef(state.isOpen); | ||
useEffect(() => { | ||
// Only announce the number of options available when the menu opens if there is no | ||
// focused item, otherwise screen readers will typically read e.g. "1 of 6". | ||
// The exception is VoiceOver since this isn't included in the message above. | ||
let didOpenWithoutFocusedItem = state.isOpen !== lastOpen.current && (state.selectionManager.focusedKey == null || isAppleDevice()); | ||
if (state.isOpen && (didOpenWithoutFocusedItem || optionCount !== lastSize.current)) { | ||
let announcement = formatMessage('countAnnouncement', { | ||
optionCount | ||
}); | ||
announce(announcement); | ||
} | ||
lastSize.current = optionCount; | ||
lastOpen.current = state.isOpen; | ||
}); // Announce when a selection occurs for VoiceOver. Other screen readers typically do this automatically. | ||
let lastSelectedKey = useRef(state.selectedKey); | ||
useEffect(() => { | ||
if (isAppleDevice() && state.isFocused && state.selectedItem && state.selectedKey !== lastSelectedKey.current) { | ||
let optionText = state.selectedItem['aria-label'] || state.selectedItem.textValue || ''; | ||
let announcement = formatMessage('selectedAnnouncement', { | ||
optionText | ||
}); | ||
announce(announcement); | ||
} | ||
lastSelectedKey.current = state.selectedKey; | ||
}); | ||
useEffect(() => { | ||
if (state.isOpen) { | ||
return ariaHideOutside([inputRef.current, popoverRef.current]); | ||
} | ||
}, [state.isOpen, inputRef, popoverRef]); | ||
return { | ||
labelProps, | ||
buttonProps: _babelRuntimeHelpersEsmExtends({}, menuTriggerProps, triggerLabelProps, { | ||
excludeFromTabOrder: true, | ||
onPress, | ||
onPressStart | ||
}), | ||
inputProps: mergeProps(inputProps, { | ||
role: 'combobox', | ||
'aria-expanded': menuTriggerProps['aria-expanded'], | ||
'aria-controls': state.isOpen ? menuProps.id : undefined, | ||
// TODO: readd proper logic for completionMode = complete (aria-autocomplete: both) | ||
'aria-autocomplete': 'list', | ||
'aria-activedescendant': focusedItem ? getItemId(state, focusedItem.key) : undefined, | ||
onTouchEnd, | ||
// This disable's iOS's autocorrect suggestions, since the combo box provides its own suggestions. | ||
autoCorrect: 'off', | ||
// This disable's the macOS Safari spell check auto corrections. | ||
spellCheck: 'false' | ||
}), | ||
listBoxProps: mergeProps(menuProps, listBoxProps, { | ||
autoFocus: state.focusStrategy, | ||
shouldUseVirtualFocus: true, | ||
shouldSelectOnPressUp: true, | ||
shouldFocusOnHover: true | ||
}) | ||
}; | ||
} | ||
export {$c350ade66beef0af$export$8c18d1b4f7232bbf as useComboBox}; | ||
//# sourceMappingURL=module.js.map |
import { AriaButtonProps } from "@react-types/button"; | ||
import { AriaComboBoxProps } from "@react-types/combobox"; | ||
import { AriaListBoxOptions } from "@react-aria/listbox"; | ||
import { ComboBoxProps } from "@react-types/combobox"; | ||
import { DOMAttributes, KeyboardDelegate, LayoutDelegate, RefObject, ValidationResult } from "@react-types/shared"; | ||
import { ComboBoxState } from "@react-stately/combobox"; | ||
import { HTMLAttributes, InputHTMLAttributes, RefObject } from "react"; | ||
import { KeyboardDelegate } from "@react-types/shared"; | ||
interface AriaComboBoxProps<T> extends ComboBoxProps<T> { | ||
import { InputHTMLAttributes } from "react"; | ||
export interface AriaComboBoxOptions<T> extends Omit<AriaComboBoxProps<T>, 'children'> { | ||
/** The ref for the input element. */ | ||
inputRef: RefObject<HTMLInputElement | HTMLTextAreaElement>; | ||
inputRef: RefObject<HTMLInputElement | null>; | ||
/** The ref for the list box popover. */ | ||
popoverRef: RefObject<HTMLDivElement>; | ||
popoverRef: RefObject<Element | null>; | ||
/** The ref for the list box. */ | ||
listBoxRef: RefObject<HTMLElement>; | ||
listBoxRef: RefObject<HTMLElement | null>; | ||
/** The ref for the optional list box popup trigger button. */ | ||
buttonRef?: RefObject<HTMLElement>; | ||
buttonRef?: RefObject<Element | null>; | ||
/** An optional keyboard delegate implementation, to override the default. */ | ||
keyboardDelegate?: KeyboardDelegate; | ||
/** | ||
* A delegate object that provides layout information for items in the collection. | ||
* By default this uses the DOM, but this can be overridden to implement things like | ||
* virtualized scrolling. | ||
*/ | ||
layoutDelegate?: LayoutDelegate; | ||
} | ||
interface ComboBoxAria<T> { | ||
export interface ComboBoxAria<T> extends ValidationResult { | ||
/** Props for the label element. */ | ||
labelProps: HTMLAttributes<HTMLElement>; | ||
labelProps: DOMAttributes; | ||
/** Props for the combo box input element. */ | ||
@@ -28,2 +34,6 @@ inputProps: InputHTMLAttributes<HTMLInputElement>; | ||
buttonProps: AriaButtonProps; | ||
/** Props for the combo box description element, if any. */ | ||
descriptionProps: DOMAttributes; | ||
/** Props for the combo box error message element, if any. */ | ||
errorMessageProps: DOMAttributes; | ||
} | ||
@@ -36,4 +46,5 @@ /** | ||
*/ | ||
export function useComboBox<T>(props: AriaComboBoxProps<T>, state: ComboBoxState<T>): ComboBoxAria<T>; | ||
export function useComboBox<T>(props: AriaComboBoxOptions<T>, state: ComboBoxState<T>): ComboBoxAria<T>; | ||
export type { AriaComboBoxProps } from '@react-types/combobox'; | ||
//# sourceMappingURL=types.d.ts.map |
{ | ||
"name": "@react-aria/combobox", | ||
"version": "3.0.0-nightly.2813+a05cbb945", | ||
"version": "3.0.0-nightly-641446f65-240905", | ||
"description": "Spectrum UI components in React", | ||
@@ -8,2 +8,7 @@ "license": "Apache-2.0", | ||
"module": "dist/module.js", | ||
"exports": { | ||
"types": "./dist/types.d.ts", | ||
"import": "./dist/import.mjs", | ||
"require": "./dist/main.js" | ||
}, | ||
"types": "dist/types.d.ts", | ||
@@ -21,21 +26,21 @@ "source": "src/index.ts", | ||
"dependencies": { | ||
"@babel/runtime": "^7.6.2", | ||
"@react-aria/i18n": "3.0.0-nightly.1128+a05cbb945", | ||
"@react-aria/interactions": "3.0.0-nightly.1128+a05cbb945", | ||
"@react-aria/listbox": "3.2.6-nightly.2813+a05cbb945", | ||
"@react-aria/live-announcer": "3.0.0-nightly.1128+a05cbb945", | ||
"@react-aria/menu": "3.2.3-nightly.2813+a05cbb945", | ||
"@react-aria/overlays": "3.0.0-nightly.1128+a05cbb945", | ||
"@react-aria/selection": "3.0.0-nightly.1128+a05cbb945", | ||
"@react-aria/textfield": "3.0.0-nightly.1128+a05cbb945", | ||
"@react-aria/utils": "3.0.0-nightly.1128+a05cbb945", | ||
"@react-stately/collections": "3.0.0-nightly.1128+a05cbb945", | ||
"@react-stately/combobox": "3.0.0-nightly.2813+a05cbb945", | ||
"@react-stately/layout": "3.3.2-nightly.2813+a05cbb945", | ||
"@react-types/button": "3.4.1-nightly.2813+a05cbb945", | ||
"@react-types/combobox": "3.0.0-nightly.2813+a05cbb945", | ||
"@react-types/shared": "3.0.0-nightly.1128+a05cbb945" | ||
"@react-aria/i18n": "^3.0.0-nightly-641446f65-240905", | ||
"@react-aria/listbox": "^3.0.0-nightly-641446f65-240905", | ||
"@react-aria/live-announcer": "^3.0.0-nightly-641446f65-240905", | ||
"@react-aria/menu": "^3.0.0-nightly-641446f65-240905", | ||
"@react-aria/overlays": "^3.0.0-nightly-641446f65-240905", | ||
"@react-aria/selection": "^3.0.0-nightly-641446f65-240905", | ||
"@react-aria/textfield": "^3.0.0-nightly-641446f65-240905", | ||
"@react-aria/utils": "^3.0.0-nightly-641446f65-240905", | ||
"@react-stately/collections": "^3.0.0-nightly-641446f65-240905", | ||
"@react-stately/combobox": "^3.0.0-nightly-641446f65-240905", | ||
"@react-stately/form": "^3.0.0-nightly-641446f65-240905", | ||
"@react-types/button": "^3.0.0-nightly-641446f65-240905", | ||
"@react-types/combobox": "^3.0.0-nightly-641446f65-240905", | ||
"@react-types/shared": "^3.0.0-nightly-641446f65-240905", | ||
"@swc/helpers": "^0.5.0" | ||
}, | ||
"peerDependencies": { | ||
"react": "^16.8.0 || ^17.0.0-rc.1" | ||
"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" | ||
}, | ||
@@ -45,3 +50,3 @@ "publishConfig": { | ||
}, | ||
"gitHead": "a05cbb945c22d66c84eea5b1288fe7fc0e9cbce4" | ||
} | ||
"stableVersion": "3.10.3" | ||
} |
@@ -6,3 +6,3 @@ /* | ||
* of the License at http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* | ||
* Unless required by applicable law or agreed to in writing, software distributed under | ||
@@ -13,3 +13,4 @@ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
*/ | ||
export * from './useComboBox'; | ||
export {useComboBox} from './useComboBox'; | ||
export type {AriaComboBoxOptions, ComboBoxAria} from './useComboBox'; | ||
export type {AriaComboBoxProps} from '@react-types/combobox'; |
@@ -15,33 +15,40 @@ /* | ||
import {AriaButtonProps} from '@react-types/button'; | ||
import {AriaComboBoxProps} from '@react-types/combobox'; | ||
import {ariaHideOutside} from '@react-aria/overlays'; | ||
import {AriaListBoxOptions, getItemId, listData} from '@react-aria/listbox'; | ||
import {chain, isAppleDevice, mergeProps, useLabels} from '@react-aria/utils'; | ||
import {ComboBoxProps} from '@react-types/combobox'; | ||
import {BaseEvent, DOMAttributes, KeyboardDelegate, LayoutDelegate, PressEvent, RefObject, RouterOptions, ValidationResult} from '@react-types/shared'; | ||
import {chain, isAppleDevice, mergeProps, useLabels, useRouter} from '@react-aria/utils'; | ||
import {ComboBoxState} from '@react-stately/combobox'; | ||
import {FocusEvent, HTMLAttributes, InputHTMLAttributes, KeyboardEvent, RefObject, TouchEvent, useEffect, useMemo, useRef} from 'react'; | ||
import {getItemCount} from '@react-stately/collections'; | ||
import {FocusEvent, InputHTMLAttributes, KeyboardEvent, TouchEvent, useEffect, useMemo, useRef} from 'react'; | ||
import {getChildNodes, getItemCount} from '@react-stately/collections'; | ||
// @ts-ignore | ||
import intlMessages from '../intl/*.json'; | ||
import {KeyboardDelegate, PressEvent} from '@react-types/shared'; | ||
import {ListKeyboardDelegate, useSelectableCollection} from '@react-aria/selection'; | ||
import {privateValidationStateProp} from '@react-stately/form'; | ||
import {useLocalizedStringFormatter} from '@react-aria/i18n'; | ||
import {useMenuTrigger} from '@react-aria/menu'; | ||
import {useMessageFormatter} from '@react-aria/i18n'; | ||
import {useTextField} from '@react-aria/textfield'; | ||
interface AriaComboBoxProps<T> extends ComboBoxProps<T> { | ||
export interface AriaComboBoxOptions<T> extends Omit<AriaComboBoxProps<T>, 'children'> { | ||
/** The ref for the input element. */ | ||
inputRef: RefObject<HTMLInputElement | HTMLTextAreaElement>, | ||
inputRef: RefObject<HTMLInputElement | null>, | ||
/** The ref for the list box popover. */ | ||
popoverRef: RefObject<HTMLDivElement>, | ||
popoverRef: RefObject<Element | null>, | ||
/** The ref for the list box. */ | ||
listBoxRef: RefObject<HTMLElement>, | ||
listBoxRef: RefObject<HTMLElement | null>, | ||
/** The ref for the optional list box popup trigger button. */ | ||
buttonRef?: RefObject<HTMLElement>, | ||
buttonRef?: RefObject<Element | null>, | ||
/** An optional keyboard delegate implementation, to override the default. */ | ||
keyboardDelegate?: KeyboardDelegate | ||
keyboardDelegate?: KeyboardDelegate, | ||
/** | ||
* A delegate object that provides layout information for items in the collection. | ||
* By default this uses the DOM, but this can be overridden to implement things like | ||
* virtualized scrolling. | ||
*/ | ||
layoutDelegate?: LayoutDelegate | ||
} | ||
interface ComboBoxAria<T> { | ||
export interface ComboBoxAria<T> extends ValidationResult { | ||
/** Props for the label element. */ | ||
labelProps: HTMLAttributes<HTMLElement>, | ||
labelProps: DOMAttributes, | ||
/** Props for the combo box input element. */ | ||
@@ -52,3 +59,7 @@ inputProps: InputHTMLAttributes<HTMLInputElement>, | ||
/** Props for the optional trigger button, to be passed to [useButton](useButton.html). */ | ||
buttonProps: AriaButtonProps | ||
buttonProps: AriaButtonProps, | ||
/** Props for the combo box description element, if any. */ | ||
descriptionProps: DOMAttributes, | ||
/** Props for the combo box error message element, if any. */ | ||
errorMessageProps: DOMAttributes | ||
} | ||
@@ -62,3 +73,3 @@ | ||
*/ | ||
export function useComboBox<T>(props: AriaComboBoxProps<T>, state: ComboBoxState<T>): ComboBoxAria<T> { | ||
export function useComboBox<T>(props: AriaComboBoxOptions<T>, state: ComboBoxState<T>): ComboBoxAria<T> { | ||
let { | ||
@@ -70,3 +81,5 @@ buttonRef, | ||
keyboardDelegate, | ||
layoutDelegate, | ||
// completionMode = 'suggest', | ||
shouldFocusWrap, | ||
isReadOnly, | ||
@@ -76,6 +89,7 @@ isDisabled | ||
let formatMessage = useMessageFormatter(intlMessages); | ||
let {menuTriggerProps, menuProps} = useMenuTrigger( | ||
let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/combobox'); | ||
let {menuTriggerProps, menuProps} = useMenuTrigger<T>( | ||
{ | ||
type: 'listbox' | ||
type: 'listbox', | ||
isDisabled: isDisabled || isReadOnly | ||
}, | ||
@@ -91,6 +105,12 @@ state, | ||
// When virtualized, the layout object will be passed in as a prop and override this. | ||
let delegate = useMemo(() => | ||
keyboardDelegate || | ||
new ListKeyboardDelegate(state.collection, state.disabledKeys, listBoxRef) | ||
, [keyboardDelegate, state.collection, state.disabledKeys, listBoxRef]); | ||
let {collection} = state; | ||
let {disabledKeys} = state.selectionManager; | ||
let delegate = useMemo(() => ( | ||
keyboardDelegate || new ListKeyboardDelegate({ | ||
collection, | ||
disabledKeys, | ||
ref: listBoxRef, | ||
layoutDelegate | ||
}) | ||
), [keyboardDelegate, layoutDelegate, collection, disabledKeys, listBoxRef]); | ||
@@ -103,7 +123,15 @@ // Use useSelectableCollection to get the keyboard handlers to apply to the textfield | ||
disallowEmptySelection: true, | ||
ref: inputRef | ||
shouldFocusWrap, | ||
ref: inputRef, | ||
// Prevent item scroll behavior from being applied here, should be handled in the user's Popover + ListBox component | ||
isVirtualized: true | ||
}); | ||
let router = useRouter(); | ||
// For textfield specific keydown operations | ||
let onKeyDown = (e: KeyboardEvent) => { | ||
let onKeyDown = (e: BaseEvent<KeyboardEvent<any>>) => { | ||
if (e.nativeEvent.isComposing) { | ||
return; | ||
} | ||
switch (e.key) { | ||
@@ -117,5 +145,25 @@ case 'Enter': | ||
state.commit(); | ||
// 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 as RouterOptions); | ||
} | ||
} | ||
state.close(); | ||
} else { | ||
state.commit(); | ||
} | ||
break; | ||
case 'Escape': | ||
if ( | ||
state.selectedKey !== null || | ||
state.inputValue === '' || | ||
props.allowsCustomValue | ||
) { | ||
e.continuePropagation(); | ||
} | ||
state.revert(); | ||
@@ -136,5 +184,7 @@ break; | ||
let onBlur = (e: FocusEvent) => { | ||
// Ignore blur if focused moved to the button or into the popover. | ||
if (e.relatedTarget === buttonRef?.current || popoverRef.current?.contains(e.relatedTarget as HTMLElement)) { | ||
let onBlur = (e: FocusEvent<HTMLInputElement>) => { | ||
let blurFromButton = buttonRef?.current && buttonRef.current === e.relatedTarget; | ||
let blurIntoPopover = popoverRef.current?.contains(e.relatedTarget); | ||
// Ignore blur if focused moved to the button(if exists) or into the popover. | ||
if (blurFromButton || blurIntoPopover) { | ||
return; | ||
@@ -150,3 +200,3 @@ } | ||
let onFocus = (e: FocusEvent) => { | ||
let onFocus = (e: FocusEvent<HTMLInputElement>) => { | ||
if (state.isFocused) { | ||
@@ -163,10 +213,13 @@ return; | ||
let {labelProps, inputProps} = useTextField({ | ||
let {isInvalid, validationErrors, validationDetails} = state.displayValidation; | ||
let {labelProps, inputProps, descriptionProps, errorMessageProps} = useTextField({ | ||
...props, | ||
onChange: state.setInputValue, | ||
onKeyDown: !isReadOnly && chain(state.isOpen && collectionProps.onKeyDown, onKeyDown), | ||
onKeyDown: !isReadOnly ? chain(state.isOpen && collectionProps.onKeyDown, onKeyDown, props.onKeyDown) : props.onKeyDown, | ||
onBlur, | ||
value: state.inputValue, | ||
onFocus, | ||
autoComplete: 'off' | ||
autoComplete: 'off', | ||
validate: undefined, | ||
[privateValidationStateProp]: state | ||
}, inputRef); | ||
@@ -192,3 +245,3 @@ | ||
id: menuTriggerProps.id, | ||
'aria-label': formatMessage('buttonLabel'), | ||
'aria-label': stringFormatter.format('buttonLabel'), | ||
'aria-labelledby': props['aria-labelledby'] || labelProps.id | ||
@@ -199,3 +252,3 @@ }); | ||
id: menuProps.id, | ||
'aria-label': formatMessage('listboxLabel'), | ||
'aria-label': stringFormatter.format('listboxLabel'), | ||
'aria-labelledby': props['aria-labelledby'] || labelProps.id | ||
@@ -218,3 +271,3 @@ }); | ||
let rect = (e.target as HTMLElement).getBoundingClientRect(); | ||
let rect = (e.target as Element).getBoundingClientRect(); | ||
let touch = e.changedTouches[0]; | ||
@@ -250,6 +303,6 @@ | ||
let announcement = formatMessage('focusAnnouncement', { | ||
let announcement = stringFormatter.format('focusAnnouncement', { | ||
isGroupChange: section && sectionKey !== lastSection.current, | ||
groupTitle: sectionTitle, | ||
groupCount: section ? [...section.childNodes].length : 0, | ||
groupCount: section ? [...getChildNodes(section, state.collection)].length : 0, | ||
optionText: focusedItem['aria-label'] || focusedItem.textValue || '', | ||
@@ -279,3 +332,3 @@ isSelected | ||
if (state.isOpen && (didOpenWithoutFocusedItem || optionCount !== lastSize.current)) { | ||
let announcement = formatMessage('countAnnouncement', {optionCount}); | ||
let announcement = stringFormatter.format('countAnnouncement', {optionCount}); | ||
announce(announcement); | ||
@@ -293,3 +346,3 @@ } | ||
let optionText = state.selectedItem['aria-label'] || state.selectedItem.textValue || ''; | ||
let announcement = formatMessage('selectedAnnouncement', {optionText}); | ||
let announcement = stringFormatter.format('selectedAnnouncement', {optionText}); | ||
announce(announcement); | ||
@@ -313,4 +366,6 @@ } | ||
excludeFromTabOrder: true, | ||
preventFocusOnPress: true, | ||
onPress, | ||
onPressStart | ||
onPressStart, | ||
isDisabled: isDisabled || isReadOnly | ||
}, | ||
@@ -334,5 +389,11 @@ inputProps: mergeProps(inputProps, { | ||
shouldSelectOnPressUp: true, | ||
shouldFocusOnHover: true | ||
}) | ||
shouldFocusOnHover: true, | ||
linkBehavior: 'selection' as const | ||
}), | ||
descriptionProps, | ||
errorMessageProps, | ||
isInvalid, | ||
validationErrors, | ||
validationDetails | ||
}; | ||
} |
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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
349229
191
3688
+ Added@swc/helpers@^0.5.0
+ Added@formatjs/ecma402-abstract@2.0.0(transitive)
+ Added@formatjs/fast-memoize@2.2.0(transitive)
+ Added@formatjs/icu-messageformat-parser@2.7.8(transitive)
+ Added@formatjs/icu-skeleton-parser@1.8.2(transitive)
+ Added@formatjs/intl-localematcher@0.5.4(transitive)
+ Added@internationalized/date@3.5.5(transitive)
+ Added@internationalized/message@3.1.4(transitive)
+ Added@internationalized/number@3.5.3(transitive)
+ Added@internationalized/string@3.2.3(transitive)
+ Added@react-aria/focus@3.18.2(transitive)
+ Added@react-aria/form@3.0.8(transitive)
+ Added@react-aria/i18n@3.12.2(transitive)
+ Added@react-aria/interactions@3.22.2(transitive)
+ Added@react-aria/label@3.7.11(transitive)
+ Added@react-aria/listbox@3.13.3(transitive)
+ Added@react-aria/live-announcer@3.3.4(transitive)
+ Added@react-aria/menu@3.15.3(transitive)
+ Added@react-aria/overlays@3.23.2(transitive)
+ Added@react-aria/selection@3.19.3(transitive)
+ Added@react-aria/ssr@3.9.5(transitive)
+ Added@react-aria/textfield@3.14.8(transitive)
+ Added@react-aria/utils@3.25.2(transitive)
+ Added@react-aria/visually-hidden@3.8.15(transitive)
+ Added@react-stately/collections@3.10.9(transitive)
+ Added@react-stately/combobox@3.9.2(transitive)
+ Added@react-stately/form@3.0.5(transitive)
+ Added@react-stately/list@3.10.8(transitive)
+ Added@react-stately/menu@3.8.2(transitive)
+ Added@react-stately/overlays@3.6.10(transitive)
+ Added@react-stately/select@3.6.7(transitive)
+ Added@react-stately/selection@3.16.2(transitive)
+ Added@react-stately/tree@3.8.4(transitive)
+ Added@react-stately/utils@3.10.3(transitive)
+ Added@react-types/button@3.9.6(transitive)
+ Added@react-types/combobox@3.12.1(transitive)
+ Added@react-types/listbox@3.5.1(transitive)
+ Added@react-types/menu@3.9.11(transitive)
+ Added@react-types/overlays@3.8.9(transitive)
+ Added@react-types/select@3.9.6(transitive)
+ Added@react-types/shared@3.24.1(transitive)
+ Added@react-types/textfield@3.9.6(transitive)
+ Added@swc/helpers@0.5.13(transitive)
+ Addedclsx@2.1.1(transitive)
+ Addedintl-messageformat@10.5.14(transitive)
+ Addedreact@18.3.1(transitive)
+ Addedreact-dom@18.3.1(transitive)
+ Addedscheduler@0.23.2(transitive)
+ Addedtslib@2.7.0(transitive)
- Removed@babel/runtime@^7.6.2
- Removed@react-aria/interactions@3.0.0-nightly.1128+a05cbb945
- Removed@babel/runtime@7.25.6(transitive)
- Removedobject-assign@4.1.1(transitive)
- Removedreact@17.0.2(transitive)
- Removedregenerator-runtime@0.14.1(transitive)
Updated@react-aria/live-announcer@^3.0.0-nightly-641446f65-240905
Updated@react-aria/selection@^3.0.0-nightly-641446f65-240905
Updated@react-aria/textfield@^3.0.0-nightly-641446f65-240905
Updated@react-stately/collections@^3.0.0-nightly-641446f65-240905
Updated@react-stately/combobox@^3.0.0-nightly-641446f65-240905
Updated@react-types/combobox@^3.0.0-nightly-641446f65-240905