@procore/core-react 12.38.0 → 12.40.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jest/testShims.js +6 -0
- package/CHANGELOG.md +55 -0
- package/dist/AnchorNavigation/AnchorNavigation.styles.js +3 -3
- package/dist/Avatar/Avatar.styles.js +6 -6
- package/dist/Avatar/Avatar.styles.js.map +1 -1
- package/dist/AvatarStack/AvatarStack.d.ts +1 -1
- package/dist/AvatarStack/AvatarStack.js +90 -27
- package/dist/AvatarStack/AvatarStack.js.map +1 -1
- package/dist/AvatarStack/AvatarStack.styles.js +8 -8
- package/dist/AvatarStack/AvatarStack.styles.js.map +1 -1
- package/dist/AvatarStack/AvatarStack.types.d.ts +7 -0
- package/dist/AvatarStack/AvatarStack.types.js.map +1 -1
- package/dist/AvatarStack/useAvatarPopover.d.ts +14 -0
- package/dist/AvatarStack/useAvatarPopover.js +57 -0
- package/dist/AvatarStack/useAvatarPopover.js.map +1 -0
- package/dist/AvatarStack/useAvatarPopover.types.d.ts +4 -0
- package/dist/AvatarStack/useAvatarPopover.types.js +2 -0
- package/dist/AvatarStack/useAvatarPopover.types.js.map +1 -0
- package/dist/Badge/Badge.styles.js +2 -2
- package/dist/BadgePill/BadgePill.styles.js +4 -4
- package/dist/Banner/Banner.styles.js +10 -10
- package/dist/Box/Box.styles.js +1 -1
- package/dist/Breadcrumbs/Breadcrumbs.styles.js +4 -4
- package/dist/Button/Button.styles.js +5 -5
- package/dist/Calendar/Calendar.styles.js +9 -9
- package/dist/Card/Card.styles.js +1 -1
- package/dist/Checkbox/Checkbox.d.ts +0 -1
- package/dist/Checkbox/Checkbox.js +5 -6
- package/dist/Checkbox/Checkbox.js.map +1 -1
- package/dist/Checkbox/Checkbox.styles.js +6 -6
- package/dist/ContactItem/ContactItem.styles.js +5 -5
- package/dist/Content/Content.styles.js +2 -2
- package/dist/DateInput/DateInput.js +12 -2
- package/dist/DateInput/DateInput.js.map +1 -1
- package/dist/DateInput/DateInput.styles.js +6 -6
- package/dist/DateSelect/DateSelect.types.d.ts +1 -1
- package/dist/DateSelect/DateSelect.types.js.map +1 -1
- package/dist/DetailPage/DetailPage.styles.js +7 -7
- package/dist/Dropdown/Dropdown.styles.js +3 -3
- package/dist/DropdownFlyout/DropdownFlyout.styles.js +4 -4
- package/dist/Dropzone/Dropzone.js +1 -1
- package/dist/Dropzone/Dropzone.styles.js +9 -9
- package/dist/EmptyState/EmptyState.styles.js +6 -6
- package/dist/Field/Field.styles.js +3 -3
- package/dist/FileList/FileList.js +3 -7
- package/dist/FileList/FileList.js.map +1 -1
- package/dist/FileList/FileList.styles.d.ts +0 -1
- package/dist/FileList/FileList.styles.js +3 -7
- package/dist/FileList/FileList.styles.js.map +1 -1
- package/dist/FileSelect/FileExplorer/FileExplorer.styles.js +9 -9
- package/dist/FileSelect/FileExplorer/FileExplorerSidebar.styles.js +3 -3
- package/dist/FileSelect/FileSelect.styles.js +2 -2
- package/dist/FileSelect/FileSelectDropzone/FileSelectDropzone.styles.js +3 -3
- package/dist/FileSelect/FileTokenList/FileTokenList.styles.js +3 -3
- package/dist/FileSelect/FileTokenList/FileTokenList.styles.js.map +1 -1
- package/dist/FileSelect/GridSource/GridSource.styles.js +6 -6
- package/dist/FileSelect/LocalSource/LocalSource.styles.js +4 -4
- package/dist/FileSelect/SourceItem/SourceItem.styles.js +3 -3
- package/dist/FileSelect/ThumbnailList/ThumbnailList.styles.js +6 -6
- package/dist/FileSelect/TreeSource/TreeSource.styles.js +1 -1
- package/dist/FileToken/FileToken.js +6 -11
- package/dist/FileToken/FileToken.js.map +1 -1
- package/dist/FileToken/FileToken.styles.d.ts +2 -0
- package/dist/FileToken/FileToken.styles.js +14 -4
- package/dist/FileToken/FileToken.styles.js.map +1 -1
- package/dist/FilterToken/FilterToken.styles.js +5 -5
- package/dist/FlexList/FlexList.styles.js +1 -1
- package/dist/Form/Form.js +74 -58
- package/dist/Form/Form.js.map +1 -1
- package/dist/Form/Form.styles.d.ts +0 -14
- package/dist/Form/Form.styles.js +14 -24
- package/dist/Form/Form.styles.js.map +1 -1
- package/dist/Form/Form.types.d.ts +22 -2
- package/dist/Form/Form.types.js.map +1 -1
- package/dist/Form/FormFieldTooltip.js +4 -11
- package/dist/Form/FormFieldTooltip.js.map +1 -1
- package/dist/Form/StyledFormikForm.styles.js +2 -2
- package/dist/GhostPlaceholder/GhostPlaceholder.styles.js +2 -2
- package/dist/Grid/Grid.styles.js +2 -2
- package/dist/GroupSelect/GroupSelect.js +5 -4
- package/dist/GroupSelect/GroupSelect.js.map +1 -1
- package/dist/GroupSelect/GroupSelect.styles.js +1 -1
- package/dist/GroupSelect/GroupSelect.types.d.ts +5 -5
- package/dist/GroupSelect/GroupSelect.types.js.map +1 -1
- package/dist/Input/Input.styles.js +1 -1
- package/dist/Link/Link.styles.js +1 -1
- package/dist/ListPage/ListPage.styles.js +8 -8
- package/dist/Loader/Loader.styles.js +2 -2
- package/dist/Menu/Menu.js +1 -5
- package/dist/Menu/Menu.js.map +1 -1
- package/dist/MenuImperative/MenuImperative.js +7 -10
- package/dist/MenuImperative/MenuImperative.js.map +1 -1
- package/dist/MenuImperative/MenuImperative.styles.d.ts +2 -3
- package/dist/MenuImperative/MenuImperative.styles.js +26 -25
- package/dist/MenuImperative/MenuImperative.styles.js.map +1 -1
- package/dist/MenuImperative/MenuImperative.types.d.ts +4 -0
- package/dist/MenuImperative/MenuImperative.types.js.map +1 -1
- package/dist/MenuImperative/sensors.js +16 -58
- package/dist/MenuImperative/sensors.js.map +1 -1
- package/dist/Modal/Modal.styles.js +13 -13
- package/dist/MultiSelect/MultiSelect.js +50 -28
- package/dist/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/MultiSelect/MultiSelect.styles.d.ts +1 -0
- package/dist/MultiSelect/MultiSelect.styles.js +12 -8
- package/dist/MultiSelect/MultiSelect.styles.js.map +1 -1
- package/dist/MultiSelect/MultiSelect.types.d.ts +31 -1
- package/dist/MultiSelect/MultiSelect.types.js.map +1 -1
- package/dist/NextMenu/NextMenu.styles.js +3 -3
- package/dist/Notation/Notation.js +1 -1
- package/dist/NumberInput/NumberInput.styles.js +7 -7
- package/dist/NumberInput/NumberInput.utils.js +10 -10
- package/dist/NumberInput/NumberInput.utils.js.map +1 -1
- package/dist/Overlay/OverlayArrow.styles.js +1 -1
- package/dist/OverlayTrigger/a11yPresets.js +5 -3
- package/dist/OverlayTrigger/a11yPresets.js.map +1 -1
- package/dist/PageLayout/PageLayout.js +31 -12
- package/dist/PageLayout/PageLayout.js.map +1 -1
- package/dist/PageLayout/PageLayout.styles.js +16 -16
- package/dist/PageLayout/PageLayout.types.d.ts +10 -0
- package/dist/PageLayout/PageLayout.types.js.map +1 -1
- package/dist/PageTemplate/PageFooterTemplate/PageFooterTemplate.styles.js +1 -1
- package/dist/PageTemplate/PageHeaderTemplate/PageHeaderTemplate.styles.js +3 -3
- package/dist/PageTemplate/PagePaneTemplate/PagePaneTemplate.styles.js +2 -2
- package/dist/PageTemplate/PageTemplate/PageTemplate.styles.js +3 -3
- package/dist/Pagination/Pagination.styles.js +5 -5
- package/dist/Panel/Panel.d.ts +1 -2
- package/dist/Panel/Panel.js +27 -49
- package/dist/Panel/Panel.js.map +1 -1
- package/dist/Panel/Panel.styles.js +13 -13
- package/dist/Panel/Panel.styles.js.map +1 -1
- package/dist/Panel/Panel.types.d.ts +0 -14
- package/dist/Panel/Panel.types.js.map +1 -1
- package/dist/Pill/Pill.styles.js +3 -3
- package/dist/PillSelect/PillSelect.d.ts +2 -1
- package/dist/PillSelect/PillSelect.js +63 -44
- package/dist/PillSelect/PillSelect.js.map +1 -1
- package/dist/PillSelect/PillSelect.styles.js +4 -4
- package/dist/Popover/Popover.styles.js +2 -2
- package/dist/Portal/Portal.styles.js +1 -1
- package/dist/ProgressBar/ProgressBar.styles.js +2 -2
- package/dist/RadioButton/RadioButton.styles.js +3 -3
- package/dist/Required/Required.styles.js +3 -3
- package/dist/Search/Search.styles.js +5 -5
- package/dist/Section/Section.styles.js +9 -9
- package/dist/Section/Section.styles.js.map +1 -1
- package/dist/SegmentedController/SegmentedController.js +1 -2
- package/dist/SegmentedController/SegmentedController.js.map +1 -1
- package/dist/SegmentedController/SegmentedController.styles.js +4 -4
- package/dist/Select/Select.d.ts +5 -4
- package/dist/Select/Select.js +110 -81
- package/dist/Select/Select.js.map +1 -1
- package/dist/Select/Select.styles.js +9 -9
- package/dist/Select/Select.styles.js.map +1 -1
- package/dist/Select/Select.types.d.ts +7 -0
- package/dist/Select/Select.types.js.map +1 -1
- package/dist/Select/index.d.ts +1 -1
- package/dist/Select/index.js.map +1 -1
- package/dist/Semantic/Semantic.styles.js +9 -9
- package/dist/Slider/Slider.styles.js +5 -5
- package/dist/Spinner/Spinner.styles.js +7 -7
- package/dist/SplitViewCard/SplitViewCard.js +13 -0
- package/dist/SplitViewCard/SplitViewCard.js.map +1 -1
- package/dist/SplitViewCard/SplitViewCard.styles.js +10 -10
- package/dist/SplitViewCard/SplitViewCard.styles.js.map +1 -1
- package/dist/SuperSelect/SuperSelect.presets.styles.js +1 -1
- package/dist/SuperSelect/SuperSelect.styles.js +38 -38
- package/dist/Switch/Switch.styles.js +4 -4
- package/dist/Table/Table.styles.d.ts +1 -1
- package/dist/Table/Table.styles.js +28 -28
- package/dist/TableShelf/TableShelf.styles.js +5 -5
- package/dist/Tabs/Tabs.js +23 -9
- package/dist/Tabs/Tabs.js.map +1 -1
- package/dist/Tabs/Tabs.styles.d.ts +2 -2
- package/dist/Tabs/Tabs.styles.js +26 -26
- package/dist/Tabs/Tabs.styles.js.map +1 -1
- package/dist/Tabs/Tabs.types.d.ts +6 -0
- package/dist/Tabs/Tabs.types.js.map +1 -1
- package/dist/Tearsheet/Tearsheet.styles.js +17 -28
- package/dist/Tearsheet/Tearsheet.styles.js.map +1 -1
- package/dist/Tearsheet/storybook/PageLayoutDemo.js +7 -1
- package/dist/Tearsheet/storybook/PageLayoutDemo.js.map +1 -1
- package/dist/TextArea/TextArea.styles.js +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.styles.js +1 -1
- package/dist/Thumbnail/Thumbnail.styles.js +17 -17
- package/dist/ThumbnailGrid/ThumbnailGrid.styles.js +7 -7
- package/dist/TieredSelect/TieredSelect.styles.js +9 -9
- package/dist/Tile/Tile.styles.js +8 -8
- package/dist/Title/Title.styles.js +7 -7
- package/dist/Toast/Toast.styles.js +3 -3
- package/dist/ToggleButton/ToggleButton.styles.js +1 -1
- package/dist/Token/Token.styles.js +3 -3
- package/dist/ToolHeader/ToolHeader.js +3 -1
- package/dist/ToolHeader/ToolHeader.js.map +1 -1
- package/dist/ToolHeader/ToolHeader.styles.js +6 -6
- package/dist/ToolLandingPage/ToolLandingPage.styles.js +3 -3
- package/dist/Tooltip/Tooltip.d.ts +4 -2
- package/dist/Tooltip/Tooltip.js +30 -5
- package/dist/Tooltip/Tooltip.js.map +1 -1
- package/dist/Tooltip/Tooltip.styles.d.ts +1 -0
- package/dist/Tooltip/Tooltip.styles.js +12 -4
- package/dist/Tooltip/Tooltip.styles.js.map +1 -1
- package/dist/Tooltip/Tooltip.types.d.ts +8 -0
- package/dist/Tooltip/Tooltip.types.js.map +1 -1
- package/dist/Tree/Tree.js +1 -1
- package/dist/Tree/Tree.styles.js +10 -10
- package/dist/Typeahead/Typeahead.styles.js +3 -3
- package/dist/Typography/Typography.styles.js +1 -1
- package/dist/Typography/Typography.table.story.js +2 -2
- package/dist/_hooks/I18n.d.ts +231 -48
- package/dist/_hooks/IntersectionObserver/createIntersectionObserver.d.ts +0 -1
- package/dist/_hooks/IntersectionObserver/createIntersectionObserver.js +0 -1
- package/dist/_hooks/IntersectionObserver/createIntersectionObserver.js.map +1 -1
- package/dist/_locales/de-DE.json +15 -3
- package/dist/_locales/en-AU.json +15 -3
- package/dist/_locales/en-CA.json +15 -3
- package/dist/_locales/en-GB.json +15 -3
- package/dist/_locales/en.json +2 -1
- package/dist/_locales/es-ES.json +15 -3
- package/dist/_locales/es.json +15 -3
- package/dist/_locales/fr-CA.json +15 -3
- package/dist/_locales/fr-FR.json +15 -3
- package/dist/_locales/is-IS.json +15 -3
- package/dist/_locales/it-IT.json +15 -3
- package/dist/_locales/ja-JP.json +15 -3
- package/dist/_locales/pl-PL.json +15 -3
- package/dist/_locales/pseudo.json +2 -1
- package/dist/_locales/pt-BR.json +15 -3
- package/dist/_locales/pt-PT.json +18 -6
- package/dist/_locales/th-TH.json +15 -3
- package/dist/_locales/zh-SG.json +15 -3
- package/dist/_locales/zh-TW.json +15 -3
- package/dist/_storyHelpers_/components/Deprecation.styles.js +1 -1
- package/dist/_storyHelpers_/components/StoryGrid.js +3 -3
- package/dist/_styles/mixins.d.ts +13 -1
- package/dist/_styles/mixins.js +15 -1
- package/dist/_styles/mixins.js.map +1 -1
- package/dist/_typedoc/AnchorNavigation/AnchorNavigation.types.json +3 -3
- package/dist/_typedoc/Avatar/Avatar.types.json +20 -20
- package/dist/_typedoc/AvatarStack/AvatarStack.types.json +34 -24
- package/dist/_typedoc/Badge/Badge.types.json +6 -6
- package/dist/_typedoc/Banner/Banner.types.json +15 -15
- package/dist/_typedoc/Box/Box.types.json +68 -68
- package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
- package/dist/_typedoc/Button/Button.types.json +13 -13
- package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
- package/dist/_typedoc/Card/Card.types.json +6 -6
- package/dist/_typedoc/Checkbox/Checkbox.types.json +8 -8
- package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
- package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
- package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
- package/dist/_typedoc/DetailPage/DetailPage.types.json +5 -5
- package/dist/_typedoc/Dropdown/Dropdown.types.json +37 -37
- package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +31 -31
- package/dist/_typedoc/Dropzone/Dropzone.types.json +44 -44
- package/dist/_typedoc/EmptyState/EmptyState.types.json +16 -16
- package/dist/_typedoc/FileList/FileList.types.json +9 -9
- package/dist/_typedoc/FileSelect/FileSelect.types.json +27 -27
- package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
- package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
- package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
- package/dist/_typedoc/Flex/Flex.types.json +27 -27
- package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
- package/dist/_typedoc/Form/Form.types.json +862 -762
- package/dist/_typedoc/GhostPlaceholder/GhostPlaceholder.types.json +12 -12
- package/dist/_typedoc/Grid/Grid.types.json +8 -8
- package/dist/_typedoc/GroupSelect/GroupSelect.types.json +75 -55
- package/dist/_typedoc/Input/Input.types.json +2 -2
- package/dist/_typedoc/Link/Link.types.json +1 -1
- package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
- package/dist/_typedoc/Menu/Menu.types.json +62 -62
- package/dist/_typedoc/MenuImperative/MenuImperative.types.json +77 -77
- package/dist/_typedoc/Modal/Modal.types.json +46 -46
- package/dist/_typedoc/MultiSelect/MultiSelect.types.json +52 -32
- package/dist/_typedoc/NextTile/NextTile.types.json +32 -32
- package/dist/_typedoc/Notation/Notation.types.json +4 -4
- package/dist/_typedoc/NumberInput/NumberInput.types.json +48 -48
- package/dist/_typedoc/OverlayTrigger/OverlayTrigger.types.json +33 -33
- package/dist/_typedoc/PageLayout/PageLayout.types.json +46 -26
- package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
- package/dist/_typedoc/Panel/Panel.types.json +27 -63
- package/dist/_typedoc/Pill/Pill.types.json +2 -2
- package/dist/_typedoc/PillSelect/PillSelect.types.json +49 -49
- package/dist/_typedoc/Popover/Popover.types.json +15 -15
- package/dist/_typedoc/ProgressBar/ProgressBar.types.json +7 -7
- package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
- package/dist/_typedoc/Required/Required.types.json +5 -5
- package/dist/_typedoc/Search/Search.types.json +18 -18
- package/dist/_typedoc/Section/Section.types.json +15 -15
- package/dist/_typedoc/SegmentedController/SegmentedController.types.json +21 -21
- package/dist/_typedoc/Select/Select.types.json +109 -63
- package/dist/_typedoc/SettingsPage/SettingsPage.types.json +10 -10
- package/dist/_typedoc/Slider/Slider.types.json +6 -6
- package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
- package/dist/_typedoc/SplitViewCard/SplitViewCard.types.json +14 -14
- package/dist/_typedoc/Table/Table.types.json +102 -102
- package/dist/_typedoc/Tabs/Tabs.types.json +30 -20
- package/dist/_typedoc/Tearsheet/Tearsheet.types.json +17 -17
- package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
- package/dist/_typedoc/TextEditor/TextEditor.types.json +11 -11
- package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +4 -4
- package/dist/_typedoc/Thumbnail/Thumbnail.types.json +19 -19
- package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +43 -43
- package/dist/_typedoc/TieredSelect/TieredSelect.types.json +29 -29
- package/dist/_typedoc/Tile/Tile.types.json +8 -8
- package/dist/_typedoc/Title/Title.types.json +1 -1
- package/dist/_typedoc/Toast/Toast.types.json +4 -4
- package/dist/_typedoc/ToggleButton/ToggleButton.types.json +4 -4
- package/dist/_typedoc/Token/Token.types.json +7 -7
- package/dist/_typedoc/ToolHeader/ToolHeader.types.json +10 -10
- package/dist/_typedoc/ToolLandingPage/ToolLandingPage.types.json +8 -8
- package/dist/_typedoc/Tooltip/Tooltip.types.json +25 -14
- package/dist/_typedoc/Tree/Tree.types.json +88 -88
- package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
- package/dist/_typedoc/Typography/Typography.types.json +9 -9
- package/dist/_typedoc/_utils/types.json +3 -3
- package/dist/_utils/scrollIntoView.js +21 -7
- package/dist/_utils/scrollIntoView.js.map +1 -1
- package/package.json +10 -9
- package/dist/Checkbox/CheckboxTooltip.d.ts +0 -4
- package/dist/Checkbox/CheckboxTooltip.js +0 -26
- package/dist/Checkbox/CheckboxTooltip.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.types.js","names":[],"sources":["../../src/MultiSelect/MultiSelect.types.ts"],"sourcesContent":["import type { DropdownPlacement } from '../Dropdown/Dropdown.types'\nimport type {\n MenuProps,\n MenuRef,\n Selection,\n} from '../MenuImperative/MenuImperative.types'\nimport type { OverlayTriggerProps } from '../OverlayTrigger'\n\nexport type ChangeEvent = React.ChangeEvent<HTMLInputElement>\n\nexport type OptionItem = any\n\nexport interface MultiSelectOptionProps {\n /**\n * @since 10.19.0\n */\n children?: React.ReactNode\n /**\n * @since 10.19.0\n */\n className?: string\n /**\n * @since 10.19.0\n */\n selected?: boolean\n /**\n * @since 10.19.0\n */\n suggested?: boolean\n /**\n * @since 10.19.0\n */\n disabled?: boolean\n /**\n * @since 10.19.0\n */\n value: OptionItem\n}\n\nexport interface MultiSelectOptionRendererProps extends MultiSelectOptionProps {\n /**\n * @since 10.19.0\n */\n getId: MultiSelectConfig['getId']\n\n /**\n * @since 10.19.0\n */\n getLabel: MultiSelectConfig['getLabel']\n /**\n * @since 10.19.0\n */\n qa: QaTags\n}\n\nexport interface GroupItem {\n /**\n * @since 10.19.0\n */\n id: string\n /**\n * @since 10.19.0\n */\n label: string\n}\n\nexport interface GroupHeader extends GroupItem {\n /**\n * @since 10.19.0\n */\n isGroupHeader: boolean\n}\n\nexport interface MultiSelectConfig {\n /**\n * @since 10.19.0\n */\n getGroup: (option: OptionItem) => number | string\n /**\n * @since 10.19.0\n */\n getId: (option: OptionItem) => number | string\n /**\n * @since 10.19.0\n */\n getLabel: (option: OptionItem) => string\n /**\n * @since 10.19.0\n */\n menuRef: React.RefObject<MenuRef>\n /**\n * @since 10.19.0\n */\n onChange?: (value: OptionItem[], event?: Event) => void\n /**\n * @since 10.19.0\n */\n onSearch?: (e: ChangeEvent) => void\n /**\n * @since 10.19.0\n */\n onSelect?: (selection: Selection) => void\n /**\n * @since 10.19.0\n */\n optgroups?: GroupItem[]\n /**\n * @since 10.19.0\n */\n options: OptionItem[]\n /**\n * @since 10.19.0\n */\n value: OptionItem[]\n}\n\nexport interface MultiSelectHook {\n /**\n * @since 10.19.0\n */\n ids: Set<number | string>\n /**\n * @since 10.19.0\n */\n index: number | null\n /**\n * @since 10.19.0\n */\n menuRef: React.RefObject<MenuRef>\n /**\n * @since 10.19.0\n */\n options: (OptionItem | GroupHeader)[]\n /**\n * @since 10.19.0\n */\n search: string\n /**\n * @since 10.19.0\n */\n clearToken: () => void\n /**\n * @since 10.19.0\n */\n decrementToken: () => void\n /**\n * @since 10.19.0\n */\n incrementToken: () => void\n /**\n * @since 10.19.0\n */\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void\n /**\n * @since 10.19.0\n */\n onSelect: (selection: Selection) => void\n /**\n * @since 10.19.0\n */\n removeToken: (index: number) => void\n /**\n * @since 10.19.0\n */\n domHandlers: {\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void\n }\n}\n\nexport interface GroupedOptionsProps {\n /**\n * @since 10.19.0\n */\n multiselect: MultiSelectHook\n /**\n * @since 10.19.0\n */\n groupHeaderRenderer
|
|
1
|
+
{"version":3,"file":"MultiSelect.types.js","names":[],"sources":["../../src/MultiSelect/MultiSelect.types.ts"],"sourcesContent":["import type { DropdownPlacement } from '../Dropdown/Dropdown.types'\nimport type {\n MenuProps,\n MenuRef,\n Selection,\n} from '../MenuImperative/MenuImperative.types'\nimport type { OverlayTriggerProps } from '../OverlayTrigger'\n\nexport type ChangeEvent = React.ChangeEvent<HTMLInputElement>\n\nexport type OptionItem = any\n\nexport interface MultiSelectOptionProps {\n /**\n * @since 10.19.0\n */\n children?: React.ReactNode\n /**\n * @since 10.19.0\n */\n className?: string\n /**\n * @since 10.19.0\n */\n selected?: boolean\n /**\n * @since 10.19.0\n */\n suggested?: boolean\n /**\n * @since 10.19.0\n */\n disabled?: boolean\n /**\n * @since 10.19.0\n */\n value: OptionItem\n}\n\nexport interface MultiSelectOptionRendererProps extends MultiSelectOptionProps {\n /**\n * @since 10.19.0\n */\n getId: MultiSelectConfig['getId']\n\n /**\n * @since 10.19.0\n */\n getLabel: MultiSelectConfig['getLabel']\n /**\n * @since 10.19.0\n */\n qa: QaTags\n}\n\nexport interface GroupItem {\n /**\n * @since 10.19.0\n */\n id: string\n /**\n * @since 10.19.0\n */\n label: string\n}\n\nexport interface GroupHeader extends GroupItem {\n /**\n * @since 10.19.0\n */\n isGroupHeader: boolean\n\n /**\n * @since 12.39.0\n */\n options: OptionItem[]\n}\n\nexport interface GroupHeaderProps extends GroupItem {\n /**\n * @since 12.39.0\n */\n children?: React.ReactNode\n}\n\nexport interface MultiSelectConfig {\n /**\n * @since 10.19.0\n */\n getGroup: (option: OptionItem) => number | string\n /**\n * @since 10.19.0\n */\n getId: (option: OptionItem) => number | string\n /**\n * @since 10.19.0\n */\n getLabel: (option: OptionItem) => string\n /**\n * @since 10.19.0\n */\n menuRef: React.RefObject<MenuRef>\n /**\n * @since 10.19.0\n */\n onChange?: (value: OptionItem[], event?: Event) => void\n /**\n * @since 10.19.0\n */\n onSearch?: (e: ChangeEvent) => void\n /**\n * @since 10.19.0\n */\n onSelect?: (selection: Selection) => void\n /**\n * @since 10.19.0\n */\n optgroups?: GroupItem[]\n /**\n * @since 10.19.0\n */\n options: OptionItem[]\n /**\n * @since 10.19.0\n */\n value: OptionItem[]\n}\n\nexport interface MultiSelectHook {\n /**\n * @since 10.19.0\n */\n ids: Set<number | string>\n /**\n * @since 10.19.0\n */\n index: number | null\n /**\n * @since 10.19.0\n */\n menuRef: React.RefObject<MenuRef>\n /**\n * @since 10.19.0\n */\n options: (OptionItem | GroupHeader)[]\n /**\n * @since 10.19.0\n */\n search: string\n /**\n * @since 10.19.0\n */\n clearToken: () => void\n /**\n * @since 10.19.0\n */\n decrementToken: () => void\n /**\n * @since 10.19.0\n */\n incrementToken: () => void\n /**\n * @since 10.19.0\n */\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void\n /**\n * @since 10.19.0\n */\n onSelect: (selection: Selection) => void\n /**\n * @since 10.19.0\n */\n removeToken: (index: number) => void\n /**\n * @since 10.19.0\n */\n domHandlers: {\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void\n }\n}\n\nexport interface GroupedOptionsProps {\n /**\n * @since 10.19.0\n */\n multiselect: MultiSelectHook\n /**\n * @since 10.19.0\n * @deprecated The `groupHeaderRenderer` prop is deprecated and will be removed in a future version. Use `groupRenderer` instead to customize the entire group rendering, including the header.\n * @deprecatedSince 12.39.0\n */\n groupHeaderRenderer?: (group: GroupItem) => React.ReactNode\n /**\n * @since 12.39.0\n */\n groupRenderer: (group: GroupHeaderProps) => React.ReactNode\n /**\n * @since 10.19.0\n */\n optionRenderer: (\n option: OptionItem,\n props: MultiSelectOptionRendererProps\n ) => React.ReactNode\n /**\n * @since 10.19.0\n */\n getId: MultiSelectConfig['getId']\n /**\n * @since 10.19.0\n */\n getLabel: MultiSelectConfig['getLabel']\n /**\n * @since 10.19.0\n */\n isOptionDisabled: (option: OptionItem) => boolean\n /**\n * @since 10.19.0\n */\n qa: QaTags\n}\n\nexport interface QaTags {\n /**\n * @since 10.19.0\n */\n option?: (option: OptionItem) => string\n /**\n * @since 10.19.0\n */\n token?: (option: OptionItem) => string\n /**\n * @since 10.19.0\n */\n tokenClear?: (option: OptionItem) => string\n}\n\nexport interface MultiSelectTokenRendererProps {\n /**\n * @since 10.19.0\n */\n focused: boolean\n /**\n * @since 10.19.0\n */\n disabled: boolean\n /**\n * @since 10.19.0\n */\n option: OptionItem\n /**\n * @since 10.19.0\n */\n removeToken: () => void\n /**\n * @since 10.19.0\n */\n getLabel: (opt: OptionItem) => React.ReactNode\n /**\n * @since 10.19.0\n */\n qa: QaTags\n}\n\nexport interface MultiSelectProps {\n /**\n * @since 10.19.0\n */\n afterHide?: OverlayTriggerProps['afterHide']\n /**\n * @since 10.19.0\n */\n afterShow?: OverlayTriggerProps['afterShow']\n /**\n * @since 10.19.0\n */\n beforeHide?: OverlayTriggerProps['beforeHide']\n /**\n * @since 10.19.0\n */\n beforeShow?: OverlayTriggerProps['beforeShow']\n\n /**\n * Callback for each entry in `options` to define relation to group in `groups`\n * ```\n * (option: OptionItem) => React.ReactNode\n * ```\n * @since 10.19.0\n */\n getGroup?: MultiSelectConfig['getGroup']\n\n /**\n * Callback for each entry in `options` for keying and optimizations\n * ```\n * (option: OptionItem) => number | string\n * ```\n * @since 10.19.0\n */\n getId?: MultiSelectConfig['getId']\n\n /**\n * Callback for each entry in `options` to generate the token label.\n * ```\n * (option: OptionItem) => string\n * ```\n * @since 10.19.0\n */\n getLabel?: MultiSelectConfig['getLabel']\n\n /**\n * Callback for when a user types into the multiselect input\n * ```\n * (event: KeyboardEvent) => void\n * ```\n * @since 10.19.0\n */\n onSearch?: MultiSelectConfig['onSearch']\n\n /**\n * Array of available option groups\n */\n optgroups?: MultiSelectConfig['optgroups']\n\n /**\n * Array of available options\n * @since 10.19.0\n */\n options?: MultiSelectConfig['options']\n\n /**\n * @since 10.19.0\n */\n onScrollBottom?: MenuProps['onScrollBottom']\n\n /**\n * @since 10.19.0\n */\n block?: boolean\n\n /**\n * @since 10.19.0\n */\n className?: string\n /**\n * @since 10.19.0\n */\n disabled?: boolean\n /**\n * @since 10.19.0\n */\n isOptionDisabled?: (option: OptionItem) => boolean\n /**\n * @since 10.19.0\n */\n emptyMessage?: string\n /**\n * @since 10.19.0\n */\n error?: boolean\n /**\n * Callback for rendering header for each entry in `groups`\n * ```\n * (group: GroupItem) => React.ReactNode\n * ```\n * @since 10.19.0\n * @deprecated The `groupHeaderRenderer` prop is deprecated and will be removed in a future version. Use `groupRenderer` instead to customize the entire group rendering, including the header.\n * @deprecatedSince 12.39.0\n */\n groupHeaderRenderer?: (group: GroupItem) => React.ReactNode\n /**\n * Callback for rendering header for each entry in `groups`\n * ```\n * (group: GroupHeader) => React.ReactNode\n * ```\n * @since 12.39.0\n */\n groupRenderer?: (group: GroupHeaderProps) => React.ReactNode\n /**\n * @since 10.19.0\n */\n loading?: boolean\n /**\n * @since 10.19.0\n */\n onBlur?: React.SelectHTMLAttributes<HTMLDivElement>['onBlur']\n /**\n * @since 10.19.0\n */\n onChange?: (value: OptionItem[], event?: Event) => void\n /**\n * @since 10.19.0\n */\n onFocus?: React.SelectHTMLAttributes<HTMLDivElement>['onFocus']\n /**\n * @since 10.19.0\n */\n optionRenderer?: (\n option: OptionItem,\n props?: MultiSelectOptionRendererProps\n ) => React.ReactNode\n /**\n * @since 10.19.0\n */\n placeholder?: string\n /**\n * @since 10.19.0\n */\n placement?: DropdownPlacement\n /**\n * @since 10.19.0\n */\n qa?: QaTags\n /**\n * @since 10.19.0\n */\n tabIndex?: number\n /**\n * Callback for rendering each selected value\n * ```\n * (props: TokenRendererProps) => React.ReactNode\n * ```\n * @since 10.19.0\n */\n tokenRenderer?: (props: MultiSelectTokenRendererProps) => React.ReactNode\n\n /**\n * Array of the currently selected values\n * @since 10.19.0\n */\n value?: OptionItem[]\n\n /**\n * @since 10.29.0\n */\n footer?: React.ReactNode\n\n /**\n * @since 11.4.0\n */\n ['aria-labelledby']?: string\n\n /**\n * @since 12.35.1\n */\n ['aria-describedby']?: string\n}\n"],"mappings":""}
|
|
@@ -6,14 +6,14 @@ export var optionMinHeight = 32;
|
|
|
6
6
|
export var defaultMenuHeight = 64;
|
|
7
7
|
export var StyledOptions = /*#__PURE__*/styled.div.withConfig({
|
|
8
8
|
displayName: "StyledOptions",
|
|
9
|
-
componentId: "core-
|
|
9
|
+
componentId: "core-12_40_0-beta_0__sc-3o6zya-0"
|
|
10
10
|
})([""]);
|
|
11
11
|
export var StyledItem = /*#__PURE__*/styled.div.withConfig({
|
|
12
12
|
displayName: "StyledItem",
|
|
13
|
-
componentId: "core-
|
|
13
|
+
componentId: "core-12_40_0-beta_0__sc-3o6zya-1"
|
|
14
14
|
})(["", ";padding:", "px ", "px;cursor:pointer;list-style-type:none;"], getTypographyIntent('body'), spacing.xs, spacing.md);
|
|
15
15
|
export var StyledGroup = /*#__PURE__*/styled.div.withConfig({
|
|
16
16
|
displayName: "StyledGroup",
|
|
17
|
-
componentId: "core-
|
|
17
|
+
componentId: "core-12_40_0-beta_0__sc-3o6zya-2"
|
|
18
18
|
})(["", ";padding:", "px ", "px ", "px;font-weight:", ";background:white;list-style-type:none;"], getTypographyIntent('body'), spacing.md, spacing.md, spacing.xs, typographyWeights.semibold);
|
|
19
19
|
//# sourceMappingURL=NextMenu.styles.js.map
|
|
@@ -14,7 +14,7 @@ var variantColorMap = {
|
|
|
14
14
|
};
|
|
15
15
|
var StyledNotation = /*#__PURE__*/styled.i.withConfig({
|
|
16
16
|
displayName: "StyledNotation",
|
|
17
|
-
componentId: "core-
|
|
17
|
+
componentId: "core-12_40_0-beta_0__sc-160q1m6-0"
|
|
18
18
|
})(["", " color:", ";font-style:italic;"], getTypographyIntent('small'), function (_ref) {
|
|
19
19
|
var $variant = _ref.$variant;
|
|
20
20
|
return $variant ? colors[variantColorMap[$variant]] : colors.gray15;
|
|
@@ -12,37 +12,37 @@ var inputBgColor = colors.white;
|
|
|
12
12
|
var inputBorder = "".concat(colors.gray50, " solid 1px");
|
|
13
13
|
var StyledRootAddon = /*#__PURE__*/styled.span.withConfig({
|
|
14
14
|
displayName: "StyledRootAddon",
|
|
15
|
-
componentId: "core-
|
|
15
|
+
componentId: "core-12_40_0-beta_0__sc-1782nvg-0"
|
|
16
16
|
})(["display:inline-flex;align-items:center;height:100%;position:absolute;top:0;color:", ";", ";"], function (_ref) {
|
|
17
17
|
var disabled = _ref.disabled;
|
|
18
18
|
return disabled ? colors.gray70 : colors.gray45;
|
|
19
19
|
}, getTypographyIntent('body'));
|
|
20
20
|
export var StyledPrefix = /*#__PURE__*/styled(StyledRootAddon).withConfig({
|
|
21
21
|
displayName: "StyledPrefix",
|
|
22
|
-
componentId: "core-
|
|
22
|
+
componentId: "core-12_40_0-beta_0__sc-1782nvg-1"
|
|
23
23
|
})(["left:", "px;"], spacing.md);
|
|
24
24
|
export var StyledSuffix = /*#__PURE__*/styled(StyledRootAddon).withConfig({
|
|
25
25
|
displayName: "StyledSuffix",
|
|
26
|
-
componentId: "core-
|
|
26
|
+
componentId: "core-12_40_0-beta_0__sc-1782nvg-2"
|
|
27
27
|
})(["right:", "px;"], function (_ref2) {
|
|
28
28
|
var $withIncrementer = _ref2.$withIncrementer;
|
|
29
29
|
return $withIncrementer ? spacing.md + incrementerWidth : spacing.md;
|
|
30
30
|
});
|
|
31
31
|
export var StyledIncrementerWrapper = /*#__PURE__*/styled.div.withConfig({
|
|
32
32
|
displayName: "StyledIncrementerWrapper",
|
|
33
|
-
componentId: "core-
|
|
33
|
+
componentId: "core-12_40_0-beta_0__sc-1782nvg-3"
|
|
34
34
|
})(["display:flex;flex-direction:column;position:absolute;top:1px;right:1px;height:100%;"]);
|
|
35
35
|
export var StyledIncrementerButton = /*#__PURE__*/styled.button.withConfig({
|
|
36
36
|
displayName: "StyledIncrementerButton",
|
|
37
|
-
componentId: "core-
|
|
37
|
+
componentId: "core-12_40_0-beta_0__sc-1782nvg-4"
|
|
38
38
|
})(["display:inline-flex;justify-content:center;align-items:center;width:", "px;height:calc(50% - 1px);border:none;border-radius:0px;outline:none;background-color:", ";padding:0;cursor:pointer;&:first-child,&:last-child{border-left:", ";&:disabled{border-color:", ";background-color:", ";}}&:first-child{border-top-right-radius:2px;}&:last-child{border-top:", ";border-bottom-right-radius:2px;}svg{fill:", ";}&:hover{svg{fill:", ";}}&:disabled{cursor:default;svg{fill:", ";}}"], incrementerWidth, inputBgColor, inputBorder, colors.gray50, colors.gray94, inputBorder, colors.gray45, colors.gray10, colors.gray70);
|
|
39
39
|
export var StyledInput = /*#__PURE__*/styled(Input).withConfig({
|
|
40
40
|
displayName: "StyledInput",
|
|
41
|
-
componentId: "core-
|
|
41
|
+
componentId: "core-12_40_0-beta_0__sc-1782nvg-5"
|
|
42
42
|
})([""]);
|
|
43
43
|
export var StyledWrapper = /*#__PURE__*/styled.div.withConfig({
|
|
44
44
|
displayName: "StyledWrapper",
|
|
45
|
-
componentId: "core-
|
|
45
|
+
componentId: "core-12_40_0-beta_0__sc-1782nvg-6"
|
|
46
46
|
})(["position:relative;", ""], function (_ref3) {
|
|
47
47
|
var $hasIncrementer = _ref3.$hasIncrementer;
|
|
48
48
|
return $hasIncrementer && css(["", "{padding-right:", "px;}"], StyledInput, spacing.md + incrementerWidth);
|
|
@@ -10,7 +10,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
10
10
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
11
11
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
12
12
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
13
|
-
import { NumberFormatter } from '@procore/globalization-toolkit';
|
|
13
|
+
import { getNumberSeparators, NumberFormatter, parseNumber } from '@procore/globalization-toolkit';
|
|
14
14
|
import { getFormatterLocale } from '../_utils/i18n';
|
|
15
15
|
export var defaultLocale = 'en-US';
|
|
16
16
|
export var minus = '-';
|
|
@@ -89,29 +89,29 @@ export function verifyDecimalScale(decimalScale) {
|
|
|
89
89
|
export function unformat(locale, value) {
|
|
90
90
|
var isNumericString = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
91
91
|
var isValueNegative = isValidNegative(value);
|
|
92
|
-
var
|
|
92
|
+
var formatterLocale = getFormatterLocale(locale);
|
|
93
|
+
var isRawNumeric = isNumericString || typeof value === 'number';
|
|
94
|
+
var decimal = isRawNumeric ? periodKey : getNumberSeparators(formatterLocale).decimal || periodKey;
|
|
93
95
|
var numericRegExp = new RegExp("[^0-9".concat(decimal, "]"), 'g');
|
|
94
96
|
var strValue = String(value);
|
|
95
|
-
|
|
96
|
-
// Normalize value with numeric characters
|
|
97
97
|
strValue = strValue.replace(numericRegExp, emptyString);
|
|
98
|
-
|
|
99
|
-
// Normalize "minus" sign for negatives
|
|
100
98
|
if (isValueNegative) {
|
|
101
99
|
strValue = "".concat(minus).concat(strValue);
|
|
102
100
|
}
|
|
103
|
-
|
|
104
|
-
// Normalize integer and fraction parts of the value
|
|
105
101
|
var _strValue$split = strValue.split(decimal),
|
|
106
102
|
_strValue$split2 = _toArray(_strValue$split),
|
|
107
103
|
integer = _strValue$split2[0],
|
|
108
104
|
fractions = _strValue$split2.slice(1);
|
|
109
105
|
var fraction = fractions.join(emptyString);
|
|
106
|
+
var hasDecimal = strValue.includes(decimal);
|
|
107
|
+
var parsedNumber = isRawNumeric ? parseFloat("".concat(integer).concat(periodKey).concat(fraction)) : parseNumber("".concat(integer).concat(hasDecimal ? decimal : emptyString).concat(fraction), {
|
|
108
|
+
locale: formatterLocale
|
|
109
|
+
});
|
|
110
110
|
return {
|
|
111
111
|
integer: integer,
|
|
112
|
-
decimal:
|
|
112
|
+
decimal: hasDecimal ? decimal : emptyString,
|
|
113
113
|
fraction: fraction,
|
|
114
|
-
parsedNumber:
|
|
114
|
+
parsedNumber: parsedNumber
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
117
|
export function refineIntegerFromLeadingZeroes(integer) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.utils.js","names":["NumberFormatter","getFormatterLocale","defaultLocale","minus","emptyString","leftBrace","rightBrace","backspaceKey","deleteKey","numericKeypadDel","periodKey","numericKeypadDecimal","numericKeypadKey","androidUnidentifiedKey","maxDigitLength","maxDecimalScale","commaKey","metaKeyIdentifier","controlKey","highlightAllKey","copyKey","toFixed","value","precision","isExponentialRecord","toString","includes","Number","Math","round","formatterFactory","options","error","console","concat","locale","_objectSpread","getSeparators","formatterLocale","separators","getNumberSeparators","group","decimal","isValidNegative","_value$match","String","minusRegExp","RegExp","numberOfMinuses","match","length","containsValidParenthesis","indexOf","isNegative","verifyDecimalScale","decimalScale","warn","unformat","isNumericString","arguments","undefined","isValueNegative","numericRegExp","strValue","replace","_strValue$split","split","_strValue$split2","_toArray","integer","fractions","slice","fraction","join","parsedNumber","parseFloat","refineIntegerFromLeadingZeroes","isNegativeValue","refinedFromMinus","hasLeadingZeroes","refinedFromLeadingZeroes","zeroPadded","getLengthInfo","fillDecimalScale","_unformat","integerRefinedFromLeadingZeros","getIntegerLength","accountEmptyInteger","accountEmptyNegativeInteger","accountInteger","integerLength","fractionLength","safeLength","isSafeLength","isDecimalScaleNonFillable","safeIntegerLength","safeFractionLength","min","isSafeIntegerLength","isSafeFractionLength","safelyTruncatedInteger","safelyTruncatedFraction","safelyTruncatedValue","format","fixedDecimalScale","fillDecimalScaleOnBlur","autoFilledScale","_getLengthInfo","isTruncatedBeforeFormatting","valueOfVerifiedLength","_unformat2","minimumFractionDigits","max","maximumFractionDigits","formatter","isDecimalAllowed","isEmptyValue","isMinusValue","isDecimalValue","isMinusDecimalValue","isFractionValueWithEmptyInteger","numberOfZerosToPad","preparedFraction","Array","from","_","formatNumber","number","isNaN","parseInt","formatted","isDecimalAvailable","identifyPressedKey","decimalSeparatorKey","inputType","pressedKey","prevValue","diff","find","char","i","getPressedKeyInfo","prevCursorPosition","verifiedDecimalScale","selectionStart","selectionEnd","selection","backspaceWasPressed","backspacedChar","decimalWasPressed","decimalPressedForInteger","deleteWasPressed","deletedChar","thousandsSeparatorWasBackspaced","thousandsSeparatorWasDeleted","prepareValueToFormatting","_getPressedKeyInfo","getCursorShift","deletedAsSelection","indexOfIntegerDigitToRemove","filter","getNewCursorPosition","newValue","_getLengthInfo2","prevLength","prevFractionLength","_getLengthInfo3","newLength","newSafeLength","newIntegerLength","newSafeIntegerLength","newFractionLength","newSafeFractionLength","_getPressedKeyInfo2","digitTyped","test","digitBackspaced","decimalBackspaced","defaultPosition","isPrevValueNegative","isNewValueNegative","digitTypedBeforeMinus","dotWithoutAnyDigitBefore","startsWith","minusWithDotWithoutAnyDigitBefore","leadingZeroAdded","prevIndexOfDecimalSeparator","prevCursorPositionInDecimalArea","prevCursorPositionInIntegerArea","filledIntegerScaleDigitWasChanged","isDecimalScaleFilled","filledDecimalScaleDigitWasBackspaced","filledDecimalScaleDigitWasChanged","decimalNewPosition","restructuredByDecimal","fixedDecimalScaleFirstTyping","charAt","isLeadingZerosRemovedOnPrecedingDigitBackspace","keepCursorBeforeNegativeSign","getPositionOnRestructuringByDecimal","getPositionOnDecimalBackspace","removedCharShift","valueLength","delta","anchorDigitIndexFromTheEnd","reverse","forEach","getPositionOnDelete","firstSymbolDeleted","anchorDigitIndex","cursorPosition","getPositionOnFilledIntegerScaleDigitChange","getGroupsNumber","start","end","_value$slice$match","numberOfGroupsBeforeCursorPrevValue","numberOfGroupsBeforeCursorNewValue","groupsDiffBeforeCursor","typedDigitShift","getPositionOnSelectionChange","getPasteText","beforeSelectionPartLength","afterSelectionPartLength","valueWithoutBeforePart","pasteText","_unformat3","pasteInteger","pasteDecimal","pasteFraction","refinedPasteText","refinedPasteTextLength","anchorDigitIndexRaw","anchorDigitIndexBase","anchorDigitIndexShift","anchorIndex","getCursorPositionShift","negativeToPositiveConversion","integerZeroBasedSelectionRemoval","integerPartRemoved","fractionZeroBasedSelectionRemoval","groupSelectionBackspaced","isDeltaIncrementer","getNewPosition","identicalLocales","one","two","array1","isArray","array2"],"sources":["../../src/NumberInput/NumberInput.utils.ts"],"sourcesContent":["import type { NumberOptions } from '@procore/globalization-toolkit'\nimport { NumberFormatter } from '@procore/globalization-toolkit'\nimport { getFormatterLocale } from '../_utils/i18n'\nimport type {\n CursorPosition,\n FillDecimalScaleVariant,\n InputValue,\n Locale,\n ParsedInputValue,\n PressedKey,\n Separators,\n} from './NumberInput.types'\n\nexport const defaultLocale = 'en-US'\nexport const minus = '-'\nexport const emptyString = ''\nexport const leftBrace = '('\nexport const rightBrace = ')'\nexport const backspaceKey = 'Backspace'\nexport const deleteKey = 'Delete'\nexport const numericKeypadDel = 'Del' // for delete key from numeric keypad in IE\nexport const periodKey = '.'\nexport const numericKeypadDecimal = 'Decimal' // for period key from numeric keypad in IE\nexport const numericKeypadKey = 'Del' // for delete key from numeric keypad in IE\nexport const androidUnidentifiedKey = 'Unidentified'\nexport const maxDigitLength = 15 // Safe length to avoid the loss of precision\nexport const maxDecimalScale = maxDigitLength - 1\nexport const commaKey = ','\nexport const metaKeyIdentifier = 'Meta'\nexport const controlKey = 'Control'\nexport const highlightAllKey = 'a'\nexport const copyKey = 'c'\n\n// fixes binary rounding issues (e.g: (0.615).toFixed(2) returns 0.61)\nexport function toFixed(value: number, precision: number): number {\n const isExponentialRecord = value.toString().includes('e')\n\n if (isExponentialRecord) return value\n\n return Number(\n Number(\n Math.round(Number(value + 'e' + precision)) + 'e-' + precision\n ).toFixed(precision)\n )\n}\n\nexport function formatterFactory(options: NumberOptions): NumberFormatter {\n try {\n return new NumberFormatter(options)\n } catch (error) {\n console.error(\n `Deprecated. @procore/core-react Intl.NumberFormat error for locale ${options.locale}. Will fall back to en-US. In a future major, this will become an error and not provide a fallback.`,\n error\n )\n return new NumberFormatter({ ...options, locale: 'en-US' })\n }\n}\n\nexport function getSeparators(locale: Locale): Separators {\n const formatterLocale = getFormatterLocale(locale as string)\n const separators = new NumberFormatter({\n locale: formatterLocale,\n }).getNumberSeparators()\n\n return { group: separators.group, decimal: separators.decimal || '' }\n}\n\n// Check if a valid numeric string is a negative value\nexport const isValidNegative = (value: InputValue) => {\n value = String(value)\n\n const minusRegExp = new RegExp(`${minus}`, 'g')\n const numberOfMinuses = value.match(minusRegExp)?.length\n const containsValidParenthesis =\n value.indexOf(leftBrace) === 0 &&\n value.indexOf(rightBrace) === value.length - 1\n const isNegative =\n (numberOfMinuses === 1 && !containsValidParenthesis) ||\n (!numberOfMinuses && containsValidParenthesis)\n return isNegative\n}\n\nexport function verifyDecimalScale(decimalScale: boolean | number): number {\n if (decimalScale === true) {\n return maxDecimalScale\n }\n if (decimalScale === false) {\n return 0\n }\n if (decimalScale < 0) {\n console.warn(\n `WARNING: Decimal scale (${decimalScale}) is out of range. It was reset to 0. Possible values are from 0 to ${maxDecimalScale}.`\n )\n return 0\n }\n if (decimalScale > maxDecimalScale) {\n console.warn(\n `WARNING: Decimal scale (${decimalScale}) is out of range. It was reset to the max value of ${maxDecimalScale}. Possible values are from 0 to ${maxDecimalScale}.`\n )\n return maxDecimalScale\n }\n return decimalScale\n}\n\nexport function unformat(\n locale: Locale,\n value: InputValue,\n isNumericString = false\n): ParsedInputValue {\n const isValueNegative = isValidNegative(value)\n const decimal =\n isNumericString || typeof value === 'number'\n ? periodKey\n : getSeparators(locale).decimal\n const numericRegExp = new RegExp(`[^0-9${decimal}]`, 'g')\n\n let strValue = String(value)\n\n // Normalize value with numeric characters\n strValue = strValue.replace(numericRegExp, emptyString)\n\n // Normalize \"minus\" sign for negatives\n if (isValueNegative) {\n strValue = `${minus}${strValue}`\n }\n\n // Normalize integer and fraction parts of the value\n const [integer, ...fractions] = strValue.split(decimal)\n const fraction = fractions.join(emptyString)\n\n return {\n integer,\n decimal: strValue.includes(decimal) ? decimal : emptyString,\n fraction,\n parsedNumber: parseFloat(`${integer}${periodKey}${fraction}`),\n }\n}\n\nexport function refineIntegerFromLeadingZeroes(integer: string) {\n const isNegativeValue = isValidNegative(integer)\n const refinedFromMinus = integer.replace(minus, emptyString)\n const hasLeadingZeroes = refinedFromMinus.slice(0, 1)\n const refinedFromLeadingZeroes = refinedFromMinus.replace(/^0+/, emptyString)\n const zeroPadded =\n hasLeadingZeroes && refinedFromLeadingZeroes === emptyString\n\n return `${isNegativeValue ? minus : emptyString}${\n zeroPadded ? 0 : refinedFromLeadingZeroes\n }`\n}\n\nexport function getLengthInfo(\n locale: Locale,\n value: InputValue,\n decimalScale: number = 0,\n fillDecimalScale: FillDecimalScaleVariant = 'none',\n isNumericString = false\n) {\n const isNegativeValue = isValidNegative(value)\n\n const { integer, decimal, fraction } = unformat(\n locale,\n value,\n isNumericString\n )\n\n const integerRefinedFromLeadingZeros = refineIntegerFromLeadingZeroes(integer)\n\n const getIntegerLength = () => {\n const accountEmptyInteger =\n integer === emptyString && decimal && fraction.length > 0\n\n if (accountEmptyInteger) return 1\n\n const accountEmptyNegativeInteger =\n integer === minus && decimal && fraction.length > 0\n\n if (accountEmptyNegativeInteger) return 2\n\n const accountInteger =\n integer.length > 0 && integer !== emptyString && integer !== minus\n\n if (accountInteger) return integerRefinedFromLeadingZeros.length\n\n return 0\n }\n\n const integerLength = getIntegerLength()\n const fractionLength = fraction.length\n const length = integerLength + fractionLength\n\n const safeLength = maxDigitLength + (isNegativeValue ? 1 : 0)\n const isSafeLength = safeLength - length > -1\n\n const isDecimalScaleNonFillable = fillDecimalScale === 'none'\n\n const safeIntegerLength = isDecimalScaleNonFillable\n ? safeLength\n : safeLength - decimalScale\n const safeFractionLength = isDecimalScaleNonFillable\n ? Math.min(\n safeLength -\n integerRefinedFromLeadingZeros.slice(0, safeIntegerLength).length,\n decimalScale\n )\n : decimalScale\n\n const isSafeIntegerLength = safeIntegerLength - integerLength > -1\n const isSafeFractionLength = safeFractionLength - fractionLength > -1\n\n const safelyTruncatedInteger = isSafeIntegerLength\n ? integerRefinedFromLeadingZeros\n : integerRefinedFromLeadingZeros.slice(0, safeIntegerLength)\n const safelyTruncatedFraction = isSafeFractionLength\n ? fraction\n : fraction.slice(0, safeFractionLength)\n\n const safelyTruncatedValue = `${safelyTruncatedInteger}${decimal}${safelyTruncatedFraction}`\n\n return {\n length,\n safeLength,\n isSafeLength,\n safelyTruncatedValue,\n integerLength,\n safeIntegerLength,\n isSafeIntegerLength,\n fractionLength,\n safeFractionLength,\n isSafeFractionLength,\n }\n}\n\nexport function format(\n locale: Locale,\n decimalScale: number,\n fillDecimalScale: FillDecimalScaleVariant,\n value: InputValue,\n isNumericString = false\n): string {\n const fixedDecimalScale = fillDecimalScale === 'always'\n\n const fillDecimalScaleOnBlur = fillDecimalScale === 'onBlur'\n\n const autoFilledScale = fixedDecimalScale || fillDecimalScaleOnBlur\n\n const { length, safeLength, isSafeLength, safelyTruncatedValue } =\n getLengthInfo(\n locale,\n value,\n decimalScale,\n fillDecimalScale,\n isNumericString\n )\n\n const isTruncatedBeforeFormatting = autoFilledScale || !isSafeLength\n\n const valueOfVerifiedLength = isTruncatedBeforeFormatting\n ? safelyTruncatedValue\n : value\n\n const { integer, decimal, fraction } = unformat(\n locale,\n valueOfVerifiedLength,\n isNumericString || typeof value === 'number'\n )\n\n const options = {\n minimumFractionDigits: fixedDecimalScale\n ? decimalScale\n : Math.min(Math.max(0, fraction?.length || 0), decimalScale),\n maximumFractionDigits: decimalScale,\n }\n\n const formatterLocale = getFormatterLocale(locale as string)\n const formatter = formatterFactory({ locale: formatterLocale, ...options })\n\n const isDecimalAllowed = decimalScale > 0\n\n const isEmptyValue = integer === emptyString && !decimal && !fraction\n\n if (isEmptyValue) return emptyString\n\n const isMinusValue = integer === minus && !decimal && !fraction\n\n if (isMinusValue) return minus\n\n const isDecimalValue =\n integer === emptyString && decimal && !fraction && !fixedDecimalScale\n\n if (isDecimalValue) return isDecimalAllowed ? decimal : emptyString\n\n const isMinusDecimalValue =\n integer === minus && decimal && !fraction && !fixedDecimalScale\n\n if (isMinusDecimalValue)\n return `${minus}${isDecimalAllowed ? decimal : emptyString}`\n\n const isFractionValueWithEmptyInteger =\n (integer === minus || integer === emptyString) &&\n decimal &&\n (fraction || (!fraction && fixedDecimalScale))\n\n if (isFractionValueWithEmptyInteger) {\n const numberOfZerosToPad = decimalScale - fraction.length\n\n const preparedFraction =\n numberOfZerosToPad > 0 && fixedDecimalScale\n ? fraction.concat(\n Array.from({ length: numberOfZerosToPad }, (_) => '0').join(\n emptyString\n )\n )\n : fraction.slice(0, decimalScale)\n\n return `${integer}${\n isDecimalAllowed ? decimal : emptyString\n }${preparedFraction}`\n }\n\n if (typeof valueOfVerifiedLength === 'number') {\n return formatter.formatNumber(valueOfVerifiedLength)\n }\n\n if (fraction) {\n const number = parseFloat(\n `${integer}${periodKey}${fraction.slice(\n 0,\n options.maximumFractionDigits\n )}`\n )\n\n if (isNaN(number)) return emptyString\n\n return formatter.formatNumber(number)\n }\n\n if (integer) {\n const number = parseInt(integer, 10)\n\n if (isNaN(number)) return emptyString\n\n const formatted = formatter.formatNumber(number)\n const isDecimalAllowed = !(\n options.minimumFractionDigits === 0 && options.maximumFractionDigits === 0\n )\n const isDecimalAvailable =\n decimal && !formatted.includes(decimal) && length < safeLength\n\n return isDecimalAllowed && isDecimalAvailable\n ? `${formatted}${decimal}`\n : formatted\n }\n\n return emptyString\n}\n\nexport function identifyPressedKey(\n decimalSeparatorKey: string,\n inputType: string,\n pressedKey: PressedKey,\n prevValue: string,\n value: string\n) {\n if (pressedKey !== androidUnidentifiedKey) return pressedKey\n\n if (inputType === 'deleteContentBackward') return backspaceKey\n\n if (inputType === 'insertText') {\n const diff = value\n .split(emptyString)\n .find(\n (char: string, i: number) => char !== prevValue.split(emptyString)[i]\n )\n\n switch (diff) {\n case decimalSeparatorKey:\n return decimalSeparatorKey\n case minus:\n return minus\n default:\n return pressedKey\n }\n }\n\n return pressedKey\n}\n\nexport function getPressedKeyInfo(\n decimalSeparatorKey: string,\n group: string,\n pressedKey: PressedKey,\n prevCursorPosition: CursorPosition,\n prevValue: string,\n verifiedDecimalScale: number\n) {\n const { selectionStart, selectionEnd, selection } = prevCursorPosition\n\n const backspaceWasPressed = pressedKey === backspaceKey\n const backspacedChar = backspaceWasPressed\n ? prevValue.slice(selectionStart + (selection ? 0 : -1), selectionEnd)\n : null\n const decimalWasPressed = [\n decimalSeparatorKey,\n numericKeypadDecimal,\n ].includes(pressedKey as string)\n const decimalPressedForInteger =\n decimalWasPressed && verifiedDecimalScale === 0\n const deleteWasPressed = [deleteKey, numericKeypadDel].includes(\n pressedKey as string\n )\n const deletedChar = deleteWasPressed\n ? prevValue.slice(selectionStart, selectionEnd + (selection ? 0 : 1))\n : null\n\n const thousandsSeparatorWasBackspaced =\n backspaceWasPressed && backspacedChar === group\n const thousandsSeparatorWasDeleted = deleteWasPressed && deletedChar === group\n\n return {\n backspaceWasPressed,\n backspacedChar,\n decimalWasPressed,\n decimalPressedForInteger,\n deleteWasPressed,\n deletedChar,\n thousandsSeparatorWasBackspaced,\n thousandsSeparatorWasDeleted,\n }\n}\n\nexport function prepareValueToFormatting(\n decimal: string,\n decimalSeparatorKey: string,\n group: string,\n pressedKey: PressedKey,\n prevCursorPosition: CursorPosition,\n prevValue: string,\n verifiedDecimalScale: number,\n value: string\n) {\n const {\n decimalPressedForInteger,\n thousandsSeparatorWasBackspaced,\n thousandsSeparatorWasDeleted,\n } = getPressedKeyInfo(\n decimalSeparatorKey,\n group,\n pressedKey,\n prevCursorPosition,\n prevValue,\n verifiedDecimalScale\n )\n\n // Remove preceding/following integer digit instead of thousands separator\n if (thousandsSeparatorWasBackspaced || thousandsSeparatorWasDeleted) {\n const { selectionEnd, selection } = prevCursorPosition\n\n const getCursorShift = () => {\n if (thousandsSeparatorWasDeleted) {\n const deletedAsSelection = selection === group\n return deletedAsSelection ? 0 : 1\n }\n if (thousandsSeparatorWasBackspaced) return -2\n return 0\n }\n\n const indexOfIntegerDigitToRemove = selectionEnd + getCursorShift()\n\n return prevValue\n .split(emptyString)\n .filter((_, i) => i !== indexOfIntegerDigitToRemove)\n .join(emptyString)\n }\n\n // Ignore typing decimal separator for integer\n if (decimalPressedForInteger) {\n return value.replace(new RegExp(`[${decimal}]`, 'g'), emptyString)\n }\n\n return value\n}\n\nexport function getNewCursorPosition(\n decimal: string,\n decimalSeparatorKey: string,\n group: string,\n newValue: string,\n pressedKey: PressedKey,\n prevCursorPosition: CursorPosition,\n prevValue: string,\n value: string,\n verifiedDecimalScale: number,\n locale: Locale,\n fillDecimalScale: FillDecimalScaleVariant\n) {\n const fixedDecimalScale = fillDecimalScale === 'always'\n\n const { length: prevLength, fractionLength: prevFractionLength } =\n getLengthInfo(locale, prevValue, verifiedDecimalScale, fillDecimalScale)\n\n const {\n length: newLength,\n safeLength: newSafeLength,\n integerLength: newIntegerLength,\n safeIntegerLength: newSafeIntegerLength,\n fractionLength: newFractionLength,\n safeFractionLength: newSafeFractionLength,\n } = getLengthInfo(locale, newValue, verifiedDecimalScale, fillDecimalScale)\n\n const {\n backspaceWasPressed,\n backspacedChar,\n decimalWasPressed,\n deleteWasPressed,\n thousandsSeparatorWasBackspaced,\n } = getPressedKeyInfo(\n decimalSeparatorKey,\n group,\n pressedKey,\n prevCursorPosition,\n prevValue,\n verifiedDecimalScale\n )\n\n const digitTyped = pressedKey && /\\d/g.test(pressedKey)\n const digitBackspaced =\n backspaceWasPressed && backspacedChar && /\\d/g.test(backspacedChar)\n const decimalBackspaced = backspaceWasPressed && backspacedChar === decimal\n\n const { selectionStart, selectionEnd, selection } = prevCursorPosition\n\n const defaultPosition = Math.max(\n selectionEnd + (newValue.length - prevValue.length),\n 0\n )\n\n const isPrevValueNegative = isValidNegative(prevValue)\n\n const isNewValueNegative = isValidNegative(newValue)\n\n const isDecimalAllowed = verifiedDecimalScale > 0\n\n const digitTypedBeforeMinus =\n isPrevValueNegative && selectionEnd === 0 && digitTyped\n\n const dotWithoutAnyDigitBefore = value.startsWith(decimal) && digitTyped\n const minusWithDotWithoutAnyDigitBefore =\n value.startsWith(minus + decimal) && digitTyped\n\n const leadingZeroAdded =\n pressedKey === '0' && selectionEnd === (isPrevValueNegative ? 1 : 0)\n\n const prevIndexOfDecimalSeparator = prevValue.indexOf(decimal)\n const prevCursorPositionInDecimalArea =\n prevIndexOfDecimalSeparator > -1 &&\n prevIndexOfDecimalSeparator < selectionEnd\n const prevCursorPositionInIntegerArea =\n prevIndexOfDecimalSeparator === -1 ||\n prevIndexOfDecimalSeparator >= selectionEnd\n\n const filledIntegerScaleDigitWasChanged =\n digitTyped &&\n prevCursorPositionInIntegerArea &&\n selectionEnd !== prevValue.length &&\n newLength === prevLength &&\n (newLength === newSafeLength || newIntegerLength === newSafeIntegerLength)\n\n const isDecimalScaleFilled =\n isDecimalAllowed &&\n newFractionLength === prevFractionLength &&\n newFractionLength === newSafeFractionLength\n\n const filledDecimalScaleDigitWasBackspaced =\n isDecimalScaleFilled && prevCursorPositionInDecimalArea && digitBackspaced\n\n const filledDecimalScaleDigitWasChanged =\n isDecimalScaleFilled && prevCursorPositionInDecimalArea && digitTyped\n\n // Manage cursor when decimalSeparator typed in a new place of a decimal-allowed number\n const decimalNewPosition = newValue.indexOf(decimal)\n const restructuredByDecimal =\n isDecimalAllowed && decimalWasPressed && decimalNewPosition > -1\n\n // Preserve cursor after first typed digit and before decimal separator\n const fixedDecimalScaleFirstTyping =\n fixedDecimalScale &&\n value.length === (isNewValueNegative ? 2 : 1) &&\n newValue.charAt(isNewValueNegative ? 1 : 0) === pressedKey\n\n // Preserve cursor before \"negative\" sign\n const isLeadingZerosRemovedOnPrecedingDigitBackspace =\n backspaceWasPressed &&\n defaultPosition === 0 &&\n selectionEnd - defaultPosition > 1\n const keepCursorBeforeNegativeSign =\n isNewValueNegative && isLeadingZerosRemovedOnPrecedingDigitBackspace\n\n const getPositionOnRestructuringByDecimal = () => {\n return prevCursorPositionInDecimalArea\n ? newValue.length\n : decimalNewPosition + 1\n }\n\n const getPositionOnDecimalBackspace = () => {\n const removedCharShift = 1\n const valueLength = newValue.length\n\n if (prevFractionLength === 0) {\n return valueLength\n }\n\n let delta = 0\n let anchorDigitIndexFromTheEnd = 0\n\n newValue\n .split(emptyString)\n .reverse()\n .forEach((char, i) => {\n if (char === group) {\n delta++\n }\n if (i - delta === prevFractionLength - 1) {\n anchorDigitIndexFromTheEnd = i\n }\n })\n\n return valueLength - removedCharShift - anchorDigitIndexFromTheEnd\n }\n\n const getPositionOnDelete = () => {\n const firstSymbolDeleted = selectionEnd === 0\n\n if (firstSymbolDeleted) {\n return 0\n }\n\n const removedCharShift = 1\n const anchorDigitIndex =\n prevValue\n .slice(0, selectionEnd)\n .replace(new RegExp(`[${group}]`, 'g'), emptyString).length - 1\n\n let delta = 0\n let cursorPosition = 0\n\n newValue.split(emptyString).forEach((char, i) => {\n if (char === group) {\n delta++\n }\n if (i - delta === anchorDigitIndex) {\n cursorPosition = i\n }\n })\n\n return cursorPosition + removedCharShift\n }\n\n const getPositionOnFilledIntegerScaleDigitChange = () => {\n const getGroupsNumber = (value: string, start?: number, end?: number) => {\n return (\n value.slice(start, end).match(new RegExp(`[${group}]`, 'g'))?.length ||\n 0\n )\n }\n\n const numberOfGroupsBeforeCursorPrevValue = getGroupsNumber(\n prevValue,\n 0,\n selectionEnd\n )\n const numberOfGroupsBeforeCursorNewValue = getGroupsNumber(\n newValue,\n 0,\n selectionEnd + 1\n )\n const groupsDiffBeforeCursor =\n numberOfGroupsBeforeCursorNewValue - numberOfGroupsBeforeCursorPrevValue\n\n const typedDigitShift = leadingZeroAdded ? 0 : 1\n\n return selectionEnd + groupsDiffBeforeCursor + typedDigitShift\n }\n\n const getPositionOnSelectionChange = () => {\n if (restructuredByDecimal) return getPositionOnRestructuringByDecimal()\n\n const getPasteText = () => {\n const beforeSelectionPartLength = prevValue.slice(\n 0,\n selectionStart\n ).length\n const afterSelectionPartLength = prevValue.slice(selectionEnd).length\n const valueWithoutBeforePart = value.slice(beforeSelectionPartLength)\n\n const pasteText = valueWithoutBeforePart.slice(\n 0,\n valueWithoutBeforePart.length - afterSelectionPartLength\n )\n\n return pasteText\n }\n\n const {\n integer: pasteInteger,\n decimal: pasteDecimal,\n fraction: pasteFraction,\n } = unformat(locale, getPasteText())\n\n const refinedPasteText = `${\n selectionStart === 0\n ? refineIntegerFromLeadingZeroes(pasteInteger)\n : pasteInteger\n }${pasteDecimal}${pasteFraction}`\n\n const refinedPasteTextLength = refinedPasteText.length\n\n const anchorDigitIndexRaw =\n prevValue\n .slice(0, selectionStart)\n .replace(new RegExp(`[${group}${decimal}]`, 'g'), emptyString).length -\n 1\n\n const anchorDigitIndexBase =\n anchorDigitIndexRaw > -1 ? anchorDigitIndexRaw : 0\n\n const anchorDigitIndexShift =\n anchorDigitIndexRaw > -1\n ? refinedPasteTextLength\n : Math.max(refinedPasteTextLength - 1, 0)\n\n const anchorIndex = anchorDigitIndexBase + anchorDigitIndexShift\n\n const getCursorPositionShift = () => {\n const negativeToPositiveConversion =\n isValidNegative(refinedPasteText) && isPrevValueNegative\n\n const integerZeroBasedSelectionRemoval =\n refinedPasteTextLength === 0 && selectionStart === 0\n\n const integerPartRemoved =\n integerZeroBasedSelectionRemoval &&\n selectionEnd === prevIndexOfDecimalSeparator\n\n const fractionZeroBasedSelectionRemoval =\n (refinedPasteTextLength === 0 || refinedPasteText === minus) &&\n selectionStart === prevIndexOfDecimalSeparator + 1\n\n const groupSelectionBackspaced =\n selection === group && thousandsSeparatorWasBackspaced\n\n if (negativeToPositiveConversion || integerPartRemoved) return -1\n if (integerZeroBasedSelectionRemoval || groupSelectionBackspaced) return 0\n if (fractionZeroBasedSelectionRemoval) return 2\n\n return 1\n }\n\n let delta = 0\n let cursorPosition = 0\n\n for (let i = 0; i < newValue.length; i++) {\n const char = newValue.charAt(i)\n\n const isDeltaIncrementer =\n char === group || (char === decimal && !pasteDecimal)\n\n if (isDeltaIncrementer) {\n delta++\n }\n\n if (i - delta === anchorIndex) {\n cursorPosition = i + getCursorPositionShift()\n break\n }\n\n if (i + 1 === newValue.length) {\n cursorPosition = newValue.length\n }\n }\n\n return cursorPosition\n }\n\n const getNewPosition = () => {\n if (selection) {\n return getPositionOnSelectionChange()\n }\n\n if (digitTypedBeforeMinus) {\n return 2\n }\n if (dotWithoutAnyDigitBefore) {\n return 3\n }\n if (minusWithDotWithoutAnyDigitBefore) {\n return 4\n }\n\n if (filledIntegerScaleDigitWasChanged) {\n return getPositionOnFilledIntegerScaleDigitChange()\n }\n\n if (deleteWasPressed) {\n return getPositionOnDelete()\n }\n\n if (decimalBackspaced) {\n return getPositionOnDecimalBackspace()\n }\n\n if (filledDecimalScaleDigitWasBackspaced) {\n return selectionEnd - 1\n }\n\n if (filledDecimalScaleDigitWasChanged) {\n return selectionEnd + 1\n }\n\n if (restructuredByDecimal) {\n return getPositionOnRestructuringByDecimal()\n }\n\n if (fixedDecimalScaleFirstTyping) {\n return isNewValueNegative ? 2 : 1\n }\n\n if (keepCursorBeforeNegativeSign) {\n return 1\n }\n\n return defaultPosition\n }\n\n return getNewPosition()\n}\n\nexport function identicalLocales(one: Locale, two: Locale) {\n const array1 = Array.isArray(one) ? one : [one]\n const array2 = Array.isArray(two) ? two : [two]\n\n return array1.join() === array2.join()\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NumberInput.utils.js","names":["getNumberSeparators","NumberFormatter","parseNumber","getFormatterLocale","defaultLocale","minus","emptyString","leftBrace","rightBrace","backspaceKey","deleteKey","numericKeypadDel","periodKey","numericKeypadDecimal","numericKeypadKey","androidUnidentifiedKey","maxDigitLength","maxDecimalScale","commaKey","metaKeyIdentifier","controlKey","highlightAllKey","copyKey","toFixed","value","precision","isExponentialRecord","toString","includes","Number","Math","round","formatterFactory","options","error","console","concat","locale","_objectSpread","getSeparators","formatterLocale","separators","group","decimal","isValidNegative","_value$match","String","minusRegExp","RegExp","numberOfMinuses","match","length","containsValidParenthesis","indexOf","isNegative","verifyDecimalScale","decimalScale","warn","unformat","isNumericString","arguments","undefined","isValueNegative","isRawNumeric","numericRegExp","strValue","replace","_strValue$split","split","_strValue$split2","_toArray","integer","fractions","slice","fraction","join","hasDecimal","parsedNumber","parseFloat","refineIntegerFromLeadingZeroes","isNegativeValue","refinedFromMinus","hasLeadingZeroes","refinedFromLeadingZeroes","zeroPadded","getLengthInfo","fillDecimalScale","_unformat","integerRefinedFromLeadingZeros","getIntegerLength","accountEmptyInteger","accountEmptyNegativeInteger","accountInteger","integerLength","fractionLength","safeLength","isSafeLength","isDecimalScaleNonFillable","safeIntegerLength","safeFractionLength","min","isSafeIntegerLength","isSafeFractionLength","safelyTruncatedInteger","safelyTruncatedFraction","safelyTruncatedValue","format","fixedDecimalScale","fillDecimalScaleOnBlur","autoFilledScale","_getLengthInfo","isTruncatedBeforeFormatting","valueOfVerifiedLength","_unformat2","minimumFractionDigits","max","maximumFractionDigits","formatter","isDecimalAllowed","isEmptyValue","isMinusValue","isDecimalValue","isMinusDecimalValue","isFractionValueWithEmptyInteger","numberOfZerosToPad","preparedFraction","Array","from","_","formatNumber","number","isNaN","parseInt","formatted","isDecimalAvailable","identifyPressedKey","decimalSeparatorKey","inputType","pressedKey","prevValue","diff","find","char","i","getPressedKeyInfo","prevCursorPosition","verifiedDecimalScale","selectionStart","selectionEnd","selection","backspaceWasPressed","backspacedChar","decimalWasPressed","decimalPressedForInteger","deleteWasPressed","deletedChar","thousandsSeparatorWasBackspaced","thousandsSeparatorWasDeleted","prepareValueToFormatting","_getPressedKeyInfo","getCursorShift","deletedAsSelection","indexOfIntegerDigitToRemove","filter","getNewCursorPosition","newValue","_getLengthInfo2","prevLength","prevFractionLength","_getLengthInfo3","newLength","newSafeLength","newIntegerLength","newSafeIntegerLength","newFractionLength","newSafeFractionLength","_getPressedKeyInfo2","digitTyped","test","digitBackspaced","decimalBackspaced","defaultPosition","isPrevValueNegative","isNewValueNegative","digitTypedBeforeMinus","dotWithoutAnyDigitBefore","startsWith","minusWithDotWithoutAnyDigitBefore","leadingZeroAdded","prevIndexOfDecimalSeparator","prevCursorPositionInDecimalArea","prevCursorPositionInIntegerArea","filledIntegerScaleDigitWasChanged","isDecimalScaleFilled","filledDecimalScaleDigitWasBackspaced","filledDecimalScaleDigitWasChanged","decimalNewPosition","restructuredByDecimal","fixedDecimalScaleFirstTyping","charAt","isLeadingZerosRemovedOnPrecedingDigitBackspace","keepCursorBeforeNegativeSign","getPositionOnRestructuringByDecimal","getPositionOnDecimalBackspace","removedCharShift","valueLength","delta","anchorDigitIndexFromTheEnd","reverse","forEach","getPositionOnDelete","firstSymbolDeleted","anchorDigitIndex","cursorPosition","getPositionOnFilledIntegerScaleDigitChange","getGroupsNumber","start","end","_value$slice$match","numberOfGroupsBeforeCursorPrevValue","numberOfGroupsBeforeCursorNewValue","groupsDiffBeforeCursor","typedDigitShift","getPositionOnSelectionChange","getPasteText","beforeSelectionPartLength","afterSelectionPartLength","valueWithoutBeforePart","pasteText","_unformat3","pasteInteger","pasteDecimal","pasteFraction","refinedPasteText","refinedPasteTextLength","anchorDigitIndexRaw","anchorDigitIndexBase","anchorDigitIndexShift","anchorIndex","getCursorPositionShift","negativeToPositiveConversion","integerZeroBasedSelectionRemoval","integerPartRemoved","fractionZeroBasedSelectionRemoval","groupSelectionBackspaced","isDeltaIncrementer","getNewPosition","identicalLocales","one","two","array1","isArray","array2"],"sources":["../../src/NumberInput/NumberInput.utils.ts"],"sourcesContent":["import type { NumberOptions } from '@procore/globalization-toolkit'\nimport {\n getNumberSeparators,\n NumberFormatter,\n parseNumber,\n} from '@procore/globalization-toolkit'\nimport { getFormatterLocale } from '../_utils/i18n'\nimport type {\n CursorPosition,\n FillDecimalScaleVariant,\n InputValue,\n Locale,\n ParsedInputValue,\n PressedKey,\n Separators,\n} from './NumberInput.types'\n\nexport const defaultLocale = 'en-US'\nexport const minus = '-'\nexport const emptyString = ''\nexport const leftBrace = '('\nexport const rightBrace = ')'\nexport const backspaceKey = 'Backspace'\nexport const deleteKey = 'Delete'\nexport const numericKeypadDel = 'Del' // for delete key from numeric keypad in IE\nexport const periodKey = '.'\nexport const numericKeypadDecimal = 'Decimal' // for period key from numeric keypad in IE\nexport const numericKeypadKey = 'Del' // for delete key from numeric keypad in IE\nexport const androidUnidentifiedKey = 'Unidentified'\nexport const maxDigitLength = 15 // Safe length to avoid the loss of precision\nexport const maxDecimalScale = maxDigitLength - 1\nexport const commaKey = ','\nexport const metaKeyIdentifier = 'Meta'\nexport const controlKey = 'Control'\nexport const highlightAllKey = 'a'\nexport const copyKey = 'c'\n\n// fixes binary rounding issues (e.g: (0.615).toFixed(2) returns 0.61)\nexport function toFixed(value: number, precision: number): number {\n const isExponentialRecord = value.toString().includes('e')\n\n if (isExponentialRecord) return value\n\n return Number(\n Number(\n Math.round(Number(value + 'e' + precision)) + 'e-' + precision\n ).toFixed(precision)\n )\n}\n\nexport function formatterFactory(options: NumberOptions): NumberFormatter {\n try {\n return new NumberFormatter(options)\n } catch (error) {\n console.error(\n `Deprecated. @procore/core-react Intl.NumberFormat error for locale ${options.locale}. Will fall back to en-US. In a future major, this will become an error and not provide a fallback.`,\n error\n )\n return new NumberFormatter({ ...options, locale: 'en-US' })\n }\n}\n\nexport function getSeparators(locale: Locale): Separators {\n const formatterLocale = getFormatterLocale(locale as string)\n const separators = new NumberFormatter({\n locale: formatterLocale,\n }).getNumberSeparators()\n\n return { group: separators.group, decimal: separators.decimal || '' }\n}\n\n// Check if a valid numeric string is a negative value\nexport const isValidNegative = (value: InputValue) => {\n value = String(value)\n\n const minusRegExp = new RegExp(`${minus}`, 'g')\n const numberOfMinuses = value.match(minusRegExp)?.length\n const containsValidParenthesis =\n value.indexOf(leftBrace) === 0 &&\n value.indexOf(rightBrace) === value.length - 1\n const isNegative =\n (numberOfMinuses === 1 && !containsValidParenthesis) ||\n (!numberOfMinuses && containsValidParenthesis)\n return isNegative\n}\n\nexport function verifyDecimalScale(decimalScale: boolean | number): number {\n if (decimalScale === true) {\n return maxDecimalScale\n }\n if (decimalScale === false) {\n return 0\n }\n if (decimalScale < 0) {\n console.warn(\n `WARNING: Decimal scale (${decimalScale}) is out of range. It was reset to 0. Possible values are from 0 to ${maxDecimalScale}.`\n )\n return 0\n }\n if (decimalScale > maxDecimalScale) {\n console.warn(\n `WARNING: Decimal scale (${decimalScale}) is out of range. It was reset to the max value of ${maxDecimalScale}. Possible values are from 0 to ${maxDecimalScale}.`\n )\n return maxDecimalScale\n }\n return decimalScale\n}\n\nexport function unformat(\n locale: Locale,\n value: InputValue,\n isNumericString = false\n): ParsedInputValue {\n const isValueNegative = isValidNegative(value)\n const formatterLocale = getFormatterLocale(locale as string)\n const isRawNumeric = isNumericString || typeof value === 'number'\n const decimal = isRawNumeric\n ? periodKey\n : getNumberSeparators(formatterLocale).decimal || periodKey\n const numericRegExp = new RegExp(`[^0-9${decimal}]`, 'g')\n\n let strValue = String(value)\n\n strValue = strValue.replace(numericRegExp, emptyString)\n\n if (isValueNegative) {\n strValue = `${minus}${strValue}`\n }\n\n const [integer, ...fractions] = strValue.split(decimal)\n const fraction = fractions.join(emptyString)\n\n const hasDecimal = strValue.includes(decimal)\n\n const parsedNumber = isRawNumeric\n ? parseFloat(`${integer}${periodKey}${fraction}`)\n : parseNumber(\n `${integer}${hasDecimal ? decimal : emptyString}${fraction}`,\n { locale: formatterLocale }\n )\n\n return {\n integer,\n decimal: hasDecimal ? decimal : emptyString,\n fraction,\n parsedNumber,\n }\n}\n\nexport function refineIntegerFromLeadingZeroes(integer: string) {\n const isNegativeValue = isValidNegative(integer)\n const refinedFromMinus = integer.replace(minus, emptyString)\n const hasLeadingZeroes = refinedFromMinus.slice(0, 1)\n const refinedFromLeadingZeroes = refinedFromMinus.replace(/^0+/, emptyString)\n const zeroPadded =\n hasLeadingZeroes && refinedFromLeadingZeroes === emptyString\n\n return `${isNegativeValue ? minus : emptyString}${\n zeroPadded ? 0 : refinedFromLeadingZeroes\n }`\n}\n\nexport function getLengthInfo(\n locale: Locale,\n value: InputValue,\n decimalScale: number = 0,\n fillDecimalScale: FillDecimalScaleVariant = 'none',\n isNumericString = false\n) {\n const isNegativeValue = isValidNegative(value)\n\n const { integer, decimal, fraction } = unformat(\n locale,\n value,\n isNumericString\n )\n\n const integerRefinedFromLeadingZeros = refineIntegerFromLeadingZeroes(integer)\n\n const getIntegerLength = () => {\n const accountEmptyInteger =\n integer === emptyString && decimal && fraction.length > 0\n\n if (accountEmptyInteger) return 1\n\n const accountEmptyNegativeInteger =\n integer === minus && decimal && fraction.length > 0\n\n if (accountEmptyNegativeInteger) return 2\n\n const accountInteger =\n integer.length > 0 && integer !== emptyString && integer !== minus\n\n if (accountInteger) return integerRefinedFromLeadingZeros.length\n\n return 0\n }\n\n const integerLength = getIntegerLength()\n const fractionLength = fraction.length\n const length = integerLength + fractionLength\n\n const safeLength = maxDigitLength + (isNegativeValue ? 1 : 0)\n const isSafeLength = safeLength - length > -1\n\n const isDecimalScaleNonFillable = fillDecimalScale === 'none'\n\n const safeIntegerLength = isDecimalScaleNonFillable\n ? safeLength\n : safeLength - decimalScale\n const safeFractionLength = isDecimalScaleNonFillable\n ? Math.min(\n safeLength -\n integerRefinedFromLeadingZeros.slice(0, safeIntegerLength).length,\n decimalScale\n )\n : decimalScale\n\n const isSafeIntegerLength = safeIntegerLength - integerLength > -1\n const isSafeFractionLength = safeFractionLength - fractionLength > -1\n\n const safelyTruncatedInteger = isSafeIntegerLength\n ? integerRefinedFromLeadingZeros\n : integerRefinedFromLeadingZeros.slice(0, safeIntegerLength)\n const safelyTruncatedFraction = isSafeFractionLength\n ? fraction\n : fraction.slice(0, safeFractionLength)\n\n const safelyTruncatedValue = `${safelyTruncatedInteger}${decimal}${safelyTruncatedFraction}`\n\n return {\n length,\n safeLength,\n isSafeLength,\n safelyTruncatedValue,\n integerLength,\n safeIntegerLength,\n isSafeIntegerLength,\n fractionLength,\n safeFractionLength,\n isSafeFractionLength,\n }\n}\n\nexport function format(\n locale: Locale,\n decimalScale: number,\n fillDecimalScale: FillDecimalScaleVariant,\n value: InputValue,\n isNumericString = false\n): string {\n const fixedDecimalScale = fillDecimalScale === 'always'\n\n const fillDecimalScaleOnBlur = fillDecimalScale === 'onBlur'\n\n const autoFilledScale = fixedDecimalScale || fillDecimalScaleOnBlur\n\n const { length, safeLength, isSafeLength, safelyTruncatedValue } =\n getLengthInfo(\n locale,\n value,\n decimalScale,\n fillDecimalScale,\n isNumericString\n )\n\n const isTruncatedBeforeFormatting = autoFilledScale || !isSafeLength\n\n const valueOfVerifiedLength = isTruncatedBeforeFormatting\n ? safelyTruncatedValue\n : value\n\n const { integer, decimal, fraction } = unformat(\n locale,\n valueOfVerifiedLength,\n isNumericString || typeof value === 'number'\n )\n\n const options = {\n minimumFractionDigits: fixedDecimalScale\n ? decimalScale\n : Math.min(Math.max(0, fraction?.length || 0), decimalScale),\n maximumFractionDigits: decimalScale,\n }\n\n const formatterLocale = getFormatterLocale(locale as string)\n const formatter = formatterFactory({ locale: formatterLocale, ...options })\n\n const isDecimalAllowed = decimalScale > 0\n\n const isEmptyValue = integer === emptyString && !decimal && !fraction\n\n if (isEmptyValue) return emptyString\n\n const isMinusValue = integer === minus && !decimal && !fraction\n\n if (isMinusValue) return minus\n\n const isDecimalValue =\n integer === emptyString && decimal && !fraction && !fixedDecimalScale\n\n if (isDecimalValue) return isDecimalAllowed ? decimal : emptyString\n\n const isMinusDecimalValue =\n integer === minus && decimal && !fraction && !fixedDecimalScale\n\n if (isMinusDecimalValue)\n return `${minus}${isDecimalAllowed ? decimal : emptyString}`\n\n const isFractionValueWithEmptyInteger =\n (integer === minus || integer === emptyString) &&\n decimal &&\n (fraction || (!fraction && fixedDecimalScale))\n\n if (isFractionValueWithEmptyInteger) {\n const numberOfZerosToPad = decimalScale - fraction.length\n\n const preparedFraction =\n numberOfZerosToPad > 0 && fixedDecimalScale\n ? fraction.concat(\n Array.from({ length: numberOfZerosToPad }, (_) => '0').join(\n emptyString\n )\n )\n : fraction.slice(0, decimalScale)\n\n return `${integer}${\n isDecimalAllowed ? decimal : emptyString\n }${preparedFraction}`\n }\n\n if (typeof valueOfVerifiedLength === 'number') {\n return formatter.formatNumber(valueOfVerifiedLength)\n }\n\n if (fraction) {\n const number = parseFloat(\n `${integer}${periodKey}${fraction.slice(\n 0,\n options.maximumFractionDigits\n )}`\n )\n\n if (isNaN(number)) return emptyString\n\n return formatter.formatNumber(number)\n }\n\n if (integer) {\n const number = parseInt(integer, 10)\n\n if (isNaN(number)) return emptyString\n\n const formatted = formatter.formatNumber(number)\n const isDecimalAllowed = !(\n options.minimumFractionDigits === 0 && options.maximumFractionDigits === 0\n )\n const isDecimalAvailable =\n decimal && !formatted.includes(decimal) && length < safeLength\n\n return isDecimalAllowed && isDecimalAvailable\n ? `${formatted}${decimal}`\n : formatted\n }\n\n return emptyString\n}\n\nexport function identifyPressedKey(\n decimalSeparatorKey: string,\n inputType: string,\n pressedKey: PressedKey,\n prevValue: string,\n value: string\n) {\n if (pressedKey !== androidUnidentifiedKey) return pressedKey\n\n if (inputType === 'deleteContentBackward') return backspaceKey\n\n if (inputType === 'insertText') {\n const diff = value\n .split(emptyString)\n .find(\n (char: string, i: number) => char !== prevValue.split(emptyString)[i]\n )\n\n switch (diff) {\n case decimalSeparatorKey:\n return decimalSeparatorKey\n case minus:\n return minus\n default:\n return pressedKey\n }\n }\n\n return pressedKey\n}\n\nexport function getPressedKeyInfo(\n decimalSeparatorKey: string,\n group: string,\n pressedKey: PressedKey,\n prevCursorPosition: CursorPosition,\n prevValue: string,\n verifiedDecimalScale: number\n) {\n const { selectionStart, selectionEnd, selection } = prevCursorPosition\n\n const backspaceWasPressed = pressedKey === backspaceKey\n const backspacedChar = backspaceWasPressed\n ? prevValue.slice(selectionStart + (selection ? 0 : -1), selectionEnd)\n : null\n const decimalWasPressed = [\n decimalSeparatorKey,\n numericKeypadDecimal,\n ].includes(pressedKey as string)\n const decimalPressedForInteger =\n decimalWasPressed && verifiedDecimalScale === 0\n const deleteWasPressed = [deleteKey, numericKeypadDel].includes(\n pressedKey as string\n )\n const deletedChar = deleteWasPressed\n ? prevValue.slice(selectionStart, selectionEnd + (selection ? 0 : 1))\n : null\n\n const thousandsSeparatorWasBackspaced =\n backspaceWasPressed && backspacedChar === group\n const thousandsSeparatorWasDeleted = deleteWasPressed && deletedChar === group\n\n return {\n backspaceWasPressed,\n backspacedChar,\n decimalWasPressed,\n decimalPressedForInteger,\n deleteWasPressed,\n deletedChar,\n thousandsSeparatorWasBackspaced,\n thousandsSeparatorWasDeleted,\n }\n}\n\nexport function prepareValueToFormatting(\n decimal: string,\n decimalSeparatorKey: string,\n group: string,\n pressedKey: PressedKey,\n prevCursorPosition: CursorPosition,\n prevValue: string,\n verifiedDecimalScale: number,\n value: string\n) {\n const {\n decimalPressedForInteger,\n thousandsSeparatorWasBackspaced,\n thousandsSeparatorWasDeleted,\n } = getPressedKeyInfo(\n decimalSeparatorKey,\n group,\n pressedKey,\n prevCursorPosition,\n prevValue,\n verifiedDecimalScale\n )\n\n // Remove preceding/following integer digit instead of thousands separator\n if (thousandsSeparatorWasBackspaced || thousandsSeparatorWasDeleted) {\n const { selectionEnd, selection } = prevCursorPosition\n\n const getCursorShift = () => {\n if (thousandsSeparatorWasDeleted) {\n const deletedAsSelection = selection === group\n return deletedAsSelection ? 0 : 1\n }\n if (thousandsSeparatorWasBackspaced) return -2\n return 0\n }\n\n const indexOfIntegerDigitToRemove = selectionEnd + getCursorShift()\n\n return prevValue\n .split(emptyString)\n .filter((_, i) => i !== indexOfIntegerDigitToRemove)\n .join(emptyString)\n }\n\n // Ignore typing decimal separator for integer\n if (decimalPressedForInteger) {\n return value.replace(new RegExp(`[${decimal}]`, 'g'), emptyString)\n }\n\n return value\n}\n\nexport function getNewCursorPosition(\n decimal: string,\n decimalSeparatorKey: string,\n group: string,\n newValue: string,\n pressedKey: PressedKey,\n prevCursorPosition: CursorPosition,\n prevValue: string,\n value: string,\n verifiedDecimalScale: number,\n locale: Locale,\n fillDecimalScale: FillDecimalScaleVariant\n) {\n const fixedDecimalScale = fillDecimalScale === 'always'\n\n const { length: prevLength, fractionLength: prevFractionLength } =\n getLengthInfo(locale, prevValue, verifiedDecimalScale, fillDecimalScale)\n\n const {\n length: newLength,\n safeLength: newSafeLength,\n integerLength: newIntegerLength,\n safeIntegerLength: newSafeIntegerLength,\n fractionLength: newFractionLength,\n safeFractionLength: newSafeFractionLength,\n } = getLengthInfo(locale, newValue, verifiedDecimalScale, fillDecimalScale)\n\n const {\n backspaceWasPressed,\n backspacedChar,\n decimalWasPressed,\n deleteWasPressed,\n thousandsSeparatorWasBackspaced,\n } = getPressedKeyInfo(\n decimalSeparatorKey,\n group,\n pressedKey,\n prevCursorPosition,\n prevValue,\n verifiedDecimalScale\n )\n\n const digitTyped = pressedKey && /\\d/g.test(pressedKey)\n const digitBackspaced =\n backspaceWasPressed && backspacedChar && /\\d/g.test(backspacedChar)\n const decimalBackspaced = backspaceWasPressed && backspacedChar === decimal\n\n const { selectionStart, selectionEnd, selection } = prevCursorPosition\n\n const defaultPosition = Math.max(\n selectionEnd + (newValue.length - prevValue.length),\n 0\n )\n\n const isPrevValueNegative = isValidNegative(prevValue)\n\n const isNewValueNegative = isValidNegative(newValue)\n\n const isDecimalAllowed = verifiedDecimalScale > 0\n\n const digitTypedBeforeMinus =\n isPrevValueNegative && selectionEnd === 0 && digitTyped\n\n const dotWithoutAnyDigitBefore = value.startsWith(decimal) && digitTyped\n const minusWithDotWithoutAnyDigitBefore =\n value.startsWith(minus + decimal) && digitTyped\n\n const leadingZeroAdded =\n pressedKey === '0' && selectionEnd === (isPrevValueNegative ? 1 : 0)\n\n const prevIndexOfDecimalSeparator = prevValue.indexOf(decimal)\n const prevCursorPositionInDecimalArea =\n prevIndexOfDecimalSeparator > -1 &&\n prevIndexOfDecimalSeparator < selectionEnd\n const prevCursorPositionInIntegerArea =\n prevIndexOfDecimalSeparator === -1 ||\n prevIndexOfDecimalSeparator >= selectionEnd\n\n const filledIntegerScaleDigitWasChanged =\n digitTyped &&\n prevCursorPositionInIntegerArea &&\n selectionEnd !== prevValue.length &&\n newLength === prevLength &&\n (newLength === newSafeLength || newIntegerLength === newSafeIntegerLength)\n\n const isDecimalScaleFilled =\n isDecimalAllowed &&\n newFractionLength === prevFractionLength &&\n newFractionLength === newSafeFractionLength\n\n const filledDecimalScaleDigitWasBackspaced =\n isDecimalScaleFilled && prevCursorPositionInDecimalArea && digitBackspaced\n\n const filledDecimalScaleDigitWasChanged =\n isDecimalScaleFilled && prevCursorPositionInDecimalArea && digitTyped\n\n // Manage cursor when decimalSeparator typed in a new place of a decimal-allowed number\n const decimalNewPosition = newValue.indexOf(decimal)\n const restructuredByDecimal =\n isDecimalAllowed && decimalWasPressed && decimalNewPosition > -1\n\n // Preserve cursor after first typed digit and before decimal separator\n const fixedDecimalScaleFirstTyping =\n fixedDecimalScale &&\n value.length === (isNewValueNegative ? 2 : 1) &&\n newValue.charAt(isNewValueNegative ? 1 : 0) === pressedKey\n\n // Preserve cursor before \"negative\" sign\n const isLeadingZerosRemovedOnPrecedingDigitBackspace =\n backspaceWasPressed &&\n defaultPosition === 0 &&\n selectionEnd - defaultPosition > 1\n const keepCursorBeforeNegativeSign =\n isNewValueNegative && isLeadingZerosRemovedOnPrecedingDigitBackspace\n\n const getPositionOnRestructuringByDecimal = () => {\n return prevCursorPositionInDecimalArea\n ? newValue.length\n : decimalNewPosition + 1\n }\n\n const getPositionOnDecimalBackspace = () => {\n const removedCharShift = 1\n const valueLength = newValue.length\n\n if (prevFractionLength === 0) {\n return valueLength\n }\n\n let delta = 0\n let anchorDigitIndexFromTheEnd = 0\n\n newValue\n .split(emptyString)\n .reverse()\n .forEach((char, i) => {\n if (char === group) {\n delta++\n }\n if (i - delta === prevFractionLength - 1) {\n anchorDigitIndexFromTheEnd = i\n }\n })\n\n return valueLength - removedCharShift - anchorDigitIndexFromTheEnd\n }\n\n const getPositionOnDelete = () => {\n const firstSymbolDeleted = selectionEnd === 0\n\n if (firstSymbolDeleted) {\n return 0\n }\n\n const removedCharShift = 1\n const anchorDigitIndex =\n prevValue\n .slice(0, selectionEnd)\n .replace(new RegExp(`[${group}]`, 'g'), emptyString).length - 1\n\n let delta = 0\n let cursorPosition = 0\n\n newValue.split(emptyString).forEach((char, i) => {\n if (char === group) {\n delta++\n }\n if (i - delta === anchorDigitIndex) {\n cursorPosition = i\n }\n })\n\n return cursorPosition + removedCharShift\n }\n\n const getPositionOnFilledIntegerScaleDigitChange = () => {\n const getGroupsNumber = (value: string, start?: number, end?: number) => {\n return (\n value.slice(start, end).match(new RegExp(`[${group}]`, 'g'))?.length ||\n 0\n )\n }\n\n const numberOfGroupsBeforeCursorPrevValue = getGroupsNumber(\n prevValue,\n 0,\n selectionEnd\n )\n const numberOfGroupsBeforeCursorNewValue = getGroupsNumber(\n newValue,\n 0,\n selectionEnd + 1\n )\n const groupsDiffBeforeCursor =\n numberOfGroupsBeforeCursorNewValue - numberOfGroupsBeforeCursorPrevValue\n\n const typedDigitShift = leadingZeroAdded ? 0 : 1\n\n return selectionEnd + groupsDiffBeforeCursor + typedDigitShift\n }\n\n const getPositionOnSelectionChange = () => {\n if (restructuredByDecimal) return getPositionOnRestructuringByDecimal()\n\n const getPasteText = () => {\n const beforeSelectionPartLength = prevValue.slice(\n 0,\n selectionStart\n ).length\n const afterSelectionPartLength = prevValue.slice(selectionEnd).length\n const valueWithoutBeforePart = value.slice(beforeSelectionPartLength)\n\n const pasteText = valueWithoutBeforePart.slice(\n 0,\n valueWithoutBeforePart.length - afterSelectionPartLength\n )\n\n return pasteText\n }\n\n const {\n integer: pasteInteger,\n decimal: pasteDecimal,\n fraction: pasteFraction,\n } = unformat(locale, getPasteText())\n\n const refinedPasteText = `${\n selectionStart === 0\n ? refineIntegerFromLeadingZeroes(pasteInteger)\n : pasteInteger\n }${pasteDecimal}${pasteFraction}`\n\n const refinedPasteTextLength = refinedPasteText.length\n\n const anchorDigitIndexRaw =\n prevValue\n .slice(0, selectionStart)\n .replace(new RegExp(`[${group}${decimal}]`, 'g'), emptyString).length -\n 1\n\n const anchorDigitIndexBase =\n anchorDigitIndexRaw > -1 ? anchorDigitIndexRaw : 0\n\n const anchorDigitIndexShift =\n anchorDigitIndexRaw > -1\n ? refinedPasteTextLength\n : Math.max(refinedPasteTextLength - 1, 0)\n\n const anchorIndex = anchorDigitIndexBase + anchorDigitIndexShift\n\n const getCursorPositionShift = () => {\n const negativeToPositiveConversion =\n isValidNegative(refinedPasteText) && isPrevValueNegative\n\n const integerZeroBasedSelectionRemoval =\n refinedPasteTextLength === 0 && selectionStart === 0\n\n const integerPartRemoved =\n integerZeroBasedSelectionRemoval &&\n selectionEnd === prevIndexOfDecimalSeparator\n\n const fractionZeroBasedSelectionRemoval =\n (refinedPasteTextLength === 0 || refinedPasteText === minus) &&\n selectionStart === prevIndexOfDecimalSeparator + 1\n\n const groupSelectionBackspaced =\n selection === group && thousandsSeparatorWasBackspaced\n\n if (negativeToPositiveConversion || integerPartRemoved) return -1\n if (integerZeroBasedSelectionRemoval || groupSelectionBackspaced) return 0\n if (fractionZeroBasedSelectionRemoval) return 2\n\n return 1\n }\n\n let delta = 0\n let cursorPosition = 0\n\n for (let i = 0; i < newValue.length; i++) {\n const char = newValue.charAt(i)\n\n const isDeltaIncrementer =\n char === group || (char === decimal && !pasteDecimal)\n\n if (isDeltaIncrementer) {\n delta++\n }\n\n if (i - delta === anchorIndex) {\n cursorPosition = i + getCursorPositionShift()\n break\n }\n\n if (i + 1 === newValue.length) {\n cursorPosition = newValue.length\n }\n }\n\n return cursorPosition\n }\n\n const getNewPosition = () => {\n if (selection) {\n return getPositionOnSelectionChange()\n }\n\n if (digitTypedBeforeMinus) {\n return 2\n }\n if (dotWithoutAnyDigitBefore) {\n return 3\n }\n if (minusWithDotWithoutAnyDigitBefore) {\n return 4\n }\n\n if (filledIntegerScaleDigitWasChanged) {\n return getPositionOnFilledIntegerScaleDigitChange()\n }\n\n if (deleteWasPressed) {\n return getPositionOnDelete()\n }\n\n if (decimalBackspaced) {\n return getPositionOnDecimalBackspace()\n }\n\n if (filledDecimalScaleDigitWasBackspaced) {\n return selectionEnd - 1\n }\n\n if (filledDecimalScaleDigitWasChanged) {\n return selectionEnd + 1\n }\n\n if (restructuredByDecimal) {\n return getPositionOnRestructuringByDecimal()\n }\n\n if (fixedDecimalScaleFirstTyping) {\n return isNewValueNegative ? 2 : 1\n }\n\n if (keepCursorBeforeNegativeSign) {\n return 1\n }\n\n return defaultPosition\n }\n\n return getNewPosition()\n}\n\nexport function identicalLocales(one: Locale, two: Locale) {\n const array1 = Array.isArray(one) ? one : [one]\n const array2 = Array.isArray(two) ? two : [two]\n\n return array1.join() === array2.join()\n}\n"],"mappings":"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"}
|
|
@@ -2,6 +2,6 @@ import styled from 'styled-components';
|
|
|
2
2
|
export var arrowSize = 8;
|
|
3
3
|
export var StyledArrow = /*#__PURE__*/styled.div.withConfig({
|
|
4
4
|
displayName: "StyledArrow",
|
|
5
|
-
componentId: "core-
|
|
5
|
+
componentId: "core-12_40_0-beta_0__sc-1epxw7u-0"
|
|
6
6
|
})(["position:absolute;background:inherit;width:", "px;height:", "px;transform:rotate(45deg);"], arrowSize, arrowSize);
|
|
7
7
|
//# sourceMappingURL=OverlayArrow.styles.js.map
|
|
@@ -43,12 +43,14 @@ var a11yPresets = {
|
|
|
43
43
|
getTriggerProps: function getTriggerProps(_ref4) {
|
|
44
44
|
var isVisible = _ref4.isVisible,
|
|
45
45
|
overlayId = _ref4.overlayId;
|
|
46
|
-
return
|
|
47
|
-
'aria-describedby': overlayId
|
|
48
|
-
|
|
46
|
+
return {
|
|
47
|
+
'aria-describedby': isVisible ? overlayId : undefined
|
|
48
|
+
// 'aria-expanded': isVisible,
|
|
49
|
+
};
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
};
|
|
53
|
+
|
|
52
54
|
export function getA11yPreset(role) {
|
|
53
55
|
switch (role) {
|
|
54
56
|
case 'dialog':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a11yPresets.js","names":["ariaHideOutside","useId","useLabels","React","emptyObj","returnEmpty","a11yPresets","haspopup","getOverlayProps","_ref","role","overlayId","id","getTriggerProps","_ref2","isVisible","undefined","tooltip","_ref3","_ref4","getA11yPreset","useLabelled","props","_ref5","ariaDescribedby","ariaDetails","ariaLabelledby","ariaLabel","ariaLabelOnly","labelledId","widgetId","fieldProps","descriptionProps","labelProps","widgetProps","_objectSpread","useLabelledPopup","_ref6","_getA11yPreset$getTri","_getA11yPreset","_getA11yPreset$getOve","_getA11yPreset2","id_","isOpen","_ref6$type","type","popupRole","popupId_","popupId","presetArgs","triggerProps","call","overlayProps","_useLabelled","popupProps","useModalDialogLike","_ref7","isModal","ref","_ref7$role","_useLabelled2","dialogProps","tabIndex","useLayoutEffect","current","focusScopeProps","autoFocus","contain","restoreFocus","useOverlayTriggerA11y","_ref8","alwaysAriaVisible","canPropOverlayUp","isDialog","_getA11yPreset3","overlayA11yProps","wrapperA11yProps","_useModalDialogLike","portalProps","wrapperFinalProps","focusScopeFinalProps","wrapperProps"],"sources":["../../src/OverlayTrigger/a11yPresets.ts"],"sourcesContent":["import { ariaHideOutside } from '@react-aria/overlays'\nimport { useId, useLabels } from '@react-aria/utils'\nimport type { AriaAttributes } from 'react'\nimport React from 'react'\nimport type { OverlayTriggerRole } from './OverlayTrigger.types'\n\nconst emptyObj = {}\nconst returnEmpty: GetA11yProps = () => ({})\n\ntype GetA11yProps = (props: {\n role: OverlayTriggerRole\n isVisible: boolean\n overlayId: string\n}) => AriaAttributes & { id?: string }\n\nconst a11yPresets: Record<\n 'tooltip' | 'haspopup',\n {\n getOverlayProps: GetA11yProps\n getTriggerProps: GetA11yProps\n }\n> = {\n haspopup: {\n getOverlayProps: ({ role, overlayId }) => ({\n id: overlayId,\n role,\n }),\n getTriggerProps: ({ role, isVisible, overlayId }) => ({\n 'aria-expanded': isVisible,\n 'aria-controls': isVisible ? overlayId : undefined,\n 'aria-haspopup': role as 'dialog' | 'listbox' | 'menu',\n }),\n },\n tooltip: {\n getOverlayProps: ({ overlayId }) => ({\n role: 'tooltip',\n id: overlayId,\n }),\n getTriggerProps: ({ isVisible, overlayId }) =>\n isVisible\n ? {\n 'aria-describedby': overlayId,\n }\n : {},\n },\n}\n\nexport function getA11yPreset(role?: OverlayTriggerRole) {\n switch (role) {\n case 'dialog':\n case 'listbox':\n case 'menu':\n return a11yPresets.haspopup\n case 'tooltip':\n return a11yPresets.tooltip\n case 'none':\n return {\n getOverlayProps: (() => ({ role: 'none' })) as GetA11yProps,\n getTriggerProps: returnEmpty,\n }\n default:\n return {\n getOverlayProps: returnEmpty,\n getTriggerProps: returnEmpty,\n }\n }\n}\n\ntype LabelConfig = {\n 'aria-describedby'?: string\n 'aria-details'?: string\n 'aria-labelledby'?: string\n 'aria-label'?: string\n /**\n * ID for the widget itself\n */\n id?: string\n}\n\ntype DialogBase = LabelConfig & {\n isOpen: boolean\n role?: 'dialog'\n}\n\ntype NonModalDialogConfig = DialogBase & {\n isModal?: never | false\n}\n\ntype ModalDialogConfig = DialogBase & {\n /**\n *\n * To enable `ariaHideOutside`. Set `isModal` to false to disable.\n * @a11y Replicates `aria-modal` inert outside content\n * @default false\n */\n isModal: true\n ref: React.RefObject<HTMLElement>\n}\n\ntype ModalDialogLikeConfig = NonModalDialogConfig | ModalDialogConfig\n\ntype OverlayTriggerA11yConfig = LabelConfig & {\n /**\n * Assure `aria-hidden` is not applied. A code side-effect\n * from `ariaHideOutside` hiding everthing outside the scope.\n */\n alwaysAriaVisible?: boolean\n /**\n * When properties should be passed to the overlay UI itself,\n * and not the wrapper element.\n */\n canPropOverlayUp: boolean\n isOpen: boolean\n role?: OverlayTriggerRole\n // ref: React.RefObject<HTMLElement> // Only necessary for modal\n}\n\n/**\n * Manages labelling for an element and the other DOM. Defaults an ID for `aria-labelledby` usage.\n *\n * When `aria-label` and `aria-labelledby` both exist, it combines them into `aria-labelledby` for a screen reader chain.\n * @link [W3 naming with aria-labelledby](https://www.w3.org/WAI/ARIA/apg/practices/names-and-descriptions/#naming_with_aria-labelledby)\n */\nexport function useLabelled(props?: LabelConfig) {\n const {\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id,\n } = props || (emptyObj as LabelConfig)\n const ariaLabelOnly = ariaLabel && !ariaLabelledby\n\n // Generate an ID. We want to use this unless they are using only aria-label\n const labelledId = useId(ariaLabelledby)\n\n // Merges aria-label and aria-labelledby into aria-labelledby when both exist\n const widgetId = useId(id)\n let fieldProps = useLabels({\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelOnly ? undefined : labelledId,\n id: widgetId,\n })\n\n return {\n descriptionProps: { id: ariaDescribedby },\n labelProps: { id: ariaLabelOnly ? undefined : labelledId },\n widgetProps: {\n ...fieldProps,\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n },\n }\n}\n\n/**\n * Cover the label links for the trigger (button), the popup element (dialog), and the popup element title (heading).\n * Similar to [React Aria useOverlayTrigger](https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/overlays/src/useOverlayTrigger.ts)\n * but with element title support.\n * @link [MDN aria-haspopup](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-haspopup)\n */\nexport function useLabelledPopup({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id: id_,\n isOpen,\n type = 'button',\n popupRole,\n popupId: popupId_,\n}: LabelConfig & {\n isOpen: boolean\n popupId?: string\n type?: 'button' | 'combobox' // Role? Not used. Show concept that popups manage 2 roles\n popupRole: 'dialog' | 'menu' | 'listbox'\n}) {\n /** Web spec default for aria-haspopup=true is menu, unless element has role combobox, which have an implicit aria-haspopup value of listbox. */\n // const popupRole = popupRole_ || type === 'combobox' ? 'listbox' : 'menu'\n const id = useId(id_)\n const popupId = useId(popupId_)\n\n const presetArgs = {\n isVisible: isOpen,\n role: popupRole,\n overlayId: popupId,\n }\n\n const triggerProps = getA11yPreset(popupRole).getTriggerProps?.(presetArgs)\n const overlayProps = getA11yPreset(popupRole).getOverlayProps?.(presetArgs)\n\n const { labelProps, widgetProps } = useLabelled({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id,\n })\n\n return {\n labelProps,\n popupProps: { role: popupRole, ...widgetProps, ...overlayProps },\n triggerProps,\n }\n}\n\n/**\n * For dialog experiences:\n * - Has role dialog and aria linked title props\n * - Focus management props to work with FocusScope\n *\n * For modal dialog experiences (full screen locked experiences):\n * - Hides old and new content outside with aria-hidden with ariaHideOutside (like aria-modal)\n * - (it will in breaking) Prevent scroll\n *\n * For either experiences, you still MUST support:\n * - have Escape key to close (It should!)\n * - have click outside, like scrim click\n *\n * _More about 'modal dialog' and `isModal` not using `aria-modal`:_\n * Setting aria-modal=\"true\" tells assistive technologies to let the user know the ability to interact with,\n * or access other content on the page requires the modal dialog to be closed or otherwise lose focus.\n * Modal dialogs are when content is displayed and the user's interaction is limited to only that section until it is dismissed.\n * [MDN aria modal](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-modal).\n * To support the most, like Narrator in Edge, Core React uses `ariaHideOutside` to set `aria-hidden` on\n * all elements outside the dialog, and **all elements outside added while opened**, so the dialog will act as a\n * _modal_ even without `aria-modal` on the dialog itself. See Future Considerations below.\n * [Screen Reader aria modal support table](https://a11ysupport.io/tech/aria/aria-modal_attribute) - [MS Narrator Edge aria modal support](https://a11ysupport.io/tests/apg__modal-dialog-example/aria__aria-modal_attribute/convey_presence/narrator/edge)\n * _Future Considerations:_ Replace ariaHideOutside with aria-modal=\"true\".\n * Using aria-modal, then we would need to involve Portal and so tooltips\n * or Toasts could mount within the visible aria-modal container.\n */\n\nexport function useModalDialogLike({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id,\n isModal,\n isOpen,\n // @ts-expect-error\n ref,\n role = 'dialog',\n}: ModalDialogLikeConfig) {\n const { labelProps, widgetProps } = useLabelled({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n })\n\n const dialogProps = {\n // 'aria-modal': true,\n ...widgetProps,\n id,\n role,\n tabIndex: -1,\n }\n\n // usePreventScroll({\n // isDisabled: isModal ? !isOpen : true,\n // })\n\n // Fills aria-modal=true\n React.useLayoutEffect(() => {\n if (isModal && isOpen && ref.current) {\n // Could add additional visible element refs here\n return ariaHideOutside([ref.current])\n }\n }, [isModal, isOpen, ref])\n\n return {\n dialogProps,\n labelProps,\n focusScopeProps: {\n autoFocus: true,\n contain: true,\n restoreFocus: true,\n },\n }\n}\n\n/**\n * Takes many roles and determines props necessary for DOM/components.\n * **Side effect of role=\"dialog\"**, current and any content added later\n * outside of the element (like by portals) will get `aria-hidden=true`\n * to replace the `aria-modal=true` `inert` nature.\n * @see useModalDialogLike */\nexport function useOverlayTriggerA11y({\n alwaysAriaVisible,\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n // can we remove this? have it role based? be optional?\n canPropOverlayUp,\n id: id_,\n isOpen,\n role,\n}: OverlayTriggerA11yConfig) {\n const isDialog = role === 'dialog'\n\n const id = useId(id_)\n\n const { getTriggerProps, getOverlayProps } = getA11yPreset(role)\n\n const triggerProps = getTriggerProps?.({\n isVisible: isOpen,\n role: role!,\n overlayId: id,\n })\n\n const overlayA11yProps = getOverlayProps?.({\n isVisible: isOpen,\n role: role!,\n overlayId: id,\n })\n\n const wrapperA11yProps = !canPropOverlayUp ? overlayA11yProps : emptyObj\n const overlayProps = canPropOverlayUp ? overlayA11yProps : emptyObj\n\n const { dialogProps, labelProps, focusScopeProps } = useModalDialogLike({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id,\n isModal: false,\n isOpen,\n })\n\n /** This is a code side-effect from ariaHideOutside hiding everthing */\n const portalProps =\n role === 'tooltip' || alwaysAriaVisible // || !role\n ? { 'data-react-aria-top-layer': true, 'data-live-announcer': true }\n : emptyObj\n\n /**\n * If it is a dialog, we can merge the dialog props with any haspopup props\n */\n const wrapperFinalProps = isDialog\n ? {\n ...wrapperA11yProps,\n ...dialogProps,\n }\n : wrapperA11yProps\n\n /**\n * If it is a dialog, we have opinions on `FocusScope` props.\n */\n const focusScopeFinalProps = isDialog\n ? focusScopeProps\n : (emptyObj as {\n autoFocus?: boolean\n contain?: boolean\n restoreFocus?: boolean\n })\n\n return {\n focusScopeProps: focusScopeFinalProps,\n labelProps,\n overlayProps,\n portalProps,\n triggerProps,\n wrapperProps: wrapperFinalProps,\n }\n}\n\n// WIP Example combobox\n// function useCombox({\n// controls,\n// isOpen = false,\n// }: {\n// controls: 'dialog' | 'menu' | 'listbox'\n// isOpen: boolean\n// }) {\n// const { labelProps, popupProps, triggerProps } = useLabelledPopup({\n// role: controls,\n// type: 'combobox',\n// isOpen,\n// })\n// dispatch between elements.\n// NOTE combobox has two labels, that could be different\n// one for the trigger input (typically the form label)\n// second for the thing it controls (listbox, dialog)\n// - label id=1\n// - input role='combobox' aria-labelledby=1\n// - div role={controls} aria-label\n// Also, any icon only buttons like clear or open should have a\n// label and -1 tabindex. No nested interactive roles.\n// }\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"a11yPresets.js","names":["ariaHideOutside","useId","useLabels","React","emptyObj","returnEmpty","a11yPresets","haspopup","getOverlayProps","_ref","role","overlayId","id","getTriggerProps","_ref2","isVisible","undefined","tooltip","_ref3","_ref4","getA11yPreset","useLabelled","props","_ref5","ariaDescribedby","ariaDetails","ariaLabelledby","ariaLabel","ariaLabelOnly","labelledId","widgetId","fieldProps","descriptionProps","labelProps","widgetProps","_objectSpread","useLabelledPopup","_ref6","_getA11yPreset$getTri","_getA11yPreset","_getA11yPreset$getOve","_getA11yPreset2","id_","isOpen","_ref6$type","type","popupRole","popupId_","popupId","presetArgs","triggerProps","call","overlayProps","_useLabelled","popupProps","useModalDialogLike","_ref7","isModal","ref","_ref7$role","_useLabelled2","dialogProps","tabIndex","useLayoutEffect","current","focusScopeProps","autoFocus","contain","restoreFocus","useOverlayTriggerA11y","_ref8","alwaysAriaVisible","canPropOverlayUp","isDialog","_getA11yPreset3","overlayA11yProps","wrapperA11yProps","_useModalDialogLike","portalProps","wrapperFinalProps","focusScopeFinalProps","wrapperProps"],"sources":["../../src/OverlayTrigger/a11yPresets.ts"],"sourcesContent":["import { ariaHideOutside } from '@react-aria/overlays'\nimport { useId, useLabels } from '@react-aria/utils'\nimport type { AriaAttributes } from 'react'\nimport React from 'react'\nimport type { OverlayTriggerRole } from './OverlayTrigger.types'\n\nconst emptyObj = {}\nconst returnEmpty: GetA11yProps = () => ({})\n\ntype GetA11yProps = (props: {\n role: OverlayTriggerRole\n isVisible: boolean\n overlayId: string\n}) => AriaAttributes & { id?: string }\n\nconst a11yPresets: Record<\n 'tooltip' | 'haspopup',\n {\n getOverlayProps: GetA11yProps\n getTriggerProps: GetA11yProps\n }\n> = {\n haspopup: {\n getOverlayProps: ({ role, overlayId }) => ({\n id: overlayId,\n role,\n }),\n getTriggerProps: ({ role, isVisible, overlayId }) => ({\n 'aria-expanded': isVisible,\n 'aria-controls': isVisible ? overlayId : undefined,\n 'aria-haspopup': role as 'dialog' | 'listbox' | 'menu',\n }),\n },\n tooltip: {\n getOverlayProps: ({ overlayId }) => ({\n role: 'tooltip',\n id: overlayId,\n }),\n getTriggerProps: ({ isVisible, overlayId }) => ({\n 'aria-describedby': isVisible ? overlayId : undefined,\n // 'aria-expanded': isVisible,\n }),\n },\n}\n\nexport function getA11yPreset(role?: OverlayTriggerRole) {\n switch (role) {\n case 'dialog':\n case 'listbox':\n case 'menu':\n return a11yPresets.haspopup\n case 'tooltip':\n return a11yPresets.tooltip\n case 'none':\n return {\n getOverlayProps: (() => ({ role: 'none' })) as GetA11yProps,\n getTriggerProps: returnEmpty,\n }\n default:\n return {\n getOverlayProps: returnEmpty,\n getTriggerProps: returnEmpty,\n }\n }\n}\n\ntype LabelConfig = {\n 'aria-describedby'?: string\n 'aria-details'?: string\n 'aria-labelledby'?: string\n 'aria-label'?: string\n /**\n * ID for the widget itself\n */\n id?: string\n}\n\ntype DialogBase = LabelConfig & {\n isOpen: boolean\n role?: 'dialog'\n}\n\ntype NonModalDialogConfig = DialogBase & {\n isModal?: never | false\n}\n\ntype ModalDialogConfig = DialogBase & {\n /**\n *\n * To enable `ariaHideOutside`. Set `isModal` to false to disable.\n * @a11y Replicates `aria-modal` inert outside content\n * @default false\n */\n isModal: true\n ref: React.RefObject<HTMLElement>\n}\n\ntype ModalDialogLikeConfig = NonModalDialogConfig | ModalDialogConfig\n\ntype OverlayTriggerA11yConfig = LabelConfig & {\n /**\n * Assure `aria-hidden` is not applied. A code side-effect\n * from `ariaHideOutside` hiding everthing outside the scope.\n */\n alwaysAriaVisible?: boolean\n /**\n * When properties should be passed to the overlay UI itself,\n * and not the wrapper element.\n */\n canPropOverlayUp: boolean\n isOpen: boolean\n role?: OverlayTriggerRole\n // ref: React.RefObject<HTMLElement> // Only necessary for modal\n}\n\n/**\n * Manages labelling for an element and the other DOM. Defaults an ID for `aria-labelledby` usage.\n *\n * When `aria-label` and `aria-labelledby` both exist, it combines them into `aria-labelledby` for a screen reader chain.\n * @link [W3 naming with aria-labelledby](https://www.w3.org/WAI/ARIA/apg/practices/names-and-descriptions/#naming_with_aria-labelledby)\n */\nexport function useLabelled(props?: LabelConfig) {\n const {\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id,\n } = props || (emptyObj as LabelConfig)\n const ariaLabelOnly = ariaLabel && !ariaLabelledby\n\n // Generate an ID. We want to use this unless they are using only aria-label\n const labelledId = useId(ariaLabelledby)\n\n // Merges aria-label and aria-labelledby into aria-labelledby when both exist\n const widgetId = useId(id)\n let fieldProps = useLabels({\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelOnly ? undefined : labelledId,\n id: widgetId,\n })\n\n return {\n descriptionProps: { id: ariaDescribedby },\n labelProps: { id: ariaLabelOnly ? undefined : labelledId },\n widgetProps: {\n ...fieldProps,\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n },\n }\n}\n\n/**\n * Cover the label links for the trigger (button), the popup element (dialog), and the popup element title (heading).\n * Similar to [React Aria useOverlayTrigger](https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/overlays/src/useOverlayTrigger.ts)\n * but with element title support.\n * @link [MDN aria-haspopup](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-haspopup)\n */\nexport function useLabelledPopup({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id: id_,\n isOpen,\n type = 'button',\n popupRole,\n popupId: popupId_,\n}: LabelConfig & {\n isOpen: boolean\n popupId?: string\n type?: 'button' | 'combobox' // Role? Not used. Show concept that popups manage 2 roles\n popupRole: 'dialog' | 'menu' | 'listbox'\n}) {\n /** Web spec default for aria-haspopup=true is menu, unless element has role combobox, which have an implicit aria-haspopup value of listbox. */\n // const popupRole = popupRole_ || type === 'combobox' ? 'listbox' : 'menu'\n const id = useId(id_)\n const popupId = useId(popupId_)\n\n const presetArgs = {\n isVisible: isOpen,\n role: popupRole,\n overlayId: popupId,\n }\n\n const triggerProps = getA11yPreset(popupRole).getTriggerProps?.(presetArgs)\n const overlayProps = getA11yPreset(popupRole).getOverlayProps?.(presetArgs)\n\n const { labelProps, widgetProps } = useLabelled({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id,\n })\n\n return {\n labelProps,\n popupProps: { role: popupRole, ...widgetProps, ...overlayProps },\n triggerProps,\n }\n}\n\n/**\n * For dialog experiences:\n * - Has role dialog and aria linked title props\n * - Focus management props to work with FocusScope\n *\n * For modal dialog experiences (full screen locked experiences):\n * - Hides old and new content outside with aria-hidden with ariaHideOutside (like aria-modal)\n * - (it will in breaking) Prevent scroll\n *\n * For either experiences, you still MUST support:\n * - have Escape key to close (It should!)\n * - have click outside, like scrim click\n *\n * _More about 'modal dialog' and `isModal` not using `aria-modal`:_\n * Setting aria-modal=\"true\" tells assistive technologies to let the user know the ability to interact with,\n * or access other content on the page requires the modal dialog to be closed or otherwise lose focus.\n * Modal dialogs are when content is displayed and the user's interaction is limited to only that section until it is dismissed.\n * [MDN aria modal](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-modal).\n * To support the most, like Narrator in Edge, Core React uses `ariaHideOutside` to set `aria-hidden` on\n * all elements outside the dialog, and **all elements outside added while opened**, so the dialog will act as a\n * _modal_ even without `aria-modal` on the dialog itself. See Future Considerations below.\n * [Screen Reader aria modal support table](https://a11ysupport.io/tech/aria/aria-modal_attribute) - [MS Narrator Edge aria modal support](https://a11ysupport.io/tests/apg__modal-dialog-example/aria__aria-modal_attribute/convey_presence/narrator/edge)\n * _Future Considerations:_ Replace ariaHideOutside with aria-modal=\"true\".\n * Using aria-modal, then we would need to involve Portal and so tooltips\n * or Toasts could mount within the visible aria-modal container.\n */\n\nexport function useModalDialogLike({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id,\n isModal,\n isOpen,\n // @ts-expect-error\n ref,\n role = 'dialog',\n}: ModalDialogLikeConfig) {\n const { labelProps, widgetProps } = useLabelled({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n })\n\n const dialogProps = {\n // 'aria-modal': true,\n ...widgetProps,\n id,\n role,\n tabIndex: -1,\n }\n\n // usePreventScroll({\n // isDisabled: isModal ? !isOpen : true,\n // })\n\n // Fills aria-modal=true\n React.useLayoutEffect(() => {\n if (isModal && isOpen && ref.current) {\n // Could add additional visible element refs here\n return ariaHideOutside([ref.current])\n }\n }, [isModal, isOpen, ref])\n\n return {\n dialogProps,\n labelProps,\n focusScopeProps: {\n autoFocus: true,\n contain: true,\n restoreFocus: true,\n },\n }\n}\n\n/**\n * Takes many roles and determines props necessary for DOM/components.\n * **Side effect of role=\"dialog\"**, current and any content added later\n * outside of the element (like by portals) will get `aria-hidden=true`\n * to replace the `aria-modal=true` `inert` nature.\n * @see useModalDialogLike */\nexport function useOverlayTriggerA11y({\n alwaysAriaVisible,\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n // can we remove this? have it role based? be optional?\n canPropOverlayUp,\n id: id_,\n isOpen,\n role,\n}: OverlayTriggerA11yConfig) {\n const isDialog = role === 'dialog'\n\n const id = useId(id_)\n\n const { getTriggerProps, getOverlayProps } = getA11yPreset(role)\n\n const triggerProps = getTriggerProps?.({\n isVisible: isOpen,\n role: role!,\n overlayId: id,\n })\n\n const overlayA11yProps = getOverlayProps?.({\n isVisible: isOpen,\n role: role!,\n overlayId: id,\n })\n\n const wrapperA11yProps = !canPropOverlayUp ? overlayA11yProps : emptyObj\n const overlayProps = canPropOverlayUp ? overlayA11yProps : emptyObj\n\n const { dialogProps, labelProps, focusScopeProps } = useModalDialogLike({\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n id,\n isModal: false,\n isOpen,\n })\n\n /** This is a code side-effect from ariaHideOutside hiding everthing */\n const portalProps =\n role === 'tooltip' || alwaysAriaVisible // || !role\n ? { 'data-react-aria-top-layer': true, 'data-live-announcer': true }\n : emptyObj\n\n /**\n * If it is a dialog, we can merge the dialog props with any haspopup props\n */\n const wrapperFinalProps = isDialog\n ? {\n ...wrapperA11yProps,\n ...dialogProps,\n }\n : wrapperA11yProps\n\n /**\n * If it is a dialog, we have opinions on `FocusScope` props.\n */\n const focusScopeFinalProps = isDialog\n ? focusScopeProps\n : (emptyObj as {\n autoFocus?: boolean\n contain?: boolean\n restoreFocus?: boolean\n })\n\n return {\n focusScopeProps: focusScopeFinalProps,\n labelProps,\n overlayProps,\n portalProps,\n triggerProps,\n wrapperProps: wrapperFinalProps,\n }\n}\n\n// WIP Example combobox\n// function useCombox({\n// controls,\n// isOpen = false,\n// }: {\n// controls: 'dialog' | 'menu' | 'listbox'\n// isOpen: boolean\n// }) {\n// const { labelProps, popupProps, triggerProps } = useLabelledPopup({\n// role: controls,\n// type: 'combobox',\n// isOpen,\n// })\n// dispatch between elements.\n// NOTE combobox has two labels, that could be different\n// one for the trigger input (typically the form label)\n// second for the thing it controls (listbox, dialog)\n// - label id=1\n// - input role='combobox' aria-labelledby=1\n// - div role={controls} aria-label\n// Also, any icon only buttons like clear or open should have a\n// label and -1 tabindex. No nested interactive roles.\n// }\n"],"mappings":"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"}
|