@react-spectrum/picker 3.16.7 → 3.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/dist/import.mjs +5 -3
  2. package/dist/main.js +7 -5
  3. package/dist/main.js.map +1 -1
  4. package/dist/module.js +5 -3
  5. package/dist/module.js.map +1 -1
  6. package/dist/types/src/index.d.ts +4 -0
  7. package/package.json +14 -42
  8. package/src/index.ts +5 -3
  9. package/dist/Picker.main.js +0 -230
  10. package/dist/Picker.main.js.map +0 -1
  11. package/dist/Picker.mjs +0 -225
  12. package/dist/Picker.module.js +0 -225
  13. package/dist/Picker.module.js.map +0 -1
  14. package/dist/ar-AE.main.js +0 -7
  15. package/dist/ar-AE.main.js.map +0 -1
  16. package/dist/ar-AE.mjs +0 -9
  17. package/dist/ar-AE.module.js +0 -9
  18. package/dist/ar-AE.module.js.map +0 -1
  19. package/dist/bg-BG.main.js +0 -7
  20. package/dist/bg-BG.main.js.map +0 -1
  21. package/dist/bg-BG.mjs +0 -9
  22. package/dist/bg-BG.module.js +0 -9
  23. package/dist/bg-BG.module.js.map +0 -1
  24. package/dist/cs-CZ.main.js +0 -7
  25. package/dist/cs-CZ.main.js.map +0 -1
  26. package/dist/cs-CZ.mjs +0 -9
  27. package/dist/cs-CZ.module.js +0 -9
  28. package/dist/cs-CZ.module.js.map +0 -1
  29. package/dist/da-DK.main.js +0 -7
  30. package/dist/da-DK.main.js.map +0 -1
  31. package/dist/da-DK.mjs +0 -9
  32. package/dist/da-DK.module.js +0 -9
  33. package/dist/da-DK.module.js.map +0 -1
  34. package/dist/de-DE.main.js +0 -7
  35. package/dist/de-DE.main.js.map +0 -1
  36. package/dist/de-DE.mjs +0 -9
  37. package/dist/de-DE.module.js +0 -9
  38. package/dist/de-DE.module.js.map +0 -1
  39. package/dist/dropdown_vars_css.main.js +0 -77
  40. package/dist/dropdown_vars_css.main.js.map +0 -1
  41. package/dist/dropdown_vars_css.mjs +0 -79
  42. package/dist/dropdown_vars_css.module.js +0 -79
  43. package/dist/dropdown_vars_css.module.js.map +0 -1
  44. package/dist/el-GR.main.js +0 -7
  45. package/dist/el-GR.main.js.map +0 -1
  46. package/dist/el-GR.mjs +0 -9
  47. package/dist/el-GR.module.js +0 -9
  48. package/dist/el-GR.module.js.map +0 -1
  49. package/dist/en-US.main.js +0 -7
  50. package/dist/en-US.main.js.map +0 -1
  51. package/dist/en-US.mjs +0 -9
  52. package/dist/en-US.module.js +0 -9
  53. package/dist/en-US.module.js.map +0 -1
  54. package/dist/es-ES.main.js +0 -7
  55. package/dist/es-ES.main.js.map +0 -1
  56. package/dist/es-ES.mjs +0 -9
  57. package/dist/es-ES.module.js +0 -9
  58. package/dist/es-ES.module.js.map +0 -1
  59. package/dist/et-EE.main.js +0 -7
  60. package/dist/et-EE.main.js.map +0 -1
  61. package/dist/et-EE.mjs +0 -9
  62. package/dist/et-EE.module.js +0 -9
  63. package/dist/et-EE.module.js.map +0 -1
  64. package/dist/fi-FI.main.js +0 -7
  65. package/dist/fi-FI.main.js.map +0 -1
  66. package/dist/fi-FI.mjs +0 -9
  67. package/dist/fi-FI.module.js +0 -9
  68. package/dist/fi-FI.module.js.map +0 -1
  69. package/dist/fr-FR.main.js +0 -7
  70. package/dist/fr-FR.main.js.map +0 -1
  71. package/dist/fr-FR.mjs +0 -9
  72. package/dist/fr-FR.module.js +0 -9
  73. package/dist/fr-FR.module.js.map +0 -1
  74. package/dist/he-IL.main.js +0 -7
  75. package/dist/he-IL.main.js.map +0 -1
  76. package/dist/he-IL.mjs +0 -9
  77. package/dist/he-IL.module.js +0 -9
  78. package/dist/he-IL.module.js.map +0 -1
  79. package/dist/hr-HR.main.js +0 -7
  80. package/dist/hr-HR.main.js.map +0 -1
  81. package/dist/hr-HR.mjs +0 -9
  82. package/dist/hr-HR.module.js +0 -9
  83. package/dist/hr-HR.module.js.map +0 -1
  84. package/dist/hu-HU.main.js +0 -7
  85. package/dist/hu-HU.main.js.map +0 -1
  86. package/dist/hu-HU.mjs +0 -9
  87. package/dist/hu-HU.module.js +0 -9
  88. package/dist/hu-HU.module.js.map +0 -1
  89. package/dist/intlStrings.main.js +0 -108
  90. package/dist/intlStrings.main.js.map +0 -1
  91. package/dist/intlStrings.mjs +0 -110
  92. package/dist/intlStrings.module.js +0 -110
  93. package/dist/intlStrings.module.js.map +0 -1
  94. package/dist/it-IT.main.js +0 -7
  95. package/dist/it-IT.main.js.map +0 -1
  96. package/dist/it-IT.mjs +0 -9
  97. package/dist/it-IT.module.js +0 -9
  98. package/dist/it-IT.module.js.map +0 -1
  99. package/dist/ja-JP.main.js +0 -7
  100. package/dist/ja-JP.main.js.map +0 -1
  101. package/dist/ja-JP.mjs +0 -9
  102. package/dist/ja-JP.module.js +0 -9
  103. package/dist/ja-JP.module.js.map +0 -1
  104. package/dist/ko-KR.main.js +0 -7
  105. package/dist/ko-KR.main.js.map +0 -1
  106. package/dist/ko-KR.mjs +0 -9
  107. package/dist/ko-KR.module.js +0 -9
  108. package/dist/ko-KR.module.js.map +0 -1
  109. package/dist/lt-LT.main.js +0 -7
  110. package/dist/lt-LT.main.js.map +0 -1
  111. package/dist/lt-LT.mjs +0 -9
  112. package/dist/lt-LT.module.js +0 -9
  113. package/dist/lt-LT.module.js.map +0 -1
  114. package/dist/lv-LV.main.js +0 -7
  115. package/dist/lv-LV.main.js.map +0 -1
  116. package/dist/lv-LV.mjs +0 -9
  117. package/dist/lv-LV.module.js +0 -9
  118. package/dist/lv-LV.module.js.map +0 -1
  119. package/dist/nb-NO.main.js +0 -7
  120. package/dist/nb-NO.main.js.map +0 -1
  121. package/dist/nb-NO.mjs +0 -9
  122. package/dist/nb-NO.module.js +0 -9
  123. package/dist/nb-NO.module.js.map +0 -1
  124. package/dist/nl-NL.main.js +0 -7
  125. package/dist/nl-NL.main.js.map +0 -1
  126. package/dist/nl-NL.mjs +0 -9
  127. package/dist/nl-NL.module.js +0 -9
  128. package/dist/nl-NL.module.js.map +0 -1
  129. package/dist/picker.6ed9ee86.css +0 -288
  130. package/dist/picker.6ed9ee86.css.map +0 -1
  131. package/dist/pl-PL.main.js +0 -7
  132. package/dist/pl-PL.main.js.map +0 -1
  133. package/dist/pl-PL.mjs +0 -9
  134. package/dist/pl-PL.module.js +0 -9
  135. package/dist/pl-PL.module.js.map +0 -1
  136. package/dist/pt-BR.main.js +0 -7
  137. package/dist/pt-BR.main.js.map +0 -1
  138. package/dist/pt-BR.mjs +0 -9
  139. package/dist/pt-BR.module.js +0 -9
  140. package/dist/pt-BR.module.js.map +0 -1
  141. package/dist/pt-PT.main.js +0 -7
  142. package/dist/pt-PT.main.js.map +0 -1
  143. package/dist/pt-PT.mjs +0 -9
  144. package/dist/pt-PT.module.js +0 -9
  145. package/dist/pt-PT.module.js.map +0 -1
  146. package/dist/ro-RO.main.js +0 -7
  147. package/dist/ro-RO.main.js.map +0 -1
  148. package/dist/ro-RO.mjs +0 -9
  149. package/dist/ro-RO.module.js +0 -9
  150. package/dist/ro-RO.module.js.map +0 -1
  151. package/dist/ru-RU.main.js +0 -7
  152. package/dist/ru-RU.main.js.map +0 -1
  153. package/dist/ru-RU.mjs +0 -9
  154. package/dist/ru-RU.module.js +0 -9
  155. package/dist/ru-RU.module.js.map +0 -1
  156. package/dist/sk-SK.main.js +0 -7
  157. package/dist/sk-SK.main.js.map +0 -1
  158. package/dist/sk-SK.mjs +0 -9
  159. package/dist/sk-SK.module.js +0 -9
  160. package/dist/sk-SK.module.js.map +0 -1
  161. package/dist/sl-SI.main.js +0 -7
  162. package/dist/sl-SI.main.js.map +0 -1
  163. package/dist/sl-SI.mjs +0 -9
  164. package/dist/sl-SI.module.js +0 -9
  165. package/dist/sl-SI.module.js.map +0 -1
  166. package/dist/sr-SP.main.js +0 -7
  167. package/dist/sr-SP.main.js.map +0 -1
  168. package/dist/sr-SP.mjs +0 -9
  169. package/dist/sr-SP.module.js +0 -9
  170. package/dist/sr-SP.module.js.map +0 -1
  171. package/dist/sv-SE.main.js +0 -7
  172. package/dist/sv-SE.main.js.map +0 -1
  173. package/dist/sv-SE.mjs +0 -9
  174. package/dist/sv-SE.module.js +0 -9
  175. package/dist/sv-SE.module.js.map +0 -1
  176. package/dist/tr-TR.main.js +0 -7
  177. package/dist/tr-TR.main.js.map +0 -1
  178. package/dist/tr-TR.mjs +0 -9
  179. package/dist/tr-TR.module.js +0 -9
  180. package/dist/tr-TR.module.js.map +0 -1
  181. package/dist/types.d.ts +0 -13
  182. package/dist/types.d.ts.map +0 -1
  183. package/dist/uk-UA.main.js +0 -7
  184. package/dist/uk-UA.main.js.map +0 -1
  185. package/dist/uk-UA.mjs +0 -9
  186. package/dist/uk-UA.module.js +0 -9
  187. package/dist/uk-UA.module.js.map +0 -1
  188. package/dist/zh-CN.main.js +0 -7
  189. package/dist/zh-CN.main.js.map +0 -1
  190. package/dist/zh-CN.mjs +0 -9
  191. package/dist/zh-CN.module.js +0 -9
  192. package/dist/zh-CN.module.js.map +0 -1
  193. package/dist/zh-TW.main.js +0 -7
  194. package/dist/zh-TW.main.js.map +0 -1
  195. package/dist/zh-TW.mjs +0 -9
  196. package/dist/zh-TW.module.js +0 -9
  197. package/dist/zh-TW.module.js.map +0 -1
  198. package/src/Picker.tsx +0 -254
@@ -1 +0,0 @@
1
- {"mappings":"AAAA,iBAAiB;IAAG,WAAW,CAAC,gBAAa,CAAC;IAC5C,eAAe,CAAC,gBAAM,CAAC;AACzB","sources":["packages/@react-spectrum/picker/intl/tr-TR.json"],"sourcesContent":["{\n \"loading\": \"Yükleniyor...\",\n \"placeholder\": \"Seçin…\"\n}\n"],"names":[],"version":3,"file":"tr-TR.main.js.map"}
package/dist/tr-TR.mjs DELETED
@@ -1,9 +0,0 @@
1
- var $1ff90abddf42fc72$exports = {};
2
- $1ff90abddf42fc72$exports = {
3
- "loading": `Y\xfckleniyor...`,
4
- "placeholder": `Se\xe7in\u{2026}`
5
- };
6
-
7
-
8
- export {$1ff90abddf42fc72$exports as default};
9
- //# sourceMappingURL=tr-TR.module.js.map
@@ -1,9 +0,0 @@
1
- var $1ff90abddf42fc72$exports = {};
2
- $1ff90abddf42fc72$exports = {
3
- "loading": `Y\xfckleniyor...`,
4
- "placeholder": `Se\xe7in\u{2026}`
5
- };
6
-
7
-
8
- export {$1ff90abddf42fc72$exports as default};
9
- //# sourceMappingURL=tr-TR.module.js.map
@@ -1 +0,0 @@
1
- {"mappings":";AAAA,4BAAiB;IAAG,WAAW,CAAC,gBAAa,CAAC;IAC5C,eAAe,CAAC,gBAAM,CAAC;AACzB","sources":["packages/@react-spectrum/picker/intl/tr-TR.json"],"sourcesContent":["{\n \"loading\": \"Yükleniyor...\",\n \"placeholder\": \"Seçin…\"\n}\n"],"names":[],"version":3,"file":"tr-TR.module.js.map"}
package/dist/types.d.ts DELETED
@@ -1,13 +0,0 @@
1
- import { DOMRef } from "@react-types/shared";
2
- import { ReactElement } from "react";
3
- import { SpectrumPickerProps } from "@react-types/select";
4
- /**
5
- * Pickers allow users to choose a single option from a collapsible list of options when space is limited.
6
- */
7
- export const Picker: <T>(props: SpectrumPickerProps<T> & {
8
- ref?: DOMRef<HTMLDivElement>;
9
- }) => ReactElement;
10
- export { Item, Section } from '@react-stately/collections';
11
- export type { SpectrumPickerProps } from '@react-types/select';
12
-
13
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"mappings":";;;AA2CA;;GAEG;AAGH,OAAO,MAAM,QA6MP,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,GAAG;IAAC,GAAG,CAAC,EAAE,OAAO,cAAc,CAAC,CAAA;CAAC,KAAK,YAAY,CAAC;AC9O1F,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,4BAA4B,CAAC;AACzD,YAAY,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC","sources":["packages/@react-spectrum/picker/src/packages/@react-spectrum/picker/src/Picker.tsx","packages/@react-spectrum/picker/src/packages/@react-spectrum/picker/src/index.ts","packages/@react-spectrum/picker/src/index.ts"],"sourcesContent":[null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/// <reference types=\"css-module-types\" />\n\nexport {Picker} from './Picker';\nexport {Item, Section} from '@react-stately/collections';\nexport type {SpectrumPickerProps} from '@react-types/select';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
@@ -1,7 +0,0 @@
1
- module.exports = {
2
- "loading": `\u{417}\u{430}\u{432}\u{430}\u{43D}\u{442}\u{430}\u{436}\u{435}\u{43D}\u{43D}\u{44F}\u{2026}`,
3
- "placeholder": `\u{412}\u{438}\u{431}\u{440}\u{430}\u{442}\u{438}\u{2026}`
4
- };
5
-
6
-
7
- //# sourceMappingURL=uk-UA.main.js.map
@@ -1 +0,0 @@
1
- {"mappings":"AAAA,iBAAiB;IAAG,WAAW,CAAC,4FAAa,CAAC;IAC5C,eAAe,CAAC,yDAAQ,CAAC;AAC3B","sources":["packages/@react-spectrum/picker/intl/uk-UA.json"],"sourcesContent":["{\n \"loading\": \"Завантаження…\",\n \"placeholder\": \"Вибрати…\"\n}\n"],"names":[],"version":3,"file":"uk-UA.main.js.map"}
package/dist/uk-UA.mjs DELETED
@@ -1,9 +0,0 @@
1
- var $4f07d8c17926a679$exports = {};
2
- $4f07d8c17926a679$exports = {
3
- "loading": `\u{417}\u{430}\u{432}\u{430}\u{43D}\u{442}\u{430}\u{436}\u{435}\u{43D}\u{43D}\u{44F}\u{2026}`,
4
- "placeholder": `\u{412}\u{438}\u{431}\u{440}\u{430}\u{442}\u{438}\u{2026}`
5
- };
6
-
7
-
8
- export {$4f07d8c17926a679$exports as default};
9
- //# sourceMappingURL=uk-UA.module.js.map
@@ -1,9 +0,0 @@
1
- var $4f07d8c17926a679$exports = {};
2
- $4f07d8c17926a679$exports = {
3
- "loading": `\u{417}\u{430}\u{432}\u{430}\u{43D}\u{442}\u{430}\u{436}\u{435}\u{43D}\u{43D}\u{44F}\u{2026}`,
4
- "placeholder": `\u{412}\u{438}\u{431}\u{440}\u{430}\u{442}\u{438}\u{2026}`
5
- };
6
-
7
-
8
- export {$4f07d8c17926a679$exports as default};
9
- //# sourceMappingURL=uk-UA.module.js.map
@@ -1 +0,0 @@
1
- {"mappings":";AAAA,4BAAiB;IAAG,WAAW,CAAC,4FAAa,CAAC;IAC5C,eAAe,CAAC,yDAAQ,CAAC;AAC3B","sources":["packages/@react-spectrum/picker/intl/uk-UA.json"],"sourcesContent":["{\n \"loading\": \"Завантаження…\",\n \"placeholder\": \"Вибрати…\"\n}\n"],"names":[],"version":3,"file":"uk-UA.module.js.map"}
@@ -1,7 +0,0 @@
1
- module.exports = {
2
- "loading": `\u{6B63}\u{5728}\u{52A0}\u{8F7D}...`,
3
- "placeholder": `\u{9009}\u{62E9}...`
4
- };
5
-
6
-
7
- //# sourceMappingURL=zh-CN.main.js.map
@@ -1 +0,0 @@
1
- {"mappings":"AAAA,iBAAiB;IAAG,WAAW,CAAC,mCAAO,CAAC;IACtC,eAAe,CAAC,mBAAK,CAAC;AACxB","sources":["packages/@react-spectrum/picker/intl/zh-CN.json"],"sourcesContent":["{\n \"loading\": \"正在加载...\",\n \"placeholder\": \"选择...\"\n}\n"],"names":[],"version":3,"file":"zh-CN.main.js.map"}
package/dist/zh-CN.mjs DELETED
@@ -1,9 +0,0 @@
1
- var $07a8d3b903fa886f$exports = {};
2
- $07a8d3b903fa886f$exports = {
3
- "loading": `\u{6B63}\u{5728}\u{52A0}\u{8F7D}...`,
4
- "placeholder": `\u{9009}\u{62E9}...`
5
- };
6
-
7
-
8
- export {$07a8d3b903fa886f$exports as default};
9
- //# sourceMappingURL=zh-CN.module.js.map
@@ -1,9 +0,0 @@
1
- var $07a8d3b903fa886f$exports = {};
2
- $07a8d3b903fa886f$exports = {
3
- "loading": `\u{6B63}\u{5728}\u{52A0}\u{8F7D}...`,
4
- "placeholder": `\u{9009}\u{62E9}...`
5
- };
6
-
7
-
8
- export {$07a8d3b903fa886f$exports as default};
9
- //# sourceMappingURL=zh-CN.module.js.map
@@ -1 +0,0 @@
1
- {"mappings":";AAAA,4BAAiB;IAAG,WAAW,CAAC,mCAAO,CAAC;IACtC,eAAe,CAAC,mBAAK,CAAC;AACxB","sources":["packages/@react-spectrum/picker/intl/zh-CN.json"],"sourcesContent":["{\n \"loading\": \"正在加载...\",\n \"placeholder\": \"选择...\"\n}\n"],"names":[],"version":3,"file":"zh-CN.module.js.map"}
@@ -1,7 +0,0 @@
1
- module.exports = {
2
- "loading": `\u{8F09}\u{5165}\u{4E2D}\u{2026}`,
3
- "placeholder": `\u{9078}\u{53D6}\u{2026}`
4
- };
5
-
6
-
7
- //# sourceMappingURL=zh-TW.main.js.map
@@ -1 +0,0 @@
1
- {"mappings":"AAAA,iBAAiB;IAAG,WAAW,CAAC,gCAAI,CAAC;IACnC,eAAe,CAAC,wBAAG,CAAC;AACtB","sources":["packages/@react-spectrum/picker/intl/zh-TW.json"],"sourcesContent":["{\n \"loading\": \"載入中…\",\n \"placeholder\": \"選取…\"\n}\n"],"names":[],"version":3,"file":"zh-TW.main.js.map"}
package/dist/zh-TW.mjs DELETED
@@ -1,9 +0,0 @@
1
- var $e1416a5539091e36$exports = {};
2
- $e1416a5539091e36$exports = {
3
- "loading": `\u{8F09}\u{5165}\u{4E2D}\u{2026}`,
4
- "placeholder": `\u{9078}\u{53D6}\u{2026}`
5
- };
6
-
7
-
8
- export {$e1416a5539091e36$exports as default};
9
- //# sourceMappingURL=zh-TW.module.js.map
@@ -1,9 +0,0 @@
1
- var $e1416a5539091e36$exports = {};
2
- $e1416a5539091e36$exports = {
3
- "loading": `\u{8F09}\u{5165}\u{4E2D}\u{2026}`,
4
- "placeholder": `\u{9078}\u{53D6}\u{2026}`
5
- };
6
-
7
-
8
- export {$e1416a5539091e36$exports as default};
9
- //# sourceMappingURL=zh-TW.module.js.map
@@ -1 +0,0 @@
1
- {"mappings":";AAAA,4BAAiB;IAAG,WAAW,CAAC,gCAAI,CAAC;IACnC,eAAe,CAAC,wBAAG,CAAC;AACtB","sources":["packages/@react-spectrum/picker/intl/zh-TW.json"],"sourcesContent":["{\n \"loading\": \"載入中…\",\n \"placeholder\": \"選取…\"\n}\n"],"names":[],"version":3,"file":"zh-TW.module.js.map"}
package/src/Picker.tsx DELETED
@@ -1,254 +0,0 @@
1
- /*
2
- * Copyright 2020 Adobe. All rights reserved.
3
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- * you may not use this file except in compliance with the License. You may obtain a copy
5
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
- *
7
- * Unless required by applicable law or agreed to in writing, software distributed under
8
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- * OF ANY KIND, either express or implied. See the License for the specific language
10
- * governing permissions and limitations under the License.
11
- */
12
-
13
- import AlertMedium from '@spectrum-icons/ui/AlertMedium';
14
- import ChevronDownMedium from '@spectrum-icons/ui/ChevronDownMedium';
15
- import {
16
- classNames,
17
- dimensionValue,
18
- SlotProvider,
19
- useDOMRef,
20
- useIsMobileDevice,
21
- useSlotProps,
22
- useUnwrapDOMRef
23
- } from '@react-spectrum/utils';
24
- import {DOMRef, DOMRefValue, FocusableRefValue, LabelPosition} from '@react-types/shared';
25
- import {Field} from '@react-spectrum/label';
26
- import {FieldButton} from '@react-spectrum/button';
27
- import {HiddenSelect, useSelect} from '@react-aria/select';
28
- // @ts-ignore
29
- import intlMessages from '../intl/*.json';
30
- import {ListBoxBase, useListBoxLayout} from '@react-spectrum/listbox';
31
- import {mergeProps, useId, useLayoutEffect, useResizeObserver} from '@react-aria/utils';
32
- import {Popover, Tray} from '@react-spectrum/overlays';
33
- import {PressResponder, useHover} from '@react-aria/interactions';
34
- import {ProgressCircle} from '@react-spectrum/progress';
35
- import React, {ReactElement, useCallback, useRef, useState} from 'react';
36
- import {SpectrumPickerProps} from '@react-types/select';
37
- import styles from '@adobe/spectrum-css-temp/components/dropdown/vars.css';
38
- import {Text} from '@react-spectrum/text';
39
- import {useFormProps} from '@react-spectrum/form';
40
- import {useLocalizedStringFormatter} from '@react-aria/i18n';
41
- import {useProvider, useProviderProps} from '@react-spectrum/provider';
42
- import {useSelectState} from '@react-stately/select';
43
-
44
- /**
45
- * Pickers allow users to choose a single option from a collapsible list of options when space is limited.
46
- */
47
- // forwardRef doesn't support generic parameters, so cast the result to the correct type
48
- // https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref
49
- export const Picker = React.forwardRef(function Picker<T extends object>(props: SpectrumPickerProps<T>, ref: DOMRef<HTMLDivElement>) {
50
- props = useSlotProps(props, 'picker');
51
- props = useProviderProps(props);
52
- props = useFormProps(props);
53
- let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/picker');
54
- let {
55
- autoComplete,
56
- isDisabled,
57
- direction = 'bottom',
58
- align = 'start',
59
- shouldFlip = true,
60
- placeholder = stringFormatter.format('placeholder'),
61
- isQuiet,
62
- labelPosition = 'top' as LabelPosition,
63
- menuWidth,
64
- autoFocus
65
- } = props;
66
-
67
- let state = useSelectState(props);
68
- let domRef = useDOMRef(ref);
69
-
70
- let popoverRef = useRef<DOMRefValue<HTMLDivElement>>(null);
71
- let triggerRef = useRef<FocusableRefValue<HTMLElement>>(null);
72
- let unwrappedTriggerRef = useUnwrapDOMRef(triggerRef);
73
- let listboxRef = useRef(null);
74
-
75
- let isLoadingInitial = props.isLoading && state.collection.size === 0;
76
- let isLoadingMore = props.isLoading && state.collection.size > 0;
77
- let progressCircleId = useId();
78
-
79
- // We create the listbox layout in Picker and pass it to ListBoxBase below
80
- // so that the layout information can be cached even while the listbox is not mounted.
81
- // We also use the layout as the keyboard delegate for type to select.
82
- let layout = useListBoxLayout();
83
- let {labelProps, triggerProps, valueProps, menuProps, hiddenSelectProps, descriptionProps, errorMessageProps, isInvalid, validationErrors, validationDetails} = useSelect({
84
- ...props,
85
- 'aria-describedby': (isLoadingInitial ? progressCircleId : undefined)
86
- }, state, unwrappedTriggerRef);
87
-
88
- let isMobile = useIsMobileDevice();
89
- let {hoverProps, isHovered} = useHover({isDisabled});
90
-
91
- // On small screen devices, the listbox is rendered in a tray, otherwise a popover.
92
- let listbox = (
93
- <ListBoxBase
94
- {...menuProps}
95
- ref={listboxRef}
96
- disallowEmptySelection
97
- autoFocus={state.focusStrategy || true}
98
- shouldSelectOnPressUp
99
- focusOnPointerEnter
100
- layout={layout}
101
- state={state}
102
- width={isMobile ? '100%' : undefined}
103
- // Set max height: inherit so Tray scrolling works
104
- UNSAFE_style={{maxHeight: 'inherit'}}
105
- isLoading={props.isLoading}
106
- showLoadingSpinner={isLoadingMore}
107
- onLoadMore={props.onLoadMore} />
108
- );
109
-
110
- // Measure the width of the button to inform the width of the menu (below).
111
- let [buttonWidth, setButtonWidth] = useState<number | undefined>(undefined);
112
- let {scale} = useProvider();
113
-
114
- let onResize = useCallback(() => {
115
- if (!isMobile && unwrappedTriggerRef.current) {
116
- let width = unwrappedTriggerRef.current.offsetWidth;
117
- setButtonWidth(width);
118
- }
119
- }, [unwrappedTriggerRef, setButtonWidth, isMobile]);
120
-
121
- useResizeObserver({
122
- ref: unwrappedTriggerRef,
123
- onResize: onResize
124
- });
125
-
126
- useLayoutEffect(onResize, [scale, state.selectedKey, onResize]);
127
-
128
- let overlay;
129
- if (isMobile) {
130
- overlay = (
131
- <Tray state={state}>
132
- {listbox}
133
- </Tray>
134
- );
135
- } else {
136
- // If quiet, use the default width, otherwise match the width of the button. This can be overridden by the menuWidth prop.
137
- // Always have a minimum width of the button width. When quiet, there is an extra offset to add.
138
- // Not using style props for this because they don't support `calc`.
139
- let width = isQuiet ? undefined : buttonWidth;
140
- let style = {
141
- width: menuWidth ? dimensionValue(menuWidth) : width,
142
- minWidth: isQuiet ? `calc(${buttonWidth}px + calc(2 * var(--spectrum-dropdown-quiet-offset)))` : buttonWidth
143
- };
144
-
145
- overlay = (
146
- <Popover
147
- UNSAFE_style={style}
148
- UNSAFE_className={classNames(styles, 'spectrum-Dropdown-popover', {'spectrum-Dropdown-popover--quiet': isQuiet})}
149
- ref={popoverRef}
150
- placement={`${direction} ${align}`}
151
- shouldFlip={shouldFlip}
152
- hideArrow
153
- state={state}
154
- triggerRef={unwrappedTriggerRef}
155
- scrollRef={listboxRef}
156
- shouldContainFocus>
157
- {listbox}
158
- </Popover>
159
- );
160
- }
161
-
162
- let contents = state.selectedItem ? state.selectedItem.rendered : placeholder;
163
- if (typeof contents === 'string') {
164
- contents = <Text>{contents}</Text>;
165
- }
166
-
167
- let picker = (
168
- <div
169
- className={
170
- classNames(
171
- styles,
172
- 'spectrum-Dropdown',
173
- {
174
- 'is-invalid': isInvalid && !isDisabled,
175
- 'is-disabled': isDisabled,
176
- 'spectrum-Dropdown--quiet': isQuiet
177
- }
178
- )
179
- }>
180
- <HiddenSelect
181
- autoComplete={autoComplete}
182
- {...hiddenSelectProps} />
183
- <PressResponder {...mergeProps(hoverProps, triggerProps)}>
184
- <FieldButton
185
- ref={triggerRef}
186
- isActive={state.isOpen}
187
- isQuiet={isQuiet}
188
- isDisabled={isDisabled}
189
- isInvalid={isInvalid}
190
- autoFocus={autoFocus}
191
- UNSAFE_className={classNames(styles, 'spectrum-Dropdown-trigger', {'is-hovered': isHovered})}>
192
- <SlotProvider
193
- slots={{
194
- icon: {UNSAFE_className: classNames(styles, 'spectrum-Icon'), size: 'S'},
195
- avatar: {UNSAFE_className: classNames(styles, 'spectrum-Dropdown-avatar'), size: 'avatar-size-100'},
196
- text: {
197
- ...valueProps,
198
- UNSAFE_className: classNames(
199
- styles,
200
- 'spectrum-Dropdown-label',
201
- {'is-placeholder': !state.selectedItem}
202
- )
203
- },
204
- description: {
205
- isHidden: true
206
- }
207
- }}>
208
- {contents}
209
- </SlotProvider>
210
- {isLoadingInitial &&
211
- <ProgressCircle
212
- id={progressCircleId}
213
- isIndeterminate
214
- size="S"
215
- aria-label={stringFormatter.format('loading')}
216
- UNSAFE_className={classNames(styles, 'spectrum-Dropdown-progressCircle')} />
217
- }
218
- {isInvalid && !isLoadingInitial && !isDisabled &&
219
- <AlertMedium UNSAFE_className={classNames(styles, 'spectrum-Dropdown-invalidIcon')} />
220
- }
221
- <ChevronDownMedium UNSAFE_className={classNames(styles, 'spectrum-Dropdown-chevron')} />
222
- </FieldButton>
223
- </PressResponder>
224
- {state.collection.size === 0 ? null : overlay}
225
- </div>
226
- );
227
-
228
- let wrapperClassName = classNames(
229
- styles,
230
- 'spectrum-Field',
231
- {
232
- 'spectrum-Dropdown-fieldWrapper--quiet': isQuiet,
233
- 'spectrum-Dropdown-fieldWrapper--positionSide': labelPosition === 'side'
234
- }
235
- );
236
-
237
- return (
238
- <Field
239
- {...props}
240
- ref={domRef}
241
- wrapperClassName={wrapperClassName}
242
- labelProps={labelProps}
243
- descriptionProps={descriptionProps}
244
- errorMessageProps={errorMessageProps}
245
- isInvalid={isInvalid}
246
- validationErrors={validationErrors}
247
- validationDetails={validationDetails}
248
- showErrorIcon={false}
249
- includeNecessityIndicatorInAccessibilityName
250
- elementType="span">
251
- {picker}
252
- </Field>
253
- );
254
- }) as <T>(props: SpectrumPickerProps<T> & {ref?: DOMRef<HTMLDivElement>}) => ReactElement;