@cube-dev/ui-kit 0.0.0-canary-bef9600 → 0.0.0-canary-e3f8a1a
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/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Button/Button.js +11 -5
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +27 -25
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemActionsWrapper.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -4
- package/dist/components/actions/Menu/styled.js.map +1 -1
- package/dist/components/actions/actions-run.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.d.ts +4 -4
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.js +3 -3
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +7 -3
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +28 -15
- package/dist/components/content/Layout/Layout.js.map +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +20 -10
- package/dist/components/content/Layout/LayoutContext.js.map +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +12 -9
- package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +3 -3
- package/dist/components/content/use-auto-tooltip.js.map +1 -1
- package/dist/components/data/DataTable/DataTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/TreeGridTable.js +1 -1
- package/dist/components/data/TableBase/column-header.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-styles.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-menu.js +1 -1
- package/dist/components/data/TableBase/use-column-order.js +1 -1
- package/dist/components/data/TableBase/use-column-window.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
- package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +2 -2
- package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +5 -5
- package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.d.ts +26 -6
- package/dist/components/fields/ComboBox/ComboBox.js +1095 -619
- package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/fields/ComboBox/comboBoxOptions.js +84 -0
- package/dist/components/fields/ComboBox/comboBoxOptions.js.map +1 -0
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.d.ts +2 -2
- package/dist/components/fields/Input/Input.js +2 -2
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.d.ts +10 -4
- package/dist/components/fields/ListBox/ListBox.js +293 -143
- package/dist/components/fields/ListBox/ListBox.js.map +1 -1
- package/dist/components/fields/ListBox/optionId.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +15 -12
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
- package/dist/components/fields/NumberInput/NumberInput.d.ts +0 -1
- package/dist/components/fields/NumberInput/NumberInput.js +136 -128
- package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +38 -48
- package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.d.ts +1 -2
- package/dist/components/fields/PasswordInput/PasswordInput.js +77 -111
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.d.ts +1 -1
- package/dist/components/fields/Picker/Picker.js +8 -3
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.d.ts +8 -8
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +2 -2
- package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.d.ts +8 -3
- package/dist/components/fields/SearchInput/SearchInput.js +22 -29
- package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
- package/dist/components/fields/Select/Select.d.ts +12 -1
- package/dist/components/fields/Select/Select.js +365 -207
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +3 -4
- package/dist/components/fields/Slider/RangeSlider.js.map +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TagInput/TagInput.js +1 -1
- package/dist/components/fields/TagInput/TagList.js +1 -1
- package/dist/components/fields/TagInput/useActiveOption.js +1 -1
- package/dist/components/fields/TagInput/useTagError.js +1 -1
- package/dist/components/fields/TextArea/TextArea.d.ts +0 -1
- package/dist/components/fields/TextArea/TextArea.js +49 -63
- package/dist/components/fields/TextArea/TextArea.js.map +1 -1
- package/dist/components/fields/TextInput/TextInput.d.ts +1 -1
- package/dist/components/fields/TextInput/TextInput.js +42 -46
- package/dist/components/fields/TextInput/TextInput.js.map +1 -1
- package/dist/components/fields/TextInput/TextInputBase.d.ts +6 -2
- package/dist/components/fields/TextInput/TextInputBase.js +32 -10
- package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
- package/dist/components/fields/TextInput/displayed-validation.js +50 -0
- package/dist/components/fields/TextInput/displayed-validation.js.map +1 -0
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +2 -2
- package/dist/components/fields/TriggerActions.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/fields/index.d.ts +2 -2
- package/dist/components/fields/option-origin-press.js +78 -0
- package/dist/components/fields/option-origin-press.js.map +1 -0
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/FieldWrapper/field-description.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ModernFormRoot.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/backend.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/modern/actions.js +1 -1
- package/dist/components/form/Form/modern/context.js +1 -1
- package/dist/components/form/Form/modern/controller.js +1 -1
- package/dist/components/form/Form/modern/field-binding.js +1 -1
- package/dist/components/form/Form/modern/field.js +1 -1
- package/dist/components/form/Form/modern/react.js +1 -1
- package/dist/components/form/Form/modern/store.js +1 -1
- package/dist/components/form/Form/modern/validation.js +1 -1
- package/dist/components/form/Form/modern/values.js +1 -1
- package/dist/components/form/Form/reset-unbound-controls.js +1 -1
- package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/field-chrome.js +1 -1
- package/dist/components/form/legacy-tooltip.js +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.d.ts +6 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +3 -2
- package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +3 -2
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +28 -14
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.d.ts +7 -3
- package/dist/components/overlays/Dialog/DialogTrigger.js +149 -132
- package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
- package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/default-button-text.js +1 -1
- package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-open-sync.js +83 -0
- package/dist/components/overlays/Dialog/use-dialog-open-sync.js.map +1 -0
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +3 -2
- package/dist/components/overlays/Modal/Overlay.js.map +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Popover.js.map +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Modal/modal-containment.js +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.d.ts +8 -0
- package/dist/components/overlays/Tooltip/Tooltip.js +16 -22
- package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.d.ts +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +163 -113
- package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/overlays/Tooltip/context.js.map +1 -1
- package/dist/components/overlays/Tooltip/split-trigger-props.js +6 -5
- package/dist/components/overlays/Tooltip/split-trigger-props.js.map +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +11 -17
- package/dist/eslint-plugin/defaults.generated.js.map +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +6 -4
- package/dist/i18n/locales/en-US/uikit.js +6 -4
- package/dist/i18n/locales/en-US/uikit.json.d.ts +3 -1
- package/dist/i18n/locales/es-ES/uikit.js +6 -4
- package/dist/i18n/locales/es-MX/uikit.js +6 -4
- package/dist/i18n/locales/fr-FR/uikit.js +6 -4
- package/dist/i18n/locales/it-IT/uikit.js +6 -4
- package/dist/i18n/locales/ja-JP/uikit.js +6 -4
- package/dist/i18n/locales/nb-NO/uikit.js +6 -4
- package/dist/i18n/locales/pt-BR/uikit.js +6 -4
- package/dist/i18n/locales/pt-PT/uikit.js +6 -4
- package/dist/i18n/locales/sv-SE/uikit.js +6 -4
- package/dist/i18n/locales/vi-VN/uikit.js +6 -4
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/namespace.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigation-url.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/providers/use-navigation.js +1 -1
- package/dist/tokens/all-tokens.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/color-seed.js +1 -1
- package/dist/tokens/color-theme.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/legacy-color.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +1 -1
- package/dist/tokens/resolve.js +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/colors.js +1 -1
- package/dist/utils/dotize.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +18 -9
- package/dist/utils/react/nullableValue.js.map +1 -1
- package/dist/utils/react/overlayKeyPropagation.js +1 -1
- package/dist/utils/react/programmaticFocus.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useScheme.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/components/actions/Button.md +8 -2
- package/docs/components/content/InfoBadge.md +2 -0
- package/docs/components/content/ItemBadge.md +4 -0
- package/docs/components/content/Layout.md +2 -1
- package/docs/components/fields/ComboBox.md +25 -18
- package/docs/components/fields/FilterListBox.md +2 -2
- package/docs/components/fields/FilterPicker.md +2 -2
- package/docs/components/fields/ListBox.md +14 -10
- package/docs/components/fields/NumberInput.md +10 -10
- package/docs/components/fields/PasswordInput.md +6 -7
- package/docs/components/fields/Picker.md +6 -5
- package/docs/components/fields/RadioGroup.md +1 -1
- package/docs/components/fields/SearchInput.md +7 -6
- package/docs/components/fields/Select.md +14 -8
- package/docs/components/fields/TextArea.md +4 -3
- package/docs/components/fields/TextInput.md +13 -6
- package/docs/components/overlays/AlertDialog.md +7 -1
- package/docs/components/overlays/Dialog.md +5 -5
- package/docs/components/overlays/DialogTrigger.md +6 -6
- package/docs/components/overlays/Tooltip.md +17 -6
- package/docs/components/overlays/TooltipTrigger.md +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBox.js","names":["KeyboardEvent","AriaKeyboardEvent","AriaLabelingProps","CollectionChildren","FocusableRef","Key","BASE_STYLES","BasePropsWithoutChildren","BaseStyleProps","COLOR_STYLES","ColorStyleProps","OUTER_STYLES","OuterStyleProps","Styles","tasty","React","ForwardedRef","forwardRef","ReactElement","ReactNode","RefObject","useCallback","useEffect","useMemo","useRef","useState","useFilter","useKeyboard","Section","BaseSection","useListState","useEvent","useI18n","CloseIcon","DirectionIcon","LoadingIcon","FieldBaseProps","TextFieldKeyboardProps","generateRandomId","useCombinedRefs","useLayoutEffect","useFocus","usePopoverSync","extractStyles","CollectionItem","Item","getValidationIcon","getValidationMods","useFieldProps","wrapWithField","getListBoxOptionId","filterCollectionNodes","getEdgeVisibleKey","getNextVisibleKey","ListBoxPopover","ListStateLike","markKeyboardFocus","useCompositeFocus","DEFAULT_INPUT_STYLES","INPUT_WRAPPER_STYLES","FilterFn","textValue","inputValue","PopoverTriggerAction","ComboBoxWrapperElement","qa","styles","InputElement","as","CubeComboBoxProps","selectedKey","defaultSelectedKey","onSelectionChange","key","defaultInputValue","onInputChange","value","placeholder","autoFocus","autoComplete","onFocus","onBlur","onKeyDown","popoverTrigger","items","Iterable","T","children","item","filter","allowsCustomValue","shouldCommitOnBlur","clearOnBlur","isClearable","onClear","icon","prefix","suffix","hideTrigger","size","inputRef","HTMLInputElement","wrapperRef","HTMLDivElement","listBoxRef","popoverRef","triggerRef","HTMLButtonElement","inputStyles","triggerStyles","listBoxStyles","overlayStyles","optionStyles","sectionStyles","headingStyles","listGap","isDisabled","isLoading","disabledKeys","shouldFlip","direction","overlayOffset","containerPadding","isReadOnly","suffixPosition","sortSelectedToTop","onOpenChange","isOpen","PROP_STYLES","UseComboBoxStateProps","comboBoxId","HTMLElement","UseComboBoxStateReturn","effectiveSelectedKey","effectiveInputValue","isPopoverOpen","setIsPopoverOpen","open","setInternalSelectedKey","setInternalInputValue","isControlledKey","isControlledInput","useComboBoxState","t0","$","_c","internalSelectedKey","internalInputValue","undefined","t1","Symbol","for","t2","menuId","onClose","containerRef","t3","UseComboBoxFilteringProps","UseComboBoxFilteringReturn","filterFn","nodes","isFilterActive","setIsFilterActive","active","useComboBoxFiltering","sensitivity","contains","_temp","textFilterFn","term","trim","t4","UseComboBoxKeyboardProps","listStateRef","hasResults","selection","onClearValue","onOpenPopover","onClosePopover","onVirtualFocus","useComboBoxKeyboard","listState","selectionManager","setFocusedKey","focusOption","e","preventDefault","listState_0","current","handleArrowKey","e_0","commitWithoutResults","e_1","listState_1","focusedKey","select","focus","handleEnterKey","t5","e_2","handleEscapeKey","t6","e_3","listState_2","handleEdgeKey","t7","e_4","isDefaultPrevented","bb97","keyboardProps","t8","ComboBoxInputProps","id","isRequired","mods","Record","focusProps","onChange","ChangeEvent","FocusEvent","activeDescendant","ariaProps","isInvalid","ComboBoxInput","ref","combinedRef","ComboBox","props","valuePropsMapper","val","t","label","extra","labelStyles","necessityIndicator","isValid","message","description","labelSuffix","renderChildren","externalOnSelectionChange","sortSelectedToTopProp","form","otherProps","sortSelectedToTopExplicit","cachedItemsOrder","selectionWhenClosed","getSortedItems","console","warn","itemsArray","Array","isArray","from","selectedItem","find","String","sorted","sortedItems","renderFn","map","idx","rendered","it","isValidElement","cloneElement","localCollectionState","selectionMode","isFocused","checkInputValidity","isInputValid","singleMatchKey","filteredCount","filteredNodes","collection","filteredItems","node","type","childNodes","child","push","length","toLowerCase","exactMatches","match","has","setSelectedKey","setInputText","clearSelectionAndInput","restoreSelectedLabel","getItemLabel","settleCustomValueOnBlur","settleOptionOnBlur","handleCompositeBlur","compositeFocusProps","validationIcon","focusInitAttemptsRef","activeOptionKey","setActiveOptionKey","getItem","handleSelectionChange","setTimeout","lastSyncedSelectedKey","selectionClearedByTyping","handleInputChange","target","trimmed","hasInitialized","setHasInitialized","preserveTypedInput","expectedLabel","handleInputFocus","handleInputBlur","hasValue","showClearButton","resultArray","flatMap","clearValue","disabled","hovered","focused","loading","clearable","comboBoxWidth","offsetWidth","shouldShowPopover","Boolean","ensureInitialFocus","lastFocusSourceRef","collectFirstKey","currentFocusedKey","needsRefocus","focusedItemExists","keyToFocus","tick","requestAnimationFrame","comboBoxField","zIndex","pressed","willOpen","_","propsWithoutChildren","Omit","Object","defineProperty","enumerable","configurable"],"sources":["../../../../src/components/fields/ComboBox/ComboBox.tsx"],"sourcesContent":["import {\n KeyboardEvent as AriaKeyboardEvent,\n AriaLabelingProps,\n CollectionChildren,\n FocusableRef,\n Key,\n} from '@react-types/shared';\nimport {\n BASE_STYLES,\n BasePropsWithoutChildren,\n BaseStyleProps,\n COLOR_STYLES,\n ColorStyleProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useKeyboard } from 'react-aria';\nimport { Section as BaseSection, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { DirectionIcon } from '../../../icons/DirectionIcon';\nimport { LoadingIcon } from '../../../icons/LoadingIcon';\nimport { FieldBaseProps, TextFieldKeyboardProps } from '../../../shared';\nimport { generateRandomId } from '../../../utils/random';\nimport { useCombinedRefs, useLayoutEffect } from '../../../utils/react';\nimport { useFocus } from '../../../utils/react/interactions';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { extractStyles } from '../../../utils/styles';\nimport { CollectionItem as Item } from '../../CollectionItem';\nimport {\n getValidationIcon,\n getValidationMods,\n useFieldProps,\n wrapWithField,\n} from '../../form';\nimport { getListBoxOptionId } from '../ListBox/optionId';\nimport {\n filterCollectionNodes,\n getEdgeVisibleKey,\n getNextVisibleKey,\n ListBoxPopover,\n ListStateLike,\n markKeyboardFocus,\n useCompositeFocus,\n} from '../ListBoxPopover';\nimport {\n DEFAULT_INPUT_STYLES,\n INPUT_WRAPPER_STYLES,\n} from '../TextInput/TextInputBase';\n\ntype FilterFn = (textValue: string, inputValue: string) => boolean;\n\nexport type PopoverTriggerAction = 'focus' | 'input' | 'manual';\n\nconst ComboBoxWrapperElement = tasty({\n qa: 'ComboBoxWrapper',\n styles: INPUT_WRAPPER_STYLES,\n});\n\nconst InputElement = tasty({\n as: 'input',\n styles: DEFAULT_INPUT_STYLES,\n});\n\nexport interface CubeComboBoxProps<T>\n extends BasePropsWithoutChildren,\n BaseStyleProps,\n OuterStyleProps,\n ColorStyleProps,\n FieldBaseProps<string | null | undefined> {\n /** The selected key in controlled mode */\n selectedKey?: string | null;\n /** The default selected key in uncontrolled mode */\n defaultSelectedKey?: string | null;\n /** Callback fired when selection changes */\n onSelectionChange?: (key: string | null) => void;\n\n /** The input value in controlled mode */\n inputValue?: string;\n /** The default input value in uncontrolled mode */\n defaultInputValue?: string;\n /** Callback fired when input value changes */\n onInputChange?: (value: string) => void;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the input should have autofocus */\n autoFocus?: boolean;\n /** HTML autocomplete attribute for the input */\n autoComplete?: string;\n /** Callback fired when focus enters the component (input, trigger, or popover). Does not receive event object. */\n onFocus?: () => void;\n /** Callback fired when focus leaves the component entirely. Does not receive event object. */\n onBlur?: () => void;\n /**\n * Callback fired when a key is pressed on the input, before the built-in\n * key handling. Receives React Aria's keyboard event: `e.preventDefault()`\n * skips the built-in handling for the key, and propagation stops at the\n * input unless the handler calls `e.continuePropagation()`.\n */\n onKeyDown?: TextFieldKeyboardProps['onKeyDown'];\n\n /** Popover trigger behavior: 'focus', 'input', or 'manual'. Defaults to 'input' */\n popoverTrigger?: PopoverTriggerAction;\n\n /** Items for the listbox (alternative to children) */\n items?: Iterable<T>;\n /** Children for the listbox (static items or render function) */\n children?: ReactNode | ((item: T) => ReactElement);\n\n /**\n * Custom filter function for determining if an option should be included.\n * Pass `false` to disable internal filtering completely.\n */\n filter?: FilterFn | false;\n\n /** Whether to allow entering custom values that are not in the predefined options */\n allowsCustomValue?: boolean;\n /** Whether to commit custom value on blur in allowsCustomValue mode (default: true) */\n shouldCommitOnBlur?: boolean;\n /** Whether to clear selection and input on blur when the text names no selectable item (default: false, only applies to non-custom-value mode) */\n clearOnBlur?: boolean;\n /** Whether the combobox is clearable using ESC key or clear button */\n isClearable?: boolean;\n /** Callback called when the clear button is pressed */\n onClear?: () => void;\n\n /** Left input icon */\n icon?: ReactElement;\n /** Input decoration before the main input */\n prefix?: ReactNode;\n /** Input decoration after the main input */\n suffix?: ReactNode;\n /** Whether to hide the trigger button */\n hideTrigger?: boolean;\n /** Size of the combobox */\n size?: 'small' | 'medium' | 'large' | (string & {});\n\n /** Ref for accessing the input element */\n inputRef?: RefObject<HTMLInputElement>;\n /** Ref for accessing the wrapper element */\n wrapperRef?: RefObject<HTMLDivElement>;\n /** Ref for accessing the listbox element */\n listBoxRef?: RefObject<HTMLDivElement>;\n /** Ref for accessing the popover element */\n popoverRef?: RefObject<HTMLDivElement>;\n /** Ref for accessing the trigger button element */\n triggerRef?: FocusableRef<HTMLButtonElement>;\n\n /** Custom styles for the input */\n inputStyles?: Styles;\n /** Custom styles for the trigger button */\n triggerStyles?: Styles;\n /** Custom styles for the listbox */\n listBoxStyles?: Styles;\n /** Custom styles for the popover overlay */\n overlayStyles?: Styles;\n /** Custom styles for individual options */\n optionStyles?: Styles;\n /** Custom styles for sections */\n sectionStyles?: Styles;\n /** Custom styles for section headings */\n headingStyles?: Styles;\n /** Space between options, in pixels. Defaults to a hairline (`1bw`). */\n listGap?: number;\n\n /** Whether the combobox is disabled */\n isDisabled?: boolean;\n /** Whether the combobox is in loading state */\n isLoading?: boolean;\n /** Keys of disabled items */\n disabledKeys?: Iterable<Key>;\n /** Whether to flip the popover placement */\n shouldFlip?: boolean;\n /** Placement direction for the popover */\n direction?: 'bottom' | 'top';\n /** Offset for the popover */\n overlayOffset?: number;\n /** Minimum padding in pixels between the popover and viewport edges */\n containerPadding?: number;\n /** Whether the combobox is read-only */\n isReadOnly?: boolean;\n /** Suffix position goes before or after the validation and loading statuses */\n suffixPosition?: 'before' | 'after';\n /**\n * Sort selected item to the top when the popover opens.\n * Only works when using the `items` prop (data-driven mode).\n * Ignored when using JSX children.\n * @default true when items are provided, false when using JSX children\n */\n sortSelectedToTop?: boolean;\n /** Callback called when the popover open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nconst PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\n// ============================================================================\n// Hook: useComboBoxState\n// ============================================================================\ninterface UseComboBoxStateProps {\n selectedKey?: string | null;\n defaultSelectedKey?: string | null;\n inputValue?: string;\n defaultInputValue?: string;\n comboBoxId: string;\n triggerRef?: RefObject<HTMLElement | null>;\n popoverRef?: RefObject<HTMLElement | null>;\n}\n\ninterface UseComboBoxStateReturn {\n effectiveSelectedKey: Key | null;\n effectiveInputValue: string;\n isPopoverOpen: boolean;\n setIsPopoverOpen: (open: boolean) => void;\n setInternalSelectedKey: (key: Key | null) => void;\n setInternalInputValue: (value: string) => void;\n isControlledKey: boolean;\n isControlledInput: boolean;\n}\n\nfunction useComboBoxState({\n selectedKey,\n defaultSelectedKey,\n inputValue,\n defaultInputValue,\n comboBoxId,\n triggerRef,\n popoverRef,\n}: UseComboBoxStateProps): UseComboBoxStateReturn {\n // Internal state for uncontrolled mode\n const [internalSelectedKey, setInternalSelectedKey] = useState<Key | null>(\n defaultSelectedKey ?? null,\n );\n const [internalInputValue, setInternalInputValue] = useState(\n defaultInputValue ?? '',\n );\n\n const isControlledKey = selectedKey !== undefined;\n const isControlledInput = inputValue !== undefined;\n\n const effectiveSelectedKey = isControlledKey\n ? selectedKey\n : internalSelectedKey;\n const effectiveInputValue = isControlledInput\n ? inputValue\n : internalInputValue;\n\n // Popover state\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n\n usePopoverSync({\n menuId: comboBoxId,\n isOpen: isPopoverOpen,\n onClose: () => setIsPopoverOpen(false),\n triggerRef,\n containerRef: popoverRef,\n });\n\n return {\n effectiveSelectedKey,\n effectiveInputValue,\n isPopoverOpen,\n setIsPopoverOpen,\n setInternalSelectedKey,\n setInternalInputValue,\n isControlledKey,\n isControlledInput,\n };\n}\n\n// ============================================================================\n// Hook: useComboBoxFiltering\n// ============================================================================\ninterface UseComboBoxFilteringProps {\n effectiveInputValue: string;\n filter: FilterFn | false | undefined;\n}\n\ninterface UseComboBoxFilteringReturn {\n filterFn: (nodes: Iterable<any>) => Iterable<any>;\n isFilterActive: boolean;\n setIsFilterActive: (active: boolean) => void;\n}\n\nfunction useComboBoxFiltering({\n effectiveInputValue,\n filter,\n}: UseComboBoxFilteringProps): UseComboBoxFilteringReturn {\n const [isFilterActive, setIsFilterActive] = useState(false);\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n const textFilterFn: FilterFn =\n filter === false ? () => true : filter || contains;\n\n // Create a filter function for collection nodes\n const filterFn = (nodes: Iterable<any>) => {\n const term = effectiveInputValue.trim();\n\n // Don't filter if not active or no search term\n if (!isFilterActive || !term) {\n return nodes;\n }\n\n return filterCollectionNodes(nodes, term, textFilterFn);\n };\n\n return {\n filterFn,\n isFilterActive,\n setIsFilterActive,\n };\n}\n\n// ============================================================================\n// Hook: useComboBoxKeyboard\n// ============================================================================\ninterface UseComboBoxKeyboardProps {\n isPopoverOpen: boolean;\n listStateRef: RefObject<any>;\n hasResults: boolean;\n allowsCustomValue?: boolean;\n effectiveInputValue: string;\n isClearable?: boolean;\n onSelectionChange: (selection: Key | Key[] | null) => void;\n onClearValue: () => void;\n onOpenPopover: () => void;\n onClosePopover: () => void;\n inputRef: RefObject<HTMLInputElement>;\n setIsFilterActive: (active: boolean) => void;\n /** Called with the option the arrow keys moved virtual focus to. */\n onVirtualFocus: (key: Key) => void;\n onKeyDown?: TextFieldKeyboardProps['onKeyDown'];\n}\n\nfunction useComboBoxKeyboard({\n isPopoverOpen,\n listStateRef,\n hasResults,\n allowsCustomValue,\n effectiveInputValue,\n isClearable,\n onSelectionChange,\n onClearValue,\n onOpenPopover,\n onClosePopover,\n inputRef,\n setIsFilterActive,\n onVirtualFocus,\n onKeyDown,\n}: UseComboBoxKeyboardProps) {\n // Moves the virtual focus to `key`, if there is one, and scrolls it into view.\n const focusOption = (listState: ListStateLike, key: Key | null) => {\n if (key == null) return;\n\n markKeyboardFocus(listState);\n listState.selectionManager.setFocusedKey(key);\n onVirtualFocus(key);\n };\n\n const handleArrowKey = (e: AriaKeyboardEvent) => {\n e.preventDefault();\n\n // Open popover if closed\n if (!isPopoverOpen) {\n // If opening with no filtered results, disable filter to show all items\n if (!hasResults) setIsFilterActive(false);\n onOpenPopover();\n\n return;\n }\n\n const listState = listStateRef.current;\n\n if (listState) {\n focusOption(\n listState,\n getNextVisibleKey(listState, e.key === 'ArrowDown' ? 1 : -1),\n );\n }\n };\n\n // With no results, Enter commits the typed text as a custom value or clears\n // the selection.\n const commitWithoutResults = (e: AriaKeyboardEvent) => {\n if (!allowsCustomValue) {\n e.preventDefault();\n onSelectionChange(null);\n\n return;\n }\n\n const value = effectiveInputValue.trim();\n\n // Commit the custom value\n onSelectionChange((value as unknown as Key) ?? (null as unknown as Key));\n\n // If popover is closed and we have a value, allow Enter to propagate for form submission\n // If popover is open OR value is empty, prevent default to avoid premature submission\n if (isPopoverOpen || !value) e.preventDefault();\n };\n\n const handleEnterKey = (e: AriaKeyboardEvent) => {\n const listState = isPopoverOpen ? listStateRef.current : null;\n const focusedKey = listState?.selectionManager.focusedKey;\n\n if (focusedKey != null) {\n // If popover is open, select the focused item first\n e.preventDefault();\n listState.selectionManager.select(focusedKey, e);\n // Ensure the popover closes even if selection stays the same\n onClosePopover();\n inputRef.current?.focus();\n } else if (!hasResults) {\n // If no results, handle empty input or custom values\n commitWithoutResults(e);\n } else if ((effectiveInputValue || '').trim() === '') {\n // Clear selection if input is empty and popover is closed (or no focused item)\n e.preventDefault();\n onSelectionChange(null);\n }\n };\n\n const handleEscapeKey = (e: AriaKeyboardEvent) => {\n if (isPopoverOpen) {\n e.preventDefault();\n onClosePopover();\n inputRef.current?.focus();\n } else if (effectiveInputValue && isClearable) {\n e.preventDefault();\n onClearValue();\n }\n };\n\n const handleEdgeKey = (e: AriaKeyboardEvent) => {\n if (!isPopoverOpen) return;\n\n e.preventDefault();\n\n const listState = listStateRef.current;\n\n if (listState) {\n focusOption(\n listState,\n getEdgeVisibleKey(listState, e.key === 'Home' ? 'first' : 'last'),\n );\n }\n };\n\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n // The user's handler runs first, and a key it prevents is theirs: skip\n // the built-in handling. Read `isDefaultPrevented()`, not\n // `defaultPrevented` — `useKeyboard` hands over a copy of the event whose\n // `defaultPrevented` field is fixed at the moment it was made.\n onKeyDown?.(e);\n\n if (e.isDefaultPrevented()) return;\n\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n handleArrowKey(e);\n break;\n case 'Enter':\n handleEnterKey(e);\n break;\n case 'Escape':\n handleEscapeKey(e);\n break;\n case 'Home':\n case 'End':\n handleEdgeKey(e);\n break;\n }\n },\n });\n\n return { keyboardProps };\n}\n\n// ============================================================================\n// Component: ComboBoxInput\n// ============================================================================\ninterface ComboBoxInputProps {\n qa?: string;\n inputRef: RefObject<HTMLInputElement>;\n id?: string;\n value: string;\n placeholder?: string;\n isDisabled?: boolean;\n isReadOnly?: boolean;\n isRequired?: boolean;\n autoFocus?: boolean;\n autoComplete?: string;\n size: string;\n mods: Record<string, any>;\n inputStyles?: Styles;\n keyboardProps: any;\n focusProps: any;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onFocus: (e: React.FocusEvent<HTMLInputElement>) => void;\n isPopoverOpen: boolean;\n hasResults: boolean;\n comboBoxId: string;\n /** The id of the option under virtual focus, while the popover is open. */\n activeDescendant?: string;\n /**\n * The caller's naming and the field's description and message. The input is\n * the control, so they belong on it rather than on the wrapper.\n */\n ariaProps: AriaLabelingProps;\n isInvalid?: boolean;\n}\n\nconst ComboBoxInput = forwardRef<HTMLInputElement, ComboBoxInputProps>(\n function ComboBoxInput(\n {\n qa,\n inputRef,\n id,\n value,\n placeholder,\n isDisabled,\n isReadOnly,\n isRequired,\n autoFocus,\n autoComplete,\n size,\n mods,\n inputStyles,\n keyboardProps,\n focusProps,\n onChange,\n onFocus,\n isPopoverOpen,\n hasResults,\n comboBoxId,\n activeDescendant,\n ariaProps,\n isInvalid,\n },\n ref,\n ) {\n const combinedRef = useCombinedRefs(ref, inputRef);\n\n return (\n <InputElement\n ref={combinedRef}\n qa={qa}\n id={id}\n type=\"text\"\n value={value}\n placeholder={placeholder}\n isDisabled={isDisabled}\n readOnly={isReadOnly}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n data-autofocus={autoFocus ? '' : undefined}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={focusProps.onBlur}\n {...keyboardProps}\n styles={inputStyles}\n mods={mods}\n data-size={size}\n data-input-type=\"combobox\"\n role=\"combobox\"\n // `ComboBox` builds its own trigger rather than going through a\n // react-aria field hook, so nothing else would announce that the field\n // is mandatory — the label marker alone is not exposed to assistive\n // technology.\n aria-required={isRequired || undefined}\n aria-expanded={isPopoverOpen && hasResults}\n aria-haspopup=\"listbox\"\n aria-controls={\n isPopoverOpen && hasResults\n ? `ComboBoxListBox-${comboBoxId}`\n : undefined\n }\n aria-activedescendant={activeDescendant}\n aria-invalid={isInvalid || undefined}\n {...ariaProps}\n />\n );\n },\n);\n\n// ============================================================================\n// Main Component: ComboBox\n// ============================================================================\nexport const ComboBox = forwardRef(function ComboBox<T extends object>(\n props: CubeComboBoxProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n props = useFieldProps(props, {\n valuePropsMapper: ({ value, onChange }) => {\n return {\n // Form value maps to selectedKey (the committed value) in both modes\n selectedKey: value ?? null,\n onSelectionChange(val: string | null) {\n // Commit selection changes to the form\n onChange(val);\n },\n };\n },\n });\n\n const { t } = useI18n();\n\n let {\n qa,\n label,\n extra,\n labelStyles,\n isRequired,\n necessityIndicator,\n isInvalid,\n isValid,\n id,\n icon,\n prefix,\n isDisabled,\n autoFocus,\n autoComplete = 'off',\n wrapperRef,\n inputRef,\n triggerRef,\n popoverRef,\n listBoxRef,\n isLoading,\n inputStyles,\n optionStyles,\n triggerStyles,\n listBoxStyles,\n overlayStyles,\n suffix,\n hideTrigger,\n message,\n description,\n size = 'medium',\n direction = 'bottom',\n shouldFlip = true,\n popoverTrigger = 'input',\n suffixPosition = 'before',\n filter,\n styles,\n labelSuffix,\n selectedKey,\n defaultSelectedKey,\n inputValue,\n defaultInputValue,\n onInputChange,\n isClearable,\n onClear,\n placeholder,\n allowsCustomValue,\n shouldCommitOnBlur = true,\n clearOnBlur,\n items,\n children: renderChildren,\n sectionStyles,\n headingStyles,\n listGap,\n isReadOnly,\n overlayOffset = 8,\n containerPadding = 8,\n onSelectionChange: externalOnSelectionChange,\n sortSelectedToTop: sortSelectedToTopProp,\n onOpenChange,\n onFocus,\n onBlur,\n onKeyDown,\n form,\n ...otherProps\n } = props;\n\n // Generate a unique ID for this combobox instance\n const comboBoxId = useMemo(() => generateRandomId(), []);\n\n // Hoist the wrapper/popover ref normalization above `useComboBoxState` so\n // the popover-sync inside it sees stable, attached refs. Other ref combines\n // happen below alongside the legacy ordering.\n wrapperRef = useCombinedRefs(wrapperRef);\n popoverRef = useCombinedRefs(popoverRef);\n\n // State management hook\n const {\n effectiveSelectedKey,\n effectiveInputValue,\n isPopoverOpen,\n setIsPopoverOpen,\n setInternalSelectedKey,\n setInternalInputValue,\n isControlledKey,\n isControlledInput,\n } = useComboBoxState({\n selectedKey,\n defaultSelectedKey,\n inputValue,\n defaultInputValue,\n comboBoxId,\n triggerRef: wrapperRef as RefObject<HTMLElement | null>,\n popoverRef: popoverRef as RefObject<HTMLElement | null>,\n });\n\n // Track if sortSelectedToTop was explicitly provided\n const sortSelectedToTopExplicit = sortSelectedToTopProp !== undefined;\n // Default to true if items are provided, false otherwise\n const sortSelectedToTop = sortSelectedToTopProp ?? (items ? true : false);\n\n // Cache for sorted items array when using `items` prop\n const cachedItemsOrder = useRef<T[] | null>(null);\n const selectionWhenClosed = useRef<string | null>(null);\n\n styles = extractStyles(otherProps, PROP_STYLES, styles);\n\n ref = useCombinedRefs(ref);\n inputRef = useCombinedRefs(inputRef);\n triggerRef = useCombinedRefs(triggerRef);\n listBoxRef = useCombinedRefs(listBoxRef);\n\n // Sort items with selected on top if enabled\n const getSortedItems = useCallback((): typeof items => {\n if (!items) return items;\n\n if (!sortSelectedToTop) return items;\n\n // Reuse cached order if available\n if (cachedItemsOrder.current) {\n return cachedItemsOrder.current;\n }\n\n // Warn if explicitly requested but not supported\n if (sortSelectedToTopExplicit && !items) {\n console.warn(\n 'ComboBox: sortSelectedToTop only works with the items prop. ' +\n 'Sorting will be skipped when using JSX children.',\n );\n return items;\n }\n\n const selectedKey = isPopoverOpen\n ? effectiveSelectedKey\n : selectionWhenClosed.current;\n\n if (!selectedKey) return items;\n\n const itemsArray = Array.isArray(items) ? items : Array.from(items);\n const selectedItem = itemsArray.find((item) => {\n const key = (item as any)?.key ?? (item as any)?.id;\n return key != null && String(key) === String(selectedKey);\n });\n\n if (!selectedItem) return items;\n\n const sorted = [\n selectedItem,\n ...itemsArray.filter((item) => {\n const key = (item as any)?.key ?? (item as any)?.id;\n return key == null || String(key) !== String(selectedKey);\n }),\n ] as T[];\n\n if (isPopoverOpen) {\n cachedItemsOrder.current = sorted;\n }\n\n return sorted;\n }, [\n items,\n sortSelectedToTop,\n sortSelectedToTopExplicit,\n effectiveSelectedKey,\n isPopoverOpen,\n ]);\n\n const sortedItems = getSortedItems();\n\n // Preserve the original `children` (may be a render function) before we\n // potentially overwrite it.\n let children: ReactNode = renderChildren as ReactNode;\n\n const renderFn = renderChildren as unknown;\n\n if (sortedItems && typeof renderFn === 'function') {\n try {\n const itemsArray = Array.from(sortedItems as Iterable<any>);\n children = itemsArray.map((item, idx) => {\n const rendered = (renderFn as (it: any) => ReactNode)(item);\n if (\n React.isValidElement(rendered) &&\n (rendered as ReactElement).key == null\n ) {\n return React.cloneElement(rendered as ReactElement, {\n key: (rendered as any)?.key ?? item?.key ?? idx,\n });\n }\n\n return rendered as ReactNode;\n });\n } catch {\n // If conversion fails, proceed with the original children\n }\n }\n\n // Invalidate cached sorting whenever items change\n useEffect(() => {\n cachedItemsOrder.current = null;\n }, [items]);\n\n // Capture selection when popover closes\n useEffect(() => {\n if (!isPopoverOpen) {\n selectionWhenClosed.current =\n effectiveSelectedKey != null ? String(effectiveSelectedKey) : null;\n cachedItemsOrder.current = null;\n }\n }, [isPopoverOpen, effectiveSelectedKey]);\n\n // Call onOpenChange when popover state changes\n useEffect(() => {\n onOpenChange?.(isPopoverOpen);\n }, [isPopoverOpen]);\n\n // Filtering hook\n const { filterFn, isFilterActive, setIsFilterActive } = useComboBoxFiltering({\n effectiveInputValue,\n filter,\n });\n\n // Create local collection state for reading item data (labels, etc.)\n // This allows us to read item labels even before the popover opens\n const localCollectionState = useListState({\n children: children as CollectionChildren<T>,\n items: sortedItems,\n disabledKeys: props.disabledKeys,\n selectionMode: 'none', // Don't manage selection in this state\n });\n\n const { isFocused, focusProps } = useFocus();\n\n // Helper to check if current input value is valid\n const checkInputValidity = useCallback(() => {\n if (!effectiveInputValue.trim()) {\n return { isInputValid: false, singleMatchKey: null, filteredCount: 0 };\n }\n\n // Get filtered collection based on current input\n const filteredNodes = filterFn(localCollectionState.collection);\n const filteredItems: Array<{ key: Key; textValue: string }> = [];\n\n // Flatten filtered nodes (handle sections)\n for (const node of filteredNodes) {\n if (node.type === 'section' && node.childNodes) {\n for (const child of node.childNodes) {\n if (child.type === 'item') {\n filteredItems.push({\n key: child.key,\n textValue: child.textValue || '',\n });\n }\n }\n } else if (node.type === 'item') {\n filteredItems.push({\n key: node.key,\n textValue: node.textValue || '',\n });\n }\n }\n\n const filteredCount = filteredItems.length;\n const term = effectiveInputValue.trim().toLowerCase();\n\n // The exact match, otherwise the only filtered result. Among items sharing\n // the label, the selection wins, then an enabled one. A disabled match\n // makes the input invalid, as it cannot be selected any other way either,\n // unless it is already the selection: that one is kept.\n const exactMatches = filteredItems.filter(\n (item) => item.textValue.toLowerCase() === term,\n );\n const match =\n exactMatches.find((item) => item.key === effectiveSelectedKey) ??\n exactMatches.find(\n (item) => !localCollectionState.disabledKeys.has(item.key),\n ) ??\n exactMatches[0] ??\n (filteredCount === 1 ? filteredItems[0] : null);\n\n if (\n !match ||\n (match.key !== effectiveSelectedKey &&\n localCollectionState.disabledKeys.has(match.key))\n ) {\n return { isInputValid: false, singleMatchKey: null, filteredCount };\n }\n\n return { isInputValid: true, singleMatchKey: match.key, filteredCount };\n }, [\n effectiveInputValue,\n effectiveSelectedKey,\n filterFn,\n localCollectionState.collection,\n localCollectionState.disabledKeys,\n ]);\n\n // ---- blur ---------------------------------------------------------------\n // Writes the selected key, unless it is controlled. Unlike `setInputText` it\n // does not report: each blur outcome calls `onSelectionChange` itself, in\n // the order it has always fired relative to `onInputChange`.\n const setSelectedKey = (key: Key | null) => {\n if (!isControlledKey) setInternalSelectedKey(key);\n };\n\n // Writes the input text, unless it is controlled, and reports it.\n const setInputText = (value: string) => {\n if (!isControlledInput) setInternalInputValue(value);\n onInputChange?.(value);\n };\n\n const clearSelectionAndInput = () => {\n externalOnSelectionChange?.(null);\n setSelectedKey(null);\n setInputText('');\n };\n\n // Reset input to show current selection (or empty if none)\n const restoreSelectedLabel = () => {\n setInputText(\n effectiveSelectedKey != null ? getItemLabel(effectiveSelectedKey) : '',\n );\n };\n\n // In allowsCustomValue mode: commit the input value if it's non-empty and\n // nothing is selected, clear the selection if the input is empty.\n const settleCustomValueOnBlur = () => {\n if (\n shouldCommitOnBlur &&\n effectiveInputValue &&\n effectiveSelectedKey == null\n ) {\n externalOnSelectionChange?.(effectiveInputValue as string);\n setSelectedKey(effectiveInputValue as Key);\n } else if (!String(effectiveInputValue).trim()) {\n clearSelectionAndInput();\n } else {\n restoreSelectedLabel();\n }\n };\n\n // In non-custom-value mode: auto-select the exact match, or the only filtered\n // result, unless it is disabled; keep a selected item even when it is\n // disabled; clear invalid input (no selectable match) when clearOnBlur is set\n // or the input is empty.\n const settleOptionOnBlur = () => {\n const { isInputValid, singleMatchKey } = checkInputValidity();\n\n if (\n isInputValid &&\n singleMatchKey != null &&\n singleMatchKey !== effectiveSelectedKey\n ) {\n const label = getItemLabel(singleMatchKey);\n\n setSelectedKey(singleMatchKey);\n setInputText(label);\n externalOnSelectionChange?.(singleMatchKey as string | null);\n } else if (!isInputValid && (clearOnBlur || !effectiveInputValue.trim())) {\n clearSelectionAndInput();\n } else {\n restoreSelectedLabel();\n }\n };\n\n // Composite blur handler - fires when focus leaves the entire component\n const handleCompositeBlur = useEvent(() => {\n setIsPopoverOpen(false);\n\n if (allowsCustomValue) {\n settleCustomValueOnBlur();\n } else {\n settleOptionOnBlur();\n }\n\n onBlur?.();\n // Only now: the validity check above needs the filter still active.\n setIsFilterActive(false);\n });\n\n // Composite focus hook - handles focus tracking across wrapper and portaled popover\n const { compositeFocusProps } = useCompositeFocus({\n wrapperRef,\n popoverRef,\n onFocus,\n onBlur: handleCompositeBlur,\n isDisabled,\n });\n\n let validationIcon = getValidationIcon({ isInvalid, isValid });\n\n // Ref to access internal ListBox state\n const listStateRef = useRef<any>(null);\n const focusInitAttemptsRef = useRef(0);\n // The option under virtual focus, mirrored in state for the input's\n // `aria-activedescendant`: the listbox's own state update does not re-render\n // this component.\n const [activeOptionKey, setActiveOptionKey] = useState<Key | null>(null);\n\n // Helper to get label from local collection\n const getItemLabel = useCallback(\n (key: Key): string => {\n const item = localCollectionState?.collection?.getItem(key);\n return item?.textValue || String(key);\n },\n [localCollectionState?.collection],\n );\n\n // Selection change handler\n const handleSelectionChange = useEvent((selection: Key | Key[] | null) => {\n // Extract single key from selection (we only support single selection)\n const key = Array.isArray(selection) ? selection[0] : selection;\n\n // Update selected key\n if (!isControlledKey) {\n setInternalSelectedKey(key ?? null);\n }\n\n // Update input value to show selected item label\n if (key != null) {\n setIsFilterActive(false);\n\n const label = getItemLabel(key);\n\n if (!isControlledInput) {\n setInternalInputValue(label);\n }\n onInputChange?.(label);\n } else {\n // Clear input when selection is cleared\n if (!isControlledInput) {\n setInternalInputValue('');\n }\n onInputChange?.('');\n setIsFilterActive(false);\n }\n\n externalOnSelectionChange?.(key as string | null);\n\n // Close popover after selection\n setIsPopoverOpen(false);\n\n // Focus input\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n });\n\n const lastSyncedSelectedKey = useRef<Key | null | undefined>(undefined);\n const selectionClearedByTyping = useRef(false);\n\n // Input change handler\n const handleInputChange = useEvent(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n\n // Update input value\n if (!isControlledInput) {\n setInternalInputValue(value);\n }\n onInputChange?.(value);\n\n const trimmed = value.trim();\n setIsFilterActive(trimmed.length > 0);\n\n // Only clear selection in allowsCustomValue mode\n // In normal mode, typing just filters - selection stays until explicitly changed\n if (allowsCustomValue && effectiveSelectedKey != null) {\n selectionClearedByTyping.current = true;\n if (!isControlledKey) {\n setInternalSelectedKey(null);\n }\n externalOnSelectionChange?.(null);\n }\n\n // Open popover based on trigger\n if (popoverTrigger !== 'manual' && value && !isPopoverOpen) {\n setIsPopoverOpen(true);\n }\n },\n );\n\n // Initialize input value from defaultInputValue or defaultSelectedKey (uncontrolled mode only, one-time)\n const [hasInitialized, setHasInitialized] = useState(false);\n\n useEffect(() => {\n // Only initialize once, in uncontrolled input mode\n if (hasInitialized || isControlledInput) return;\n\n // Priority 1: defaultInputValue takes precedence\n if (defaultInputValue !== undefined) {\n setInternalInputValue(defaultInputValue);\n setHasInitialized(true);\n return;\n }\n\n // Priority 2: fall back to defaultSelectedKey's label\n if (defaultSelectedKey) {\n const label = getItemLabel(defaultSelectedKey);\n\n setInternalInputValue(label);\n setHasInitialized(true);\n }\n }, [\n hasInitialized,\n isControlledInput,\n defaultInputValue,\n defaultSelectedKey,\n getItemLabel,\n children,\n ]);\n\n // Sync input value with controlled selectedKey\n useEffect(() => {\n const preserveTypedInput = selectionClearedByTyping.current;\n selectionClearedByTyping.current = false;\n // Only run when selectedKey is controlled but inputValue is uncontrolled\n if (!isControlledKey || isControlledInput) return;\n\n // Skip if the key hasn't actually changed (prevents unnecessary resets when collection rebuilds)\n if (\n lastSyncedSelectedKey.current !== undefined &&\n lastSyncedSelectedKey.current === effectiveSelectedKey\n ) {\n return;\n }\n\n lastSyncedSelectedKey.current = effectiveSelectedKey;\n\n // Acknowledging the selection cleared by this edit must not erase the\n // text that caused it. Later external clears still reset the input.\n if (preserveTypedInput && effectiveSelectedKey == null) return;\n\n // Get the expected label for the current selection\n const expectedLabel =\n effectiveSelectedKey != null ? getItemLabel(effectiveSelectedKey) : '';\n\n // Update the input value to match the selected key's label\n setInternalInputValue(expectedLabel);\n }, [\n isControlledKey,\n isControlledInput,\n effectiveSelectedKey,\n effectiveInputValue,\n getItemLabel,\n ]);\n\n // Input focus handler\n const handleInputFocus = useEvent((e: React.FocusEvent<HTMLInputElement>) => {\n // Call focus props handler if it exists\n focusProps.onFocus?.(e as any);\n\n if (popoverTrigger === 'focus' && !isPopoverOpen) {\n setIsPopoverOpen(true);\n }\n });\n\n // Input blur handler - just handles internal focus props\n const handleInputBlur = useEvent((e: React.FocusEvent<HTMLInputElement>) => {\n focusProps.onBlur?.(e as any);\n });\n\n // Clear button logic\n let hasValue = allowsCustomValue\n ? effectiveInputValue !== ''\n : effectiveSelectedKey != null;\n let showClearButton = isClearable && hasValue && !isDisabled && !isReadOnly;\n\n // Check if there are any results after filtering\n const hasResults = useMemo(() => {\n if (!children) return false;\n if (!Array.isArray(children) && children === null) return false;\n\n // If we have a collection, check if filtering will produce any results\n if (localCollectionState?.collection) {\n const filteredNodes = filterFn(localCollectionState.collection);\n const resultArray = Array.from(filteredNodes).flatMap((node: any) => {\n if (node.type === 'section' && node.childNodes) {\n return [...node.childNodes];\n }\n\n return [node];\n });\n return resultArray.length > 0;\n }\n\n // Fallback: check if children exists\n return Array.isArray(children) ? children.length > 0 : true;\n }, [children, localCollectionState?.collection, filterFn]);\n\n // Clear function\n let clearValue = useEvent(() => {\n // Clear input\n if (!isControlledInput) {\n setInternalInputValue('');\n }\n onInputChange?.('');\n\n // Clear selection\n if (!isControlledKey) {\n setInternalSelectedKey(null);\n }\n externalOnSelectionChange?.(null);\n\n // Close popover\n if (isPopoverOpen) {\n setIsPopoverOpen(false);\n }\n\n // Focus input\n inputRef.current?.focus();\n\n onClear?.();\n });\n\n // Keyboard navigation hook\n const { keyboardProps } = useComboBoxKeyboard({\n isPopoverOpen,\n listStateRef,\n hasResults,\n allowsCustomValue,\n effectiveInputValue,\n isClearable,\n onSelectionChange: handleSelectionChange,\n onClearValue: clearValue,\n onOpenPopover: () => setIsPopoverOpen(true),\n onClosePopover: () => setIsPopoverOpen(false),\n inputRef,\n setIsFilterActive,\n onVirtualFocus: setActiveOptionKey,\n onKeyDown,\n });\n\n if (icon) {\n icon = <div data-element=\"InputIcon\">{icon}</div>;\n\n if (prefix) {\n prefix = (\n <>\n {icon}\n {prefix}\n </>\n );\n } else {\n prefix = icon;\n }\n }\n\n let mods = useMemo(\n () => ({\n ...getValidationMods({ isInvalid, isValid }),\n disabled: isDisabled,\n hovered: false,\n focused: isFocused,\n loading: isLoading,\n prefix: !!prefix,\n suffix: true,\n clearable: showClearButton,\n }),\n [\n isInvalid,\n isValid,\n isDisabled,\n isFocused,\n isLoading,\n prefix,\n showClearButton,\n ],\n );\n\n const comboBoxWidth = wrapperRef?.current?.offsetWidth;\n\n const shouldShowPopover = Boolean(isPopoverOpen && hasResults);\n\n // Close popover if no results\n useEffect(() => {\n if (isPopoverOpen && !hasResults) {\n setIsPopoverOpen(false);\n }\n }, [isPopoverOpen, hasResults]);\n\n const ensureInitialFocus = useCallback(() => {\n if (!shouldShowPopover) return;\n\n const listState = listStateRef.current;\n if (!listState) return;\n\n const { selectionManager, collection, disabledKeys, lastFocusSourceRef } =\n listState;\n if (!selectionManager || !collection) return;\n\n const collectFirstKey = (): Key | null => {\n for (const node of collection) {\n if (node.type === 'item') {\n if (!disabledKeys?.has(node.key)) return node.key;\n } else if (node.childNodes) {\n for (const child of node.childNodes) {\n if (child.type === 'item' && !disabledKeys?.has(child.key)) {\n return child.key;\n }\n }\n }\n }\n return null;\n };\n\n if (lastFocusSourceRef) lastFocusSourceRef.current = 'keyboard';\n\n // Check if we need to set or update focus\n const currentFocusedKey = selectionManager.focusedKey;\n let needsRefocus = false;\n\n if (currentFocusedKey == null) {\n // No focus at all - need to set initial focus\n needsRefocus = true;\n } else {\n // Check if currently focused key still exists in the collection\n const focusedItemExists = collection.getItem(currentFocusedKey) != null;\n if (!focusedItemExists) {\n // Focused item was filtered out - need to refocus\n needsRefocus = true;\n }\n }\n\n if (!needsRefocus) {\n setActiveOptionKey(currentFocusedKey);\n } else {\n let keyToFocus: Key | null = null;\n\n // First try to focus on the selected key if it exists in the collection\n if (\n effectiveSelectedKey != null &&\n collection.getItem(effectiveSelectedKey) != null\n ) {\n keyToFocus = effectiveSelectedKey;\n } else {\n // Fall back to the first key in the collection\n keyToFocus = collectFirstKey();\n }\n\n if (keyToFocus != null) {\n selectionManager.setFocusedKey(keyToFocus);\n setActiveOptionKey(keyToFocus);\n }\n }\n }, [shouldShowPopover, effectiveSelectedKey, setActiveOptionKey]);\n\n useLayoutEffect(() => {\n if (!shouldShowPopover) return;\n focusInitAttemptsRef.current = 0;\n\n const tick = () => {\n if (!shouldShowPopover) return;\n ensureInitialFocus();\n focusInitAttemptsRef.current += 1;\n // Try a few frames to wait for collection to mount\n if (\n focusInitAttemptsRef.current < 8 &&\n listStateRef.current?.selectionManager?.focusedKey == null\n ) {\n requestAnimationFrame(tick);\n }\n };\n\n requestAnimationFrame(() => requestAnimationFrame(tick));\n }, [shouldShowPopover, ensureInitialFocus]);\n\n const comboBoxField = (\n <ComboBoxWrapperElement\n ref={wrapperRef}\n mods={mods}\n styles={styles}\n style={{\n zIndex: isFocused ? 1 : 'initial',\n }}\n data-size={size}\n {...compositeFocusProps}\n >\n {prefix ? <div data-element=\"Prefix\">{prefix}</div> : null}\n <ComboBoxInput\n qa={qa || 'ComboBox'}\n inputRef={inputRef}\n id={id}\n value={effectiveInputValue}\n placeholder={placeholder}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n size={size}\n mods={mods}\n inputStyles={inputStyles}\n keyboardProps={keyboardProps}\n focusProps={{ ...focusProps, onBlur: handleInputBlur }}\n isPopoverOpen={isPopoverOpen}\n hasResults={hasResults}\n comboBoxId={comboBoxId}\n activeDescendant={\n shouldShowPopover && activeOptionKey != null\n ? getListBoxOptionId(\n `ComboBoxListBox-${comboBoxId}`,\n activeOptionKey,\n )\n : undefined\n }\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n ariaProps={{\n 'aria-label': (props as AriaLabelingProps)['aria-label'],\n 'aria-labelledby': (props as AriaLabelingProps)['aria-labelledby'],\n 'aria-describedby': (props as AriaLabelingProps)['aria-describedby'],\n }}\n isInvalid={isInvalid}\n />\n <div data-element=\"Suffix\">\n {suffixPosition === 'before' ? suffix : null}\n {isLoading ? <LoadingIcon data-element=\"InputIcon\" /> : validationIcon}\n {suffixPosition === 'after' ? suffix : null}\n {showClearButton && (\n <Item.Action\n icon={<CloseIcon />}\n size={size}\n // No `theme` — the default `current` type inherits the input's own\n // text color, which is already validation-tinted, so the button\n // matches the text beside it exactly instead of using the fixed\n // `danger.clear` palette.\n qa=\"ComboBoxClearButton\"\n data-no-trigger={hideTrigger ? '' : undefined}\n data-popover-dismiss=\"\"\n aria-label={t('comboBox.clearValue', 'Clear value')}\n onPress={clearValue}\n />\n )}\n {!hideTrigger ? (\n <Item.Action\n ref={triggerRef}\n data-popover-trigger\n icon={<DirectionIcon to={isPopoverOpen ? 'up' : 'down'} />}\n qa=\"ComboBoxTrigger\"\n mods={{\n pressed: isPopoverOpen,\n disabled: isDisabled,\n loading: isLoading,\n }}\n data-size={size}\n isDisabled={isDisabled}\n styles={triggerStyles}\n aria-expanded={isPopoverOpen}\n aria-haspopup=\"listbox\"\n aria-label={t('comboBox.showOptions', 'Show options')}\n onPress={() => {\n if (!isDisabled) {\n const willOpen = !isPopoverOpen;\n setIsPopoverOpen(willOpen);\n if (willOpen) {\n inputRef.current?.focus();\n // If opening with no filtered results, disable filter to show all items\n if (!hasResults) {\n setIsFilterActive(false);\n }\n }\n }\n }}\n />\n ) : null}\n </div>\n <ListBoxPopover\n isOpen={shouldShowPopover}\n triggerRef={wrapperRef as RefObject<HTMLElement>}\n popoverRef={popoverRef}\n listBoxRef={listBoxRef}\n direction={direction}\n shouldFlip={shouldFlip}\n overlayOffset={overlayOffset}\n containerPadding={containerPadding}\n comboBoxWidth={comboBoxWidth}\n listBoxId={`ComboBoxListBox-${comboBoxId}`}\n overlayStyles={overlayStyles}\n listBoxStyles={listBoxStyles}\n optionStyles={optionStyles}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n listGap={listGap}\n selectedKey={effectiveSelectedKey}\n isDisabled={isDisabled}\n disabledKeys={props.disabledKeys}\n items={sortedItems}\n listStateRef={listStateRef}\n label={label}\n ariaLabel={(props as any)['aria-label']}\n compositeFocusProps={compositeFocusProps}\n filter={filterFn}\n size={size}\n onSelectionChange={handleSelectionChange}\n onClose={() => setIsPopoverOpen(false)}\n >\n {children}\n </ListBoxPopover>\n </ComboBoxWrapperElement>\n );\n\n const { children: _, ...propsWithoutChildren } = props;\n\n return wrapWithField<Omit<CubeComboBoxProps<T>, 'children'>>(\n comboBoxField,\n ref,\n propsWithoutChildren,\n );\n}) as unknown as (<T>(\n props: CubeComboBoxProps<T> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReactElement) & { Item: typeof Item; Section: typeof BaseSection };\n\nComboBox.Item = Item;\n\nComboBox.Section = BaseSection;\n\nObject.defineProperty(ComboBox, 'cubeInputType', {\n value: 'ComboBox',\n enumerable: false,\n configurable: false,\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ComboBox.js","names":["KeyboardEvent","AriaKeyboardEvent","AriaLabelingProps","CollectionChildren","FocusableRef","Key","BASE_STYLES","BasePropsWithoutChildren","BaseStyleProps","COLOR_STYLES","ColorStyleProps","OUTER_STYLES","OuterStyleProps","Styles","tasty","React","ForwardedRef","forwardRef","ReactElement","ReactNode","RefObject","useEffect","useMemo","useRef","useState","useCollator","useFilter","useKeyboard","Section","BaseSection","useListState","useEvent","useI18n","CloseIcon","DirectionIcon","LoadingIcon","FieldBaseProps","TextFieldKeyboardProps","generateRandomId","useCombinedRefs","useLayoutEffect","useFocus","usePopoverSync","extractStyles","CollectionItem","Item","getValidationIcon","getValidationMods","useFieldProps","wrapWithField","getListBoxOptionId","filterCollectionNodes","getEdgeVisibleKey","getNextVisibleKey","ListBoxPopover","ListStateLike","markKeyboardFocus","useCompositeFocus","DEFAULT_INPUT_STYLES","INPUT_WRAPPER_STYLES","CollectionLike","collectOptions","findTypedOption","getItemLabel","highlightOption","resolveHighlightedKey","sortSelectedFirst","FilterFn","textValue","inputValue","PopoverTriggerAction","ComboBoxWrapperElement","qa","styles","InputElement","as","CubeComboBoxProps","selectedKey","defaultSelectedKey","onSelectionChange","key","defaultInputValue","onInputChange","value","placeholder","autoFocus","autoComplete","onFocus","onBlur","onKeyDown","popoverTrigger","items","Iterable","T","children","item","filter","allowsCustomValue","shouldCommitOnBlur","clearOnBlur","isClearable","onClear","icon","prefix","suffix","hideTrigger","size","inputRef","HTMLInputElement","wrapperRef","HTMLDivElement","listBoxRef","popoverRef","triggerRef","HTMLButtonElement","inputStyles","triggerStyles","listBoxStyles","overlayStyles","optionStyles","sectionStyles","headingStyles","listGap","isDisabled","isLoading","disabledKeys","shouldFlip","direction","overlayOffset","containerPadding","isReadOnly","suffixPosition","sortSelectedToTop","onOpenChange","isOpen","PROP_STYLES","UseComboBoxStateProps","comboBoxId","HTMLElement","UseComboBoxStateReturn","effectiveSelectedKey","internalInputValue","isPopoverOpen","setIsPopoverOpen","open","setInternalSelectedKey","setInternalInputValue","isControlledKey","isControlledInput","useComboBoxState","t0","$","_c","internalSelectedKey","undefined","t1","Symbol","for","t2","menuId","onClose","containerRef","t3","UseSelectedLabelReturn","selectedLabel","pickLabel","useSelectedLabel","collection","knownLabel","setKnownLabel","picked","label","getItem","String","UseComboBoxFilteringProps","effectiveInputValue","UseComboBoxFilteringReturn","filterFn","nodes","isSameText","text","isFilterActive","setIsFilterActive","active","useComboBoxFiltering","sensitivity","contains","usage","collator","compare","normalize","t4","_temp","textFilterFn","t5","term","trim","t6","UseComboBoxKeyboardProps","isListShown","listStateRef","hasResults","selection","onClearValue","onOpenList","onCloseList","onVirtualFocus","OVERLAY_KEYS","Set","isComposing","e","nativeEvent","keyCode","useComboBoxKeyboard","listState","selectionManager","setFocusedKey","focusOption","preventDefault","listState_0","current","handleArrowKey","e_0","commitTypedText","e_1","listState_1","key_0","select","focus","handleEnterKey","e_2","handleEscapeKey","e_3","listState_2","handleEdgeKey","t7","e_4","handleKey","t8","e_5","isDefaultPrevented","has","continuePropagation","keyboardProps","t9","ComboBoxInputProps","id","isRequired","mods","Record","focusProps","onChange","ChangeEvent","FocusEvent","onPointerDown","onClick","activeDescendant","ariaProps","isInvalid","ComboBoxInput","ref","combinedRef","ComboBox","props","valuePropsMapper","_temp2","t","extra","labelStyles","necessityIndicator","isValid","message","description","labelSuffix","t10","renderChildren","t11","t12","externalOnSelectionChange","sortSelectedToTopProp","form","otherProps","t13","t14","t15","t16","sortKey","setSortKey","sortedItems","renderFn","itemsArray","Array","from","map","idx","rendered","it","isValidElement","cloneElement","t17","t18","selectionMode","localCollectionState","t19","t20","filteredOptions","length","shouldShowPopover","reportedOpenRef","t21","t22","isFocused","t23","setSelectedKey","t24","label_0","showSelectionLabel","t25","clearSelectionAndInput","t26","restoreSelectedLabel","t27","value_0","settleCustomValueOnBlur","t28","matchKey","settleOptionOnBlur","t29","handleCompositeBlur","t31","t30","compositeFocusProps","t32","validationIcon","activeOptionKey","setActiveOptionKey","handleSelectionChange","isArray","setTimeout","lastSyncedSelectedKey","selectionClearedByTyping","t33","value_1","target","trimmed","handleInputChange","t34","preserveTypedInput","t35","hasValue","showClearButton","t36","openList","toggleList","t37","handleInputFocus","pressStartedOnInputRef","t38","isInputPress","handleInputClick","t39","handleInputBlur","clearValue","t40","t42","t41","t43","t44","t45","disabled","hovered","focused","loading","clearable","comboBoxWidth","setComboBoxWidth","t46","t47","t48","offsetWidth","attempts","frame","tick","key_1","requestAnimationFrame","cancelAnimationFrame","t49","t50","some","option","t51","t52","zIndex","t53","t54","t55","t56","t57","t58","t59","t60","t61","t62","t63","t64","t65","t66","pressed","t67","t68","t69","t70","t71","t72","comboBoxField","t73","_","propsWithoutChildren","Object","defineProperty","enumerable","configurable","val"],"sources":["../../../../src/components/fields/ComboBox/ComboBox.tsx"],"sourcesContent":["import {\n KeyboardEvent as AriaKeyboardEvent,\n AriaLabelingProps,\n CollectionChildren,\n FocusableRef,\n Key,\n} from '@react-types/shared';\nimport {\n BASE_STYLES,\n BasePropsWithoutChildren,\n BaseStyleProps,\n COLOR_STYLES,\n ColorStyleProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useCollator, useFilter, useKeyboard } from 'react-aria';\nimport { Section as BaseSection, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { DirectionIcon } from '../../../icons/DirectionIcon';\nimport { LoadingIcon } from '../../../icons/LoadingIcon';\nimport { FieldBaseProps, TextFieldKeyboardProps } from '../../../shared';\nimport { generateRandomId } from '../../../utils/random';\nimport { useCombinedRefs, useLayoutEffect } from '../../../utils/react';\nimport { useFocus } from '../../../utils/react/interactions';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { extractStyles } from '../../../utils/styles';\nimport { CollectionItem as Item } from '../../CollectionItem';\nimport {\n getValidationIcon,\n getValidationMods,\n useFieldProps,\n wrapWithField,\n} from '../../form';\nimport { getListBoxOptionId } from '../ListBox/optionId';\nimport {\n filterCollectionNodes,\n getEdgeVisibleKey,\n getNextVisibleKey,\n ListBoxPopover,\n ListStateLike,\n markKeyboardFocus,\n useCompositeFocus,\n} from '../ListBoxPopover';\nimport {\n DEFAULT_INPUT_STYLES,\n INPUT_WRAPPER_STYLES,\n} from '../TextInput/TextInputBase';\n\nimport {\n CollectionLike,\n collectOptions,\n findTypedOption,\n getItemLabel,\n highlightOption,\n resolveHighlightedKey,\n sortSelectedFirst,\n} from './comboBoxOptions';\n\ntype FilterFn = (textValue: string, inputValue: string) => boolean;\n\nexport type PopoverTriggerAction = 'focus' | 'input' | 'manual';\n\nconst ComboBoxWrapperElement = tasty({\n qa: 'ComboBoxWrapper',\n styles: INPUT_WRAPPER_STYLES,\n});\n\nconst InputElement = tasty({\n as: 'input',\n styles: DEFAULT_INPUT_STYLES,\n});\n\nexport interface CubeComboBoxProps<T>\n extends BasePropsWithoutChildren,\n BaseStyleProps,\n OuterStyleProps,\n ColorStyleProps,\n FieldBaseProps<string | null | undefined> {\n /** The selected key in controlled mode */\n selectedKey?: string | null;\n /** The default selected key in uncontrolled mode */\n defaultSelectedKey?: string | null;\n /** Callback fired when selection changes */\n onSelectionChange?: (key: string | null) => void;\n\n /** The input value in controlled mode */\n inputValue?: string;\n /** The default input value in uncontrolled mode */\n defaultInputValue?: string;\n /** Callback fired when input value changes */\n onInputChange?: (value: string) => void;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the input should have autofocus */\n autoFocus?: boolean;\n /** HTML autocomplete attribute for the input */\n autoComplete?: string;\n /** Callback fired when focus enters the component (input, trigger, or popover). Does not receive event object. */\n onFocus?: () => void;\n /** Callback fired when focus leaves the component entirely. Does not receive event object. */\n onBlur?: () => void;\n /**\n * Callback fired when a key is pressed on the input, before the built-in\n * key handling. Receives React Aria's keyboard event: `e.preventDefault()`\n * skips the built-in handling for the key. `Escape` and `Tab` go on to\n * ancestors, such as a surrounding dialog, unless ComboBox acts on them\n * (`Escape` closing the list or clearing the value); other keys stop at the\n * input unless the handler calls `e.continuePropagation()`.\n */\n onKeyDown?: TextFieldKeyboardProps['onKeyDown'];\n\n /**\n * When the list opens on its own: `'input'` on typing or a press in the\n * input, `'focus'` on focus as well, `'manual'` only from the chevron and\n * the arrow keys. Defaults to `'input'`.\n */\n popoverTrigger?: PopoverTriggerAction;\n\n /** Items for the listbox (alternative to children) */\n items?: Iterable<T>;\n /** Children for the listbox (static items or render function) */\n children?: ReactNode | ((item: T) => ReactElement);\n\n /**\n * Custom filter function for determining if an option should be included.\n * Pass `false` to disable internal filtering completely.\n */\n filter?: FilterFn | false;\n\n /**\n * Whether to allow entering custom values that are not in the predefined\n * options. The typed text is committed trimmed; empty text commits `null`.\n */\n allowsCustomValue?: boolean;\n /**\n * Whether to commit custom value on blur in allowsCustomValue mode (default:\n * true). When `false`, only Enter or a pick commits, and blur discards the\n * uncommitted text: the input shows the selected option's label again, or\n * nothing when no option is selected.\n */\n shouldCommitOnBlur?: boolean;\n /** Whether to clear selection and input on blur when the text names no selectable item (default: false, only applies to non-custom-value mode) */\n clearOnBlur?: boolean;\n /** Whether the combobox is clearable using ESC key or clear button */\n isClearable?: boolean;\n /** Callback called when the clear button is pressed */\n onClear?: () => void;\n\n /** Left input icon */\n icon?: ReactElement;\n /** Input decoration before the main input */\n prefix?: ReactNode;\n /** Input decoration after the main input */\n suffix?: ReactNode;\n /** Whether to hide the trigger button */\n hideTrigger?: boolean;\n /** Size of the combobox */\n size?: 'small' | 'medium' | 'large' | (string & {});\n\n /** Ref for accessing the input element */\n inputRef?: RefObject<HTMLInputElement>;\n /** Ref for accessing the wrapper element */\n wrapperRef?: RefObject<HTMLDivElement>;\n /** Ref for accessing the listbox element */\n listBoxRef?: RefObject<HTMLDivElement>;\n /** Ref for accessing the popover element */\n popoverRef?: RefObject<HTMLDivElement>;\n /** Ref for accessing the trigger button element */\n triggerRef?: FocusableRef<HTMLButtonElement>;\n\n /** Custom styles for the input */\n inputStyles?: Styles;\n /** Custom styles for the trigger button */\n triggerStyles?: Styles;\n /** Custom styles for the listbox */\n listBoxStyles?: Styles;\n /** Custom styles for the popover overlay */\n overlayStyles?: Styles;\n /** Custom styles for individual options */\n optionStyles?: Styles;\n /** Custom styles for sections */\n sectionStyles?: Styles;\n /** Custom styles for section headings */\n headingStyles?: Styles;\n /** Space between options, in pixels. Defaults to a hairline (`1bw`). */\n listGap?: number;\n\n /** Whether the combobox is disabled */\n isDisabled?: boolean;\n /** Whether the combobox is in loading state */\n isLoading?: boolean;\n /** Keys of disabled items */\n disabledKeys?: Iterable<Key>;\n /** Whether to flip the popover placement */\n shouldFlip?: boolean;\n /** Placement direction for the popover */\n direction?: 'bottom' | 'top';\n /** Offset for the popover */\n overlayOffset?: number;\n /** Minimum padding in pixels between the popover and viewport edges */\n containerPadding?: number;\n /**\n * Whether the combobox is read-only: the list doesn't open, and neither\n * keys nor blur change the value or the text.\n */\n isReadOnly?: boolean;\n /** Suffix position goes before or after the validation and loading statuses */\n suffixPosition?: 'before' | 'after';\n /**\n * Sort selected item to the top when the popover opens.\n * Only works when using the `items` prop (data-driven mode).\n * Ignored when using JSX children.\n * @default true when items are provided, false when using JSX children\n */\n sortSelectedToTop?: boolean;\n /**\n * Callback called when the list shows or hides. Not called on mount, nor\n * while typed text that matches nothing keeps it hidden.\n */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nconst PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\n// ============================================================================\n// Hook: useComboBoxState\n// ============================================================================\ninterface UseComboBoxStateProps {\n selectedKey?: string | null;\n defaultSelectedKey?: string | null;\n inputValue?: string;\n defaultInputValue?: string;\n comboBoxId: string;\n triggerRef?: RefObject<HTMLElement | null>;\n popoverRef?: RefObject<HTMLElement | null>;\n}\n\ninterface UseComboBoxStateReturn {\n effectiveSelectedKey: Key | null;\n /**\n * The uncontrolled input text. `null` until the user types, and again after\n * the text settles on the selection: the input then shows the selected\n * option's label, following the options as they load.\n */\n internalInputValue: string | null;\n isPopoverOpen: boolean;\n setIsPopoverOpen: (open: boolean) => void;\n setInternalSelectedKey: (key: Key | null) => void;\n setInternalInputValue: (value: string | null) => void;\n isControlledKey: boolean;\n isControlledInput: boolean;\n}\n\nfunction useComboBoxState({\n selectedKey,\n defaultSelectedKey,\n inputValue,\n defaultInputValue,\n comboBoxId,\n triggerRef,\n popoverRef,\n}: UseComboBoxStateProps): UseComboBoxStateReturn {\n // Internal state for uncontrolled mode\n const [internalSelectedKey, setInternalSelectedKey] = useState<Key | null>(\n defaultSelectedKey ?? null,\n );\n const [internalInputValue, setInternalInputValue] = useState<string | null>(\n defaultInputValue ?? null,\n );\n\n const isControlledKey = selectedKey !== undefined;\n const isControlledInput = inputValue !== undefined;\n\n const effectiveSelectedKey = isControlledKey\n ? selectedKey\n : internalSelectedKey;\n\n // Popover state\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n\n usePopoverSync({\n menuId: comboBoxId,\n isOpen: isPopoverOpen,\n onClose: () => setIsPopoverOpen(false),\n triggerRef,\n containerRef: popoverRef,\n });\n\n return {\n effectiveSelectedKey,\n internalInputValue,\n isPopoverOpen,\n setIsPopoverOpen,\n setInternalSelectedKey,\n setInternalInputValue,\n isControlledKey,\n isControlledInput,\n };\n}\n\n// ============================================================================\n// Hook: useSelectedLabel\n// ============================================================================\ninterface UseSelectedLabelReturn {\n /**\n * The text the input shows for the selection: its option's label, else the\n * last label found for that key while the options leave it out (loading, a\n * refetch, a server-side search), else the key itself — a custom value or an\n * option that has not loaded yet.\n */\n selectedLabel: string;\n /**\n * The label of `key`'s option, remembered for the key so the input keeps it\n * when the same update drops the option.\n */\n pickLabel: (key: Key) => string;\n}\n\nfunction useSelectedLabel(\n collection: CollectionLike,\n selectedKey: Key | null,\n): UseSelectedLabelReturn {\n const [knownLabel, setKnownLabel] = useState<{\n key: Key;\n label: string;\n } | null>(null);\n\n const pickLabel = (key: Key) => {\n const picked = getItemLabel(collection, key);\n\n setKnownLabel({ key, label: picked });\n\n return picked;\n };\n\n if (selectedKey == null) return { selectedLabel: '', pickLabel };\n\n const label = collection.getItem(selectedKey)?.textValue;\n\n if (\n label &&\n (knownLabel?.key !== selectedKey || knownLabel.label !== label)\n ) {\n setKnownLabel({ key: selectedKey, label });\n }\n\n const selectedLabel =\n label ||\n (knownLabel?.key === selectedKey ? knownLabel.label : String(selectedKey));\n\n return { selectedLabel, pickLabel };\n}\n\n// ============================================================================\n// Hook: useComboBoxFiltering\n// ============================================================================\ninterface UseComboBoxFilteringProps {\n effectiveInputValue: string;\n filter: FilterFn | false | undefined;\n}\n\ninterface UseComboBoxFilteringReturn {\n filterFn: (nodes: Iterable<any>) => Iterable<any>;\n /** Whether the typed text is an option's label, compared like the filter. */\n isSameText: (textValue: string, text: string) => boolean;\n isFilterActive: boolean;\n setIsFilterActive: (active: boolean) => void;\n}\n\nfunction useComboBoxFiltering({\n effectiveInputValue,\n filter,\n}: UseComboBoxFilteringProps): UseComboBoxFilteringReturn {\n const [isFilterActive, setIsFilterActive] = useState(false);\n\n const { contains } = useFilter({ sensitivity: 'base' });\n // The collator `useFilter` matches with, so the filter and the exact-match\n // check agree on case, accents and locale rules.\n const collator = useCollator({ usage: 'search', sensitivity: 'base' });\n\n const isSameText = (textValue: string, text: string) =>\n collator.compare(textValue.normalize('NFC'), text.normalize('NFC')) === 0;\n\n const textFilterFn: FilterFn =\n filter === false ? () => true : filter || contains;\n\n // Create a filter function for collection nodes\n const filterFn = (nodes: Iterable<any>) => {\n const term = effectiveInputValue.trim();\n\n // Don't filter if not active or no search term\n if (!isFilterActive || !term) {\n return nodes;\n }\n\n return filterCollectionNodes(nodes, term, textFilterFn);\n };\n\n return {\n filterFn,\n isSameText,\n isFilterActive,\n setIsFilterActive,\n };\n}\n\n// ============================================================================\n// Hook: useComboBoxKeyboard\n// ============================================================================\ninterface UseComboBoxKeyboardProps {\n /** Whether the list is shown: open, with options to show. */\n isListShown: boolean;\n isReadOnly?: boolean;\n listStateRef: RefObject<any>;\n hasResults: boolean;\n allowsCustomValue?: boolean;\n effectiveInputValue: string;\n selectedKey: Key | null;\n /** The text the input shows for the selection. */\n selectedLabel: string;\n isClearable?: boolean;\n onSelectionChange: (selection: Key | Key[] | null) => void;\n onClearValue: () => void;\n onOpenList: () => void;\n onCloseList: () => void;\n inputRef: RefObject<HTMLInputElement>;\n /** Called with the option the arrow keys moved virtual focus to. */\n onVirtualFocus: (key: Key) => void;\n onKeyDown?: TextFieldKeyboardProps['onKeyDown'];\n}\n\n// Keys that go on to a surrounding dialog unless the field acts on them:\n// Escape closes it, and its focus containment listens for Tab.\nconst OVERLAY_KEYS = new Set(['Escape', 'Tab']);\n\n// An IME takes Enter, the arrow keys and Escape while it composes text: they\n// confirm, pick or cancel its candidate.\nfunction isComposing(e: AriaKeyboardEvent) {\n return e.nativeEvent?.isComposing || e.keyCode === 229;\n}\n\nfunction useComboBoxKeyboard({\n isListShown,\n isReadOnly,\n listStateRef,\n hasResults,\n allowsCustomValue,\n effectiveInputValue,\n selectedKey,\n selectedLabel,\n isClearable,\n onSelectionChange,\n onClearValue,\n onOpenList,\n onCloseList,\n inputRef,\n onVirtualFocus,\n onKeyDown,\n}: UseComboBoxKeyboardProps) {\n // Moves the virtual focus to `key`, if there is one, and scrolls it into view.\n const focusOption = (listState: ListStateLike, key: Key | null) => {\n if (key == null) return;\n\n markKeyboardFocus(listState);\n listState.selectionManager.setFocusedKey(key);\n onVirtualFocus(key);\n };\n\n const handleArrowKey = (e: AriaKeyboardEvent) => {\n e.preventDefault();\n\n if (!isListShown) {\n onOpenList();\n\n return;\n }\n\n const listState = listStateRef.current;\n\n if (listState) {\n focusOption(\n listState,\n getNextVisibleKey(listState, e.key === 'ArrowDown' ? 1 : -1),\n );\n }\n };\n\n // With `allowsCustomValue`, Enter commits the typed text, trimmed, and empty\n // text clears the selection. The selection's own label is already\n // committed.\n const commitTypedText = (e: AriaKeyboardEvent) => {\n const value = effectiveInputValue.trim();\n\n // A closed list lets Enter go on to submit the form with the value.\n if (isListShown || !value) e.preventDefault();\n\n if (value && selectedKey != null && value === selectedLabel) return;\n\n onSelectionChange(value || null);\n };\n\n const handleEnterKey = (e: AriaKeyboardEvent) => {\n const listState = isListShown ? listStateRef.current : null;\n // Read the highlight here rather than from the list: the list highlights\n // the first match a couple of frames after the text changes, and a fast\n // Enter comes first.\n const key = listState\n ? resolveHighlightedKey(listState, selectedKey)\n : null;\n\n if (key != null) {\n e.preventDefault();\n listState.selectionManager.select(key, e);\n // Close even when the selection stays the same.\n onCloseList();\n inputRef.current?.focus();\n } else if (allowsCustomValue) {\n commitTypedText(e);\n } else if (!hasResults || !effectiveInputValue.trim()) {\n // Text that names nothing, or none, clears the selection.\n e.preventDefault();\n onSelectionChange(null);\n }\n };\n\n // Returns whether Escape did something; otherwise it goes on to close a\n // surrounding dialog.\n const handleEscapeKey = (e: AriaKeyboardEvent) => {\n if (isListShown) {\n e.preventDefault();\n onCloseList();\n inputRef.current?.focus();\n\n return true;\n }\n\n if (effectiveInputValue && isClearable) {\n e.preventDefault();\n onClearValue();\n\n return true;\n }\n\n return false;\n };\n\n const handleEdgeKey = (e: AriaKeyboardEvent) => {\n if (!isListShown) return;\n\n e.preventDefault();\n\n const listState = listStateRef.current;\n\n if (listState) {\n focusOption(\n listState,\n getEdgeVisibleKey(listState, e.key === 'Home' ? 'first' : 'last'),\n );\n }\n };\n\n // Handles the key and returns whether it stays at the input.\n const handleKey = (e: AriaKeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n handleArrowKey(e);\n return true;\n case 'Enter':\n handleEnterKey(e);\n return true;\n case 'Escape':\n return handleEscapeKey(e);\n case 'Home':\n case 'End':\n handleEdgeKey(e);\n return true;\n case 'Tab':\n // Focus moves on, so the list closes; Tab itself is never held.\n if (isListShown) onCloseList();\n return false;\n default:\n return true;\n }\n };\n\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n // The user's handler runs first, and a key it prevents is theirs: skip\n // the built-in handling. Read `isDefaultPrevented()`, not\n // `defaultPrevented` — `useKeyboard` hands over a copy of the event whose\n // `defaultPrevented` field is fixed at the moment it was made.\n onKeyDown?.(e);\n\n if (e.isDefaultPrevented() || isComposing(e)) return;\n\n // A read-only field neither opens, picks nor clears. Escape and Tab go\n // on to a surrounding dialog unless handled here, as for any field.\n if ((isReadOnly || !handleKey(e)) && OVERLAY_KEYS.has(e.key)) {\n e.continuePropagation();\n }\n },\n });\n\n return { keyboardProps };\n}\n\n// ============================================================================\n// Component: ComboBoxInput\n// ============================================================================\ninterface ComboBoxInputProps {\n qa?: string;\n inputRef: RefObject<HTMLInputElement>;\n id?: string;\n value: string;\n placeholder?: string;\n isDisabled?: boolean;\n isReadOnly?: boolean;\n isRequired?: boolean;\n autoFocus?: boolean;\n autoComplete?: string;\n size: string;\n mods: Record<string, any>;\n inputStyles?: Styles;\n keyboardProps: any;\n focusProps: any;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onFocus: (e: React.FocusEvent<HTMLInputElement>) => void;\n onPointerDown: () => void;\n onClick: () => void;\n /** Whether the list is shown: open, with options to show. */\n isListShown: boolean;\n comboBoxId: string;\n /** The id of the option under virtual focus, while the popover is open. */\n activeDescendant?: string;\n /**\n * The caller's naming and the field's description and message. The input is\n * the control, so they belong on it rather than on the wrapper.\n */\n ariaProps: AriaLabelingProps;\n isInvalid?: boolean;\n}\n\nconst ComboBoxInput = forwardRef<HTMLInputElement, ComboBoxInputProps>(\n function ComboBoxInput(\n {\n qa,\n inputRef,\n id,\n value,\n placeholder,\n isDisabled,\n isReadOnly,\n isRequired,\n autoFocus,\n autoComplete,\n size,\n mods,\n inputStyles,\n keyboardProps,\n focusProps,\n onChange,\n onFocus,\n onPointerDown,\n onClick,\n isListShown,\n comboBoxId,\n activeDescendant,\n ariaProps,\n isInvalid,\n },\n ref,\n ) {\n const combinedRef = useCombinedRefs(ref, inputRef);\n\n return (\n <InputElement\n ref={combinedRef}\n qa={qa}\n id={id}\n type=\"text\"\n value={value}\n placeholder={placeholder}\n isDisabled={isDisabled}\n readOnly={isReadOnly}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n data-autofocus={autoFocus ? '' : undefined}\n onChange={onChange}\n onFocus={onFocus}\n onPointerDown={onPointerDown}\n onClick={onClick}\n onBlur={focusProps.onBlur}\n {...keyboardProps}\n styles={inputStyles}\n mods={mods}\n data-size={size}\n data-input-type=\"combobox\"\n role=\"combobox\"\n // `ComboBox` builds its own trigger rather than going through a\n // react-aria field hook, so nothing else would announce that the field\n // is mandatory — the label marker alone is not exposed to assistive\n // technology.\n aria-required={isRequired || undefined}\n aria-expanded={isListShown}\n aria-haspopup=\"listbox\"\n aria-controls={\n isListShown ? `ComboBoxListBox-${comboBoxId}` : undefined\n }\n // Typing filters the options.\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n aria-invalid={isInvalid || undefined}\n {...ariaProps}\n />\n );\n },\n);\n\n// ============================================================================\n// Main Component: ComboBox\n// ============================================================================\nexport const ComboBox = forwardRef(function ComboBox<T extends object>(\n props: CubeComboBoxProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n props = useFieldProps(props, {\n valuePropsMapper: ({ value, onChange }) => {\n return {\n // Form value maps to selectedKey (the committed value) in both modes\n selectedKey: value ?? null,\n onSelectionChange(val: string | null) {\n // Commit selection changes to the form\n onChange(val);\n },\n };\n },\n });\n\n const { t } = useI18n();\n\n let {\n qa,\n label,\n extra,\n labelStyles,\n isRequired,\n necessityIndicator,\n isInvalid,\n isValid,\n id,\n icon,\n prefix,\n isDisabled,\n autoFocus,\n autoComplete = 'off',\n wrapperRef,\n inputRef,\n triggerRef,\n popoverRef,\n listBoxRef,\n isLoading,\n inputStyles,\n optionStyles,\n triggerStyles,\n listBoxStyles,\n overlayStyles,\n suffix,\n hideTrigger,\n message,\n description,\n size = 'medium',\n direction = 'bottom',\n shouldFlip = true,\n popoverTrigger = 'input',\n suffixPosition = 'before',\n filter,\n styles,\n labelSuffix,\n selectedKey,\n defaultSelectedKey,\n inputValue,\n defaultInputValue,\n onInputChange,\n isClearable,\n onClear,\n placeholder,\n allowsCustomValue,\n shouldCommitOnBlur = true,\n clearOnBlur,\n items,\n children: renderChildren,\n sectionStyles,\n headingStyles,\n listGap,\n isReadOnly,\n overlayOffset = 8,\n containerPadding = 8,\n onSelectionChange: externalOnSelectionChange,\n sortSelectedToTop: sortSelectedToTopProp,\n onOpenChange,\n onFocus,\n onBlur,\n onKeyDown,\n form,\n ...otherProps\n } = props;\n\n // Generate a unique ID for this combobox instance\n const comboBoxId = useMemo(() => generateRandomId(), []);\n\n // Hoist the wrapper/popover ref normalization above `useComboBoxState` so\n // the popover-sync inside it sees stable, attached refs. Other ref combines\n // happen below alongside the legacy ordering.\n wrapperRef = useCombinedRefs(wrapperRef);\n popoverRef = useCombinedRefs(popoverRef);\n\n // State management hook\n const {\n effectiveSelectedKey,\n internalInputValue,\n isPopoverOpen,\n setIsPopoverOpen,\n setInternalSelectedKey,\n setInternalInputValue,\n isControlledKey,\n isControlledInput,\n } = useComboBoxState({\n selectedKey,\n defaultSelectedKey,\n inputValue,\n defaultInputValue,\n comboBoxId,\n triggerRef: wrapperRef as RefObject<HTMLElement | null>,\n popoverRef: popoverRef as RefObject<HTMLElement | null>,\n });\n\n // Default to true if items are provided, false otherwise\n const sortSelectedToTop = sortSelectedToTopProp ?? (items ? true : false);\n\n styles = extractStyles(otherProps, PROP_STYLES, styles);\n\n ref = useCombinedRefs(ref);\n inputRef = useCombinedRefs(inputRef);\n triggerRef = useCombinedRefs(triggerRef);\n listBoxRef = useCombinedRefs(listBoxRef);\n\n // The selection the options are sorted by. It follows the selection while\n // the list is closed and holds still while it is open, so a pick doesn't\n // reorder the list under the pointer.\n const [sortKey, setSortKey] = useState(effectiveSelectedKey);\n\n if (!isPopoverOpen && sortKey !== effectiveSelectedKey) {\n setSortKey(effectiveSelectedKey);\n }\n\n // Sort items with selected on top if enabled\n const sortedItems =\n items && sortSelectedToTop ? sortSelectedFirst(items, sortKey) : items;\n\n // Preserve the original `children` (may be a render function) before we\n // potentially overwrite it.\n let children: ReactNode = renderChildren as ReactNode;\n\n const renderFn = renderChildren as unknown;\n\n if (sortedItems && typeof renderFn === 'function') {\n try {\n const itemsArray = Array.from(sortedItems as Iterable<any>);\n children = itemsArray.map((item, idx) => {\n const rendered = (renderFn as (it: any) => ReactNode)(item);\n if (\n React.isValidElement(rendered) &&\n (rendered as ReactElement).key == null\n ) {\n return React.cloneElement(rendered as ReactElement, {\n key: (rendered as any)?.key ?? item?.key ?? idx,\n });\n }\n\n return rendered as ReactNode;\n });\n } catch {\n // If conversion fails, proceed with the original children\n }\n }\n\n // Create local collection state for reading item data (labels, etc.)\n // This allows us to read item labels even before the popover opens\n const localCollectionState = useListState({\n children: children as CollectionChildren<T>,\n items: sortedItems,\n disabledKeys: props.disabledKeys,\n selectionMode: 'none', // Don't manage selection in this state\n });\n\n const { selectedLabel, pickLabel } = useSelectedLabel(\n localCollectionState.collection,\n effectiveSelectedKey,\n );\n const effectiveInputValue = isControlledInput\n ? (inputValue as string)\n : internalInputValue ?? selectedLabel;\n\n // Filtering hook\n const { filterFn, isSameText, isFilterActive, setIsFilterActive } =\n useComboBoxFiltering({\n effectiveInputValue,\n filter,\n });\n\n // The options the typed text leaves in the list.\n const filteredOptions = collectOptions(\n filterFn(localCollectionState.collection),\n );\n const hasResults = filteredOptions.length > 0;\n const shouldShowPopover = isPopoverOpen && hasResults;\n\n // Report the list showing or hiding, as the user sees it: not on mount, and\n // not for text that reopens an empty list keystroke after keystroke.\n const reportedOpenRef = useRef(shouldShowPopover);\n\n useEffect(() => {\n if (reportedOpenRef.current === shouldShowPopover) return;\n\n reportedOpenRef.current = shouldShowPopover;\n onOpenChange?.(shouldShowPopover);\n }, [shouldShowPopover, onOpenChange]);\n\n const { isFocused, focusProps } = useFocus();\n\n // ---- selection and text -------------------------------------------------\n // Writes the selected key, unless it is controlled. It does not report:\n // each outcome calls `onSelectionChange` itself, in the order it has always\n // fired relative to `onInputChange`.\n const setSelectedKey = (key: Key | null) => {\n if (!isControlledKey) setInternalSelectedKey(key);\n };\n\n // Settles the uncontrolled text on the selection, so it shows the selected\n // option's label — the controlled one when a parent declines a change — and\n // reports `label`, the text for the selection being settled on, when it\n // differs from the text shown now.\n const showSelectionLabel = (label: string) => {\n if (!isControlledInput) setInternalInputValue(null);\n if (label !== effectiveInputValue) onInputChange?.(label);\n };\n\n // ---- blur ---------------------------------------------------------------\n // Blur reports only what it changes.\n const clearSelectionAndInput = () => {\n if (effectiveSelectedKey != null) {\n externalOnSelectionChange?.(null);\n setSelectedKey(null);\n }\n\n showSelectionLabel('');\n };\n\n // Reset input to show current selection (or empty if none)\n const restoreSelectedLabel = () => showSelectionLabel(selectedLabel);\n\n // In allowsCustomValue mode: commit the trimmed text if it's non-empty and\n // nothing is selected, clear the selection if the text is empty. Otherwise,\n // including with `shouldCommitOnBlur={false}`, the input shows the selection\n // again and the uncommitted text is dropped.\n const settleCustomValueOnBlur = () => {\n const value = effectiveInputValue.trim();\n\n if (shouldCommitOnBlur && value && effectiveSelectedKey == null) {\n externalOnSelectionChange?.(value);\n setSelectedKey(value);\n showSelectionLabel(value);\n } else if (!value) {\n clearSelectionAndInput();\n } else {\n restoreSelectedLabel();\n }\n };\n\n // In non-custom-value mode: auto-select the exact match, or the only filtered\n // result, unless it is disabled; keep a selected item even when it is\n // disabled; clear invalid input (no selectable match) when clearOnBlur is set\n // or the input is empty.\n const settleOptionOnBlur = () => {\n const matchKey = findTypedOption(\n filteredOptions,\n effectiveInputValue,\n effectiveSelectedKey,\n localCollectionState.disabledKeys,\n isSameText,\n );\n\n if (matchKey != null && matchKey !== effectiveSelectedKey) {\n setSelectedKey(matchKey);\n showSelectionLabel(pickLabel(matchKey));\n externalOnSelectionChange?.(matchKey as string);\n } else if (\n matchKey == null &&\n (clearOnBlur || !effectiveInputValue.trim())\n ) {\n clearSelectionAndInput();\n } else {\n restoreSelectedLabel();\n }\n };\n\n // Composite blur handler - fires when focus leaves the entire component\n const handleCompositeBlur = useEvent(() => {\n setIsPopoverOpen(false);\n\n // A read-only field keeps its value and text.\n if (isReadOnly) {\n // Nothing to settle.\n } else if (allowsCustomValue) {\n settleCustomValueOnBlur();\n } else {\n settleOptionOnBlur();\n }\n\n onBlur?.();\n // Only now: the match above needs the filter still active.\n setIsFilterActive(false);\n });\n\n // Composite focus hook - handles focus tracking across wrapper and portaled popover\n const { compositeFocusProps } = useCompositeFocus({\n wrapperRef,\n popoverRef,\n onFocus,\n onBlur: handleCompositeBlur,\n isDisabled,\n });\n\n let validationIcon = getValidationIcon({ isInvalid, isValid });\n\n // Ref to access internal ListBox state\n const listStateRef = useRef<any>(null);\n // The option under virtual focus, mirrored in state for the input's\n // `aria-activedescendant`: the listbox's own state update does not re-render\n // this component.\n const [activeOptionKey, setActiveOptionKey] = useState<Key | null>(null);\n\n // Selection change handler\n const handleSelectionChange = useEvent((selection: Key | Key[] | null) => {\n // Extract single key from selection (we only support single selection)\n const key = Array.isArray(selection) ? selection[0] : selection;\n\n setSelectedKey(key ?? null);\n setIsFilterActive(false);\n showSelectionLabel(key != null ? pickLabel(key) : '');\n externalOnSelectionChange?.(key as string | null);\n\n // Close popover after selection\n setIsPopoverOpen(false);\n\n // Focus input\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n });\n\n const lastSyncedSelectedKey = useRef<Key | null | undefined>(undefined);\n const selectionClearedByTyping = useRef(false);\n\n // Input change handler\n const handleInputChange = useEvent(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n\n // Update input value\n if (!isControlledInput) {\n setInternalInputValue(value);\n }\n onInputChange?.(value);\n\n const trimmed = value.trim();\n setIsFilterActive(trimmed.length > 0);\n\n // Only clear selection in allowsCustomValue mode\n // In normal mode, typing just filters - selection stays until explicitly changed\n if (allowsCustomValue && effectiveSelectedKey != null) {\n selectionClearedByTyping.current = true;\n if (!isControlledKey) {\n setInternalSelectedKey(null);\n }\n externalOnSelectionChange?.(null);\n }\n\n // Open popover based on trigger\n if (popoverTrigger !== 'manual' && value && !isPopoverOpen) {\n setIsPopoverOpen(true);\n }\n },\n );\n\n // When a controlled selection changes, the uncontrolled text settles on it\n // and shows its label, which follows the options as they load.\n useEffect(() => {\n const preserveTypedInput = selectionClearedByTyping.current;\n selectionClearedByTyping.current = false;\n // Only run when selectedKey is controlled but inputValue is uncontrolled\n if (!isControlledKey || isControlledInput) return;\n\n // Skip if the key hasn't actually changed (prevents unnecessary resets when collection rebuilds)\n if (\n lastSyncedSelectedKey.current !== undefined &&\n lastSyncedSelectedKey.current === effectiveSelectedKey\n ) {\n return;\n }\n\n lastSyncedSelectedKey.current = effectiveSelectedKey;\n\n // Acknowledging the selection cleared by this edit must not erase the\n // text that caused it. Later external clears still reset the input.\n if (preserveTypedInput && effectiveSelectedKey == null) return;\n\n setInternalInputValue(null);\n }, [\n isControlledKey,\n isControlledInput,\n effectiveSelectedKey,\n effectiveInputValue,\n setInternalInputValue,\n ]);\n\n // Clear button logic\n let hasValue = allowsCustomValue\n ? effectiveInputValue !== ''\n : effectiveSelectedKey != null;\n let showClearButton = isClearable && hasValue && !isDisabled && !isReadOnly;\n\n // Opens the list, showing every option when the typed text matches none. A\n // read-only field never opens it.\n const openList = () => {\n if (isReadOnly || isDisabled) return;\n if (!hasResults) setIsFilterActive(false);\n\n setIsPopoverOpen(true);\n };\n\n // The chevron toggles the list and leaves focus in the input.\n const toggleList = () => {\n if (shouldShowPopover) {\n setIsPopoverOpen(false);\n } else {\n openList();\n }\n\n inputRef.current?.focus();\n };\n\n // Input focus handler\n const handleInputFocus = useEvent((e: React.FocusEvent<HTMLInputElement>) => {\n // Call focus props handler if it exists\n focusProps.onFocus?.(e as any);\n\n if (popoverTrigger === 'focus' && !isPopoverOpen) {\n openList();\n }\n });\n\n // Whether the pointer went down on the input itself. The field's label\n // forwards its own click to the input, and that click only focuses.\n const pressStartedOnInputRef = useRef(false);\n\n // A press in the input opens a closed list, focused or not, with the options\n // the typed text leaves. Text that matches nothing keeps the list hidden, so\n // a press that moves the caret doesn't change what Enter commits; the\n // chevron and the arrow keys show every option instead. A press on an open\n // list only moves the caret.\n const handleInputClick = () => {\n const isInputPress = pressStartedOnInputRef.current;\n\n pressStartedOnInputRef.current = false;\n\n if (!isInputPress || popoverTrigger === 'manual') return;\n if (!shouldShowPopover && hasResults) openList();\n };\n\n // Input blur handler - just handles internal focus props\n const handleInputBlur = useEvent((e: React.FocusEvent<HTMLInputElement>) => {\n focusProps.onBlur?.(e as any);\n });\n\n // Clear function\n let clearValue = useEvent(() => {\n // Clear input\n if (!isControlledInput) {\n setInternalInputValue(null);\n }\n onInputChange?.('');\n\n // Clear selection\n setSelectedKey(null);\n externalOnSelectionChange?.(null);\n\n // Close popover\n if (isPopoverOpen) {\n setIsPopoverOpen(false);\n }\n\n // Focus input\n inputRef.current?.focus();\n\n onClear?.();\n });\n\n // Keyboard navigation hook\n const { keyboardProps } = useComboBoxKeyboard({\n isListShown: shouldShowPopover,\n isReadOnly,\n listStateRef,\n hasResults,\n allowsCustomValue,\n effectiveInputValue,\n selectedKey: effectiveSelectedKey,\n selectedLabel,\n isClearable,\n onSelectionChange: handleSelectionChange,\n onClearValue: clearValue,\n onOpenList: openList,\n onCloseList: () => setIsPopoverOpen(false),\n inputRef,\n onVirtualFocus: setActiveOptionKey,\n onKeyDown,\n });\n\n if (icon) {\n icon = <div data-element=\"InputIcon\">{icon}</div>;\n\n if (prefix) {\n prefix = (\n <>\n {icon}\n {prefix}\n </>\n );\n } else {\n prefix = icon;\n }\n }\n\n let mods = useMemo(\n () => ({\n ...getValidationMods({ isInvalid, isValid }),\n disabled: isDisabled,\n hovered: false,\n focused: isFocused,\n loading: isLoading,\n prefix: !!prefix,\n suffix: true,\n clearable: showClearButton,\n }),\n [\n isInvalid,\n isValid,\n isDisabled,\n isFocused,\n isLoading,\n prefix,\n showClearButton,\n ],\n );\n\n // The list is at least as wide as the field, measured as it shows.\n const [comboBoxWidth, setComboBoxWidth] = useState<number>();\n\n // Close popover if no results\n useEffect(() => {\n if (isPopoverOpen && !hasResults) {\n setIsPopoverOpen(false);\n }\n }, [isPopoverOpen, hasResults, setIsPopoverOpen]);\n\n // Highlight an option once the list shows, and again whenever the typed\n // text filters the list, so the input's active descendant follows it. The\n // list mounts its collection over the next few frames.\n useLayoutEffect(() => {\n if (!shouldShowPopover) return;\n\n setComboBoxWidth(wrapperRef.current?.offsetWidth);\n\n let attempts = 0;\n let frame = 0;\n\n const tick = () => {\n const key = highlightOption(listStateRef.current, effectiveSelectedKey);\n\n if (key != null) setActiveOptionKey(key);\n\n attempts += 1;\n\n if (key == null && attempts < 8) frame = requestAnimationFrame(tick);\n };\n\n frame = requestAnimationFrame(() => {\n frame = requestAnimationFrame(tick);\n });\n\n return () => cancelAnimationFrame(frame);\n }, [\n shouldShowPopover,\n effectiveSelectedKey,\n effectiveInputValue,\n wrapperRef,\n ]);\n\n // Only an option the filter keeps is rendered.\n const activeDescendant =\n shouldShowPopover &&\n activeOptionKey != null &&\n filteredOptions.some((option) => option.key === activeOptionKey)\n ? getListBoxOptionId(`ComboBoxListBox-${comboBoxId}`, activeOptionKey)\n : undefined;\n\n const comboBoxField = (\n <ComboBoxWrapperElement\n ref={wrapperRef}\n mods={mods}\n styles={styles}\n style={{\n zIndex: isFocused ? 1 : 'initial',\n }}\n data-size={size}\n {...compositeFocusProps}\n >\n {prefix ? <div data-element=\"Prefix\">{prefix}</div> : null}\n <ComboBoxInput\n qa={qa || 'ComboBox'}\n inputRef={inputRef}\n id={id}\n value={effectiveInputValue}\n placeholder={placeholder}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n size={size}\n mods={mods}\n inputStyles={inputStyles}\n keyboardProps={keyboardProps}\n focusProps={{ ...focusProps, onBlur: handleInputBlur }}\n isListShown={shouldShowPopover}\n comboBoxId={comboBoxId}\n activeDescendant={activeDescendant}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onPointerDown={() => {\n pressStartedOnInputRef.current = true;\n }}\n onClick={handleInputClick}\n ariaProps={{\n 'aria-label': (props as AriaLabelingProps)['aria-label'],\n 'aria-labelledby': (props as AriaLabelingProps)['aria-labelledby'],\n 'aria-describedby': (props as AriaLabelingProps)['aria-describedby'],\n }}\n isInvalid={isInvalid}\n />\n <div data-element=\"Suffix\">\n {suffixPosition === 'before' ? suffix : null}\n {isLoading ? <LoadingIcon data-element=\"InputIcon\" /> : validationIcon}\n {suffixPosition === 'after' ? suffix : null}\n {showClearButton && (\n <Item.Action\n excludeFromTabOrder\n icon={<CloseIcon />}\n size={size}\n // No `theme` — the default `current` type inherits the input's own\n // text color, which is already validation-tinted, so the button\n // matches the text beside it exactly instead of using the fixed\n // `danger.clear` palette.\n qa=\"ComboBoxClearButton\"\n data-no-trigger={hideTrigger ? '' : undefined}\n data-popover-dismiss=\"\"\n aria-label={t('comboBox.clearValue', 'Clear value')}\n onPress={clearValue}\n />\n )}\n {!hideTrigger ? (\n // Pointer-only, as is the clear button: the input opens, closes\n // and clears from the keyboard itself.\n <Item.Action\n ref={triggerRef}\n excludeFromTabOrder\n data-popover-trigger\n icon={<DirectionIcon to={shouldShowPopover ? 'up' : 'down'} />}\n qa=\"ComboBoxTrigger\"\n mods={{\n pressed: shouldShowPopover,\n disabled: isDisabled,\n loading: isLoading,\n }}\n data-size={size}\n isDisabled={isDisabled}\n styles={triggerStyles}\n aria-expanded={shouldShowPopover}\n aria-haspopup=\"listbox\"\n aria-label={t('comboBox.showOptions', 'Show options')}\n onPress={toggleList}\n />\n ) : null}\n </div>\n <ListBoxPopover\n isOpen={shouldShowPopover}\n triggerRef={wrapperRef as RefObject<HTMLElement>}\n popoverRef={popoverRef}\n listBoxRef={listBoxRef}\n direction={direction}\n shouldFlip={shouldFlip}\n overlayOffset={overlayOffset}\n containerPadding={containerPadding}\n comboBoxWidth={comboBoxWidth}\n listBoxId={`ComboBoxListBox-${comboBoxId}`}\n overlayStyles={overlayStyles}\n listBoxStyles={listBoxStyles}\n optionStyles={optionStyles}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n listGap={listGap}\n selectedKey={effectiveSelectedKey}\n // A press in the field, such as one that moves the caret, keeps the\n // list open; the chevron toggles it on its own.\n shouldCloseOnTriggerInteraction={false}\n isDisabled={isDisabled}\n disabledKeys={props.disabledKeys}\n items={sortedItems}\n listStateRef={listStateRef}\n label={label}\n ariaLabel={(props as any)['aria-label']}\n compositeFocusProps={compositeFocusProps}\n filter={filterFn}\n size={size}\n onSelectionChange={handleSelectionChange}\n onClose={() => setIsPopoverOpen(false)}\n >\n {children}\n </ListBoxPopover>\n </ComboBoxWrapperElement>\n );\n\n const { children: _, ...propsWithoutChildren } = props;\n\n return wrapWithField<Omit<CubeComboBoxProps<T>, 'children'>>(\n comboBoxField,\n ref,\n propsWithoutChildren,\n );\n}) as unknown as (<T>(\n props: CubeComboBoxProps<T> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReactElement) & { Item: typeof Item; Section: typeof BaseSection };\n\nComboBox.Item = Item;\n\nComboBox.Section = BaseSection;\n\nObject.defineProperty(ComboBox, 'cubeInputType', {\n value: 'ComboBox',\n enumerable: false,\n configurable: false,\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+EA,MAAMuE,yBAAyBzD,MAAM;CACnC0D,IAAI;CACJC,QAAQd;CACT,CAAC;AAEF,MAAMe,eAAe5D,MAAM;CACzB6D,IAAI;CACJF,QAAQf;CACT,CAAC;AAwJF,MAAM6E,cAAc;CAAC,GAAGjI;CAAa,GAAGK;CAAc,GAAGF;CAAa;AA+BtE,SAAA4I,iBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAA0B,MAAA,EAAA3E,aAAAC,oBAAAT,YAAAY,mBAAAwD,YAAAxB,YAAAD,eAAAsC;CAUxB,MAAA,CAAAG,qBAAAR,0BAAsDzH,SACpDsD,sBAAA,KACD;CACD,MAAA,CAAA+D,oBAAAK,yBAAoD1H,SAClDyD,qBAAA,KACD;CAED,MAAAkE,kBAAwBtE,gBAAgB6E;CACxC,MAAAN,oBAA0B/E,eAAeqF;CAEzC,MAAAd,uBAA6BO,kBAAAtE,cAAA4E;CAK7B,MAAA,CAAAX,eAAAC,oBAA0CvH,SAAS,MAAM;CAAC,IAAAmI;AAAA,KAAAJ,EAAA,OAAAK,OAAAC,IAAA,4BAAA,EAAA;AAK/CF,aAAMZ,iBAAiB,MAAM;AAAAQ,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;CAAA,IAAAO;AAAA,KAAAP,EAAA,OAAAd,cAAAc,EAAA,OAAAT,iBAAAS,EAAA,OAAAvC,cAAAuC,EAAA,OAAAtC,YAAA;AAHzB6C,OAAA;GAAAC,QACLtB;GAAUH,QACVQ;GAAakB,SACZL;GAA6B1C;GAAAgD,cAExBjD;GACf;AAAAuC,IAAA,KAAAd;AAAAc,IAAA,KAAAT;AAAAS,IAAA,KAAAvC;AAAAuC,IAAA,KAAAtC;AAAAsC,IAAA,KAAAO;OAAAA,MAAAP,EAAA;AAND7G,gBAAeoH,GAMb;CAAA,IAAAI;AAAA,KAAAX,EAAA,OAAAX,wBAAAW,EAAA,OAAAV,sBAAAU,EAAA,OAAAH,qBAAAG,EAAA,OAAAJ,mBAAAI,EAAA,QAAAT,eAAA;AAEKoB,OAAA;GAAAtB;GAAAC;GAAAC;GAAAC;GAAAE;GAAAC;GAAAC;GAAAC;GASN;AAAAG,IAAA,KAAAX;AAAAW,IAAA,KAAAV;AAAAU,IAAA,KAAAH;AAAAG,IAAA,KAAAJ;AAAAI,IAAA,MAAAT;AAAAS,IAAA,MAAAW;OAAAA,MAAAX,EAAA;AAAA,QATMW;;AA8BT,SAAAI,iBAAAC,YAAA1F,aAAA;CAAA,MAAA0E,IAAAC,EAAA,EAAA;CAIE,MAAA,CAAAgB,YAAAC,iBAAoCjJ,SAG1B,KAAK;CAAC,IAAA8H;AAAA,KAAAC,EAAA,OAAAgB,YAAA;AAEEjB,QAAAtE,QAAA;GAChB,MAAA0F,SAAe3G,aAAawG,YAAYvF,IAAI;AAE5CyF,iBAAc;IAAAzF;IAAA2F,OAAcD;IAAQ,CAAC;AAAA,UAE9BA;;AACRnB,IAAA,KAAAgB;AAAAhB,IAAA,KAAAD;OAAAA,MAAAC,EAAA;CAND,MAAAc,YAAkBf;AAQlB,KAAIzE,eAAe,MAAI;EAAA,IAAA8E;AAAA,MAAAJ,EAAA,OAAAc,WAAA;AAASV,QAAA;IAAAS,eAAiB;IAAEC;IAAa;AAAAd,KAAA,KAAAc;AAAAd,KAAA,KAAAI;QAAAA,MAAAJ,EAAA;AAAA,SAAhCI;;CAEhC,MAAAgB,QAAcJ,WAAUK,QAAS/F,YAAuB,EAAAT;AAExD,KACEuG,UACCH,YAAUxF,QAAUH,eAAe2F,WAAUG,UAAWA,OAEzDF,eAAc;EAAAzF,KAAOH;EAAW8F;EAAS,CAAC;CAG5C,MAAAP,gBACEO,UACCH,YAAUxF,QAAUH,cAAc2F,WAAUG,QAASE,OAAOhG,YAAa;CAAC,IAAA8E;AAAA,KAAAJ,EAAA,OAAAc,aAAAd,EAAA,OAAAa,eAAA;AAEtET,OAAA;GAAAS;GAAAC;GAA4B;AAAAd,IAAA,KAAAc;AAAAd,IAAA,KAAAa;AAAAb,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;AAAA,QAA5BI;;AAmBT,SAAA6B,qBAAAlC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAA8B,MAAA,EAAAuB,qBAAA/E,WAAAsD;CAI5B,MAAA,CAAA+B,gBAAAC,qBAA4C9J,SAAS,MAAM;CAAC,IAAAmI;AAAA,KAAAJ,EAAA,OAAAK,OAAAC,IAAA,4BAAA,EAAA;AAE7BF,OAAA,EAAA8B,aAAe,QAAQ;AAAAlC,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;CAAtD,MAAA,EAAAmC,aAAqBhK,UAAUiI,GAAwB;CAAC,IAAAG;AAAA,KAAAP,EAAA,OAAAK,OAAAC,IAAA,4BAAA,EAAA;AAG3BC,OAAA;GAAA6B,OAAS;GAAQF,aAAe;GAAQ;AAAAlC,IAAA,KAAAO;OAAAA,MAAAP,EAAA;CAArE,MAAAqC,WAAiBnK,YAAYqI,GAAyC;CAAC,IAAAI;AAAA,KAAAX,EAAA,OAAAqC,UAAA;AAEpD1B,QAAA9F,WAAAgH,SACjBQ,SAAQC,QAASzH,UAAS0H,UAAW,MAAM,EAAEV,KAAIU,UAAW,MAAM,CAAC,KAAK;AAACvC,IAAA,KAAAqC;AAAArC,IAAA,KAAAW;OAAAA,MAAAX,EAAA;CAD3E,MAAA4B,aAAmBjB;CACyD,IAAA6B;AAAA,KAAAxC,EAAA,OAAAmC,YAAAnC,EAAA,OAAAvD,QAAA;AAG1E+F,OAAA/F,WAAW,QAAXgG,QAAgChG,UAAA0F;AAAkBnC,IAAA,KAAAmC;AAAAnC,IAAA,KAAAvD;AAAAuD,IAAA,KAAAwC;OAAAA,MAAAxC,EAAA;CADpD,MAAA0C,eACEF;CAAmD,IAAAG;AAAA,KAAA3C,EAAA,OAAAwB,uBAAAxB,EAAA,OAAA8B,kBAAA9B,EAAA,OAAA0C,cAAA;AAGpCC,QAAAhB,UAAA;GACf,MAAAiB,OAAapB,oBAAmBqB,MAAO;AAGvC,OAAI,CAACf,kBAAD,CAAoBc,KAAI,QACnBjB;AACR,UAEM/H,sBAAsB+H,OAAOiB,MAAMF,aAAa;;AACxD1C,IAAA,KAAAwB;AAAAxB,IAAA,KAAA8B;AAAA9B,IAAA,KAAA0C;AAAA1C,IAAA,MAAA2C;OAAAA,MAAA3C,EAAA;CATD,MAAA0B,WAAiBiB;CASf,IAAAG;AAAA,KAAA9C,EAAA,QAAA0B,YAAA1B,EAAA,QAAA8B,kBAAA9B,EAAA,QAAA4B,YAAA;AAEKkB,OAAA;GAAApB;GAAAE;GAAAE;GAAAC;GAKN;AAAA/B,IAAA,MAAA0B;AAAA1B,IAAA,MAAA8B;AAAA9B,IAAA,MAAA4B;AAAA5B,IAAA,MAAA8C;OAAAA,MAAA9C,EAAA;AAAA,QALM8C;;AA7BT,SAAAL,QAAA;AAAA,QAe6B;;AAiD7B,MAAMe,eAAe,IAAIC,IAAI,CAAC,UAAU,MAAM,CAAC;AAI/C,SAASC,YAAYC,GAAsB;AACzC,QAAOA,EAAEC,aAAaF,eAAeC,EAAEE,YAAY;;AAGrD,SAAAC,oBAAA/D,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAA6B,MAAA,EAAA+C,aAAArE,YAAAsE,cAAAC,YAAAxG,mBAAA8E,qBAAAlG,aAAAuF,eAAAhE,aAAArB,mBAAA4H,cAAAC,YAAAC,aAAAlG,UAAAmG,gBAAArH,cAAA6D;CAiBF,IAAAK;AAAA,KAAAJ,EAAA,OAAAuD,gBAAA;AAELnD,QAAA2D,WAAAtI,QAAA;AAClB,OAAIA,OAAO,KAAI;AAEfxB,qBAAkB8J,UAAU;AAC5BA,aAASC,iBAAiBC,cAAexI,IAAI;AAC7C8H,kBAAe9H,IAAI;;AACpBuE,IAAA,KAAAuD;AAAAvD,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;CAND,MAAAkE,cAAoB9D;CAMlB,IAAAG;AAAA,KAAAP,EAAA,OAAAkE,eAAAlE,EAAA,OAAAgD,eAAAhD,EAAA,OAAAiD,gBAAAjD,EAAA,OAAAqD,YAAA;AAEqB9C,QAAAoD,MAAA;AACrBA,KAACQ,gBAAiB;AAElB,OAAI,CAACnB,aAAW;AACdK,gBAAY;AAAA;;GAKd,MAAAe,cAAkBnB,aAAYoB;AAE9B,OAAIN,YACFG,aACEH,aACAjK,kBAAkBiK,aAAWJ,EAAClI,QAAS,cAAV,IAAA,GAC/B,CAAC;;AAEJuE,IAAA,KAAAkE;AAAAlE,IAAA,KAAAgD;AAAAhD,IAAA,KAAAiD;AAAAjD,IAAA,KAAAqD;AAAArD,IAAA,KAAAO;OAAAA,MAAAP,EAAA;CAjBD,MAAAsE,iBAAuB/D;CAiBrB,IAAAI;AAAA,KAAAX,EAAA,OAAAwB,uBAAAxB,EAAA,OAAAgD,eAAAhD,EAAA,OAAAxE,qBAAAwE,EAAA,QAAA1E,eAAA0E,EAAA,QAAAa,eAAA;AAKsBF,QAAA4D,QAAA;GACtB,MAAA3I,QAAc4F,oBAAmBqB,MAAO;AAGxC,OAAIG,eAAA,CAAgBpH,MAAO+H,KAACQ,gBAAiB;AAE7C,OAAIvI,SAASN,eAAe,QAAQM,UAAUiF,cAAa;AAE3DrF,qBAAkBI,SAAA,KAAc;;AACjCoE,IAAA,KAAAwB;AAAAxB,IAAA,KAAAgD;AAAAhD,IAAA,KAAAxE;AAAAwE,IAAA,MAAA1E;AAAA0E,IAAA,MAAAa;AAAAb,IAAA,MAAAW;OAAAA,MAAAX,EAAA;CATD,MAAAwE,kBAAwB7D;CAStB,IAAA6B;AAAA,KAAAxC,EAAA,QAAAtD,qBAAAsD,EAAA,QAAAwE,mBAAAxE,EAAA,QAAAwB,uBAAAxB,EAAA,QAAAkD,cAAAlD,EAAA,QAAA5C,YAAA4C,EAAA,QAAAgD,eAAAhD,EAAA,QAAAiD,gBAAAjD,EAAA,QAAAsD,eAAAtD,EAAA,QAAAxE,qBAAAwE,EAAA,QAAA1E,aAAA;AAEqBkH,QAAAiC,QAAA;GACrB,MAAAC,cAAkB1B,cAAcC,aAAYoB,UAA1B;GAIlB,MAAAM,QAAYZ,cACRrJ,sBAAsBqJ,aAAWzI,YAC7B,GAFI;AAIZ,OAAIG,SAAO,MAAI;AACbkI,QAACQ,gBAAiB;AAClBJ,gBAASC,iBAAiBY,OAAQnJ,OAAKkI,IAAE;AAEzCL,iBAAa;AACblG,aAAQiH,SAAeQ,OAAE;cAChBnI,kBACT8H,iBAAgBb,IAAE;YACT,CAACT,cAAD,CAAgB1B,oBAAmBqB,MAAO,EAAA;AAEnDc,QAACQ,gBAAiB;AAClB3I,sBAAkB,KAAK;;;AAE1BwE,IAAA,MAAAtD;AAAAsD,IAAA,MAAAwE;AAAAxE,IAAA,MAAAwB;AAAAxB,IAAA,MAAAkD;AAAAlD,IAAA,MAAA5C;AAAA4C,IAAA,MAAAgD;AAAAhD,IAAA,MAAAiD;AAAAjD,IAAA,MAAAsD;AAAAtD,IAAA,MAAAxE;AAAAwE,IAAA,MAAA1E;AAAA0E,IAAA,MAAAwC;OAAAA,MAAAxC,EAAA;CAtBD,MAAA8E,iBAAuBtC;CAsBrB,IAAAG;AAAA,KAAA3C,EAAA,QAAAwB,uBAAAxB,EAAA,QAAA5C,YAAA4C,EAAA,QAAAnD,eAAAmD,EAAA,QAAAgD,eAAAhD,EAAA,QAAAoD,gBAAApD,EAAA,QAAAsD,aAAA;AAIsBX,QAAAoC,QAAA;AACtB,OAAI/B,aAAW;AACbW,QAACQ,gBAAiB;AAClBb,iBAAa;AACblG,aAAQiH,SAAeQ,OAAE;AAAA,WAElB;;AAGT,OAAIrD,uBAAA3E,aAAkC;AACpC8G,QAACQ,gBAAiB;AAClBf,kBAAc;AAAA,WAEP;;AACR,UAEM;;AACRpD,IAAA,MAAAwB;AAAAxB,IAAA,MAAA5C;AAAA4C,IAAA,MAAAnD;AAAAmD,IAAA,MAAAgD;AAAAhD,IAAA,MAAAoD;AAAApD,IAAA,MAAAsD;AAAAtD,IAAA,MAAA2C;OAAAA,MAAA3C,EAAA;CAjBD,MAAAgF,kBAAwBrC;CAiBtB,IAAAG;AAAA,KAAA9C,EAAA,QAAAkE,eAAAlE,EAAA,QAAAgD,eAAAhD,EAAA,QAAAiD,cAAA;AAEoBH,QAAAmC,QAAA;AACpB,OAAI,CAACjC,YAAW;AAEhBW,OAACQ,gBAAiB;GAElB,MAAAe,cAAkBjC,aAAYoB;AAE9B,OAAIN,YACFG,aACEH,aACAlK,kBAAkBkK,aAAWJ,IAAClI,QAAS,SAAV,UAAA,OAC/B,CAAC;;AAEJuE,IAAA,MAAAkE;AAAAlE,IAAA,MAAAgD;AAAAhD,IAAA,MAAAiD;AAAAjD,IAAA,MAAA8C;OAAAA,MAAA9C,EAAA;CAbD,MAAAmF,gBAAsBrC;CAapB,IAAAsC;AAAA,KAAApF,EAAA,QAAAsE,kBAAAtE,EAAA,QAAAmF,iBAAAnF,EAAA,QAAA8E,kBAAA9E,EAAA,QAAAgF,mBAAAhF,EAAA,QAAAgD,eAAAhD,EAAA,QAAAsD,aAAA;AAGgB8B,QAAAC,QAAA;AAChB,WAAQ1B,IAAClI,KAAT;IAAa,KACN;IAAW,KACX;AACH6I,oBAAeX,IAAE;AAAA,YACV;IAAI,KACR;AACHmB,oBAAenB,IAAE;AAAA,YACV;IAAI,KACR,SAAQ,QACJqB,gBAAgBrB,IAAE;IAAA,KACtB;IAAM,KACN;AACHwB,mBAAcxB,IAAE;AAAA,YACT;IAAI,KACR;AAEH,SAAIX,YAAaM,cAAa;AAAC,YACxB;IAAK,QAAA,QAEL;;;AAEZtD,IAAA,MAAAsE;AAAAtE,IAAA,MAAAmF;AAAAnF,IAAA,MAAA8E;AAAA9E,IAAA,MAAAgF;AAAAhF,IAAA,MAAAgD;AAAAhD,IAAA,MAAAsD;AAAAtD,IAAA,MAAAoF;OAAAA,MAAApF,EAAA;CAtBD,MAAAsF,YAAkBF;CAsBhB,IAAAG;AAAA,KAAAvF,EAAA,QAAAsF,aAAAtF,EAAA,QAAArB,cAAAqB,EAAA,QAAA9D,WAAA;AAEoCqJ,OAAA,EAAArJ,YACzBsJ,QAAA;AAKTtJ,eAAYyH,IAAE;AAEd,OAAIA,IAAC8B,oBAAuC,IAAd/B,YAAYC,IAAE,CAAA;AAI5C,QAAKhF,cAAA,CAAe2G,UAAU3B,IAA8B,KAAvBH,aAAYkC,IAAK/B,IAAClI,IAAK,CAC1DkI,KAACgC,qBAAsB;KAG5B;AAAA3F,IAAA,MAAAsF;AAAAtF,IAAA,MAAArB;AAAAqB,IAAA,MAAA9D;AAAA8D,IAAA,MAAAuF;OAAAA,MAAAvF,EAAA;CAhBD,MAAA,EAAA4F,kBAA0BxN,YAAYmN,GAgBpC;CAAC,IAAAM;AAAA,KAAA7F,EAAA,QAAA4F,eAAA;AAEIC,OAAA,EAAAD,eAAiB;AAAA5F,IAAA,MAAA4F;AAAA5F,IAAA,MAAA6F;OAAAA,MAAA7F,EAAA;AAAA,QAAjB6F;;AAuCT,MAAMe,gBAAgBlP,WACpB,SAAAkP,cAAA7G,IAAA8G,KAAA;CAAA,MAAA7G,IAAAC,EAAA,GAAA;CACE,MAAA,EAAAhF,IAAAmC,UAAA2I,IAAAnK,OAAAC,aAAAuC,YAAAO,YAAAqH,YAAAlK,WAAAC,cAAAoB,MAAA8I,MAAArI,aAAAgI,eAAAO,YAAAC,UAAApK,SAAAuK,eAAAC,SAAAxD,aAAA9D,YAAAuH,kBAAAC,WAAAC,cAAA5G;CA4BA,MAAA+G,cAAoB9N,gBAAgB6N,KAAKzJ,SAAS;CAc9B,MAAAgD,KAAAtE,YAAA,KAAAqE;CAgBD,MAAAI,KAAAyF,cAAA7F;CAIb,MAAAQ,KAAAqC,cAAA,mBAAiC9D,eAAjCiB;CAKY,MAAAqC,KAAAmE,aAAAxG;CAAsB,IAAAwC;AAAA,KAAA3C,EAAA,OAAAyG,oBAAAzG,EAAA,OAAA0G,aAAA1G,EAAA,OAAAjE,gBAAAiE,EAAA,OAAAlE,aAAAkE,EAAA,OAAA8G,eAAA9G,EAAA,OAAAmG,WAAAlK,UAAA+D,EAAA,OAAA+F,MAAA/F,EAAA,OAAApC,eAAAoC,EAAA,OAAA5B,cAAA4B,EAAA,OAAAgD,eAAAhD,EAAA,QAAArB,cAAAqB,EAAA,QAAA4F,iBAAA5F,EAAA,QAAAiG,QAAAjG,EAAA,QAAAoG,YAAApG,EAAA,QAAAwG,WAAAxG,EAAA,QAAAhE,WAAAgE,EAAA,QAAAuG,iBAAAvG,EAAA,QAAAnE,eAAAmE,EAAA,QAAA/E,MAAA+E,EAAA,QAAA7C,QAAA6C,EAAA,QAAAI,MAAAJ,EAAA,QAAAO,MAAAP,EAAA,QAAAW,MAAAX,EAAA,QAAAwC,MAAAxC,EAAA,QAAApE,OAAA;AApCtC+G,OAAA,oBAAC;GACMmE,KAAAA;GACD7L;GACA8K;GACC,MAAA;GACEnK;GACMC;GACDuC;GACFO,UAAAA;GACC7C;GACGC;GACE,kBAAAqE;GACNgG;GACDpK;GACMuK;GACNC;GACD,QAAAL,WAAUlK;GAAO,GACrB2J;GACIhI,QAAAA;GACFqI;GACK9I,aAAAA;GACK,mBAAA;GACX,MAAA;GAKU,iBAAAoD;GACAyC,iBAAAA;GACD,iBAAA;GAEZ,iBAAArC;GAGgB,qBAAA;GACK8F,yBAAAA;GACT,gBAAAjE;GAAsB,GAChCkE;IACJ;AAAA1G,IAAA,KAAAyG;AAAAzG,IAAA,KAAA0G;AAAA1G,IAAA,KAAAjE;AAAAiE,IAAA,KAAAlE;AAAAkE,IAAA,KAAA8G;AAAA9G,IAAA,KAAAmG,WAAAlK;AAAA+D,IAAA,KAAA+F;AAAA/F,IAAA,KAAApC;AAAAoC,IAAA,KAAA5B;AAAA4B,IAAA,KAAAgD;AAAAhD,IAAA,MAAArB;AAAAqB,IAAA,MAAA4F;AAAA5F,IAAA,MAAAiG;AAAAjG,IAAA,MAAAoG;AAAApG,IAAA,MAAAwG;AAAAxG,IAAA,MAAAhE;AAAAgE,IAAA,MAAAuG;AAAAvG,IAAA,MAAAnE;AAAAmE,IAAA,MAAA/E;AAAA+E,IAAA,MAAA7C;AAAA6C,IAAA,MAAAI;AAAAJ,IAAA,MAAAO;AAAAP,IAAA,MAAAW;AAAAX,IAAA,MAAAwC;AAAAxC,IAAA,MAAApE;AAAAoE,IAAA,MAAA2C;OAAAA,MAAA3C,EAAA;AAAA,QAtCF2C;EAyCL;AAKD,MAAaoE,WAAWrP,WAAW,SAAAqP,SAAAC,OAAAH,KAAA;CAAA,MAAA7G,IAAAC,EAAA,IAAA;CAAA,IAAAF;AAAA,KAAAC,EAAA,OAAAK,OAAAC,IAAA,4BAAA,EAAA;AAIJP,OAAA,EAAAkH,kBACTC,QAUnB;AAAAlH,IAAA,KAAAD;OAAAA,MAAAC,EAAA;AAXDgH,SAAQvN,cAAcuN,OAAOjH,GAW3B;CAEF,MAAA,EAAAoH,MAAc1O,SAAS;CAEvB,IAAA,EAAAwC,IAAAmG,OAAAgG,OAAAC,aAAArB,YAAAsB,oBAAAX,WAAAY,SAAAxB,IAAAhJ,MAAAC,QAAAoD,IAAAhC,YAAAtC,WAAAC,cAAAwE,IAAAjD,YAAAqD,IAAAvD,UAAAoF,IAAA9E,YAAAD,YAAAD,YAAAa,WAAAT,aAAAI,cAAAH,eAAAC,eAAAC,eAAAd,QAAAC,aAAAsK,SAAAC,aAAAtK,MAAAwF,IAAAnE,WAAAsE,IAAAvE,YAAA6G,IAAAjJ,gBAAAoJ,IAAA3G,gBAAAiH,IAAApJ,QAAAvB,QAAAwM,aAAApM,aAAAC,oBAAAT,YAAAY,mBAAAC,eAAAkB,aAAAC,SAAAjB,aAAAa,mBAAAC,oBAAAgL,KAAA/K,aAAAR,OAAAG,UAAAqL,gBAAA3J,eAAAC,eAAAC,SAAAQ,YAAAF,eAAAoJ,KAAAnJ,kBAAAoJ,KAAAtM,mBAAAuM,2BAAAlJ,mBAAAmJ,uBAAAlJ,cAAA9C,SAAAC,QAAAC,WAAA+L,MAAA,GAAAC,eAiEIlB;CAtDFhK,IAAAA,SAAAA;CAGA,MAAAjB,eAAAwE,OAAAJ,SAAA,QAAAI;CACAjD,IAAAA,aAAAA;CACAF,IAAAA,WAAAA;CAcA,MAAAD,OAAAwF,OAAAxC,SAAA,WAAAwC;CACA,MAAAnE,YAAAsE,OAAA3C,SAAA,WAAA2C;CACA,MAAAvE,aAAA6G,OAAAjF,SAAA,OAAAiF;CACA,MAAAjJ,iBAAAoJ,OAAApF,SAAA,UAAAoF;CACA,MAAA3G,iBAAAiH,OAAA1F,SAAA,WAAA0F;CAaA,MAAAlJ,qBAAAgL,QAAAxH,SAAA,OAAAwH;CAQA,MAAAlJ,gBAAAoJ,QAAA1H,SAAA,IAAA0H;CACA,MAAAnJ,mBAAAoJ,QAAA3H,SAAA,IAAA2H;CAAoB,IAAAK;AAAA,KAAAnI,EAAA,OAAAK,OAAAC,IAAA,4BAAA,EAAA;AAYW6H,QAAApP,kBAAkB;AAAAiH,IAAA,KAAAmI;OAAAA,OAAAnI,EAAA;CAAnD,MAAAd,aAAiCiJ;AAKjC7K,cAAatE,gBAAgBsE,WAAW;AACxCG,cAAazE,gBAAgByE,WAAW;CAkB1B,MAAA2K,MAAA9K;CACA,MAAA+K,MAAA5K;CAA2C,IAAA6K;AAAA,KAAAtI,EAAA,OAAAd,cAAAc,EAAA,OAAAtE,qBAAAsE,EAAA,OAAAzE,sBAAAyE,EAAA,OAAAlF,cAAAkF,EAAA,OAAA1E,eAAA0E,EAAA,OAAAoI,OAAApI,EAAA,OAAAqI,KAAA;AAPpCC,QAAA;GAAAhN;GAAAC;GAAAT;GAAAY;GAAAwD;GAAAxB,YAMP0K;GAA2C3K,YAC3C4K;GACb;AAAArI,IAAA,KAAAd;AAAAc,IAAA,KAAAtE;AAAAsE,IAAA,KAAAzE;AAAAyE,IAAA,KAAAlF;AAAAkF,IAAA,KAAA1E;AAAA0E,IAAA,KAAAoI;AAAApI,IAAA,KAAAqI;AAAArI,IAAA,KAAAsI;OAAAA,OAAAtI,EAAA;CAjBD,MAAA,EAAAX,sBAAAC,oBAAAC,eAAAC,kBAAAE,wBAAAC,uBAAAC,iBAAAC,sBASIC,iBAAiBwI,IAQnB;CAGF,MAAAzJ,oBAA0BmJ,0BAA0B5L,QAAA,OAAA;AAEpDlB,UAAS9B,cAAc8O,YAAYlJ,aAAa9D,OAAO;AAEvD2L,OAAM7N,gBAAgB6N,IAAI;AAC1BzJ,YAAWpE,gBAAgBoE,SAAS;AACpCM,cAAa1E,gBAAgB0E,WAAW;AACxCF,cAAaxE,gBAAgBwE,WAAW;CAKxC,MAAA,CAAA+K,SAAAC,cAA8BvQ,SAASoH,qBAAqB;AAE5D,KAAI,CAACE,iBAAiBgJ,YAAYlJ,qBAChCmJ,YAAWnJ,qBAAqB;CACjC,IAAA9C;CAAA,IAAAkM;AAAA,KAAAzI,EAAA,QAAA5D,SAAA4D,EAAA,QAAA4H,kBAAA5H,EAAA,QAAAuI,WAAAvI,EAAA,QAAAnB,mBAAA;AAGD4J,gBACErM,SAAAyC,oBAA6BlE,kBAAkByB,OAAOmM,QAAgB,GAAtEnM;AAIFG,aAA0BqL;EAE1B,MAAAc,WAAiBd;AAEjB,MAAIa,eAAe,OAAOC,aAAa,WACrC,KAAA;AAEEnM,cADmBqM,MAAKC,KAAMJ,YAA6B,CACtCK,KAAKtM,MAAAuM,QAAA;IACxB,MAAAC,WAAkBN,SAAoClM,KAAK;AAC3D,QACEhF,MAAK0R,eAAgBF,SACiB,IAArCA,SAAwBvN,OAAS,KAAI,QAE/BjE,MAAK2R,aAAcH,UAA0B,EAAAvN,KAC5CuN,UAAqBvN,OAAIe,MAAIf,OAA9BsN,KACN,CAAC;AACH,WAEMC;KACP;UAZM;AAgBXhJ,IAAA,MAAA5D;AAAA4D,IAAA,MAAA4H;AAAA5H,IAAA,MAAAuI;AAAAvI,IAAA,MAAAnB;AAAAmB,IAAA,MAAAzD;AAAAyD,IAAA,MAAAyI;QAAA;AAAAlM,aAAAyD,EAAA;AAAAyI,gBAAAzI,EAAA;;CAKW,MAAAoJ,MAAA7M;CAAiC,IAAA8M;AAAA,KAAArJ,EAAA,QAAAgH,MAAA1I,gBAAA0B,EAAA,QAAAyI,eAAAzI,EAAA,QAAAoJ,KAAA;AADHC,QAAA;GAAA9M,UAC9B6M;GAAiChN,OACpCqM;GAAWnK,cACJ0I,MAAK1I;GAAagL,eACjB;GAChB;AAAAtJ,IAAA,MAAAgH,MAAA1I;AAAA0B,IAAA,MAAAyI;AAAAzI,IAAA,MAAAoJ;AAAApJ,IAAA,MAAAqJ;OAAAA,OAAArJ,EAAA;CALD,MAAAuJ,uBAA6BhR,aAAa8Q,IAKxC;CAEF,MAAA,EAAAxI,eAAAC,cAAqCC,iBACnCwI,qBAAoBvI,YACpB3B,qBACD;CACD,MAAAmC,sBAA4B3B,oBACvB/E,aACDwE,sBAAAuB;CAAoC,IAAA2I;AAAA,KAAAxJ,EAAA,QAAAwB,uBAAAxB,EAAA,QAAAvD,QAAA;AAIjB+M,QAAA;GAAAhI;GAAA/E;GAGpB;AAAAuD,IAAA,MAAAwB;AAAAxB,IAAA,MAAAvD;AAAAuD,IAAA,MAAAwJ;OAAAA,OAAAxJ,EAAA;CAJH,MAAA,EAAA0B,UAAAE,YAAAG,sBACEE,qBAAqBuH,IAGnB;CAAC,IAAAC;AAAA,KAAAzJ,EAAA,QAAA0B,YAAA1B,EAAA,QAAAuJ,qBAAAvI,YAAA;AAGmByI,QAAAnP,eACtBoH,SAAS6H,qBAAoBvI,WAC/B,CAAC;AAAAhB,IAAA,MAAA0B;AAAA1B,IAAA,MAAAuJ,qBAAAvI;AAAAhB,IAAA,MAAAyJ;OAAAA,OAAAzJ,EAAA;CAFD,MAAA0J,kBAAwBD;CAGxB,MAAAvG,aAAmBwG,gBAAeC,SAAU;CAC5C,MAAAC,oBAA0BrK,iBAAA2D;CAI1B,MAAA2G,kBAAwB7R,OAAO4R,kBAAkB;CAAC,IAAAE;CAAA,IAAAC;AAAA,KAAA/J,EAAA,QAAAlB,gBAAAkB,EAAA,QAAA4J,mBAAA;AAExCE,cAAA;AACR,OAAID,gBAAexF,YAAauF,kBAAiB;AAEjDC,mBAAexF,UAAWuF;AAC1B9K,kBAAe8K,kBAAkB;;AAChCG,QAAA,CAACH,mBAAmB9K,aAAa;AAAAkB,IAAA,MAAAlB;AAAAkB,IAAA,MAAA4J;AAAA5J,IAAA,MAAA8J;AAAA9J,IAAA,MAAA+J;QAAA;AAAAD,QAAA9J,EAAA;AAAA+J,QAAA/J,EAAA;;AALpClI,WAAUgS,KAKPC,IAAkC;CAErC,MAAA,EAAAC,WAAA7D,eAAkCjN,YAAU;CAAC,IAAA+Q;AAAA,KAAAjK,EAAA,QAAAJ,mBAAAI,EAAA,QAAAN,wBAAA;AAMtBuK,SAAAxO,QAAA;AACrB,OAAI,CAACmE,gBAAiBF,wBAAuBjE,IAAI;;AAClDuE,IAAA,MAAAJ;AAAAI,IAAA,MAAAN;AAAAM,IAAA,MAAAiK;OAAAA,OAAAjK,EAAA;CAFD,MAAAkK,iBAAuBD;CAErB,IAAAE;AAAA,KAAAnK,EAAA,QAAAwB,uBAAAxB,EAAA,QAAAH,qBAAAG,EAAA,QAAArE,iBAAAqE,EAAA,QAAAL,uBAAA;AAMyBwK,SAAAC,YAAA;AACzB,OAAI,CAACvK,kBAAmBF,uBAAsB,KAAK;AACnD,OAAIyB,YAAUI,oBAAqB7F,iBAAgByF,QAAM;;AAC1DpB,IAAA,MAAAwB;AAAAxB,IAAA,MAAAH;AAAAG,IAAA,MAAArE;AAAAqE,IAAA,MAAAL;AAAAK,IAAA,MAAAmK;OAAAA,OAAAnK,EAAA;CAHD,MAAAqK,qBAA2BF;CAGzB,IAAAG;AAAA,KAAAtK,EAAA,QAAAX,wBAAAW,EAAA,QAAA+H,6BAAA/H,EAAA,QAAAkK,kBAAAlK,EAAA,QAAAqK,oBAAA;AAI6BC,cAAA;AAC7B,OAAIjL,wBAAwB,MAAI;AAC9B0I,gCAA4B,KAAK;AACjCmC,mBAAe,KAAK;;AAGtBG,sBAAmB,GAAG;;AACvBrK,IAAA,MAAAX;AAAAW,IAAA,MAAA+H;AAAA/H,IAAA,MAAAkK;AAAAlK,IAAA,MAAAqK;AAAArK,IAAA,MAAAsK;OAAAA,OAAAtK,EAAA;CAPD,MAAAuK,yBAA+BD;CAO7B,IAAAE;AAAA,KAAAxK,EAAA,QAAAa,iBAAAb,EAAA,QAAAqK,oBAAA;AAG2BG,cAAMH,mBAAmBxJ,cAAc;AAAAb,IAAA,MAAAa;AAAAb,IAAA,MAAAqK;AAAArK,IAAA,MAAAwK;OAAAA,OAAAxK,EAAA;CAApE,MAAAyK,uBAA6BD;CAAwC,IAAAE;AAAA,KAAA1K,EAAA,QAAAuK,0BAAAvK,EAAA,QAAAwB,uBAAAxB,EAAA,QAAAX,wBAAAW,EAAA,QAAA+H,6BAAA/H,EAAA,QAAAyK,wBAAAzK,EAAA,QAAAkK,kBAAAlK,EAAA,QAAArD,sBAAAqD,EAAA,QAAAqK,oBAAA;AAMrCK,cAAA;GAC9B,MAAAC,UAAcnJ,oBAAmBqB,MAAO;AAExC,OAAIlG,sBAAAgO,WAA+BtL,wBAAwB,MAAI;AAC7D0I,gCAA4BnM,QAAM;AAClCsO,mBAAetO,QAAM;AACrByO,uBAAmBzO,QAAM;cAChB,CAACA,QACV2O,yBAAwB;OAExBE,uBAAsB;;AAEzBzK,IAAA,MAAAuK;AAAAvK,IAAA,MAAAwB;AAAAxB,IAAA,MAAAX;AAAAW,IAAA,MAAA+H;AAAA/H,IAAA,MAAAyK;AAAAzK,IAAA,MAAAkK;AAAAlK,IAAA,MAAArD;AAAAqD,IAAA,MAAAqK;AAAArK,IAAA,MAAA0K;OAAAA,OAAA1K,EAAA;CAZD,MAAA4K,0BAAgCF;CAY9B,IAAAG;AAAA,KAAA7K,EAAA,QAAApD,eAAAoD,EAAA,QAAAuK,0BAAAvK,EAAA,QAAAwB,uBAAAxB,EAAA,QAAAX,wBAAAW,EAAA,QAAA+H,6BAAA/H,EAAA,QAAA0J,mBAAA1J,EAAA,QAAA4B,cAAA5B,EAAA,QAAAuJ,qBAAAjL,gBAAA0B,EAAA,QAAAc,aAAAd,EAAA,QAAAyK,wBAAAzK,EAAA,QAAAkK,kBAAAlK,EAAA,QAAAqK,oBAAA;AAMyBQ,cAAA;GACzB,MAAAC,WAAiBvQ,gBACfmP,iBACAlI,qBACAnC,sBACAkK,qBAAoBjL,cACpBsD,WACD;AAED,OAAIkJ,YAAY,QAAQA,aAAazL,sBAAoB;AACvD6K,mBAAeY,SAAS;AACxBT,uBAAmBvJ,UAAUgK,SAAS,CAAC;AACvC/C,gCAA4B+C,SAAmB;cAE/CA,YAAY,SACXlO,eAAA,CAAgB4E,oBAAmBqB,MAAQ,EAE5C0H,yBAAwB;OAExBE,uBAAsB;;AAEzBzK,IAAA,MAAApD;AAAAoD,IAAA,MAAAuK;AAAAvK,IAAA,MAAAwB;AAAAxB,IAAA,MAAAX;AAAAW,IAAA,MAAA+H;AAAA/H,IAAA,MAAA0J;AAAA1J,IAAA,MAAA4B;AAAA5B,IAAA,MAAAuJ,qBAAAjL;AAAA0B,IAAA,MAAAc;AAAAd,IAAA,MAAAyK;AAAAzK,IAAA,MAAAkK;AAAAlK,IAAA,MAAAqK;AAAArK,IAAA,MAAA6K;OAAAA,OAAA7K,EAAA;CArBD,MAAA+K,qBAA2BF;CAqBzB,IAAAG;AAAA,KAAAhL,EAAA,QAAAtD,qBAAAsD,EAAA,QAAArB,cAAAqB,EAAA,QAAA/D,UAAA+D,EAAA,QAAA+B,qBAAA/B,EAAA,QAAAR,oBAAAQ,EAAA,QAAA4K,2BAAA5K,EAAA,QAAA+K,oBAAA;AAGmCC,cAAA;AACnCxL,oBAAiB,MAAM;AAGvB,OAAIb,YAAU,YAEHjC,kBACTkO,0BAAyB;OAEzBG,qBAAoB;AAGtB9O,aAAU;AAEV8F,qBAAkB,MAAM;;AACzB/B,IAAA,MAAAtD;AAAAsD,IAAA,MAAArB;AAAAqB,IAAA,MAAA/D;AAAA+D,IAAA,MAAA+B;AAAA/B,IAAA,MAAAR;AAAAQ,IAAA,MAAA4K;AAAA5K,IAAA,MAAA+K;AAAA/K,IAAA,MAAAgL;OAAAA,OAAAhL,EAAA;CAfD,MAAAiL,sBAA4BzS,SAASwS,IAenC;CAIA1N,MAAAA,MAAAA;CAAU,IAAA4N;AAAA,KAAAlL,EAAA,QAAAiL,uBAAAjL,EAAA,QAAA5B,cAAA4B,EAAA,QAAAhE,WAAAgE,EAAA,QAAAvC,cAAAuC,EAAA,QAAAmL,KAAA;AADsCD,QAAA;GAAA5N,YAChDA;GAAUG;GAAAzB;GAAAC,QAGFgP;GAAmB7M;GAE5B;AAAA4B,IAAA,MAAAiL;AAAAjL,IAAA,MAAA5B;AAAA4B,IAAA,MAAAhE;AAAAgE,IAAA,MAAAvC;AAAAuC,IAAA,MAAAmL;AAAAnL,IAAA,MAAAkL;OAAAA,OAAAlL,EAAA;CAND,MAAA,EAAAoL,wBAAgClR,kBAAkBgR,IAMhD;CAAC,IAAAG;AAAA,KAAArL,EAAA,QAAA2G,aAAA3G,EAAA,QAAAuH,SAAA;AAEkB8D,QAAA9R,kBAAkB;GAAAoN;GAAAY;GAAsB,CAAC;AAAAvH,IAAA,MAAA2G;AAAA3G,IAAA,MAAAuH;AAAAvH,IAAA,MAAAqL;OAAAA,OAAArL,EAAA;CAA9D,MAAAsL,iBAAqBD;CAGrB,MAAApI,eAAqBjL,OAAY,KAAK;CAItC,MAAA,CAAAuT,iBAAAC,sBAA8CvT,SAAqB,KAAK;CAGxE,MAAAwT,wBAA8BjT,UAAS2K,cAAA;EAErC,MAAAwB,QAAYiE,MAAK8C,QAASvI,UAAqC,GAAxBA,UAAS,KAApCA;AAEZ+G,iBAAevF,SAAA,KAAY;AAC3B5C,oBAAkB,MAAM;AACxBsI,qBAAmB5O,SAAO,OAAOqF,UAAUrF,MAAS,GAAjC,GAAkC;AACrDsM,8BAA4BtM,MAAqB;AAGjD+D,mBAAiB,MAAM;AAGvBmM,mBAAW;AACTvO,YAAQiH,SAAeQ,OAAE;KACxB,EAAE;GACL;CAEF,MAAA+G,wBAA8B5T,OAA+BmI,OAAU;CACvE,MAAA0L,2BAAiC7T,OAAO,MAAM;CAAC,IAAA8T;AAAA,KAAA9L,EAAA,QAAAtD,qBAAAsD,EAAA,QAAAX,wBAAAW,EAAA,QAAA+H,6BAAA/H,EAAA,QAAAH,qBAAAG,EAAA,QAAAJ,mBAAAI,EAAA,QAAAT,iBAAAS,EAAA,QAAArE,iBAAAqE,EAAA,QAAA7D,kBAAA6D,EAAA,QAAAL,yBAAAK,EAAA,QAAAN,0BAAAM,EAAA,QAAA+B,qBAAA/B,EAAA,QAAAR,kBAAA;AAI7CsM,SAAAnI,MAAA;GACE,MAAAoI,UAAcpI,EAACqI,OAAOpQ;AAGtB,OAAI,CAACiE,kBACHF,uBAAsB/D,QAAM;AAE9BD,mBAAgBC,QAAM;AAGtBmG,qBADgBnG,QAAKiH,MAAO,CACH8G,SAAU,EAAE;AAIrC,OAAIjN,qBAAqB2C,wBAAwB,MAAI;AACnDwM,6BAAwBxH,UAAW;AACnC,QAAI,CAACzE,gBACHF,wBAAuB,KAAK;AAE9BqI,gCAA4B,KAAK;;AAInC,OAAI5L,mBAAmB,YAAnB4P,WAAA,CAAyCxM,cAC3CC,kBAAiB,KAAK;;AAEzBQ,IAAA,MAAAtD;AAAAsD,IAAA,MAAAX;AAAAW,IAAA,MAAA+H;AAAA/H,IAAA,MAAAH;AAAAG,IAAA,MAAAJ;AAAAI,IAAA,MAAAT;AAAAS,IAAA,MAAArE;AAAAqE,IAAA,MAAA7D;AAAA6D,IAAA,MAAAL;AAAAK,IAAA,MAAAN;AAAAM,IAAA,MAAA+B;AAAA/B,IAAA,MAAAR;AAAAQ,IAAA,MAAA8L;OAAAA,OAAA9L,EAAA;CA3BH,MAAAkM,oBAA0B1T,SACxBsT,IA2BD;CAAC,IAAAK;AAAA,KAAAnM,EAAA,QAAAX,wBAAAW,EAAA,QAAAH,qBAAAG,EAAA,SAAAJ,mBAAAI,EAAA,SAAAL,uBAAA;AAIQwM,cAAA;GACR,MAAAC,qBAA2BP,yBAAwBxH;AACnDwH,4BAAwBxH,UAAW;AAEnC,OAAI,CAACzE,mBAADC,kBAAqC;AAGzC,OACE+L,sBAAqBvH,YAAalE,UAClCyL,sBAAqBvH,YAAahF,qBAAoB;AAKxDuM,yBAAqBvH,UAAWhF;AAIhC,OAAI+M,sBAAsB/M,wBAAwB,KAAI;AAEtDM,yBAAsB,KAAK;;AAC5BK,IAAA,MAAAX;AAAAW,IAAA,MAAAH;AAAAG,IAAA,OAAAJ;AAAAI,IAAA,OAAAL;AAAAK,IAAA,OAAAmM;OAAAA,OAAAnM,EAAA;CAAA,IAAAqM;AAAA,KAAArM,EAAA,SAAAwB,uBAAAxB,EAAA,SAAAX,wBAAAW,EAAA,SAAAH,qBAAAG,EAAA,SAAAJ,mBAAAI,EAAA,SAAAL,uBAAA;AAAE0M,QAAA;GACDzM;GACAC;GACAR;GACAmC;GACA7B;GACD;AAAAK,IAAA,OAAAwB;AAAAxB,IAAA,OAAAX;AAAAW,IAAA,OAAAH;AAAAG,IAAA,OAAAJ;AAAAI,IAAA,OAAAL;AAAAK,IAAA,OAAAqM;OAAAA,OAAArM,EAAA;AA3BDlI,WAAUqU,KAqBPE,IAMD;CAMF,MAAAE,kBAAsB1P,gBAHPH,oBACX8E,wBAAwB,KACxBnC,wBAAwB,SACN,CAA4BjB,cAA5B,CAA2CO;CAAW,IAAA6N;AAAA,KAAAxM,EAAA,SAAAkD,cAAAlD,EAAA,SAAA5B,cAAA4B,EAAA,SAAArB,cAAAqB,EAAA,SAAA+B,qBAAA/B,EAAA,SAAAR,kBAAA;AAI3DgN,cAAA;AACf,OAAI7N,cAAAP,WAAwB;AAC5B,OAAI,CAAC8E,WAAYnB,mBAAkB,MAAM;AAEzCvC,oBAAiB,KAAK;;AACvBQ,IAAA,OAAAkD;AAAAlD,IAAA,OAAA5B;AAAA4B,IAAA,OAAArB;AAAAqB,IAAA,OAAA+B;AAAA/B,IAAA,OAAAR;AAAAQ,IAAA,OAAAwM;OAAAA,OAAAxM,EAAA;CALD,MAAAyM,WAAiBD;CAQjB,MAAAE,mBAAmB;AACjB,MAAI9C,kBACFpK,kBAAiB,MAAM;MAEvBiN,WAAU;AAGZrP,WAAQiH,SAAeQ,OAAE;;CACzB,IAAA8H;AAAA,KAAA3M,EAAA,SAAAmG,cAAAnG,EAAA,SAAAT,iBAAAS,EAAA,SAAAyM,YAAAzM,EAAA,SAAA7D,gBAAA;AAGgCwQ,SAAApI,QAAA;AAEhC4B,cAAUnK,UAAW2H,IAAS;AAE9B,OAAIxH,mBAAmB,WAAnB,CAA+BoD,cACjCkN,WAAU;;AAEbzM,IAAA,OAAAmG;AAAAnG,IAAA,OAAAT;AAAAS,IAAA,OAAAyM;AAAAzM,IAAA,OAAA7D;AAAA6D,IAAA,OAAA2M;OAAAA,OAAA3M,EAAA;CAPD,MAAA4M,mBAAyBpU,SAASmU,IAOhC;CAIF,MAAAE,yBAA+B7U,OAAO,MAAM;CAAC,IAAA8U;AAAA,KAAA9M,EAAA,SAAAkD,cAAAlD,EAAA,SAAAyM,YAAAzM,EAAA,SAAA7D,kBAAA6D,EAAA,SAAA4J,mBAAA;AAOpBkD,cAAA;GACvB,MAAAC,eAAqBF,uBAAsBxI;AAE3CwI,0BAAsBxI,UAAW;AAEjC,OAAI,CAAC0I,gBAAgB5Q,mBAAmB,SAAQ;AAChD,OAAI,CAACyN,qBAAD1G,WAAkCuJ,WAAU;;AACjDzM,IAAA,OAAAkD;AAAAlD,IAAA,OAAAyM;AAAAzM,IAAA,OAAA7D;AAAA6D,IAAA,OAAA4J;AAAA5J,IAAA,OAAA8M;OAAAA,OAAA9M,EAAA;CAPD,MAAAgN,mBAAyBF;CAOvB,IAAAG;AAAA,KAAAjN,EAAA,SAAAmG,YAAA;AAG+B8G,SAAAxI,QAAA;AAC/B0B,cAAUlK,SAAU0H,IAAS;;AAC9B3D,IAAA,OAAAmG;AAAAnG,IAAA,OAAAiN;OAAAA,OAAAjN,EAAA;CAFD,MAAAkN,kBAAwB1U,SAASyU,IAE/B;CAGF,MAAAE,aAAiB3U,eAAS;AAExB,MAAI,CAACqH,kBACHF,uBAAsB,KAAK;AAE7BhE,kBAAgB,GAAG;AAGnBuO,iBAAe,KAAK;AACpBnC,8BAA4B,KAAK;AAGjC,MAAIxI,cACFC,kBAAiB,MAAM;AAIzBpC,WAAQiH,SAAeQ,OAAE;AAEzB/H,aAAW;GACX;CAAC,IAAAsQ;AAAA,KAAApN,EAAA,SAAAR,kBAAA;AAgBY4N,cAAM5N,iBAAiB,MAAM;AAAAQ,IAAA,OAAAR;AAAAQ,IAAA,OAAAoN;OAAAA,OAAApN,EAAA;CAC1C5C,MAAAA,MAAAA;CAAQ,IAAAiQ;AAAA,KAAArN,EAAA,SAAAtD,qBAAAsD,EAAA,SAAAmN,cAAAnN,EAAA,SAAAwB,uBAAAxB,EAAA,SAAAX,wBAAAW,EAAA,SAAAyL,yBAAAzL,EAAA,SAAAkD,cAAAlD,EAAA,SAAAnD,eAAAmD,EAAA,SAAArB,cAAAqB,EAAA,SAAA9D,aAAA8D,EAAA,SAAAyM,YAAAzM,EAAA,SAAAa,iBAAAb,EAAA,SAAAwL,sBAAAxL,EAAA,SAAA4J,qBAAA5J,EAAA,SAAAoN,OAAApN,EAAA,SAAAsN,KAAA;AAdoCD,QAAA;GAAArK,aAC/B4G;GAAiBjL;GAAAsE;GAAAC;GAAAxG;GAAA8E;GAAAlG,aAMjB+D;GAAoBwB;GAAAhE;GAAArB,mBAGdiQ;GAAqBrI,cAC1B+J;GAAU9J,YACZoJ;GAAQnJ,aACP8J;GAA6BhQ,UAC1CA;GAAQmG,gBACQiI;GAAkBtP;GAEnC;AAAA8D,IAAA,OAAAtD;AAAAsD,IAAA,OAAAmN;AAAAnN,IAAA,OAAAwB;AAAAxB,IAAA,OAAAX;AAAAW,IAAA,OAAAyL;AAAAzL,IAAA,OAAAkD;AAAAlD,IAAA,OAAAnD;AAAAmD,IAAA,OAAArB;AAAAqB,IAAA,OAAA9D;AAAA8D,IAAA,OAAAyM;AAAAzM,IAAA,OAAAa;AAAAb,IAAA,OAAAwL;AAAAxL,IAAA,OAAA4J;AAAA5J,IAAA,OAAAoN;AAAApN,IAAA,OAAAsN;AAAAtN,IAAA,OAAAqN;OAAAA,OAAArN,EAAA;CAjBD,MAAA,EAAA4F,kBAA0B9B,oBAAoBuJ,IAiB5C;AAEF,KAAItQ,MAAI;EAAA,IAAAwQ;AAAA,MAAAvN,EAAA,SAAAjD,MAAA;AACCwQ,SAAA,oBAAA;IAAkB,gBAAA;cAAaxQ;KAAW;AAAAiD,KAAA,OAAAjD;AAAAiD,KAAA,OAAAuN;QAAAA,OAAAvN,EAAA;AAAjDjD,SAAOA;AAEP,MAAIC,OACFA,UACEA,8CACGD,MACAC,UACA;MAGLA,UAASD;;CAqBH,IAAAwQ;AAAA,KAAAvN,EAAA,SAAA2G,aAAA3G,EAAA,SAAAuH,SAAA;AAfHgG,QAAA/T,kBAAkB;GAAAmN;GAAAY;GAAsB,CAAC;AAAAvH,IAAA,OAAA2G;AAAA3G,IAAA,OAAAuH;AAAAvH,IAAA,OAAAuN;OAAAA,OAAAvN,EAAA;CAKpC,MAAAwN,MAAA,CAAC,CAACxQ;CAAM,IAAAyQ;AAAA,KAAAzN,EAAA,SAAA5B,cAAA4B,EAAA,SAAAgK,aAAAhK,EAAA,SAAA3B,aAAA2B,EAAA,SAAAuM,mBAAAvM,EAAA,SAAAuN,OAAAvN,EAAA,SAAAwN,KAAA;AANXC,QAAA;GAAA,GACFF;GAAyCG,UAClCtP;GAAUuP,SACX;GAAKC,SACL5D;GAAS6D,SACTxP;GAASrB,QACVwQ;GAAQvQ,QACR;GAAI6Q,WACDvB;GACZ;AAAAvM,IAAA,OAAA5B;AAAA4B,IAAA,OAAAgK;AAAAhK,IAAA,OAAA3B;AAAA2B,IAAA,OAAAuM;AAAAvM,IAAA,OAAAuN;AAAAvN,IAAA,OAAAwN;AAAAxN,IAAA,OAAAyN;OAAAA,OAAAzN,EAAA;CAVH,MAAAiG,OACSwH;CAsBT,MAAA,CAAAM,eAAAC,oBAA0C/V,UAAkB;CAAC,IAAAgW;CAAA,IAAAC;AAAA,KAAAlO,EAAA,SAAAkD,cAAAlD,EAAA,SAAAT,iBAAAS,EAAA,SAAAR,kBAAA;AAGnDyO,cAAA;AACR,OAAI1O,iBAAA,CAAkB2D,WACpB1D,kBAAiB,MAAM;;AAExB0O,QAAA;GAAC3O;GAAe2D;GAAY1D;GAAiB;AAAAQ,IAAA,OAAAkD;AAAAlD,IAAA,OAAAT;AAAAS,IAAA,OAAAR;AAAAQ,IAAA,OAAAiO;AAAAjO,IAAA,OAAAkO;QAAA;AAAAD,QAAAjO,EAAA;AAAAkO,QAAAlO,EAAA;;AAJhDlI,WAAUmW,KAIPC,IAA8C;CAAA,IAAAC;AAAA,KAAAnO,EAAA,SAAAX,wBAAAW,EAAA,SAAAwL,sBAAAxL,EAAA,SAAA4J,qBAAA5J,EAAA,SAAA1C,YAAA;AAKjC6Q,cAAA;AACd,OAAI,CAACvE,kBAAiB;AAEtBoE,oBAAiB1Q,WAAU+G,SAAqB+J,YAAC;GAEjD,IAAAC,WAAe;GACf,IAAAC,QAAY;GAEZ,MAAAC,aAAa;IACX,MAAAC,QAAY/T,gBAAgBwI,aAAYoB,SAAUhF,qBAAqB;AAEvE,QAAI5D,SAAO,KAAM+P,oBAAmB/P,MAAI;AAExC4S,eAAAA,WAAY;AAEZ,QAAI5S,SAAO,QAAQ4S,WAAW,EAAGC,SAAQG,sBAAsBF,KAAK;;AAGtED,WAAQG,4BAAsB;AAC5BH,YAAQG,sBAAsBF,KAAK;KACnC;AAFG,gBAIQG,qBAAqBJ,MAAM;;AACzCtO,IAAA,OAAAX;AAAAW,IAAA,OAAAwL;AAAAxL,IAAA,OAAA4J;AAAA5J,IAAA,OAAA1C;AAAA0C,IAAA,OAAAmO;OAAAA,OAAAnO,EAAA;CAAA,IAAA2O;AAAA,KAAA3O,EAAA,SAAAwB,uBAAAxB,EAAA,SAAAX,wBAAAW,EAAA,SAAA4J,qBAAA5J,EAAA,SAAA1C,YAAA;AAAEqR,QAAA;GACD/E;GACAvK;GACAmC;GACAlE;GACD;AAAA0C,IAAA,OAAAwB;AAAAxB,IAAA,OAAAX;AAAAW,IAAA,OAAA4J;AAAA5J,IAAA,OAAA1C;AAAA0C,IAAA,OAAA2O;OAAAA,OAAA3O,EAAA;AA5BD/G,mBAAgBkV,KAuBbQ,IAKD;CAAA,IAAAC;AAAA,KAAA5O,EAAA,SAAAuL,mBAAAvL,EAAA,SAAAd,cAAAc,EAAA,SAAA0J,mBAAA1J,EAAA,SAAA4J,mBAAA;AAIAgF,QAAAhF,qBACA2B,mBAAmB,QACnB7B,gBAAemF,MAAMC,WAAYA,OAAMrT,QAAS8P,gBAEnC,GADT5R,mBAAmB,mBAAmBuF,cAAcqM,gBAC3C,GAJbpL;AAIaH,IAAA,OAAAuL;AAAAvL,IAAA,OAAAd;AAAAc,IAAA,OAAA0J;AAAA1J,IAAA,OAAA4J;AAAA5J,IAAA,OAAA4O;OAAAA,OAAA5O,EAAA;CALf,MAAAyG,mBACEmI;CAYY,MAAAG,MAAA/E,YAAA,IAAA;CAAyB,IAAAgF;AAAA,KAAAhP,EAAA,SAAA+O,KAAA;AAD5BC,QAAA,EAAAC,QACGF,KACT;AAAA/O,IAAA,OAAA+O;AAAA/O,IAAA,OAAAgP;OAAAA,OAAAhP,EAAA;CAAA,IAAAkP;AAAA,KAAAlP,EAAA,SAAAhD,QAAA;AAIAkS,QAAAlS,SAAS,oBAAA;GAAkB,gBAAA;aAAUA;IAAoB,GAAzD;AAAyDgD,IAAA,OAAAhD;AAAAgD,IAAA,OAAAkP;OAAAA,OAAAlP,EAAA;CAEpD,MAAAmP,MAAAlU,MAAA;CAAgB,IAAAmU;AAAA,KAAApP,EAAA,SAAAmG,cAAAnG,EAAA,SAAAkN,iBAAA;AAcRkC,QAAA;GAAA,GAAKjJ;GAAUlK,QAAUiR;GAAiB;AAAAlN,IAAA,OAAAmG;AAAAnG,IAAA,OAAAkN;AAAAlN,IAAA,OAAAoP;OAAAA,OAAApP,EAAA;CAAA,IAAAqP;AAAA,KAAArP,EAAA,SAAAK,OAAAC,IAAA,4BAAA,EAAA;AAMvC+O,cAAA;AACbxC,0BAAsBxI,UAAW;;AAClCrE,IAAA,OAAAqP;OAAAA,OAAArP,EAAA;CAGe,MAAAsP,MAACtI,MAA4B;CACxB,MAAAuI,MAACvI,MAA4B;CAC5B,MAAAwI,MAACxI,MAA4B;CAAmB,IAAAyI;AAAA,KAAAzP,EAAA,SAAAsP,OAAAtP,EAAA,SAAAuP,OAAAvP,EAAA,SAAAwP,KAAA;AAH3DC,QAAA;GAAA,cACKH;GAA0C,mBACrCC;GAA+C,oBAC9CC;GACrB;AAAAxP,IAAA,OAAAsP;AAAAtP,IAAA,OAAAuP;AAAAvP,IAAA,OAAAwP;AAAAxP,IAAA,OAAAyP;OAAAA,OAAAzP,EAAA;CAAA,IAAA0P;AAAA,KAAA1P,EAAA,SAAAyG,oBAAAzG,EAAA,SAAAjE,gBAAAiE,EAAA,SAAAlE,aAAAkE,EAAA,SAAAd,cAAAc,EAAA,SAAAwB,uBAAAxB,EAAA,SAAAkM,qBAAAlM,EAAA,SAAAgN,oBAAAhN,EAAA,SAAA4M,oBAAA5M,EAAA,SAAA+F,MAAA/F,EAAA,SAAA5C,YAAA4C,EAAA,SAAApC,eAAAoC,EAAA,SAAA5B,cAAA4B,EAAA,SAAA2G,aAAA3G,EAAA,SAAArB,cAAAqB,EAAA,SAAAgG,cAAAhG,EAAA,SAAA4F,iBAAA5F,EAAA,SAAAiG,QAAAjG,EAAA,SAAAnE,eAAAmE,EAAA,SAAA4J,qBAAA5J,EAAA,SAAA7C,QAAA6C,EAAA,SAAAmP,OAAAnP,EAAA,SAAAoP,OAAApP,EAAA,SAAAyP,KAAA;AA7BHC,QAAA,oBAAC;GACK,IAAAP;GACM/R;GACN2I;GACGvE,OAAAA;GACM3F;GACDuC;GACAO;GACAqH;GACDlK;GACGC;GACRoB;GACA8I;GACOrI;GACEgI;GACH,YAAAwJ;GACCxF,aAAAA;GACD1K;GACMuH;GACRyF,UAAAA;GACDU,SAAAA;GACM,eAAAyC;GAGNrC,SAAAA;GACE,WAAAyC;GAKA9I;IACX;AAAA3G,IAAA,OAAAyG;AAAAzG,IAAA,OAAAjE;AAAAiE,IAAA,OAAAlE;AAAAkE,IAAA,OAAAd;AAAAc,IAAA,OAAAwB;AAAAxB,IAAA,OAAAkM;AAAAlM,IAAA,OAAAgN;AAAAhN,IAAA,OAAA4M;AAAA5M,IAAA,OAAA+F;AAAA/F,IAAA,OAAA5C;AAAA4C,IAAA,OAAApC;AAAAoC,IAAA,OAAA5B;AAAA4B,IAAA,OAAA2G;AAAA3G,IAAA,OAAArB;AAAAqB,IAAA,OAAAgG;AAAAhG,IAAA,OAAA4F;AAAA5F,IAAA,OAAAiG;AAAAjG,IAAA,OAAAnE;AAAAmE,IAAA,OAAA4J;AAAA5J,IAAA,OAAA7C;AAAA6C,IAAA,OAAAmP;AAAAnP,IAAA,OAAAoP;AAAApP,IAAA,OAAAyP;AAAAzP,IAAA,OAAA0P;OAAAA,OAAA1P,EAAA;CAEC,MAAA2P,MAAA/Q,mBAAmB,WAAnB3B,SAAA;CAA2C,IAAA2S;AAAA,KAAA5P,EAAA,SAAA3B,aAAA2B,EAAA,SAAAsL,gBAAA;AAC3CsE,QAAAvR,YAAY,oBAAC,eAAyB,gBAAA,cAA+B,GAArEiN;AAAqEtL,IAAA,OAAA3B;AAAA2B,IAAA,OAAAsL;AAAAtL,IAAA,OAAA4P;OAAAA,OAAA5P,EAAA;CACrE,MAAA6P,MAAAjR,mBAAmB,UAAnB3B,SAAA;CAA0C,IAAA6S;AAAA,KAAA9P,EAAA,SAAAmN,cAAAnN,EAAA,SAAA9C,eAAA8C,EAAA,SAAAuM,mBAAAvM,EAAA,SAAA7C,QAAA6C,EAAA,SAAAmH,GAAA;AAC1C2I,QAAAvD,mBACC,oBAAA,gBAAA;GACE,qBAAA;GACM,MAAA,oBAAC,cAAW;GACZpP;GAKH,IAAA;GACc,mBAAAD,cAAA,KAAAiD;GACI,wBAAA;GACT,cAAAgH,EAAE,uBAAuB,cAAa;GACzCgG,SAAAA;IAEZ;AAAAnN,IAAA,OAAAmN;AAAAnN,IAAA,OAAA9C;AAAA8C,IAAA,OAAAuM;AAAAvM,IAAA,OAAA7C;AAAA6C,IAAA,OAAAmH;AAAAnH,IAAA,OAAA8P;OAAAA,OAAA9P,EAAA;CAAA,IAAA+P;AAAA,KAAA/P,EAAA,SAAA9C,eAAA8C,EAAA,SAAA5B,cAAA4B,EAAA,SAAA3B,aAAA2B,EAAA,SAAA4J,qBAAA5J,EAAA,SAAA7C,QAAA6C,EAAA,SAAAmH,KAAAnH,EAAA,SAAA0M,cAAA1M,EAAA,SAAAtC,cAAAsC,EAAA,SAAAnC,eAAA;AACAkS,QAAA,CAAC7S,cAGA,oBAAA,gBAAA;GACOQ,KAAAA;GACL,qBAAA;GACA,wBAAA;GACM,MAAA,oBAAC,iBAAkB,IAAAkM,oBAAA,OAAA,SAAoC;GAC1D,IAAA;GACG,MAAA;IAAAoG,SACKpG;IAAiB8D,UAChBtP;IAAUyP,SACXxP;IACX;GACWlB,aAAAA;GACCiB;GACJP,QAAAA;GACO+L,iBAAAA;GACD,iBAAA;GACF,cAAAzC,EAAE,wBAAwB,eAAc;GAC3CuF,SAAAA;IAEL,GAtBP;AAsBO1M,IAAA,OAAA9C;AAAA8C,IAAA,OAAA5B;AAAA4B,IAAA,OAAA3B;AAAA2B,IAAA,OAAA4J;AAAA5J,IAAA,OAAA7C;AAAA6C,IAAA,OAAAmH;AAAAnH,IAAA,OAAA0M;AAAA1M,IAAA,OAAAtC;AAAAsC,IAAA,OAAAnC;AAAAmC,IAAA,OAAA+P;OAAAA,OAAA/P,EAAA;CAAA,IAAAiQ;AAAA,KAAAjQ,EAAA,SAAA2P,OAAA3P,EAAA,SAAA4P,OAAA5P,EAAA,SAAA6P,OAAA7P,EAAA,SAAA8P,OAAA9P,EAAA,SAAA+P,KAAA;AA1CVE,QAAA,qBAAA;GAAkB,gBAAA;;IACfN;IACAC;IACAC;IACAC;IAgBAC;;IAuBG;AAAA/P,IAAA,OAAA2P;AAAA3P,IAAA,OAAA4P;AAAA5P,IAAA,OAAA6P;AAAA7P,IAAA,OAAA8P;AAAA9P,IAAA,OAAA+P;AAAA/P,IAAA,OAAAiQ;OAAAA,OAAAjQ,EAAA;CAGQ,MAAAkQ,MAAA5S;CAwBD,MAAA6S,MAACnJ,MAAc;CAAa,IAAAoJ;AAAA,KAAApQ,EAAA,SAAAR,kBAAA;AAK9B4Q,cAAM5Q,iBAAiB,MAAM;AAAAQ,IAAA,OAAAR;AAAAQ,IAAA,OAAAoQ;OAAAA,OAAApQ,EAAA;CAAA,IAAAqQ;AAAA,KAAArQ,EAAA,SAAAzD,YAAAyD,EAAA,SAAA+N,iBAAA/N,EAAA,SAAAoL,uBAAApL,EAAA,SAAAtB,oBAAAsB,EAAA,SAAAxB,aAAAwB,EAAA,SAAAX,wBAAAW,EAAA,SAAA0B,YAAA1B,EAAA,SAAAyL,yBAAAzL,EAAA,SAAA9B,iBAAA8B,EAAA,SAAA5B,cAAA4B,EAAA,SAAAoB,SAAApB,EAAA,SAAAxC,cAAAwC,EAAA,SAAAlC,iBAAAkC,EAAA,SAAA7B,WAAA6B,EAAA,SAAAhC,gBAAAgC,EAAA,SAAAvB,iBAAAuB,EAAA,SAAAjC,iBAAAiC,EAAA,SAAAvC,cAAAuC,EAAA,SAAAgH,MAAA1I,gBAAA0B,EAAA,SAAA/B,iBAAA+B,EAAA,SAAAzB,cAAAyB,EAAA,SAAA4J,qBAAA5J,EAAA,SAAA7C,QAAA6C,EAAA,SAAAyI,eAAAzI,EAAA,SAAAkQ,OAAAlQ,EAAA,SAAAmQ,OAAAnQ,EAAA,SAAAoQ,KAAA;AA/BxCC,QAAA,oBAAC;GACSzG,QAAAA;GACI,YAAAsG;GACAzS;GACAD;GACDgB;GACCD;GACGE;GACGC;GACHqP;GACJ,WAAA,mBAAmB7O;GACfnB;GACAD;GACDE;GACCC;GACAC;GACNC;GACIkB,aAAAA;GAGoB,iCAAA;GACrBjB;GACE,cAAA4I,MAAK1I;GACZmK,OAAAA;GACOxF;GACP7B;GACI,WAAA+O;GACU/E;GACb1J,QAAAA;GACFvE;GACasO,mBAAAA;GACV,SAAA2E;GAER7T;IACc;AAAAyD,IAAA,OAAAzD;AAAAyD,IAAA,OAAA+N;AAAA/N,IAAA,OAAAoL;AAAApL,IAAA,OAAAtB;AAAAsB,IAAA,OAAAxB;AAAAwB,IAAA,OAAAX;AAAAW,IAAA,OAAA0B;AAAA1B,IAAA,OAAAyL;AAAAzL,IAAA,OAAA9B;AAAA8B,IAAA,OAAA5B;AAAA4B,IAAA,OAAAoB;AAAApB,IAAA,OAAAxC;AAAAwC,IAAA,OAAAlC;AAAAkC,IAAA,OAAA7B;AAAA6B,IAAA,OAAAhC;AAAAgC,IAAA,OAAAvB;AAAAuB,IAAA,OAAAjC;AAAAiC,IAAA,OAAAvC;AAAAuC,IAAA,OAAAgH,MAAA1I;AAAA0B,IAAA,OAAA/B;AAAA+B,IAAA,OAAAzB;AAAAyB,IAAA,OAAA4J;AAAA5J,IAAA,OAAA7C;AAAA6C,IAAA,OAAAyI;AAAAzI,IAAA,OAAAkQ;AAAAlQ,IAAA,OAAAmQ;AAAAnQ,IAAA,OAAAoQ;AAAApQ,IAAA,OAAAqQ;OAAAA,OAAArQ,EAAA;CAAA,IAAAsQ;AAAA,KAAAtQ,EAAA,SAAAoL,uBAAApL,EAAA,SAAAiG,QAAAjG,EAAA,SAAA7C,QAAA6C,EAAA,SAAA9E,UAAA8E,EAAA,SAAAgP,OAAAhP,EAAA,SAAAkP,OAAAlP,EAAA,SAAA0P,OAAA1P,EAAA,SAAAiQ,OAAAjQ,EAAA,SAAAqQ,OAAArQ,EAAA,SAAA1C,YAAA;AAzHnBgT,QAAA,qBAAC;GACMhT,KAAAA;GACC2I;GACE/K;GACD,OAAA8T;GAGI7R,aAAAA;GAAI,GACXiO;;IAEH8D;IACDQ;IAgCAO;IA4CAI;;IAmCuB;AAAArQ,IAAA,OAAAoL;AAAApL,IAAA,OAAAiG;AAAAjG,IAAA,OAAA7C;AAAA6C,IAAA,OAAA9E;AAAA8E,IAAA,OAAAgP;AAAAhP,IAAA,OAAAkP;AAAAlP,IAAA,OAAA0P;AAAA1P,IAAA,OAAAiQ;AAAAjQ,IAAA,OAAAqQ;AAAArQ,IAAA,OAAA1C;AAAA0C,IAAA,OAAAsQ;OAAAA,OAAAtQ,EAAA;CA3H3B,MAAAuQ,gBACED;CA2HA,IAAAE;AAAA,KAAAxQ,EAAA,SAAAuQ,iBAAAvQ,EAAA,SAAAgH,SAAAhH,EAAA,SAAA6G,KAAA;EAEF,MAAA,EAAAtK,UAAAkU,GAAA,GAAAC,yBAAiD1J;AAE1CwJ,QAAA9W,cACL6W,eACA1J,KACA6J,qBACD;AAAA1Q,IAAA,OAAAuQ;AAAAvQ,IAAA,OAAAgH;AAAAhH,IAAA,OAAA6G;AAAA7G,IAAA,OAAAwQ;OAAAA,OAAAxQ,EAAA;AAAA,QAJMwQ;EAKP;AAIFzJ,SAASzN,OAAOA;AAEhByN,SAAS1O,UAAUC;AAEnBqY,OAAOC,eAAe7J,UAAU,iBAAiB;CAC/CnL,OAAO;CACPiV,YAAY;CACZC,cAAc;CACf,CAAC;AApuBiC,SAAA5J,OAAAnH,IAAA;CAKZ,MAAA,EAAAnE,OAAAwK,aAAArG;AAAmB,QAC7B;EAAAzE,aAEQM,SAAA;EAAaJ,kBAAAuV,KAAA;AAGxB3K,YAAS2K,IAAI;;EAEhB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
|
+
import { getEdgeVisibleKey, markKeyboardFocus } from "../ListBoxPopover/listNavigation.js";
|
|
3
|
+
|
|
4
|
+
//#region src/components/fields/ComboBox/comboBoxOptions.ts
|
|
5
|
+
/**
|
|
6
|
+
* The text the input shows for `key`: its option's label, or the key itself
|
|
7
|
+
* for a custom value or an option that has not loaded yet.
|
|
8
|
+
*/
|
|
9
|
+
function getItemLabel(collection, key) {
|
|
10
|
+
return collection.getItem(key)?.textValue || String(key);
|
|
11
|
+
}
|
|
12
|
+
function getDataKey(item) {
|
|
13
|
+
return item?.key ?? item?.id;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* `items` with the item keyed `key` moved to the front, or `items` itself when
|
|
17
|
+
* there is no such item.
|
|
18
|
+
*/
|
|
19
|
+
function sortSelectedFirst(items, key) {
|
|
20
|
+
if (!key) return items;
|
|
21
|
+
const isSelected = (item) => {
|
|
22
|
+
const itemKey = getDataKey(item);
|
|
23
|
+
return itemKey != null && String(itemKey) === String(key);
|
|
24
|
+
};
|
|
25
|
+
const itemsArray = Array.isArray(items) ? items : Array.from(items);
|
|
26
|
+
const selectedItem = itemsArray.find(isSelected);
|
|
27
|
+
if (!selectedItem) return items;
|
|
28
|
+
return [selectedItem, ...itemsArray.filter((item) => !isSelected(item))];
|
|
29
|
+
}
|
|
30
|
+
/** The options among (filtered) collection nodes, read through sections. */
|
|
31
|
+
function collectOptions(nodes) {
|
|
32
|
+
const options = [];
|
|
33
|
+
for (const node of nodes) {
|
|
34
|
+
const children = node.type === "section" ? node.childNodes ?? [] : [node];
|
|
35
|
+
for (const child of children) if (child.type === "item") options.push({
|
|
36
|
+
key: child.key,
|
|
37
|
+
textValue: child.textValue || ""
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return options;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The option the typed text names, or `null` when it names none that can be
|
|
44
|
+
* selected: the exact match, otherwise the only option the filter left. Among
|
|
45
|
+
* options sharing the label, the selection wins, then an enabled one. A
|
|
46
|
+
* disabled match names nothing, as it cannot be picked any other way either,
|
|
47
|
+
* unless it is already the selection.
|
|
48
|
+
*/
|
|
49
|
+
function findTypedOption(options, text, selectedKey, disabledKeys, isSameText) {
|
|
50
|
+
const term = text.trim();
|
|
51
|
+
if (!term) return null;
|
|
52
|
+
const exactMatches = options.filter((option) => isSameText(option.textValue, term));
|
|
53
|
+
const match = exactMatches.find((option) => option.key === selectedKey) ?? exactMatches.find((option) => !disabledKeys.has(option.key)) ?? exactMatches[0] ?? (options.length === 1 ? options[0] : null);
|
|
54
|
+
if (!match || match.key !== selectedKey && disabledKeys.has(match.key)) return null;
|
|
55
|
+
return match.key;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The option the list should highlight: the one it already highlights while
|
|
59
|
+
* the filter keeps it, otherwise the selection when shown, otherwise the first
|
|
60
|
+
* enabled option.
|
|
61
|
+
*/
|
|
62
|
+
function resolveHighlightedKey(listState, selectedKey) {
|
|
63
|
+
const { collection, selectionManager } = listState;
|
|
64
|
+
const focusedKey = selectionManager.focusedKey;
|
|
65
|
+
if (focusedKey != null && collection.getItem(focusedKey) != null) return focusedKey;
|
|
66
|
+
if (selectedKey != null && collection.getItem(selectedKey) != null) return selectedKey;
|
|
67
|
+
return getEdgeVisibleKey(listState, "first");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Moves the list's virtual focus to {@link resolveHighlightedKey}, scrolling it
|
|
71
|
+
* into view, and returns that key. `null` while the list has not mounted or
|
|
72
|
+
* has nothing to highlight.
|
|
73
|
+
*/
|
|
74
|
+
function highlightOption(listState, selectedKey) {
|
|
75
|
+
if (!listState?.selectionManager || !listState.collection) return null;
|
|
76
|
+
const key = resolveHighlightedKey(listState, selectedKey);
|
|
77
|
+
markKeyboardFocus(listState);
|
|
78
|
+
if (key != null && key !== listState.selectionManager.focusedKey) listState.selectionManager.setFocusedKey(key);
|
|
79
|
+
return key;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//#endregion
|
|
83
|
+
export { collectOptions, findTypedOption, getItemLabel, highlightOption, resolveHighlightedKey, sortSelectedFirst };
|
|
84
|
+
//# sourceMappingURL=comboBoxOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comboBoxOptions.js","names":["Key","getEdgeVisibleKey","ListStateLike","markKeyboardFocus","ComboBoxOption","key","textValue","CollectionLike","getItem","ListState","collection","getItemLabel","String","getDataKey","item","id","sortSelectedFirst","items","Iterable","T","isSelected","itemKey","itemsArray","Array","isArray","from","selectedItem","find","filter","collectOptions","nodes","options","node","children","type","childNodes","child","push","findTypedOption","text","selectedKey","disabledKeys","Set","isSameText","term","trim","exactMatches","option","match","has","length","resolveHighlightedKey","listState","selectionManager","focusedKey","highlightOption","setFocusedKey"],"sources":["../../../../src/components/fields/ComboBox/comboBoxOptions.ts"],"sourcesContent":["import { Key } from '@react-types/shared';\n\nimport {\n getEdgeVisibleKey,\n ListStateLike,\n markKeyboardFocus,\n} from '../ListBoxPopover/listNavigation';\n\n/** An option the typed text can name. */\nexport interface ComboBoxOption {\n key: Key;\n textValue: string;\n}\n\nexport interface CollectionLike {\n getItem: (key: Key) => { textValue?: string } | null | undefined;\n}\n\ntype ListState = ListStateLike & { collection: CollectionLike };\n\n/**\n * The text the input shows for `key`: its option's label, or the key itself\n * for a custom value or an option that has not loaded yet.\n */\nexport function getItemLabel(collection: CollectionLike, key: Key): string {\n return collection.getItem(key)?.textValue || String(key);\n}\n\nfunction getDataKey(item: unknown): Key | undefined {\n return (item as any)?.key ?? (item as any)?.id;\n}\n\n/**\n * `items` with the item keyed `key` moved to the front, or `items` itself when\n * there is no such item.\n */\nexport function sortSelectedFirst<T>(\n items: Iterable<T>,\n key: Key | null,\n): Iterable<T> {\n if (!key) return items;\n\n const isSelected = (item: T) => {\n const itemKey = getDataKey(item);\n\n return itemKey != null && String(itemKey) === String(key);\n };\n const itemsArray = Array.isArray(items) ? items : Array.from(items);\n const selectedItem = itemsArray.find(isSelected);\n\n if (!selectedItem) return items;\n\n return [selectedItem, ...itemsArray.filter((item) => !isSelected(item))];\n}\n\n/** The options among (filtered) collection nodes, read through sections. */\nexport function collectOptions(nodes: Iterable<any>): ComboBoxOption[] {\n const options: ComboBoxOption[] = [];\n\n for (const node of nodes) {\n const children = node.type === 'section' ? node.childNodes ?? [] : [node];\n\n for (const child of children) {\n if (child.type === 'item') {\n options.push({ key: child.key, textValue: child.textValue || '' });\n }\n }\n }\n\n return options;\n}\n\n/**\n * The option the typed text names, or `null` when it names none that can be\n * selected: the exact match, otherwise the only option the filter left. Among\n * options sharing the label, the selection wins, then an enabled one. A\n * disabled match names nothing, as it cannot be picked any other way either,\n * unless it is already the selection.\n */\nexport function findTypedOption(\n options: ComboBoxOption[],\n text: string,\n selectedKey: Key | null,\n disabledKeys: Set<Key>,\n isSameText: (textValue: string, text: string) => boolean,\n): Key | null {\n const term = text.trim();\n\n if (!term) return null;\n\n const exactMatches = options.filter((option) =>\n isSameText(option.textValue, term),\n );\n const match =\n exactMatches.find((option) => option.key === selectedKey) ??\n exactMatches.find((option) => !disabledKeys.has(option.key)) ??\n exactMatches[0] ??\n (options.length === 1 ? options[0] : null);\n\n if (!match || (match.key !== selectedKey && disabledKeys.has(match.key))) {\n return null;\n }\n\n return match.key;\n}\n\n/**\n * The option the list should highlight: the one it already highlights while\n * the filter keeps it, otherwise the selection when shown, otherwise the first\n * enabled option.\n */\nexport function resolveHighlightedKey(\n listState: ListState,\n selectedKey: Key | null,\n): Key | null {\n const { collection, selectionManager } = listState;\n const focusedKey = selectionManager.focusedKey;\n\n if (focusedKey != null && collection.getItem(focusedKey) != null) {\n return focusedKey;\n }\n\n if (selectedKey != null && collection.getItem(selectedKey) != null) {\n return selectedKey;\n }\n\n return getEdgeVisibleKey(listState, 'first');\n}\n\n/**\n * Moves the list's virtual focus to {@link resolveHighlightedKey}, scrolling it\n * into view, and returns that key. `null` while the list has not mounted or\n * has nothing to highlight.\n */\nexport function highlightOption(\n listState: ListState | null | undefined,\n selectedKey: Key | null,\n): Key | null {\n if (!listState?.selectionManager || !listState.collection) return null;\n\n const key = resolveHighlightedKey(listState, selectedKey);\n\n markKeyboardFocus(listState);\n\n if (key != null && key !== listState.selectionManager.focusedKey) {\n listState.selectionManager.setFocusedKey(key);\n }\n\n return key;\n}\n"],"mappings":";;;;;;;;AAwBA,SAAgBW,aAAaD,YAA4BL,KAAkB;AACzE,QAAOK,WAAWF,QAAQH,IAAI,EAAEC,aAAaM,OAAOP,IAAI;;AAG1D,SAASQ,WAAWC,MAAgC;AAClD,QAAQA,MAAcT,OAAQS,MAAcC;;;;;;AAO9C,SAAgBC,kBACdC,OACAZ,KACa;AACb,KAAI,CAACA,IAAK,QAAOY;CAEjB,MAAMG,cAAcN,SAAY;EAC9B,MAAMO,UAAUR,WAAWC,KAAK;AAEhC,SAAOO,WAAW,QAAQT,OAAOS,QAAQ,KAAKT,OAAOP,IAAI;;CAE3D,MAAMiB,aAAaC,MAAMC,QAAQP,MAAM,GAAGA,QAAQM,MAAME,KAAKR,MAAM;CACnE,MAAMS,eAAeJ,WAAWK,KAAKP,WAAW;AAEhD,KAAI,CAACM,aAAc,QAAOT;AAE1B,QAAO,CAACS,cAAc,GAAGJ,WAAWM,QAAQd,SAAS,CAACM,WAAWN,KAAK,CAAC,CAAC;;;AAI1E,SAAgBe,eAAeC,OAAwC;CACrE,MAAMC,UAA4B,EAAE;AAEpC,MAAK,MAAMC,QAAQF,OAAO;EACxB,MAAMG,WAAWD,KAAKE,SAAS,YAAYF,KAAKG,cAAc,EAAE,GAAG,CAACH,KAAK;AAEzE,OAAK,MAAMI,SAASH,SAClB,KAAIG,MAAMF,SAAS,OACjBH,SAAQM,KAAK;GAAEhC,KAAK+B,MAAM/B;GAAKC,WAAW8B,MAAM9B,aAAa;GAAI,CAAC;;AAKxE,QAAOyB;;;;;;;;;AAUT,SAAgBO,gBACdP,SACAQ,MACAC,aACAC,cACAE,YACY;CACZ,MAAMC,OAAOL,KAAKM,MAAM;AAExB,KAAI,CAACD,KAAM,QAAO;CAElB,MAAME,eAAef,QAAQH,QAAQmB,WACnCJ,WAAWI,OAAOzC,WAAWsC,KAC/B,CAAC;CACD,MAAMI,QACJF,aAAanB,MAAMoB,WAAWA,OAAO1C,QAAQmC,YAAY,IACzDM,aAAanB,MAAMoB,WAAW,CAACN,aAAaQ,IAAIF,OAAO1C,IAAI,CAAC,IAC5DyC,aAAa,OACZf,QAAQmB,WAAW,IAAInB,QAAQ,KAAK;AAEvC,KAAI,CAACiB,SAAUA,MAAM3C,QAAQmC,eAAeC,aAAaQ,IAAID,MAAM3C,IAAK,CACtE,QAAO;AAGT,QAAO2C,MAAM3C;;;;;;;AAQf,SAAgB8C,sBACdC,WACAZ,aACY;CACZ,MAAM,EAAE9B,YAAY2C,qBAAqBD;CACzC,MAAME,aAAaD,iBAAiBC;AAEpC,KAAIA,cAAc,QAAQ5C,WAAWF,QAAQ8C,WAAW,IAAI,KAC1D,QAAOA;AAGT,KAAId,eAAe,QAAQ9B,WAAWF,QAAQgC,YAAY,IAAI,KAC5D,QAAOA;AAGT,QAAOvC,kBAAkBmD,WAAW,QAAQ;;;;;;;AAQ9C,SAAgBG,gBACdH,WACAZ,aACY;AACZ,KAAI,CAACY,WAAWC,oBAAoB,CAACD,UAAU1C,WAAY,QAAO;CAElE,MAAML,MAAM8C,sBAAsBC,WAAWZ,YAAY;AAEzDrC,mBAAkBiD,UAAU;AAE5B,KAAI/C,OAAO,QAAQA,QAAQ+C,UAAUC,iBAAiBC,WACpDF,WAAUC,iBAAiBG,cAAcnD,IAAI;AAG/C,QAAOA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { mergeStyleLayers } from "../../../utils/styles.js";
|
|
3
3
|
import { chain } from "../../../utils/react/chain.js";
|
|
4
4
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { getCaretRect } from "./caretPosition.js";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { useEffect, useLayoutEffect, useRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useFieldProps } from "../../form/Form/use-field/use-field-props.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { getValidationMods } from "../../form/validation/resolve-validation-props.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { extractStyles, mergeStyleLayers } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { ItemActionProvider } from "../../actions/ItemActionContext.js";
|
|
3
3
|
import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
|
|
4
4
|
import { CalendarIcon } from "../../../icons/CalendarIcon.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { DatePickerSegment } from "./DatePickerSegment.js";
|
|
4
4
|
import { formatSegments } from "./utils.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { c } from "react/compiler-runtime";
|
|
3
3
|
import { tasty } from "@tenphi/tasty";
|
|
4
4
|
import { useRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { extractStyles, mergeStyleLayers } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { extractStyles, mergeStyleLayers } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
|
|
2
2
|
import { PeriodPicker } from "./PeriodPicker.js";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { forwardRef } from "react";
|