@react-spectrum/s2 1.4.0 → 1.5.1
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.
- package/dist/exports/CenterBaseline.cjs +12 -0
- package/dist/exports/CenterBaseline.cjs.map +1 -0
- package/dist/exports/CenterBaseline.mjs +7 -0
- package/dist/exports/CenterBaseline.mjs.map +1 -0
- package/dist/exports/Skeleton.cjs +1 -0
- package/dist/exports/Skeleton.cjs.map +1 -1
- package/dist/exports/Skeleton.mjs +2 -2
- package/dist/exports/Skeleton.mjs.map +1 -1
- package/dist/exports/index.cjs +3 -0
- package/dist/exports/index.cjs.map +1 -1
- package/dist/exports/index.mjs +3 -1
- package/dist/exports/index.mjs.map +1 -1
- package/dist/private/Accordion.cjs +2 -2
- package/dist/private/Accordion.css +2 -2
- package/dist/private/Accordion.mjs +2 -2
- package/dist/private/ActionBar.cjs +59 -59
- package/dist/private/ActionBar.cjs.map +1 -1
- package/dist/private/ActionBar.css +58 -58
- package/dist/private/ActionBar.css.map +1 -1
- package/dist/private/ActionBar.mjs +59 -59
- package/dist/private/ActionBar.mjs.map +1 -1
- package/dist/private/ActionButton.cjs +247 -247
- package/dist/private/ActionButton.cjs.map +1 -1
- package/dist/private/ActionButton.css +169 -169
- package/dist/private/ActionButton.css.map +1 -1
- package/dist/private/ActionButton.mjs +247 -247
- package/dist/private/ActionButton.mjs.map +1 -1
- package/dist/private/ActionButtonGroup.cjs +15 -15
- package/dist/private/ActionButtonGroup.css +9 -9
- package/dist/private/ActionButtonGroup.mjs +15 -15
- package/dist/private/ActionMenu.cjs.map +1 -1
- package/dist/private/ActionMenu.mjs.map +1 -1
- package/dist/private/Add.cjs +10 -10
- package/dist/private/Add.css +6 -6
- package/dist/private/Add.mjs +10 -10
- package/dist/private/AlertDialog.cjs +3 -3
- package/dist/private/AlertDialog.cjs.map +1 -1
- package/dist/private/AlertDialog.css +3 -3
- package/dist/private/AlertDialog.css.map +1 -1
- package/dist/private/AlertDialog.mjs +3 -3
- package/dist/private/AlertDialog.mjs.map +1 -1
- package/dist/private/Asterisk.cjs +6 -6
- package/dist/private/Asterisk.css +4 -4
- package/dist/private/Asterisk.mjs +6 -6
- package/dist/private/Avatar.cjs +16 -16
- package/dist/private/Avatar.css +16 -16
- package/dist/private/Avatar.mjs +16 -16
- package/dist/private/AvatarGroup.cjs +120 -120
- package/dist/private/AvatarGroup.css +31 -31
- package/dist/private/AvatarGroup.mjs +120 -120
- package/dist/private/Badge.cjs +197 -197
- package/dist/private/Badge.css +125 -125
- package/dist/private/Badge.mjs +197 -197
- package/dist/private/Breadcrumbs.cjs +234 -234
- package/dist/private/Breadcrumbs.cjs.map +1 -1
- package/dist/private/Breadcrumbs.css +100 -100
- package/dist/private/Breadcrumbs.css.map +1 -1
- package/dist/private/Breadcrumbs.mjs +234 -234
- package/dist/private/Breadcrumbs.mjs.map +1 -1
- package/dist/private/Button.cjs +335 -326
- package/dist/private/Button.cjs.map +1 -1
- package/dist/private/Button.css +176 -172
- package/dist/private/Button.css.map +1 -1
- package/dist/private/Button.mjs +335 -326
- package/dist/private/Button.mjs.map +1 -1
- package/dist/private/ButtonGroup.cjs +23 -20
- package/dist/private/ButtonGroup.cjs.map +1 -1
- package/dist/private/ButtonGroup.css +19 -15
- package/dist/private/ButtonGroup.css.map +1 -1
- package/dist/private/ButtonGroup.mjs +23 -20
- package/dist/private/ButtonGroup.mjs.map +1 -1
- package/dist/private/Calendar.cjs +232 -232
- package/dist/private/Calendar.cjs.map +1 -1
- package/dist/private/Calendar.css +149 -149
- package/dist/private/Calendar.css.map +1 -1
- package/dist/private/Calendar.mjs +232 -232
- package/dist/private/Calendar.mjs.map +1 -1
- package/dist/private/Card.cjs +309 -309
- package/dist/private/Card.css +206 -206
- package/dist/private/Card.mjs +309 -309
- package/dist/private/CardView.cjs +17 -17
- package/dist/private/CardView.css +17 -17
- package/dist/private/CardView.mjs +17 -17
- package/dist/private/CenterBaseline.cjs +1 -1
- package/dist/private/CenterBaseline.cjs.map +1 -1
- package/dist/private/CenterBaseline.css +2 -2
- package/dist/private/CenterBaseline.css.map +1 -1
- package/dist/private/CenterBaseline.mjs +1 -1
- package/dist/private/CenterBaseline.mjs.map +1 -1
- package/dist/private/Checkbox.cjs +188 -188
- package/dist/private/Checkbox.css +110 -110
- package/dist/private/Checkbox.mjs +188 -188
- package/dist/private/CheckboxGroup.cjs +43 -43
- package/dist/private/CheckboxGroup.css +37 -37
- package/dist/private/CheckboxGroup.mjs +43 -43
- package/dist/private/Checkmark.cjs +12 -12
- package/dist/private/Checkmark.css +8 -8
- package/dist/private/Checkmark.mjs +12 -12
- package/dist/private/Chevron.cjs +12 -12
- package/dist/private/Chevron.css +10 -10
- package/dist/private/Chevron.mjs +12 -12
- package/dist/private/ClearButton.cjs +30 -30
- package/dist/private/ClearButton.css +30 -30
- package/dist/private/ClearButton.mjs +30 -30
- package/dist/private/CloseButton.cjs +52 -52
- package/dist/private/CloseButton.cjs.map +1 -1
- package/dist/private/CloseButton.css +46 -46
- package/dist/private/CloseButton.css.map +1 -1
- package/dist/private/CloseButton.mjs +52 -52
- package/dist/private/CloseButton.mjs.map +1 -1
- package/dist/private/ColorArea.cjs +16 -16
- package/dist/private/ColorArea.css +16 -16
- package/dist/private/ColorArea.mjs +16 -16
- package/dist/private/ColorField.cjs +31 -31
- package/dist/private/ColorField.css +27 -27
- package/dist/private/ColorField.mjs +31 -31
- package/dist/private/ColorHandle.cjs +27 -27
- package/dist/private/ColorHandle.css +42 -42
- package/dist/private/ColorHandle.mjs +27 -27
- package/dist/private/ColorSlider.cjs +108 -108
- package/dist/private/ColorSlider.css +52 -52
- package/dist/private/ColorSlider.mjs +108 -108
- package/dist/private/ColorSwatch.cjs +29 -29
- package/dist/private/ColorSwatch.css +29 -29
- package/dist/private/ColorSwatch.mjs +29 -29
- package/dist/private/ColorSwatchPicker.cjs +29 -29
- package/dist/private/ColorSwatchPicker.css +48 -48
- package/dist/private/ColorSwatchPicker.mjs +29 -29
- package/dist/private/ColorWheel.cjs +26 -26
- package/dist/private/ColorWheel.css +17 -17
- package/dist/private/ColorWheel.mjs +26 -26
- package/dist/private/ComboBox.cjs +381 -381
- package/dist/private/ComboBox.cjs.map +1 -1
- package/dist/private/ComboBox.css +188 -188
- package/dist/private/ComboBox.css.map +1 -1
- package/dist/private/ComboBox.mjs +381 -381
- package/dist/private/ComboBox.mjs.map +1 -1
- package/dist/private/ContextualHelp.cjs +5 -5
- package/dist/private/ContextualHelp.cjs.map +1 -1
- package/dist/private/ContextualHelp.css +50 -50
- package/dist/private/ContextualHelp.css.map +1 -1
- package/dist/private/ContextualHelp.mjs +5 -5
- package/dist/private/ContextualHelp.mjs.map +1 -1
- package/dist/private/CornerTriangle.cjs +8 -8
- package/dist/private/CornerTriangle.css +6 -6
- package/dist/private/CornerTriangle.mjs +8 -8
- package/dist/private/Cross.cjs +14 -14
- package/dist/private/Cross.css +10 -10
- package/dist/private/Cross.mjs +14 -14
- package/dist/private/CustomDialog.cjs +25 -25
- package/dist/private/CustomDialog.css +25 -25
- package/dist/private/CustomDialog.mjs +25 -25
- package/dist/private/Dash.cjs +10 -10
- package/dist/private/Dash.css +6 -6
- package/dist/private/Dash.mjs +10 -10
- package/dist/private/DateField.cjs +73 -73
- package/dist/private/DateField.css +77 -77
- package/dist/private/DateField.mjs +73 -73
- package/dist/private/DatePicker.cjs +172 -172
- package/dist/private/DatePicker.cjs.map +1 -1
- package/dist/private/DatePicker.css +128 -128
- package/dist/private/DatePicker.css.map +1 -1
- package/dist/private/DatePicker.mjs +172 -172
- package/dist/private/DatePicker.mjs.map +1 -1
- package/dist/private/DateRangePicker.cjs +55 -55
- package/dist/private/DateRangePicker.cjs.map +1 -1
- package/dist/private/DateRangePicker.css +59 -59
- package/dist/private/DateRangePicker.css.map +1 -1
- package/dist/private/DateRangePicker.mjs +55 -55
- package/dist/private/DateRangePicker.mjs.map +1 -1
- package/dist/private/Dialog.cjs +17 -17
- package/dist/private/Dialog.css +70 -70
- package/dist/private/Dialog.mjs +17 -17
- package/dist/private/Disclosure.cjs +144 -122
- package/dist/private/Disclosure.cjs.map +1 -1
- package/dist/private/Disclosure.css +112 -112
- package/dist/private/Disclosure.css.map +1 -1
- package/dist/private/Disclosure.mjs +144 -122
- package/dist/private/Disclosure.mjs.map +1 -1
- package/dist/private/Divider.cjs +25 -25
- package/dist/private/Divider.css +25 -25
- package/dist/private/Divider.mjs +25 -25
- package/dist/private/DragHandle.cjs +8 -8
- package/dist/private/DragHandle.css +6 -6
- package/dist/private/DragHandle.mjs +8 -8
- package/dist/private/DragPreview.cjs +154 -154
- package/dist/private/DragPreview.css +106 -106
- package/dist/private/DragPreview.mjs +154 -154
- package/dist/private/DropZone.cjs +61 -61
- package/dist/private/DropZone.cjs.map +1 -1
- package/dist/private/DropZone.css +57 -57
- package/dist/private/DropZone.css.map +1 -1
- package/dist/private/DropZone.mjs +61 -61
- package/dist/private/DropZone.mjs.map +1 -1
- package/dist/private/Field.cjs +360 -360
- package/dist/private/Field.cjs.map +1 -1
- package/dist/private/Field.css +160 -160
- package/dist/private/Field.css.map +1 -1
- package/dist/private/Field.mjs +360 -360
- package/dist/private/Field.mjs.map +1 -1
- package/dist/private/Form.cjs +9 -9
- package/dist/private/Form.css +9 -9
- package/dist/private/Form.mjs +9 -9
- package/dist/private/FullscreenDialog.cjs +5 -5
- package/dist/private/FullscreenDialog.css +78 -78
- package/dist/private/FullscreenDialog.mjs +5 -5
- package/dist/private/IllustratedMessage.cjs +228 -228
- package/dist/private/IllustratedMessage.css +72 -72
- package/dist/private/IllustratedMessage.mjs +228 -228
- package/dist/private/Image.cjs +14 -14
- package/dist/private/Image.css +14 -14
- package/dist/private/Image.mjs +14 -14
- package/dist/private/InlineAlert.cjs +100 -100
- package/dist/private/InlineAlert.cjs.map +1 -1
- package/dist/private/InlineAlert.css +76 -76
- package/dist/private/InlineAlert.css.map +1 -1
- package/dist/private/InlineAlert.mjs +100 -100
- package/dist/private/InlineAlert.mjs.map +1 -1
- package/dist/private/LabeledValue.cjs +134 -134
- package/dist/private/LabeledValue.css +63 -63
- package/dist/private/LabeledValue.mjs +134 -134
- package/dist/private/Link.cjs +49 -49
- package/dist/private/Link.css +41 -41
- package/dist/private/Link.mjs +49 -49
- package/dist/private/LinkOut.cjs +8 -8
- package/dist/private/LinkOut.css +8 -8
- package/dist/private/LinkOut.mjs +8 -8
- package/dist/private/ListView.cjs +245 -245
- package/dist/private/ListView.cjs.map +1 -1
- package/dist/private/ListView.css +177 -177
- package/dist/private/ListView.css.map +1 -1
- package/dist/private/ListView.mjs +245 -245
- package/dist/private/ListView.mjs.map +1 -1
- package/dist/private/Menu.cjs +446 -446
- package/dist/private/Menu.cjs.map +1 -1
- package/dist/private/Menu.css +196 -196
- package/dist/private/Menu.css.map +1 -1
- package/dist/private/Menu.mjs +446 -446
- package/dist/private/Menu.mjs.map +1 -1
- package/dist/private/Meter.cjs +153 -153
- package/dist/private/Meter.css +91 -91
- package/dist/private/Meter.mjs +153 -153
- package/dist/private/Modal.cjs +74 -74
- package/dist/private/Modal.css +59 -59
- package/dist/private/Modal.mjs +74 -74
- package/dist/private/NotificationBadge.cjs +56 -56
- package/dist/private/NotificationBadge.cjs.map +1 -1
- package/dist/private/NotificationBadge.css +49 -49
- package/dist/private/NotificationBadge.css.map +1 -1
- package/dist/private/NotificationBadge.mjs +56 -56
- package/dist/private/NotificationBadge.mjs.map +1 -1
- package/dist/private/NumberField.cjs +114 -114
- package/dist/private/NumberField.css +99 -99
- package/dist/private/NumberField.mjs +114 -114
- package/dist/private/Picker.cjs +275 -275
- package/dist/private/Picker.cjs.map +1 -1
- package/dist/private/Picker.css +173 -173
- package/dist/private/Picker.css.map +1 -1
- package/dist/private/Picker.mjs +275 -275
- package/dist/private/Picker.mjs.map +1 -1
- package/dist/private/Popover.cjs +95 -95
- package/dist/private/Popover.cjs.map +1 -1
- package/dist/private/Popover.css +75 -75
- package/dist/private/Popover.css.map +1 -1
- package/dist/private/Popover.mjs +95 -95
- package/dist/private/Popover.mjs.map +1 -1
- package/dist/private/ProgressBar.cjs +163 -163
- package/dist/private/ProgressBar.css +99 -99
- package/dist/private/ProgressBar.mjs +163 -163
- package/dist/private/ProgressCircle.cjs +34 -31
- package/dist/private/ProgressCircle.cjs.map +1 -1
- package/dist/private/ProgressCircle.css +24 -24
- package/dist/private/ProgressCircle.css.map +1 -1
- package/dist/private/ProgressCircle.mjs +34 -31
- package/dist/private/ProgressCircle.mjs.map +1 -1
- package/dist/private/Provider.cjs +19 -19
- package/dist/private/Provider.css +15 -15
- package/dist/private/Provider.mjs +19 -19
- package/dist/private/RadioGroup.cjs +208 -208
- package/dist/private/RadioGroup.css +113 -113
- package/dist/private/RadioGroup.mjs +208 -208
- package/dist/private/RangeCalendar.cjs +16 -16
- package/dist/private/RangeCalendar.cjs.map +1 -1
- package/dist/private/RangeCalendar.css +17 -17
- package/dist/private/RangeCalendar.css.map +1 -1
- package/dist/private/RangeCalendar.mjs +16 -16
- package/dist/private/RangeCalendar.mjs.map +1 -1
- package/dist/private/RangeSlider.cjs.map +1 -1
- package/dist/private/RangeSlider.mjs.map +1 -1
- package/dist/private/SearchField.cjs +41 -41
- package/dist/private/SearchField.css +45 -45
- package/dist/private/SearchField.mjs +41 -41
- package/dist/private/SegmentedControl.cjs +178 -178
- package/dist/private/SegmentedControl.css +123 -123
- package/dist/private/SegmentedControl.mjs +178 -178
- package/dist/private/SelectBoxGroup.cjs +142 -142
- package/dist/private/SelectBoxGroup.css +120 -120
- package/dist/private/SelectBoxGroup.mjs +142 -142
- package/dist/private/Slider.cjs +292 -292
- package/dist/private/Slider.css +159 -159
- package/dist/private/Slider.mjs +292 -292
- package/dist/private/StatusLight.cjs +115 -115
- package/dist/private/StatusLight.css +59 -59
- package/dist/private/StatusLight.mjs +115 -115
- package/dist/private/Switch.cjs +171 -171
- package/dist/private/Switch.css +85 -85
- package/dist/private/Switch.mjs +171 -171
- package/dist/private/TableView.cjs +551 -534
- package/dist/private/TableView.cjs.map +1 -1
- package/dist/private/TableView.css +329 -303
- package/dist/private/TableView.css.map +1 -1
- package/dist/private/TableView.mjs +551 -534
- package/dist/private/TableView.mjs.map +1 -1
- package/dist/private/Tabs.cjs +131 -125
- package/dist/private/Tabs.cjs.map +1 -1
- package/dist/private/Tabs.css +105 -105
- package/dist/private/Tabs.css.map +1 -1
- package/dist/private/Tabs.mjs +131 -125
- package/dist/private/Tabs.mjs.map +1 -1
- package/dist/private/TabsPicker.cjs +127 -127
- package/dist/private/TabsPicker.css +108 -108
- package/dist/private/TabsPicker.mjs +127 -127
- package/dist/private/TagGroup.cjs +203 -203
- package/dist/private/TagGroup.cjs.map +1 -1
- package/dist/private/TagGroup.css +146 -146
- package/dist/private/TagGroup.css.map +1 -1
- package/dist/private/TagGroup.mjs +203 -203
- package/dist/private/TagGroup.mjs.map +1 -1
- package/dist/private/TextField.cjs +58 -58
- package/dist/private/TextField.css +54 -54
- package/dist/private/TextField.mjs +58 -58
- package/dist/private/TimeField.cjs +51 -51
- package/dist/private/TimeField.css +47 -47
- package/dist/private/TimeField.mjs +51 -51
- package/dist/private/Toast.cjs +120 -120
- package/dist/private/Toast.cjs.map +1 -1
- package/dist/private/Toast.css +110 -110
- package/dist/private/Toast.css.map +1 -1
- package/dist/private/Toast.mjs +120 -120
- package/dist/private/Toast.mjs.map +1 -1
- package/dist/private/ToggleButton.cjs +16 -16
- package/dist/private/ToggleButton.css +23 -23
- package/dist/private/ToggleButton.mjs +16 -16
- package/dist/private/Tooltip.cjs +86 -86
- package/dist/private/Tooltip.css +70 -70
- package/dist/private/Tooltip.mjs +86 -86
- package/dist/private/TreeView.cjs +229 -229
- package/dist/private/TreeView.cjs.map +1 -1
- package/dist/private/TreeView.css +184 -184
- package/dist/private/TreeView.css.map +1 -1
- package/dist/private/TreeView.mjs +229 -229
- package/dist/private/TreeView.mjs.map +1 -1
- package/dist/private/dnd-utils.cjs +42 -42
- package/dist/private/dnd-utils.css +39 -39
- package/dist/private/dnd-utils.mjs +42 -42
- package/dist/types/exports/CenterBaseline.d.ts +1 -0
- package/dist/types/exports/Skeleton.d.ts +1 -1
- package/dist/types/exports/index.d.ts +1 -0
- package/dist/types/src/CenterBaseline.d.ts +17 -0
- package/dist/types/src/ContextualHelp.d.ts +1 -1
- package/dist/types/src/Disclosure.d.ts +6 -1
- package/dist/types/src/ListView.d.ts +1 -1
- package/dist/types/src/Menu.d.ts +1 -1
- package/dist/types/src/Popover.d.ts +2 -2
- package/dist/types/src/style-utils.d.ts +4 -1
- package/exports/CenterBaseline.ts +1 -0
- package/exports/Skeleton.ts +1 -1
- package/exports/index.ts +2 -0
- package/icons/Icon.cjs +10 -10
- package/icons/Icon.css +9 -9
- package/icons/Icon.mjs +10 -10
- package/icons/Skeleton.cjs +2 -2
- package/icons/Skeleton.css +6 -6
- package/icons/Skeleton.mjs +2 -2
- package/package.json +6 -6
- package/src/ActionBar.tsx +0 -1
- package/src/ActionButton.tsx +0 -1
- package/src/ActionMenu.tsx +0 -1
- package/src/AlertDialog.tsx +0 -1
- package/src/Breadcrumbs.tsx +0 -4
- package/src/Button.tsx +12 -3
- package/src/ButtonGroup.tsx +1 -0
- package/src/Calendar.tsx +0 -1
- package/src/CenterBaseline.tsx +17 -0
- package/src/CloseButton.tsx +0 -1
- package/src/ComboBox.tsx +0 -1
- package/src/ContextualHelp.tsx +1 -2
- package/src/DatePicker.tsx +0 -1
- package/src/DateRangePicker.tsx +0 -1
- package/src/Disclosure.tsx +92 -79
- package/src/DropZone.tsx +0 -1
- package/src/Field.tsx +0 -1
- package/src/InlineAlert.tsx +0 -1
- package/src/ListView.tsx +0 -2
- package/src/Menu.tsx +1 -8
- package/src/NotificationBadge.tsx +0 -1
- package/src/Picker.tsx +0 -1
- package/src/Popover.tsx +2 -1
- package/src/ProgressCircle.tsx +1 -1
- package/src/RangeCalendar.tsx +0 -1
- package/src/RangeSlider.tsx +0 -1
- package/src/TableView.tsx +75 -37
- package/src/Tabs.tsx +9 -2
- package/src/TagGroup.tsx +0 -1
- package/src/Toast.tsx +0 -3
- package/src/TreeView.tsx +0 -1
- package/src/style-utils.ts +13 -2
- package/style/__tests__/style-macro.test.js +73 -71
- package/style/dist/main.cjs +25 -25
- package/style/dist/module.mjs +13 -13
- package/style/dist/properties.mjs +3 -3
- package/style/dist/spectrum-theme.cjs +224 -224
- package/style/dist/spectrum-theme.mjs +217 -217
- package/style/dist/style-macro.cjs +100 -100
- package/style/dist/style-macro.mjs +94 -94
- package/style/dist/style-utils.cjs +51 -39
- package/style/dist/style-utils.cjs.map +1 -1
- package/style/dist/style-utils.mjs +50 -38
- package/style/dist/style-utils.mjs.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/@react-spectrum/s2/src/ComboBox.tsx"],"sourcesContent":["/*\n * Copyright 2024 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\nimport {\n ComboBox as AriaComboBox,\n ComboBoxProps as AriaComboBoxProps,\n ComboBoxStateContext\n} from 'react-aria-components/ComboBox';\nimport {\n ListBoxSection as AriaListBoxSection,\n ListBox,\n ListBoxItem,\n ListBoxItemProps,\n ListBoxLoadMoreItem,\n ListBoxProps,\n ListBoxSectionProps,\n ListStateContext\n} from 'react-aria-components/ListBox';\nimport {PopoverProps as AriaPopoverProps, Placement} from 'react-aria-components/Popover';\nimport {\n AsyncLoadable,\n GlobalDOMAttributes,\n HelpTextProps,\n LoadingState,\n SingleSelection,\n SpectrumLabelableProps\n} from '@react-types/shared';\nimport {AvatarContext} from './Avatar';\nimport {BaseCollection, CollectionNode} from 'react-aria/private/collections/BaseCollection';\nimport {baseColor, centerPadding, focusRing, space, style} from '../style' with {type: 'macro'};\nimport {Button, ButtonRenderProps} from 'react-aria-components/Button';\nimport {centerBaseline} from './CenterBaseline';\nimport {checkmark, description, icon, iconCenterWrapper, label, sectionHeading} from './Menu';\nimport CheckmarkIcon from '../ui-icons/Checkmark';\nimport ChevronIcon from '../ui-icons/Chevron';\nimport {Collection} from 'react-aria/Collection';\nimport {ContextValue, Provider} from 'react-aria-components/slots';\nimport {\n control,\n controlBorderRadius,\n controlFont,\n controlSize,\n field,\n fieldInput,\n getAllowedOverrides,\n StyleProps\n} from './style-utils' with {type: 'macro'};\nimport {\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n ReactNode,\n Ref,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {createFocusableRef} from './useDOMRef';\nimport {createLeafComponent} from 'react-aria/CollectionBuilder';\nimport {edgeToText} from '../style/spectrum-theme' with {type: 'macro'};\nimport {FieldErrorIcon, FieldGroup, FieldLabel, HelpText, Input} from './Field';\nimport {FormContext, useFormProps} from './Form';\nimport {forwardRefType} from './types';\nimport {HeaderContext, HeadingContext, Text, TextContext} from './Content';\nimport {IconContext} from './Icon';\nimport {InputContext, InputProps} from 'react-aria-components/Input';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {ListLayout} from 'react-stately/useVirtualizerState';\nimport {mergeRefs} from 'react-aria/mergeRefs';\nimport {Node} from '@react-types/shared';\nimport {Popover} from './Popover';\nimport {pressScale} from './pressScale';\nimport {ProgressCircle} from './ProgressCircle';\nimport {TextFieldRef} from './TextField';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useScale} from './utils';\nimport {useSlotId} from 'react-aria/private/utils/useId';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\nimport {Virtualizer} from 'react-aria-components/Virtualizer';\n\nexport interface ComboboxStyleProps {\n /**\n * The size of the Combobox.\n *\n * @default 'M'\n */\n size?: 'S' | 'M' | 'L' | 'XL';\n /**\n * The prefix to display in the ComboBox. A non-interactive element that appears before the input.\n */\n prefix?: ReactNode;\n}\nexport interface ComboBoxProps<T>\n extends\n Omit<\n AriaComboBoxProps<T>,\n | 'children'\n | 'style'\n | 'className'\n | 'render'\n | 'defaultFilter'\n | 'allowsEmptyCollection'\n | 'selectionMode'\n | 'selectedKey'\n | 'defaultSelectedKey'\n | 'onSelectionChange'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | keyof GlobalDOMAttributes\n >,\n Omit<SingleSelection, 'disallowEmptySelection'>,\n ComboboxStyleProps,\n StyleProps,\n SpectrumLabelableProps,\n HelpTextProps,\n Pick<ListBoxProps<T>, 'items' | 'dependencies'>,\n Pick<AriaPopoverProps, 'shouldFlip'>,\n Pick<AsyncLoadable, 'onLoadMore'>,\n Pick<InputProps, 'placeholder'> {\n /** The contents of the collection. */\n children: ReactNode | ((item: T) => ReactNode);\n /**\n * Direction the menu will render relative to the ComboBox.\n *\n * @default 'bottom'\n */\n direction?: 'bottom' | 'top';\n /**\n * Alignment of the menu relative to the input target.\n *\n * @default 'start'\n */\n align?: 'start' | 'end';\n /**\n * Width of the menu. By default, matches width of the trigger. Note that the minimum width of the\n * dropdown is always equal to the trigger's width.\n */\n menuWidth?: number;\n /**\n * The current loading state of the ComboBox. Determines whether or not the progress circle should\n * be shown.\n */\n loadingState?: LoadingState;\n}\n\nexport const ComboBoxContext =\n createContext<ContextValue<Partial<ComboBoxProps<any>>, TextFieldRef>>(null);\n\nconst inputButton = style<ButtonRenderProps & {isOpen: boolean; size: 'S' | 'M' | 'L' | 'XL'}>({\n ...controlBorderRadius('sm'),\n display: 'flex',\n outlineStyle: 'none',\n textAlign: 'center',\n borderStyle: 'none',\n alignItems: 'center',\n justifyContent: 'center',\n size: {\n size: {\n S: 16,\n M: 20,\n L: 24,\n XL: 32\n }\n },\n marginStart: 'text-to-control',\n aspectRatio: 'square',\n flexShrink: 0,\n transition: {\n default: 'default',\n forcedColors: 'none'\n },\n backgroundColor: {\n default: baseColor('gray-100'),\n isOpen: 'gray-200',\n isDisabled: 'disabled',\n forcedColors: {\n default: 'ButtonText',\n isHovered: 'Highlight',\n isOpen: 'Highlight',\n isDisabled: 'GrayText'\n }\n },\n color: {\n default: baseColor('neutral'),\n isDisabled: 'disabled',\n forcedColors: 'ButtonFace'\n }\n});\n\nconst iconStyles = style({\n flexShrink: 0,\n rotate: 90,\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n }\n});\n\nconst loadingWrapperStyles = style({\n gridColumnStart: '1',\n gridColumnEnd: '-1',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginY: 8\n});\n\nconst progressCircleStyles = style({\n size: {\n size: {\n S: 16,\n M: 20,\n L: 22,\n XL: 26\n }\n },\n marginStart: {\n isInput: 'text-to-visual'\n }\n});\n\nconst emptyStateText = style({\n height: {\n size: {\n S: 24,\n M: 32,\n L: 40,\n XL: 48\n }\n },\n font: {\n size: {\n S: 'ui-sm',\n M: 'ui',\n L: 'ui-lg',\n XL: 'ui-xl'\n }\n },\n display: 'flex',\n alignItems: 'center',\n paddingStart: 'edge-to-text'\n});\n\nexport let listbox = style<{size: 'S' | 'M' | 'L' | 'XL'}>({\n width: 'full',\n boxSizing: 'border-box',\n maxHeight: '[inherit]',\n // TODO: Might help with horizontal scrolling happening on Windows, will need to check somehow. Otherwise, revert back to overflow: auto\n overflowY: 'auto',\n overflowX: 'hidden',\n fontFamily: 'sans',\n fontSize: controlFont(),\n outlineStyle: 'none'\n});\n\nexport let listboxItem = style(\n {\n ...focusRing(),\n ...control({shape: 'default', wrap: true, icon: true}),\n columnGap: 0,\n paddingX: 0,\n paddingBottom: '--labelPadding',\n backgroundColor: {\n default: 'transparent',\n isFocused: baseColor('gray-100').isFocusVisible\n },\n color: {\n default: baseColor('neutral'),\n isDisabled: {\n default: 'disabled',\n forcedColors: 'GrayText'\n }\n },\n position: 'relative',\n gridColumnStart: 1,\n gridColumnEnd: -1,\n display: 'grid',\n gridTemplateAreas: ['. checkmark icon label .', '. . . description .'],\n gridTemplateColumns: {\n size: {\n S: [edgeToText(24), 'auto', 'auto', 'minmax(0, 1fr)', edgeToText(24)],\n M: [edgeToText(32), 'auto', 'auto', 'minmax(0, 1fr)', edgeToText(32)],\n L: [edgeToText(40), 'auto', 'auto', 'minmax(0, 1fr)', edgeToText(40)],\n XL: [edgeToText(48), 'auto', 'auto', 'minmax(0, 1fr)', edgeToText(48)]\n }\n },\n gridTemplateRows: {\n // min-content prevents second row from 'auto'ing to a size larger then 0 when empty\n default: 'auto minmax(0, min-content)',\n ':has([slot=description])': 'auto auto'\n },\n rowGap: {\n ':has([slot=description])': space(1)\n },\n alignItems: 'baseline',\n minHeight: controlSize(),\n height: 'min',\n textDecoration: 'none',\n cursor: {\n default: 'default',\n isLink: 'pointer'\n },\n transition: 'transform'\n },\n getAllowedOverrides()\n);\n\nexport let listboxHeader = style<{size?: 'S' | 'M' | 'L' | 'XL'}>({\n color: 'neutral',\n boxSizing: 'border-box',\n minHeight: controlSize(),\n paddingY: centerPadding(),\n marginX: {\n size: {\n S: `[${edgeToText(24)}]`,\n M: `[${edgeToText(32)}]`,\n L: `[${edgeToText(40)}]`,\n XL: `[${edgeToText(48)}]`\n }\n }\n});\n\nconst separatorWrapper = style({\n display: 'flex',\n marginX: {\n size: {\n S: `[${edgeToText(24)}]`,\n M: `[${edgeToText(32)}]`,\n L: `[${edgeToText(40)}]`,\n XL: `[${edgeToText(48)}]`\n }\n },\n height: 12,\n alignItems: 'center'\n});\n\nconst dividerStyle = style({\n backgroundColor: {\n default: 'gray-200',\n forcedColors: 'ButtonBorder'\n },\n borderRadius: 'full',\n height: '[2px]',\n width: 'full'\n});\n\nconst avatar = style({\n gridArea: 'icon',\n marginEnd: 'text-to-visual'\n});\n\n// Not from any design, just following the sizing of the existing rows\nexport const LOADER_ROW_HEIGHTS = {\n S: {\n medium: 24,\n large: 30\n },\n M: {\n medium: 32,\n large: 40\n },\n L: {\n medium: 40,\n large: 50\n },\n XL: {\n medium: 48,\n large: 60\n }\n};\n\nlet InternalComboboxContext = createContext<{size: 'S' | 'M' | 'L' | 'XL'}>({size: 'M'});\n\n/**\n * ComboBox allow users to choose a single option from a collapsible list of options when space is\n * limited.\n */\nexport const ComboBox = /*#__PURE__*/ (forwardRef as forwardRefType)(function ComboBox<T>(\n props: ComboBoxProps<T>,\n ref: Ref<TextFieldRef>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, ComboBoxContext);\n\n let formContext = useContext(FormContext);\n props = useFormProps(props);\n let {\n size = 'M',\n labelPosition = 'top',\n UNSAFE_className = '',\n UNSAFE_style,\n ...comboBoxProps\n } = props;\n\n return (\n <AriaComboBox\n {...comboBoxProps}\n allowsEmptyCollection\n style={UNSAFE_style}\n className={\n UNSAFE_className +\n style(field(), getAllowedOverrides())(\n {\n isInForm: !!formContext,\n labelPosition,\n size\n },\n props.styles\n )\n }>\n {({isDisabled, isOpen, isRequired, isInvalid}) => (\n <ComboboxInner\n {...props}\n isDisabled={isDisabled}\n isOpen={isOpen}\n isRequired={isRequired}\n isInvalid={isInvalid}\n ref={ref}\n />\n )}\n </AriaComboBox>\n );\n});\n\nexport interface ComboBoxItemProps\n extends\n Omit<\n ListBoxItemProps,\n | 'children'\n | 'style'\n | 'className'\n | 'render'\n | 'onClick'\n | 'onKeyDown'\n | 'onKeyUp'\n | keyof GlobalDOMAttributes\n >,\n StyleProps {\n children: ReactNode;\n}\n\nconst avatarSize = {\n S: 16,\n M: 20,\n L: 22,\n XL: 26\n} as const;\n\nconst checkmarkIconSize = {\n S: 'XS',\n M: 'M',\n L: 'L',\n XL: 'XL'\n} as const;\n\nexport function ComboBoxItem(props: ComboBoxItemProps): ReactNode {\n let ref = useRef(null);\n let isLink = props.href != null;\n let {size} = useContext(InternalComboboxContext);\n return (\n <ListBoxItem\n {...props}\n ref={ref}\n textValue={\n props.textValue ||\n (typeof props.children === 'string' ? (props.children as string) : undefined)\n }\n style={pressScale(ref, props.UNSAFE_style)}\n className={renderProps =>\n (props.UNSAFE_className || '') + listboxItem({...renderProps, size, isLink}, props.styles)\n }>\n {renderProps => {\n let {children} = props;\n return (\n <>\n <Provider\n values={[\n [\n IconContext,\n {\n slots: {\n icon: {\n render: centerBaseline({slot: 'icon', styles: iconCenterWrapper}),\n styles: icon\n }\n }\n }\n ],\n [\n AvatarContext,\n {\n slots: {\n avatar: {size: avatarSize[size], styles: avatar}\n }\n }\n ],\n [\n TextContext,\n {\n slots: {\n label: {styles: label({size})},\n description: {styles: description({...renderProps, size})}\n }\n }\n ]\n ]}>\n {!isLink && !props.onAction && (\n <CheckmarkIcon\n size={checkmarkIconSize[size]}\n className={checkmark({...renderProps, size})}\n />\n )}\n {typeof children === 'string' ? <Text slot=\"label\">{children}</Text> : children}\n </Provider>\n </>\n );\n }}\n </ListBoxItem>\n );\n}\n\nexport interface ComboBoxSectionProps<T> extends Omit<\n ListBoxSectionProps<T>,\n 'style' | 'className' | 'render' | keyof GlobalDOMAttributes\n> {}\nexport function ComboBoxSection<T>(props: ComboBoxSectionProps<T>): ReactNode {\n let {size} = useContext(InternalComboboxContext);\n return (\n <>\n <AriaListBoxSection {...props}>{props.children}</AriaListBoxSection>\n <Divider size={size} />\n </>\n );\n}\n\nconst ComboboxInner = forwardRef(function ComboboxInner(\n props: ComboBoxProps<any> & {isOpen: boolean},\n ref: ForwardedRef<TextFieldRef | null>\n) {\n let {\n direction = 'bottom',\n align = 'start',\n shouldFlip = true,\n menuWidth,\n label,\n description: descriptionMessage,\n errorMessage,\n children,\n defaultItems,\n items,\n size = 'M',\n labelPosition = 'top',\n labelAlign = 'start',\n necessityIndicator,\n loadingState,\n isDisabled,\n isOpen,\n isRequired,\n isInvalid,\n menuTrigger,\n onLoadMore\n } = props;\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n let inputRef = useRef<HTMLInputElement>(null);\n let domRef = useRef<HTMLDivElement>(null);\n let buttonRef = useRef<HTMLButtonElement>(null);\n // Expose imperative interface for ref\n useImperativeHandle(ref, () => ({\n ...createFocusableRef(domRef, inputRef),\n select() {\n if (inputRef.current) {\n inputRef.current.select();\n }\n },\n getInputElement() {\n return inputRef.current;\n }\n }));\n\n // Better way to encode this into a style? need to account for flipping\n let menuOffset: number;\n if (size === 'S') {\n menuOffset = 6;\n } else if (size === 'M') {\n menuOffset = 6;\n } else if (size === 'L') {\n menuOffset = 7;\n } else {\n menuOffset = 8;\n }\n\n let state = useContext(ComboBoxStateContext);\n let timeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let [showLoading, setShowLoading] = useState(false);\n let isLoadingOrFiltering = loadingState === 'loading' || loadingState === 'filtering';\n {\n /* Logic copied from S1 */\n }\n let showFieldSpinner = useMemo(\n () => showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading'),\n [showLoading, isOpen, menuTrigger, loadingState]\n );\n let spinnerId = useSlotId([showFieldSpinner]);\n\n let inputValue = state?.inputValue;\n let lastInputValue = useRef(inputValue);\n useEffect(() => {\n if (isLoadingOrFiltering && !showLoading) {\n if (timeout.current === null) {\n timeout.current = setTimeout(() => {\n setShowLoading(true);\n }, 500);\n }\n\n // If user is typing, clear the timer and restart since it is a new request\n if (inputValue !== lastInputValue.current) {\n clearTimeout(timeout.current);\n timeout.current = setTimeout(() => {\n setShowLoading(true);\n }, 500);\n }\n } else if (!isLoadingOrFiltering) {\n // If loading is no longer happening, clear any timers and hide the loading circle\n setShowLoading(false);\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = null;\n }\n\n lastInputValue.current = inputValue;\n }, [isLoadingOrFiltering, showLoading, inputValue]);\n\n useEffect(() => {\n return () => {\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = null;\n };\n }, []);\n\n let renderer;\n let listBoxLoadingCircle = (\n <ListBoxLoadMoreItem\n // Only show the spinner in the list when loading more\n isLoading={loadingState === 'loadingMore'}\n onLoadMore={onLoadMore}\n className={loadingWrapperStyles}>\n <ProgressCircle\n isIndeterminate\n size=\"S\"\n styles={progressCircleStyles({size})}\n // Same loading string as table\n aria-label={stringFormatter.format('table.loadingMore')}\n />\n </ListBoxLoadMoreItem>\n );\n\n if (typeof children === 'function') {\n renderer = (\n <>\n <Collection items={items ?? defaultItems} dependencies={props.dependencies}>\n {children}\n </Collection>\n {listBoxLoadingCircle}\n </>\n );\n } else {\n // TODO: is there a case where the user might provide items to the Combobox but doesn't provide a function renderer?\n // Same case for other components that have this logic (TableView/CardView/Picker)\n renderer = (\n <>\n {children}\n {listBoxLoadingCircle}\n </>\n );\n }\n let scale = useScale();\n\n return (\n <>\n <InternalComboboxContext.Provider value={{size}}>\n <FieldLabel\n isDisabled={isDisabled}\n isRequired={isRequired}\n size={size}\n labelPosition={labelPosition}\n labelAlign={labelAlign}\n necessityIndicator={necessityIndicator}\n contextualHelp={props.contextualHelp}>\n {label}\n </FieldLabel>\n <FieldGroup\n prefix={props.prefix}\n role=\"presentation\"\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n size={size}\n styles={style({\n ...fieldInput(),\n paddingStart: 'edge-to-text',\n // better way to do this one? it's not actually half, they are\n // [9, 4], [12, 6], [15, 8], [18, 8]\n paddingEnd: 'calc(self(height, self(minHeight)) * 3 / 16 - self(borderEndWidth, 2px))'\n })({size})}>\n <InputContext.Consumer>\n {ctx => (\n <InputContext.Provider\n value={{\n ...ctx,\n ref: mergeRefs((ctx as any)?.ref, inputRef)\n }}>\n <Input aria-describedby={spinnerId} />\n </InputContext.Provider>\n )}\n </InputContext.Consumer>\n {isInvalid && <FieldErrorIcon isDisabled={isDisabled} />}\n {showFieldSpinner && (\n <ProgressCircle\n id={spinnerId}\n isIndeterminate\n size=\"S\"\n styles={progressCircleStyles({size, isInput: true})}\n aria-label={stringFormatter.format('table.loading')}\n />\n )}\n <Button\n ref={buttonRef}\n // Prevent press scale from sticking while ComboBox is open.\n // @ts-ignore\n isPressed={false}\n style={renderProps => pressScale(buttonRef)(renderProps)}\n className={renderProps =>\n inputButton({\n ...renderProps,\n size,\n isOpen\n })\n }>\n <ChevronIcon size={size} className={iconStyles} />\n </Button>\n </FieldGroup>\n <HelpText\n size={size}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n description={descriptionMessage}>\n {errorMessage}\n </HelpText>\n <Popover\n hideArrow\n offset={menuOffset}\n placement={`${direction} ${align}` as Placement}\n shouldFlip={shouldFlip}\n UNSAFE_style={\n {\n '--trigger-width': menuWidth ? menuWidth + 'px' : undefined\n } as CSSProperties\n }\n padding=\"none\"\n styles={style({\n minWidth: '--trigger-width',\n width: '--trigger-width'\n })}>\n <div\n className={style({\n display: 'flex',\n size: 'full'\n })}>\n <Provider\n values={[\n [HeaderContext, {styles: listboxHeader({size})}],\n [\n HeadingContext,\n {\n // @ts-ignore\n role: 'presentation',\n styles: sectionHeading\n }\n ],\n [\n TextContext,\n {\n slots: {\n description: {\n styles: description({size, isFocused: false, isDisabled: false})\n }\n }\n }\n ]\n ]}>\n <Virtualizer\n layout={ListLayout}\n layoutOptions={{\n estimatedRowHeight: 32,\n padding: 8,\n estimatedHeadingHeight: 50,\n loaderHeight: LOADER_ROW_HEIGHTS[size][scale]\n }}>\n <ListBox\n dependencies={props.dependencies}\n renderEmptyState={() => (\n <span className={emptyStateText({size})}>\n {loadingState === 'loading'\n ? stringFormatter.format('table.loading')\n : stringFormatter.format('combobox.noResults')}\n </span>\n )}\n items={items}\n className={listbox({size})}>\n {renderer}\n </ListBox>\n </Virtualizer>\n </Provider>\n </div>\n </Popover>\n </InternalComboboxContext.Provider>\n </>\n );\n});\n\nclass SeparatorNode extends CollectionNode<any> {\n static readonly type = 'separator';\n\n filter(\n collection: BaseCollection<any>,\n newCollection: BaseCollection<any>\n ): CollectionNode<any> | null {\n let prevItem = newCollection.getItem(this.prevKey!);\n if (prevItem && prevItem.type !== 'separator') {\n let clone = this.clone();\n newCollection.addDescendants(clone, collection);\n return clone;\n }\n\n return null;\n }\n}\n\nexport const Divider = /*#__PURE__*/ createLeafComponent(\n SeparatorNode,\n function Divider(\n {size}: {size?: 'S' | 'M' | 'L' | 'XL'},\n ref: ForwardedRef<HTMLDivElement>,\n node: Node<unknown>\n ) {\n let listState = useContext(ListStateContext)!;\n\n let nextNode = node.nextKey != null && listState.collection.getItem(node.nextKey);\n if (\n node.prevKey == null ||\n !nextNode ||\n nextNode.type === 'separator' ||\n (nextNode.type === 'loader' && nextNode.nextKey == null)\n ) {\n return null;\n }\n\n return (\n <div className={separatorWrapper({size})}>\n <div ref={ref} className={dividerStyle} />\n </div>\n );\n }\n);\n"],"names":[],"version":3,"file":"ComboBox.cjs.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-spectrum/s2/src/ComboBox.tsx"],"sourcesContent":["/*\n * Copyright 2024 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\nimport {\n ComboBox as AriaComboBox,\n ComboBoxProps as AriaComboBoxProps,\n ComboBoxStateContext\n} from 'react-aria-components/ComboBox';\nimport {\n ListBoxSection as AriaListBoxSection,\n ListBox,\n ListBoxItem,\n ListBoxItemProps,\n ListBoxLoadMoreItem,\n ListBoxProps,\n ListBoxSectionProps,\n ListStateContext\n} from 'react-aria-components/ListBox';\nimport {PopoverProps as AriaPopoverProps, Placement} from 'react-aria-components/Popover';\nimport {\n AsyncLoadable,\n GlobalDOMAttributes,\n HelpTextProps,\n LoadingState,\n SingleSelection,\n SpectrumLabelableProps\n} from '@react-types/shared';\nimport {AvatarContext} from './Avatar';\nimport {BaseCollection, CollectionNode} from 'react-aria/private/collections/BaseCollection';\nimport {baseColor, centerPadding, focusRing, space, style} from '../style' with {type: 'macro'};\nimport {Button, ButtonRenderProps} from 'react-aria-components/Button';\nimport {centerBaseline} from './CenterBaseline';\nimport {checkmark, description, icon, iconCenterWrapper, label, sectionHeading} from './Menu';\nimport CheckmarkIcon from '../ui-icons/Checkmark';\nimport ChevronIcon from '../ui-icons/Chevron';\nimport {Collection} from 'react-aria/Collection';\nimport {ContextValue, Provider} from 'react-aria-components/slots';\nimport {\n control,\n controlBorderRadius,\n controlFont,\n controlSize,\n field,\n fieldInput,\n getAllowedOverrides,\n StyleProps\n} from './style-utils' with {type: 'macro'};\nimport {\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n ReactNode,\n Ref,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {createFocusableRef} from './useDOMRef';\nimport {createLeafComponent} from 'react-aria/CollectionBuilder';\nimport {edgeToText} from '../style/spectrum-theme' with {type: 'macro'};\nimport {FieldErrorIcon, FieldGroup, FieldLabel, HelpText, Input} from './Field';\nimport {FormContext, useFormProps} from './Form';\nimport {forwardRefType} from './types';\nimport {HeaderContext, HeadingContext, Text, TextContext} from './Content';\nimport {IconContext} from './Icon';\nimport {InputContext, InputProps} from 'react-aria-components/Input';\nimport intlMessages from '../intl/*.json';\nimport {ListLayout} from 'react-stately/useVirtualizerState';\nimport {mergeRefs} from 'react-aria/mergeRefs';\nimport {Node} from '@react-types/shared';\nimport {Popover} from './Popover';\nimport {pressScale} from './pressScale';\nimport {ProgressCircle} from './ProgressCircle';\nimport {TextFieldRef} from './TextField';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useScale} from './utils';\nimport {useSlotId} from 'react-aria/private/utils/useId';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\nimport {Virtualizer} from 'react-aria-components/Virtualizer';\n\nexport interface ComboboxStyleProps {\n /**\n * The size of the Combobox.\n *\n * @default 'M'\n */\n size?: 'S' | 'M' | 'L' | 'XL';\n /**\n * The prefix to display in the ComboBox. A non-interactive element that appears before the input.\n */\n prefix?: ReactNode;\n}\nexport interface ComboBoxProps<T>\n extends\n Omit<\n AriaComboBoxProps<T>,\n | 'children'\n | 'style'\n | 'className'\n | 'render'\n | 'defaultFilter'\n | 'allowsEmptyCollection'\n | 'selectionMode'\n | 'selectedKey'\n | 'defaultSelectedKey'\n | 'onSelectionChange'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | keyof GlobalDOMAttributes\n >,\n Omit<SingleSelection, 'disallowEmptySelection'>,\n ComboboxStyleProps,\n StyleProps,\n SpectrumLabelableProps,\n HelpTextProps,\n Pick<ListBoxProps<T>, 'items' | 'dependencies'>,\n Pick<AriaPopoverProps, 'shouldFlip'>,\n Pick<AsyncLoadable, 'onLoadMore'>,\n Pick<InputProps, 'placeholder'> {\n /** The contents of the collection. */\n children: ReactNode | ((item: T) => ReactNode);\n /**\n * Direction the menu will render relative to the ComboBox.\n *\n * @default 'bottom'\n */\n direction?: 'bottom' | 'top';\n /**\n * Alignment of the menu relative to the input target.\n *\n * @default 'start'\n */\n align?: 'start' | 'end';\n /**\n * Width of the menu. By default, matches width of the trigger. Note that the minimum width of the\n * dropdown is always equal to the trigger's width.\n */\n menuWidth?: number;\n /**\n * The current loading state of the ComboBox. Determines whether or not the progress circle should\n * be shown.\n */\n loadingState?: LoadingState;\n}\n\nexport const ComboBoxContext =\n createContext<ContextValue<Partial<ComboBoxProps<any>>, TextFieldRef>>(null);\n\nconst inputButton = style<ButtonRenderProps & {isOpen: boolean; size: 'S' | 'M' | 'L' | 'XL'}>({\n ...controlBorderRadius('sm'),\n display: 'flex',\n outlineStyle: 'none',\n textAlign: 'center',\n borderStyle: 'none',\n alignItems: 'center',\n justifyContent: 'center',\n size: {\n size: {\n S: 16,\n M: 20,\n L: 24,\n XL: 32\n }\n },\n marginStart: 'text-to-control',\n aspectRatio: 'square',\n flexShrink: 0,\n transition: {\n default: 'default',\n forcedColors: 'none'\n },\n backgroundColor: {\n default: baseColor('gray-100'),\n isOpen: 'gray-200',\n isDisabled: 'disabled',\n forcedColors: {\n default: 'ButtonText',\n isHovered: 'Highlight',\n isOpen: 'Highlight',\n isDisabled: 'GrayText'\n }\n },\n color: {\n default: baseColor('neutral'),\n isDisabled: 'disabled',\n forcedColors: 'ButtonFace'\n }\n});\n\nconst iconStyles = style({\n flexShrink: 0,\n rotate: 90,\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n }\n});\n\nconst loadingWrapperStyles = style({\n gridColumnStart: '1',\n gridColumnEnd: '-1',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginY: 8\n});\n\nconst progressCircleStyles = style({\n size: {\n size: {\n S: 16,\n M: 20,\n L: 22,\n XL: 26\n }\n },\n marginStart: {\n isInput: 'text-to-visual'\n }\n});\n\nconst emptyStateText = style({\n height: {\n size: {\n S: 24,\n M: 32,\n L: 40,\n XL: 48\n }\n },\n font: {\n size: {\n S: 'ui-sm',\n M: 'ui',\n L: 'ui-lg',\n XL: 'ui-xl'\n }\n },\n display: 'flex',\n alignItems: 'center',\n paddingStart: 'edge-to-text'\n});\n\nexport let listbox = style<{size: 'S' | 'M' | 'L' | 'XL'}>({\n width: 'full',\n boxSizing: 'border-box',\n maxHeight: '[inherit]',\n // TODO: Might help with horizontal scrolling happening on Windows, will need to check somehow. Otherwise, revert back to overflow: auto\n overflowY: 'auto',\n overflowX: 'hidden',\n fontFamily: 'sans',\n fontSize: controlFont(),\n outlineStyle: 'none'\n});\n\nexport let listboxItem = style(\n {\n ...focusRing(),\n ...control({shape: 'default', wrap: true, icon: true}),\n columnGap: 0,\n paddingX: 0,\n paddingBottom: '--labelPadding',\n backgroundColor: {\n default: 'transparent',\n isFocused: baseColor('gray-100').isFocusVisible\n },\n color: {\n default: baseColor('neutral'),\n isDisabled: {\n default: 'disabled',\n forcedColors: 'GrayText'\n }\n },\n position: 'relative',\n gridColumnStart: 1,\n gridColumnEnd: -1,\n display: 'grid',\n gridTemplateAreas: ['. checkmark icon label .', '. . . description .'],\n gridTemplateColumns: {\n size: {\n S: [edgeToText(24), 'auto', 'auto', 'minmax(0, 1fr)', edgeToText(24)],\n M: [edgeToText(32), 'auto', 'auto', 'minmax(0, 1fr)', edgeToText(32)],\n L: [edgeToText(40), 'auto', 'auto', 'minmax(0, 1fr)', edgeToText(40)],\n XL: [edgeToText(48), 'auto', 'auto', 'minmax(0, 1fr)', edgeToText(48)]\n }\n },\n gridTemplateRows: {\n // min-content prevents second row from 'auto'ing to a size larger then 0 when empty\n default: 'auto minmax(0, min-content)',\n ':has([slot=description])': 'auto auto'\n },\n rowGap: {\n ':has([slot=description])': space(1)\n },\n alignItems: 'baseline',\n minHeight: controlSize(),\n height: 'min',\n textDecoration: 'none',\n cursor: {\n default: 'default',\n isLink: 'pointer'\n },\n transition: 'transform'\n },\n getAllowedOverrides()\n);\n\nexport let listboxHeader = style<{size?: 'S' | 'M' | 'L' | 'XL'}>({\n color: 'neutral',\n boxSizing: 'border-box',\n minHeight: controlSize(),\n paddingY: centerPadding(),\n marginX: {\n size: {\n S: `[${edgeToText(24)}]`,\n M: `[${edgeToText(32)}]`,\n L: `[${edgeToText(40)}]`,\n XL: `[${edgeToText(48)}]`\n }\n }\n});\n\nconst separatorWrapper = style({\n display: 'flex',\n marginX: {\n size: {\n S: `[${edgeToText(24)}]`,\n M: `[${edgeToText(32)}]`,\n L: `[${edgeToText(40)}]`,\n XL: `[${edgeToText(48)}]`\n }\n },\n height: 12,\n alignItems: 'center'\n});\n\nconst dividerStyle = style({\n backgroundColor: {\n default: 'gray-200',\n forcedColors: 'ButtonBorder'\n },\n borderRadius: 'full',\n height: '[2px]',\n width: 'full'\n});\n\nconst avatar = style({\n gridArea: 'icon',\n marginEnd: 'text-to-visual'\n});\n\n// Not from any design, just following the sizing of the existing rows\nexport const LOADER_ROW_HEIGHTS = {\n S: {\n medium: 24,\n large: 30\n },\n M: {\n medium: 32,\n large: 40\n },\n L: {\n medium: 40,\n large: 50\n },\n XL: {\n medium: 48,\n large: 60\n }\n};\n\nlet InternalComboboxContext = createContext<{size: 'S' | 'M' | 'L' | 'XL'}>({size: 'M'});\n\n/**\n * ComboBox allow users to choose a single option from a collapsible list of options when space is\n * limited.\n */\nexport const ComboBox = /*#__PURE__*/ (forwardRef as forwardRefType)(function ComboBox<T>(\n props: ComboBoxProps<T>,\n ref: Ref<TextFieldRef>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, ComboBoxContext);\n\n let formContext = useContext(FormContext);\n props = useFormProps(props);\n let {\n size = 'M',\n labelPosition = 'top',\n UNSAFE_className = '',\n UNSAFE_style,\n ...comboBoxProps\n } = props;\n\n return (\n <AriaComboBox\n {...comboBoxProps}\n allowsEmptyCollection\n style={UNSAFE_style}\n className={\n UNSAFE_className +\n style(field(), getAllowedOverrides())(\n {\n isInForm: !!formContext,\n labelPosition,\n size\n },\n props.styles\n )\n }>\n {({isDisabled, isOpen, isRequired, isInvalid}) => (\n <ComboboxInner\n {...props}\n isDisabled={isDisabled}\n isOpen={isOpen}\n isRequired={isRequired}\n isInvalid={isInvalid}\n ref={ref}\n />\n )}\n </AriaComboBox>\n );\n});\n\nexport interface ComboBoxItemProps\n extends\n Omit<\n ListBoxItemProps,\n | 'children'\n | 'style'\n | 'className'\n | 'render'\n | 'onClick'\n | 'onKeyDown'\n | 'onKeyUp'\n | keyof GlobalDOMAttributes\n >,\n StyleProps {\n children: ReactNode;\n}\n\nconst avatarSize = {\n S: 16,\n M: 20,\n L: 22,\n XL: 26\n} as const;\n\nconst checkmarkIconSize = {\n S: 'XS',\n M: 'M',\n L: 'L',\n XL: 'XL'\n} as const;\n\nexport function ComboBoxItem(props: ComboBoxItemProps): ReactNode {\n let ref = useRef(null);\n let isLink = props.href != null;\n let {size} = useContext(InternalComboboxContext);\n return (\n <ListBoxItem\n {...props}\n ref={ref}\n textValue={\n props.textValue ||\n (typeof props.children === 'string' ? (props.children as string) : undefined)\n }\n style={pressScale(ref, props.UNSAFE_style)}\n className={renderProps =>\n (props.UNSAFE_className || '') + listboxItem({...renderProps, size, isLink}, props.styles)\n }>\n {renderProps => {\n let {children} = props;\n return (\n <>\n <Provider\n values={[\n [\n IconContext,\n {\n slots: {\n icon: {\n render: centerBaseline({slot: 'icon', styles: iconCenterWrapper}),\n styles: icon\n }\n }\n }\n ],\n [\n AvatarContext,\n {\n slots: {\n avatar: {size: avatarSize[size], styles: avatar}\n }\n }\n ],\n [\n TextContext,\n {\n slots: {\n label: {styles: label({size})},\n description: {styles: description({...renderProps, size})}\n }\n }\n ]\n ]}>\n {!isLink && !props.onAction && (\n <CheckmarkIcon\n size={checkmarkIconSize[size]}\n className={checkmark({...renderProps, size})}\n />\n )}\n {typeof children === 'string' ? <Text slot=\"label\">{children}</Text> : children}\n </Provider>\n </>\n );\n }}\n </ListBoxItem>\n );\n}\n\nexport interface ComboBoxSectionProps<T> extends Omit<\n ListBoxSectionProps<T>,\n 'style' | 'className' | 'render' | keyof GlobalDOMAttributes\n> {}\nexport function ComboBoxSection<T>(props: ComboBoxSectionProps<T>): ReactNode {\n let {size} = useContext(InternalComboboxContext);\n return (\n <>\n <AriaListBoxSection {...props}>{props.children}</AriaListBoxSection>\n <Divider size={size} />\n </>\n );\n}\n\nconst ComboboxInner = forwardRef(function ComboboxInner(\n props: ComboBoxProps<any> & {isOpen: boolean},\n ref: ForwardedRef<TextFieldRef | null>\n) {\n let {\n direction = 'bottom',\n align = 'start',\n shouldFlip = true,\n menuWidth,\n label,\n description: descriptionMessage,\n errorMessage,\n children,\n defaultItems,\n items,\n size = 'M',\n labelPosition = 'top',\n labelAlign = 'start',\n necessityIndicator,\n loadingState,\n isDisabled,\n isOpen,\n isRequired,\n isInvalid,\n menuTrigger,\n onLoadMore\n } = props;\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n let inputRef = useRef<HTMLInputElement>(null);\n let domRef = useRef<HTMLDivElement>(null);\n let buttonRef = useRef<HTMLButtonElement>(null);\n // Expose imperative interface for ref\n useImperativeHandle(ref, () => ({\n ...createFocusableRef(domRef, inputRef),\n select() {\n if (inputRef.current) {\n inputRef.current.select();\n }\n },\n getInputElement() {\n return inputRef.current;\n }\n }));\n\n // Better way to encode this into a style? need to account for flipping\n let menuOffset: number;\n if (size === 'S') {\n menuOffset = 6;\n } else if (size === 'M') {\n menuOffset = 6;\n } else if (size === 'L') {\n menuOffset = 7;\n } else {\n menuOffset = 8;\n }\n\n let state = useContext(ComboBoxStateContext);\n let timeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let [showLoading, setShowLoading] = useState(false);\n let isLoadingOrFiltering = loadingState === 'loading' || loadingState === 'filtering';\n {\n /* Logic copied from S1 */\n }\n let showFieldSpinner = useMemo(\n () => showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading'),\n [showLoading, isOpen, menuTrigger, loadingState]\n );\n let spinnerId = useSlotId([showFieldSpinner]);\n\n let inputValue = state?.inputValue;\n let lastInputValue = useRef(inputValue);\n useEffect(() => {\n if (isLoadingOrFiltering && !showLoading) {\n if (timeout.current === null) {\n timeout.current = setTimeout(() => {\n setShowLoading(true);\n }, 500);\n }\n\n // If user is typing, clear the timer and restart since it is a new request\n if (inputValue !== lastInputValue.current) {\n clearTimeout(timeout.current);\n timeout.current = setTimeout(() => {\n setShowLoading(true);\n }, 500);\n }\n } else if (!isLoadingOrFiltering) {\n // If loading is no longer happening, clear any timers and hide the loading circle\n setShowLoading(false);\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = null;\n }\n\n lastInputValue.current = inputValue;\n }, [isLoadingOrFiltering, showLoading, inputValue]);\n\n useEffect(() => {\n return () => {\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = null;\n };\n }, []);\n\n let renderer;\n let listBoxLoadingCircle = (\n <ListBoxLoadMoreItem\n // Only show the spinner in the list when loading more\n isLoading={loadingState === 'loadingMore'}\n onLoadMore={onLoadMore}\n className={loadingWrapperStyles}>\n <ProgressCircle\n isIndeterminate\n size=\"S\"\n styles={progressCircleStyles({size})}\n // Same loading string as table\n aria-label={stringFormatter.format('table.loadingMore')}\n />\n </ListBoxLoadMoreItem>\n );\n\n if (typeof children === 'function') {\n renderer = (\n <>\n <Collection items={items ?? defaultItems} dependencies={props.dependencies}>\n {children}\n </Collection>\n {listBoxLoadingCircle}\n </>\n );\n } else {\n // TODO: is there a case where the user might provide items to the Combobox but doesn't provide a function renderer?\n // Same case for other components that have this logic (TableView/CardView/Picker)\n renderer = (\n <>\n {children}\n {listBoxLoadingCircle}\n </>\n );\n }\n let scale = useScale();\n\n return (\n <>\n <InternalComboboxContext.Provider value={{size}}>\n <FieldLabel\n isDisabled={isDisabled}\n isRequired={isRequired}\n size={size}\n labelPosition={labelPosition}\n labelAlign={labelAlign}\n necessityIndicator={necessityIndicator}\n contextualHelp={props.contextualHelp}>\n {label}\n </FieldLabel>\n <FieldGroup\n prefix={props.prefix}\n role=\"presentation\"\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n size={size}\n styles={style({\n ...fieldInput(),\n paddingStart: 'edge-to-text',\n // better way to do this one? it's not actually half, they are\n // [9, 4], [12, 6], [15, 8], [18, 8]\n paddingEnd: 'calc(self(height, self(minHeight)) * 3 / 16 - self(borderEndWidth, 2px))'\n })({size})}>\n <InputContext.Consumer>\n {ctx => (\n <InputContext.Provider\n value={{\n ...ctx,\n ref: mergeRefs((ctx as any)?.ref, inputRef)\n }}>\n <Input aria-describedby={spinnerId} />\n </InputContext.Provider>\n )}\n </InputContext.Consumer>\n {isInvalid && <FieldErrorIcon isDisabled={isDisabled} />}\n {showFieldSpinner && (\n <ProgressCircle\n id={spinnerId}\n isIndeterminate\n size=\"S\"\n styles={progressCircleStyles({size, isInput: true})}\n aria-label={stringFormatter.format('table.loading')}\n />\n )}\n <Button\n ref={buttonRef}\n // Prevent press scale from sticking while ComboBox is open.\n // @ts-ignore\n isPressed={false}\n style={renderProps => pressScale(buttonRef)(renderProps)}\n className={renderProps =>\n inputButton({\n ...renderProps,\n size,\n isOpen\n })\n }>\n <ChevronIcon size={size} className={iconStyles} />\n </Button>\n </FieldGroup>\n <HelpText\n size={size}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n description={descriptionMessage}>\n {errorMessage}\n </HelpText>\n <Popover\n hideArrow\n offset={menuOffset}\n placement={`${direction} ${align}` as Placement}\n shouldFlip={shouldFlip}\n UNSAFE_style={\n {\n '--trigger-width': menuWidth ? menuWidth + 'px' : undefined\n } as CSSProperties\n }\n padding=\"none\"\n styles={style({\n minWidth: '--trigger-width',\n width: '--trigger-width'\n })}>\n <div\n className={style({\n display: 'flex',\n size: 'full'\n })}>\n <Provider\n values={[\n [HeaderContext, {styles: listboxHeader({size})}],\n [\n HeadingContext,\n {\n // @ts-ignore\n role: 'presentation',\n styles: sectionHeading\n }\n ],\n [\n TextContext,\n {\n slots: {\n description: {\n styles: description({size, isFocused: false, isDisabled: false})\n }\n }\n }\n ]\n ]}>\n <Virtualizer\n layout={ListLayout}\n layoutOptions={{\n estimatedRowHeight: 32,\n padding: 8,\n estimatedHeadingHeight: 50,\n loaderHeight: LOADER_ROW_HEIGHTS[size][scale]\n }}>\n <ListBox\n dependencies={props.dependencies}\n renderEmptyState={() => (\n <span className={emptyStateText({size})}>\n {loadingState === 'loading'\n ? stringFormatter.format('table.loading')\n : stringFormatter.format('combobox.noResults')}\n </span>\n )}\n items={items}\n className={listbox({size})}>\n {renderer}\n </ListBox>\n </Virtualizer>\n </Provider>\n </div>\n </Popover>\n </InternalComboboxContext.Provider>\n </>\n );\n});\n\nclass SeparatorNode extends CollectionNode<any> {\n static readonly type = 'separator';\n\n filter(\n collection: BaseCollection<any>,\n newCollection: BaseCollection<any>\n ): CollectionNode<any> | null {\n let prevItem = newCollection.getItem(this.prevKey!);\n if (prevItem && prevItem.type !== 'separator') {\n let clone = this.clone();\n newCollection.addDescendants(clone, collection);\n return clone;\n }\n\n return null;\n }\n}\n\nexport const Divider = /*#__PURE__*/ createLeafComponent(\n SeparatorNode,\n function Divider(\n {size}: {size?: 'S' | 'M' | 'L' | 'XL'},\n ref: ForwardedRef<HTMLDivElement>,\n node: Node<unknown>\n ) {\n let listState = useContext(ListStateContext)!;\n\n let nextNode = node.nextKey != null && listState.collection.getItem(node.nextKey);\n if (\n node.prevKey == null ||\n !nextNode ||\n nextNode.type === 'separator' ||\n (nextNode.type === 'loader' && nextNode.nextKey == null)\n ) {\n return null;\n }\n\n return (\n <div className={separatorWrapper({size})}>\n <div ref={ref} className={dividerStyle} />\n </div>\n );\n }\n);\n"],"names":[],"version":3,"file":"ComboBox.cjs.map"}
|