@skbkontur/react-ui 4.1.1 → 4.1.2
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/CHANGELOG.md +19 -0
- package/cjs/components/Checkbox/Checkbox.d.ts +5 -0
- package/cjs/components/Checkbox/Checkbox.js +29 -1
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.styles.d.ts +1 -0
- package/cjs/components/Checkbox/Checkbox.styles.js +23 -17
- package/cjs/components/Checkbox/Checkbox.styles.js.map +1 -1
- package/cjs/components/DateInput/DateInput.js +5 -1
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DateInput/helpers/InternalDateMediator.d.ts +2 -2
- package/cjs/components/DateInput/helpers/InternalDateMediator.js +7 -3
- package/cjs/components/DateInput/helpers/InternalDateMediator.js.map +1 -1
- package/cjs/components/DateInput/helpers/inputNumber.d.ts +1 -1
- package/cjs/components/DateInput/helpers/inputNumber.js +45 -12
- package/cjs/components/DateInput/helpers/inputNumber.js.map +1 -1
- package/cjs/components/Gapped/Gapped.js +2 -1
- package/cjs/components/Gapped/Gapped.js.map +1 -1
- package/cjs/components/GlobalLoader/GlobalLoaderView.styles.js +5 -7
- package/cjs/components/GlobalLoader/GlobalLoaderView.styles.js.map +1 -1
- package/cjs/components/PasswordInput/PasswordInput.d.ts +1 -1
- package/cjs/components/PasswordInput/PasswordInput.js +8 -10
- package/cjs/components/PasswordInput/PasswordInput.js.map +1 -1
- package/cjs/components/PasswordInput/PasswordInputIcon.js +5 -1
- package/cjs/components/PasswordInput/PasswordInputIcon.js.map +1 -1
- package/cjs/components/Select/Select.js +4 -4
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +10 -0
- package/cjs/components/TokenInput/TokenInput.js +17 -2
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.js +1 -5
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/MaskedInput/MaskedInput.js +4 -2
- package/cjs/internal/MaskedInput/MaskedInput.js.map +1 -1
- package/cjs/internal/Menu/Menu.js +2 -5
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/lib/date/InternalDateGetter.d.ts +1 -1
- package/cjs/lib/date/InternalDateGetter.js +4 -1
- package/cjs/lib/date/InternalDateGetter.js.map +1 -1
- package/cjs/lib/date/InternalDateValidator.js +32 -22
- package/cjs/lib/date/InternalDateValidator.js.map +1 -1
- package/cjs/lib/date/types.d.ts +4 -0
- package/cjs/lib/date/types.js.map +1 -1
- package/cjs/lib/events/MouseDrag.js +5 -1
- package/cjs/lib/events/MouseDrag.js.map +1 -1
- package/components/Checkbox/Checkbox/Checkbox.js +29 -2
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +5 -0
- package/components/Checkbox/Checkbox.styles/Checkbox.styles.js +20 -17
- package/components/Checkbox/Checkbox.styles/Checkbox.styles.js.map +1 -1
- package/components/Checkbox/Checkbox.styles.d.ts +1 -0
- package/components/DateInput/DateInput/DateInput.js +9 -1
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/helpers/InternalDateMediator/InternalDateMediator.js +9 -3
- package/components/DateInput/helpers/InternalDateMediator/InternalDateMediator.js.map +1 -1
- package/components/DateInput/helpers/InternalDateMediator.d.ts +2 -2
- package/components/DateInput/helpers/inputNumber/inputNumber.js +53 -16
- package/components/DateInput/helpers/inputNumber/inputNumber.js.map +1 -1
- package/components/DateInput/helpers/inputNumber.d.ts +1 -1
- package/components/Gapped/Gapped/Gapped.js +2 -1
- package/components/Gapped/Gapped/Gapped.js.map +1 -1
- package/components/GlobalLoader/GlobalLoaderView.styles/GlobalLoaderView.styles.js +1 -2
- package/components/GlobalLoader/GlobalLoaderView.styles/GlobalLoaderView.styles.js.map +1 -1
- package/components/PasswordInput/PasswordInput/PasswordInput.js +12 -13
- package/components/PasswordInput/PasswordInput/PasswordInput.js.map +1 -1
- package/components/PasswordInput/PasswordInput.d.ts +1 -1
- package/components/PasswordInput/PasswordInputIcon/PasswordInputIcon.js +8 -3
- package/components/PasswordInput/PasswordInputIcon/PasswordInputIcon.js.map +1 -1
- package/components/Select/Select/Select.js +5 -3
- package/components/Select/Select/Select.js.map +1 -1
- package/components/TokenInput/TokenInput/TokenInput.js +6 -2
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +10 -0
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +2 -6
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/MaskedInput/MaskedInput/MaskedInput.js +4 -2
- package/internal/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
- package/internal/Menu/Menu/Menu.js +2 -5
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/lib/date/InternalDateGetter/InternalDateGetter.js +3 -1
- package/lib/date/InternalDateGetter/InternalDateGetter.js.map +1 -1
- package/lib/date/InternalDateGetter.d.ts +1 -1
- package/lib/date/InternalDateValidator/InternalDateValidator.js +55 -41
- package/lib/date/InternalDateValidator/InternalDateValidator.js.map +1 -1
- package/lib/date/types/types.js.map +1 -1
- package/lib/date/types.d.ts +4 -0
- package/lib/events/MouseDrag/MouseDrag.js +5 -1
- package/lib/events/MouseDrag/MouseDrag.js.map +1 -1
- package/package.json +3 -2
|
@@ -4,7 +4,7 @@ import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
|
4
4
|
var _class, _class2, _temp;
|
|
5
5
|
|
|
6
6
|
import React from 'react';
|
|
7
|
-
import { isNullable } from "../../../lib/utils";
|
|
7
|
+
import { isNonNullable, isNullable } from "../../../lib/utils";
|
|
8
8
|
import { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from "../../../lib/events/keyboard/identifiers";
|
|
9
9
|
import { ScrollContainer } from "../../../components/ScrollContainer";
|
|
10
10
|
import { isMenuItem } from "../../../components/MenuItem";
|
|
@@ -354,7 +354,7 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
|
|
|
354
354
|
|
|
355
355
|
_proto.isEmpty = function isEmpty() {
|
|
356
356
|
var children = this.props.children;
|
|
357
|
-
return !children || !childrenToArray(children).filter(
|
|
357
|
+
return !children || !childrenToArray(children).filter(isNonNullable).length;
|
|
358
358
|
};
|
|
359
359
|
|
|
360
360
|
return InternalMenu;
|
|
@@ -367,10 +367,6 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
|
|
|
367
367
|
initialSelectedItemIndex: -1
|
|
368
368
|
}, _temp)) || _class;
|
|
369
369
|
|
|
370
|
-
function isExist(value) {
|
|
371
|
-
return value !== null && value !== undefined;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
370
|
function childrenToArray(children) {
|
|
375
371
|
var ret = []; // Use forEach instead of map to avoid cloning for key unifying.
|
|
376
372
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["InternalMenu.tsx"],"names":["React","isNullable","isKeyArrowDown","isKeyArrowUp","isKeyEnter","ScrollContainer","isMenuItem","createPropsGetter","ThemeContext","cx","getRootNode","rootNode","getDOMRect","styles","isActiveElement","addIconPaddingIfPartOfMenu","InternalMenu","state","highlightedIndex","maxHeight","props","scrollState","getProps","defaultProps","renderHeader","el","header","fixedHeader","renderFooter","footer","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","Children","count","calculateMaxHeight","parsedMaxHeight","window","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","height","setState","setInitialSelection","i","initialSelectedItemIndex","moveDown","refScrollContainer","scrollContainer","scrollToSelected","highlighted","scrollTo","highlightItem","index","unhighlight","moveUp","move","handleKeyDown","e","onKeyDown","defaultPrevented","preventDefault","onClick","handleScrollStateChange","componentDidMount","componentDidUpdate","render","theme","renderMain","enableIconPadding","toArray","some","x","isValidElement","icon","isEmpty","root","shadow","hasShadow","width","setRootNode","preventWindowScroll","map","child","type","modifiedChild","highlight","ref","originalRef","menuItem","refHighlighted","cloneElement","select","bind","onMouseEnter","event","onMouseLeave","current","shouldHandleHref","item","childrenToArray","href","target","open","location","onItemClick","step","cyclicSelection","length","filter","isExist","PureComponent","__KONTUR_REACT_UI__","value","undefined","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isNullable } from '../../lib/utils';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './InternalMenu.styles';\nimport { isActiveElement } from './isActiveElement';\nimport { addIconPaddingIfPartOfMenu } from './addIconPaddingIfPartOfMenu';\n\ninterface MenuProps {\n children?: React.ReactNode;\n hasShadow?: boolean;\n /**\n * Максимальная высота применяется только для скролл контейнера\n *\n * Высота `header` и `footer` в нее не включены\n */\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Циклический перебор айтемов меню (по-дефолтну включен)\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\ninterface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n}\n\n@rootNode\nexport class InternalMenu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'InternalMenu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.props.maxHeight || 'none',\n scrollState: 'top',\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private getProps = createPropsGetter(InternalMenu.defaultProps);\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.props.maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{\n width: this.props.width,\n maxHeight: this.state.maxHeight,\n }}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header ? this.renderHeader() : null}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n >\n {React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || isNullable(child)) {\n return child;\n }\n if (React.isValidElement(child) && typeof child.type === 'string') {\n return child;\n }\n\n const modifiedChild = addIconPaddingIfPartOfMenu(child, enableIconPadding);\n\n if (isActiveElement(modifiedChild)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = modifiedChild.ref;\n const originalRef = ref;\n if (highlight) {\n ref = (menuItem) => this.refHighlighted(originalRef, menuItem);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(modifiedChild, {\n ref,\n state: highlight ? 'hover' : modifiedChild.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: (event) => {\n this.highlightItem(index);\n if (isMenuItem(modifiedChild) && modifiedChild.props.onMouseEnter) {\n modifiedChild.props.onMouseEnter(event);\n }\n },\n onMouseLeave: (event) => {\n this.unhighlight();\n if (isMenuItem(modifiedChild) && modifiedChild.props.onMouseLeave) {\n modifiedChild.props.onMouseLeave(event);\n }\n },\n });\n }\n\n return modifiedChild;\n })}\n </ScrollContainer>\n {this.props.footer ? this.renderFooter() : null}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n ref={(el) => (this.header = el)}\n className={cx({\n [styles.header()]: true,\n [styles.fixedHeader()]: this.state.scrollState !== 'top',\n })}\n >\n {this.props.header}\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n ref={(el) => (this.footer = el)}\n className={cx({\n [styles.footer()]: true,\n [styles.fixedFooter()]: this.state.scrollState !== 'bottom',\n })}\n >\n {this.props.footer}\n </div>\n );\n };\n\n private focusOnRootElement = (): void => {\n getRootNode(this)?.focus();\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { maxHeight, header, footer, children } = this.props;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const { maxHeight } = this.props;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && typeof window !== 'undefined' && rootNode) {\n const rootElementMaxHeight = window.getComputedStyle(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && getDOMRect(this.header).height) || 0) +\n ((this.footer && getDOMRect(this.footer).height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.moveDown();\n }\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: string | ((instance: MenuItem | null) => void) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (!originalRef || typeof originalRef === 'string') {\n return;\n }\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n } else if (typeof originalRef === 'object') {\n // @ts-ignore see issue https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n originalRef.current = menuItem;\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event as React.MouseEvent<HTMLElement>);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlightItem = (index: number): void => {\n this.setState({ highlightedIndex: index });\n getRootNode(this)?.focus();\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n this.setState((state, props) => {\n const children = childrenToArray(props.children);\n if (!children.some(isActiveElement)) {\n return null;\n }\n let index = state.highlightedIndex;\n do {\n index += step;\n if (!props.cyclicSelection && (index < 0 || index > children.length)) {\n return null;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n return { highlightedIndex: index };\n }\n } while (index !== state.highlightedIndex);\n return null;\n }, this.scrollToSelected);\n }\n\n private moveUp = () => {\n this.move(-1);\n };\n\n private moveDown = () => {\n this.move(1);\n };\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(e);\n }\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(e)) {\n e.preventDefault();\n this.moveUp();\n } else if (isKeyArrowDown(e)) {\n e.preventDefault();\n this.moveDown();\n } else if (isKeyEnter(e)) {\n if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(e);\n }\n }\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["InternalMenu.tsx"],"names":["React","isNonNullable","isNullable","isKeyArrowDown","isKeyArrowUp","isKeyEnter","ScrollContainer","isMenuItem","createPropsGetter","ThemeContext","cx","getRootNode","rootNode","getDOMRect","styles","isActiveElement","addIconPaddingIfPartOfMenu","InternalMenu","state","highlightedIndex","maxHeight","props","scrollState","getProps","defaultProps","renderHeader","el","header","fixedHeader","renderFooter","footer","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","Children","count","calculateMaxHeight","parsedMaxHeight","window","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","height","setState","setInitialSelection","i","initialSelectedItemIndex","moveDown","refScrollContainer","scrollContainer","scrollToSelected","highlighted","scrollTo","highlightItem","index","unhighlight","moveUp","move","handleKeyDown","e","onKeyDown","defaultPrevented","preventDefault","onClick","handleScrollStateChange","componentDidMount","componentDidUpdate","render","theme","renderMain","enableIconPadding","toArray","some","x","isValidElement","icon","isEmpty","root","shadow","hasShadow","width","setRootNode","preventWindowScroll","map","child","type","modifiedChild","highlight","ref","originalRef","menuItem","refHighlighted","cloneElement","select","bind","onMouseEnter","event","onMouseLeave","current","shouldHandleHref","item","childrenToArray","href","target","open","location","onItemClick","step","cyclicSelection","length","filter","PureComponent","__KONTUR_REACT_UI__","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isNonNullable, isNullable } from '../../lib/utils';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './InternalMenu.styles';\nimport { isActiveElement } from './isActiveElement';\nimport { addIconPaddingIfPartOfMenu } from './addIconPaddingIfPartOfMenu';\n\ninterface MenuProps {\n children?: React.ReactNode;\n hasShadow?: boolean;\n /**\n * Максимальная высота применяется только для скролл контейнера\n *\n * Высота `header` и `footer` в нее не включены\n */\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Циклический перебор айтемов меню (по-дефолтну включен)\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\ninterface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n}\n\n@rootNode\nexport class InternalMenu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'InternalMenu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.props.maxHeight || 'none',\n scrollState: 'top',\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private getProps = createPropsGetter(InternalMenu.defaultProps);\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.props.maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{\n width: this.props.width,\n maxHeight: this.state.maxHeight,\n }}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header ? this.renderHeader() : null}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n >\n {React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || isNullable(child)) {\n return child;\n }\n if (React.isValidElement(child) && typeof child.type === 'string') {\n return child;\n }\n\n const modifiedChild = addIconPaddingIfPartOfMenu(child, enableIconPadding);\n\n if (isActiveElement(modifiedChild)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = modifiedChild.ref;\n const originalRef = ref;\n if (highlight) {\n ref = (menuItem) => this.refHighlighted(originalRef, menuItem);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(modifiedChild, {\n ref,\n state: highlight ? 'hover' : modifiedChild.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: (event) => {\n this.highlightItem(index);\n if (isMenuItem(modifiedChild) && modifiedChild.props.onMouseEnter) {\n modifiedChild.props.onMouseEnter(event);\n }\n },\n onMouseLeave: (event) => {\n this.unhighlight();\n if (isMenuItem(modifiedChild) && modifiedChild.props.onMouseLeave) {\n modifiedChild.props.onMouseLeave(event);\n }\n },\n });\n }\n\n return modifiedChild;\n })}\n </ScrollContainer>\n {this.props.footer ? this.renderFooter() : null}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n ref={(el) => (this.header = el)}\n className={cx({\n [styles.header()]: true,\n [styles.fixedHeader()]: this.state.scrollState !== 'top',\n })}\n >\n {this.props.header}\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n ref={(el) => (this.footer = el)}\n className={cx({\n [styles.footer()]: true,\n [styles.fixedFooter()]: this.state.scrollState !== 'bottom',\n })}\n >\n {this.props.footer}\n </div>\n );\n };\n\n private focusOnRootElement = (): void => {\n getRootNode(this)?.focus();\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { maxHeight, header, footer, children } = this.props;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const { maxHeight } = this.props;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && typeof window !== 'undefined' && rootNode) {\n const rootElementMaxHeight = window.getComputedStyle(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && getDOMRect(this.header).height) || 0) +\n ((this.footer && getDOMRect(this.footer).height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.moveDown();\n }\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: string | ((instance: MenuItem | null) => void) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (!originalRef || typeof originalRef === 'string') {\n return;\n }\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n } else if (typeof originalRef === 'object') {\n // @ts-ignore see issue https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n originalRef.current = menuItem;\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event as React.MouseEvent<HTMLElement>);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlightItem = (index: number): void => {\n this.setState({ highlightedIndex: index });\n getRootNode(this)?.focus();\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n this.setState((state, props) => {\n const children = childrenToArray(props.children);\n if (!children.some(isActiveElement)) {\n return null;\n }\n let index = state.highlightedIndex;\n do {\n index += step;\n if (!props.cyclicSelection && (index < 0 || index > children.length)) {\n return null;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n return { highlightedIndex: index };\n }\n } while (index !== state.highlightedIndex);\n return null;\n }, this.scrollToSelected);\n }\n\n private moveUp = () => {\n this.move(-1);\n };\n\n private moveDown = () => {\n this.move(1);\n };\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isNonNullable).length;\n }\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(e);\n }\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(e)) {\n e.preventDefault();\n this.moveUp();\n } else if (isKeyArrowDown(e)) {\n e.preventDefault();\n this.moveDown();\n } else if (isKeyEnter(e)) {\n if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(e);\n }\n }\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
|
|
@@ -4,10 +4,10 @@ import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
|
4
4
|
var _excluded = ["maskChar", "alwaysShowMask", "hasLeftIcon", "hasRightIcon", "maxLength", "onValueChange", "onUnexpectedInput", "defaultValue", "style"];
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import ReactInputMask from 'react-input-mask';
|
|
7
|
+
import { isNonNullable } from "../../../lib/utils";
|
|
7
8
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
8
9
|
import { MaskCharLowLine } from "../../MaskCharLowLine";
|
|
9
10
|
import { cx } from "../../../lib/theming/Emotion";
|
|
10
|
-
import { isNonNullable } from "../../../lib/utils";
|
|
11
11
|
import { styles } from "../MaskedInput.styles";
|
|
12
12
|
export var MaskedInput = /*#__PURE__*/function (_React$PureComponent) {
|
|
13
13
|
_inheritsLoose(MaskedInput, _React$PureComponent);
|
|
@@ -22,7 +22,9 @@ export var MaskedInput = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
22
22
|
_this.getValue = function (props) {
|
|
23
23
|
if (isNonNullable(props.value)) {
|
|
24
24
|
return props.value.toString();
|
|
25
|
-
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (isNonNullable(props.defaultValue)) {
|
|
26
28
|
return props.defaultValue.toString();
|
|
27
29
|
}
|
|
28
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MaskedInput.tsx"],"names":["React","ReactInputMask","ThemeContext","MaskCharLowLine","cx","isNonNullable","styles","MaskedInput","props","input","reactInputMask","getValue","value","toString","defaultValue","refInput","refMaskedInput","handleChange","event","target","state","handleUnexpectedInput","setState","onValueChange","onChange","handleFocus","focused","onFocus","handleBlur","onBlur","preprocess","newState","oldState","userInput","options","visibleMaskChars","Array","mask","length","fill","maskChar","split","forEach","char","index","permanents","includes","emptyValue","join","isMaskVisible","alwaysShowMask","onUnexpectedInput","componentDidMount","forceUpdate","componentDidUpdate","prevProps","render","theme","renderMain","hasLeftIcon","hasRightIcon","maxLength","style","inputProps","leftHelper","textAlign","color","slice","leftClass","inputMaskLeft","rightHelper","map","_char","i","container","inputMask","PureComponent","__KONTUR_REACT_UI__","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactInputMask, { InputState, MaskOptions } from 'react-input-mask';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MaskCharLowLine } from '../MaskCharLowLine';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { styles } from './MaskedInput.styles';\n\nexport interface MaskedInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n mask: string;\n maskChar: string | null;\n formatChars?: { [key: string]: string };\n alwaysShowMask?: boolean;\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n onUnexpectedInput?: (value: string) => void;\n onValueChange?: (value: string) => void;\n}\n\ninterface MaskedInputState {\n value: string;\n emptyValue: string;\n focused: boolean;\n}\n\nexport class MaskedInput extends React.PureComponent<MaskedInputProps, MaskedInputState> {\n public static __KONTUR_REACT_UI__ = 'MaskedInput';\n\n public static defaultProps: Partial<MaskedInputProps> = {\n maskChar: '_',\n };\n\n public input: HTMLInputElement | null = null;\n private theme!: Theme;\n private reactInputMask: ReactInputMask | null = null;\n\n public constructor(props: MaskedInputProps) {\n super(props);\n\n this.state = {\n value: this.getValue(props),\n emptyValue: '',\n focused: false,\n };\n }\n\n public componentDidMount() {\n if (this.reactInputMask) {\n // FIXME: принудительно вызываем beforeMaskedValueChange, чтобы получить emptyValue\n this.reactInputMask.forceUpdate();\n }\n }\n\n public componentDidUpdate(prevProps: MaskedInputProps) {\n if (this.props.value !== prevProps.value) {\n this.setState({\n value: this.props.value ? this.props.value.toString() : '',\n });\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n maskChar,\n alwaysShowMask,\n hasLeftIcon,\n hasRightIcon,\n maxLength,\n onValueChange,\n onUnexpectedInput,\n defaultValue,\n style,\n ...inputProps\n } = this.props;\n const { emptyValue, value } = this.state;\n\n const leftHelper = style?.textAlign !== 'right' && (\n <span style={{ color: 'transparent' }}>{emptyValue.slice(0, value.length)}</span>\n );\n const leftClass = style?.textAlign !== 'right' && styles.inputMaskLeft();\n\n const rightHelper = emptyValue\n .slice(value.length)\n .split('')\n .map((_char, i) => (_char === '_' ? <MaskCharLowLine key={i} /> : _char));\n\n return (\n <span className={styles.container()} x-ms-format-detection=\"none\">\n <ReactInputMask\n {...inputProps}\n maskChar={null}\n beforeMaskedValueChange={this.preprocess}\n alwaysShowMask={false}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n value={value}\n inputRef={this.refInput}\n ref={this.refMaskedInput}\n style={{ ...style }}\n />\n {this.isMaskVisible() && (\n <span className={cx(styles.inputMask(this.theme), leftClass)}>\n {leftHelper}\n {rightHelper}\n </span>\n )}\n </span>\n );\n }\n\n private getValue = (props: MaskedInputProps): string => {\n if (isNonNullable(props.value)) {\n return props.value.toString();\n } else if (isNonNullable(props.defaultValue)) {\n return props.defaultValue.toString();\n }\n\n return '';\n };\n\n private refInput = (input: HTMLInputElement | null) => {\n this.input = input;\n };\n\n private refMaskedInput = (reactInputMask: ReactInputMask) => {\n this.reactInputMask = reactInputMask;\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === this.state.value) {\n this.handleUnexpectedInput();\n } else {\n this.setState({ value: event.target.value });\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private preprocess = (\n newState: InputState,\n oldState: InputState,\n userInput: string,\n options: MaskOptions & Pick<MaskedInputProps, 'mask'>,\n ) => {\n const visibleMaskChars = new Array(options.mask.length).fill(this.props.maskChar);\n\n if (newState.value !== oldState.value && userInput === null) {\n this.setState({\n value: newState.value,\n });\n }\n\n options.mask.split('').forEach((char: string, index: number) => {\n if (options.permanents.includes(index)) {\n visibleMaskChars[index] = char;\n }\n\n if (newState.value[index]) {\n visibleMaskChars[index] = newState.value[index];\n }\n });\n\n const emptyValue = visibleMaskChars.join('');\n\n if (this.state.emptyValue !== emptyValue) {\n this.setState({\n emptyValue,\n });\n }\n\n return newState;\n };\n\n private isMaskVisible = () => this.props.alwaysShowMask || this.state.focused;\n\n private handleUnexpectedInput = () => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(this.state.value);\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["MaskedInput.tsx"],"names":["React","ReactInputMask","isNonNullable","ThemeContext","MaskCharLowLine","cx","styles","MaskedInput","props","input","reactInputMask","getValue","value","toString","defaultValue","refInput","refMaskedInput","handleChange","event","target","state","handleUnexpectedInput","setState","onValueChange","onChange","handleFocus","focused","onFocus","handleBlur","onBlur","preprocess","newState","oldState","userInput","options","visibleMaskChars","Array","mask","length","fill","maskChar","split","forEach","char","index","permanents","includes","emptyValue","join","isMaskVisible","alwaysShowMask","onUnexpectedInput","componentDidMount","forceUpdate","componentDidUpdate","prevProps","render","theme","renderMain","hasLeftIcon","hasRightIcon","maxLength","style","inputProps","leftHelper","textAlign","color","slice","leftClass","inputMaskLeft","rightHelper","map","_char","i","container","inputMask","PureComponent","__KONTUR_REACT_UI__","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactInputMask, { InputState, MaskOptions } from 'react-input-mask';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MaskCharLowLine } from '../MaskCharLowLine';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './MaskedInput.styles';\n\nexport interface MaskedInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n mask: string;\n maskChar: string | null;\n formatChars?: { [key: string]: string };\n alwaysShowMask?: boolean;\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n onUnexpectedInput?: (value: string) => void;\n onValueChange?: (value: string) => void;\n}\n\ninterface MaskedInputState {\n value: string;\n emptyValue: string;\n focused: boolean;\n}\n\nexport class MaskedInput extends React.PureComponent<MaskedInputProps, MaskedInputState> {\n public static __KONTUR_REACT_UI__ = 'MaskedInput';\n\n public static defaultProps: Partial<MaskedInputProps> = {\n maskChar: '_',\n };\n\n public input: HTMLInputElement | null = null;\n private theme!: Theme;\n private reactInputMask: ReactInputMask | null = null;\n\n public constructor(props: MaskedInputProps) {\n super(props);\n\n this.state = {\n value: this.getValue(props),\n emptyValue: '',\n focused: false,\n };\n }\n\n public componentDidMount() {\n if (this.reactInputMask) {\n // FIXME: принудительно вызываем beforeMaskedValueChange, чтобы получить emptyValue\n this.reactInputMask.forceUpdate();\n }\n }\n\n public componentDidUpdate(prevProps: MaskedInputProps) {\n if (this.props.value !== prevProps.value) {\n this.setState({\n value: this.props.value ? this.props.value.toString() : '',\n });\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n maskChar,\n alwaysShowMask,\n hasLeftIcon,\n hasRightIcon,\n maxLength,\n onValueChange,\n onUnexpectedInput,\n defaultValue,\n style,\n ...inputProps\n } = this.props;\n const { emptyValue, value } = this.state;\n\n const leftHelper = style?.textAlign !== 'right' && (\n <span style={{ color: 'transparent' }}>{emptyValue.slice(0, value.length)}</span>\n );\n const leftClass = style?.textAlign !== 'right' && styles.inputMaskLeft();\n\n const rightHelper = emptyValue\n .slice(value.length)\n .split('')\n .map((_char, i) => (_char === '_' ? <MaskCharLowLine key={i} /> : _char));\n\n return (\n <span className={styles.container()} x-ms-format-detection=\"none\">\n <ReactInputMask\n {...inputProps}\n maskChar={null}\n beforeMaskedValueChange={this.preprocess}\n alwaysShowMask={false}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n value={value}\n inputRef={this.refInput}\n ref={this.refMaskedInput}\n style={{ ...style }}\n />\n {this.isMaskVisible() && (\n <span className={cx(styles.inputMask(this.theme), leftClass)}>\n {leftHelper}\n {rightHelper}\n </span>\n )}\n </span>\n );\n }\n\n private getValue = (props: MaskedInputProps): string => {\n if (isNonNullable(props.value)) {\n return props.value.toString();\n }\n\n if (isNonNullable(props.defaultValue)) {\n return props.defaultValue.toString();\n }\n\n return '';\n };\n\n private refInput = (input: HTMLInputElement | null) => {\n this.input = input;\n };\n\n private refMaskedInput = (reactInputMask: ReactInputMask) => {\n this.reactInputMask = reactInputMask;\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === this.state.value) {\n this.handleUnexpectedInput();\n } else {\n this.setState({ value: event.target.value });\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private preprocess = (\n newState: InputState,\n oldState: InputState,\n userInput: string,\n options: MaskOptions & Pick<MaskedInputProps, 'mask'>,\n ) => {\n const visibleMaskChars = new Array(options.mask.length).fill(this.props.maskChar);\n\n if (newState.value !== oldState.value && userInput === null) {\n this.setState({\n value: newState.value,\n });\n }\n\n options.mask.split('').forEach((char: string, index: number) => {\n if (options.permanents.includes(index)) {\n visibleMaskChars[index] = char;\n }\n\n if (newState.value[index]) {\n visibleMaskChars[index] = newState.value[index];\n }\n });\n\n const emptyValue = visibleMaskChars.join('');\n\n if (this.state.emptyValue !== emptyValue) {\n this.setState({\n emptyValue,\n });\n }\n\n return newState;\n };\n\n private isMaskVisible = () => this.props.alwaysShowMask || this.state.focused;\n\n private handleUnexpectedInput = () => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(this.state.value);\n }\n };\n}\n"]}
|
|
@@ -4,6 +4,7 @@ import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
|
4
4
|
var _class, _class2, _temp;
|
|
5
5
|
|
|
6
6
|
import React from 'react';
|
|
7
|
+
import { isNonNullable } from "../../../lib/utils";
|
|
7
8
|
import { ScrollContainer } from "../../../components/ScrollContainer";
|
|
8
9
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
9
10
|
import { cx } from "../../../lib/theming/Emotion";
|
|
@@ -281,7 +282,7 @@ export var Menu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_R
|
|
|
281
282
|
|
|
282
283
|
_proto.isEmpty = function isEmpty() {
|
|
283
284
|
var children = this.props.children;
|
|
284
|
-
return !children || !childrenToArray(children).filter(
|
|
285
|
+
return !children || !childrenToArray(children).filter(isNonNullable).length;
|
|
285
286
|
};
|
|
286
287
|
|
|
287
288
|
return Menu;
|
|
@@ -293,10 +294,6 @@ export var Menu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_R
|
|
|
293
294
|
preventWindowScroll: true
|
|
294
295
|
}, _temp)) || _class;
|
|
295
296
|
|
|
296
|
-
function isExist(value) {
|
|
297
|
-
return value !== null && value !== undefined;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
297
|
function childrenToArray(children) {
|
|
301
298
|
var ret = []; // Use forEach instead of map to avoid cloning for key unifying.
|
|
302
299
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Menu.tsx"],"names":["React","ScrollContainer","ThemeContext","cx","getRootNode","rootNode","addIconPaddingIfPartOfMenu","isIE11","styles","isActiveElement","Menu","state","highlightedIndex","unmounted","getChildList","enableIconPadding","Children","toArray","props","children","some","x","isValidElement","icon","map","child","index","modifiedChild","highlight","ref","refHighlighted","bind","cloneElement","onClick","select","onMouseEnter","onMouseLeave","unhighlight","refScrollContainer","scrollContainer","scrollToSelected","highlighted","scrollTo","scrollToTop","scrollToBottom","setState","componentWillUnmount","render","theme","renderMain","up","move","down","enter","event","reset","hasHighlightedItem","highlightItem","isEmpty","getAlignRightClass","root","shadow","hasShadow","getStyle","setRootNode","maxHeight","preventWindowScroll","disableScrollContainer","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","window","open","location","onItemClick","step","activeElements","filter","length","indexOf","isExist","Component","__KONTUR_REACT_UI__","defaultProps","align","width","value","undefined","ret","forEach","push","maxWidth","minWidth","alignRight","alignRightIE11","alignRightIE11FixAutoWidth"],"mappings":"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","sourcesContent":["import React, { CSSProperties } from 'react';\n\nimport { ScrollContainer } from '../../components/ScrollContainer';\nimport { MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { addIconPaddingIfPartOfMenu } from '../InternalMenu/addIconPaddingIfPartOfMenu';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\n\nexport interface MenuProps {\n children: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: () => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n /**\n * Отключение кастомного скролла контейнера\n */\n disableScrollContainer?: boolean;\n align?: 'left' | 'right';\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n}\n\n@rootNode\nexport class Menu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps = {\n align: 'left',\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n };\n\n public state = {\n highlightedIndex: -1,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n this.unmounted = true;\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n this.setState({ highlightedIndex: -1 });\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n this.highlight(index);\n }\n\n private renderMain() {\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx(getAlignRightClass(this.props), {\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={getStyle(this.props)}\n ref={this.setRootNode}\n >\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n disabled={this.props.disableScrollContainer}\n >\n <div className={styles.scrollContainer(this.theme)}>{this.getChildList()}</div>\n </ScrollContainer>\n </div>\n );\n }\n\n private getChildList = () => {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n return React.Children.map(this.props.children, (child, index) => {\n if (!child) {\n return child;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n return child;\n }\n\n const modifiedChild = addIconPaddingIfPartOfMenu(child, enableIconPadding);\n\n if (isActiveElement(modifiedChild)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = modifiedChild.ref;\n if (highlight && typeof modifiedChild.ref !== 'string') {\n ref = this.refHighlighted.bind(this, modifiedChild.ref);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(modifiedChild, {\n ref,\n state: highlight ? 'hover' : modifiedChild.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n\n return modifiedChild;\n });\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick();\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n\nconst getStyle = (props: MenuProps): CSSProperties => {\n if (props.align === 'right') {\n return {\n maxWidth: props.width,\n minWidth: props.width,\n maxHeight: props.maxHeight,\n };\n }\n\n return {\n width: props.width,\n maxHeight: props.maxHeight,\n };\n};\n\nconst getAlignRightClass = (props: MenuProps) => {\n if (props.align === 'right') {\n return cx({\n [styles.alignRight()]: !isIE11,\n [styles.alignRightIE11()]: isIE11,\n [styles.alignRightIE11FixAutoWidth()]: isIE11 && props.width === 'auto',\n });\n }\n\n return null;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["Menu.tsx"],"names":["React","isNonNullable","ScrollContainer","ThemeContext","cx","getRootNode","rootNode","addIconPaddingIfPartOfMenu","isIE11","styles","isActiveElement","Menu","state","highlightedIndex","unmounted","getChildList","enableIconPadding","Children","toArray","props","children","some","x","isValidElement","icon","map","child","index","modifiedChild","highlight","ref","refHighlighted","bind","cloneElement","onClick","select","onMouseEnter","onMouseLeave","unhighlight","refScrollContainer","scrollContainer","scrollToSelected","highlighted","scrollTo","scrollToTop","scrollToBottom","setState","componentWillUnmount","render","theme","renderMain","up","move","down","enter","event","reset","hasHighlightedItem","highlightItem","isEmpty","getAlignRightClass","root","shadow","hasShadow","getStyle","setRootNode","maxHeight","preventWindowScroll","disableScrollContainer","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","window","open","location","onItemClick","step","activeElements","filter","length","indexOf","Component","__KONTUR_REACT_UI__","defaultProps","align","width","ret","forEach","push","maxWidth","minWidth","alignRight","alignRightIE11","alignRightIE11FixAutoWidth"],"mappings":"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","sourcesContent":["import React, { CSSProperties } from 'react';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { ScrollContainer } from '../../components/ScrollContainer';\nimport { MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { addIconPaddingIfPartOfMenu } from '../InternalMenu/addIconPaddingIfPartOfMenu';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\n\nexport interface MenuProps {\n children: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: () => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n /**\n * Отключение кастомного скролла контейнера\n */\n disableScrollContainer?: boolean;\n align?: 'left' | 'right';\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n}\n\n@rootNode\nexport class Menu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps = {\n align: 'left',\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n };\n\n public state = {\n highlightedIndex: -1,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n this.unmounted = true;\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n this.setState({ highlightedIndex: -1 });\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n this.highlight(index);\n }\n\n private renderMain() {\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx(getAlignRightClass(this.props), {\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={getStyle(this.props)}\n ref={this.setRootNode}\n >\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n disabled={this.props.disableScrollContainer}\n >\n <div className={styles.scrollContainer(this.theme)}>{this.getChildList()}</div>\n </ScrollContainer>\n </div>\n );\n }\n\n private getChildList = () => {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n return React.Children.map(this.props.children, (child, index) => {\n if (!child) {\n return child;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n return child;\n }\n\n const modifiedChild = addIconPaddingIfPartOfMenu(child, enableIconPadding);\n\n if (isActiveElement(modifiedChild)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = modifiedChild.ref;\n if (highlight && typeof modifiedChild.ref !== 'string') {\n ref = this.refHighlighted.bind(this, modifiedChild.ref);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(modifiedChild, {\n ref,\n state: highlight ? 'hover' : modifiedChild.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n\n return modifiedChild;\n });\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick();\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isNonNullable).length;\n }\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n\nconst getStyle = (props: MenuProps): CSSProperties => {\n if (props.align === 'right') {\n return {\n maxWidth: props.width,\n minWidth: props.width,\n maxHeight: props.maxHeight,\n };\n }\n\n return {\n width: props.width,\n maxHeight: props.maxHeight,\n };\n};\n\nconst getAlignRightClass = (props: MenuProps) => {\n if (props.align === 'right') {\n return cx({\n [styles.alignRight()]: !isIE11,\n [styles.alignRightIE11()]: isIE11,\n [styles.alignRightIE11FixAutoWidth()]: isIE11 && props.width === 'auto',\n });\n }\n\n return null;\n};\n"]}
|
|
@@ -33,7 +33,9 @@ export var InternalDateGetter = /*#__PURE__*/function () {
|
|
|
33
33
|
InternalDateGetter.getValueDateComponent = function getValueDateComponent(type, components) {
|
|
34
34
|
if (type === InternalDateComponentType.Year) {
|
|
35
35
|
return components.year;
|
|
36
|
-
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (type === InternalDateComponentType.Month) {
|
|
37
39
|
return components.month;
|
|
38
40
|
}
|
|
39
41
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["InternalDateGetter.ts"],"names":["MAX_DATE","MAX_MONTH","MAX_YEAR","MIN_DATE","MIN_MONTH","MIN_YEAR","InternalDateComponentType","calculateMonth","month","getIsLeapYear","year","isDividableByFour","isDividableByOneHundred","isDividableByFourHundred","InternalDateGetter","getMaxDaysInMonth","isLeapYear","calculatedMonth","getValueDateComponent","type","components","Year","Month","date","getDefaultMin","Date","getDefaultMax","undefined","getTodayComponents","getDate","getMonth","getFullYear","max","datesCustom","sort","a","b","toNumber","min"],"mappings":"AAAA,SAASA,QAAT,EAAmBC,SAAnB,EAA8BC,QAA9B,EAAwCC,QAAxC,EAAkDC,SAAlD,EAA6DC,QAA7D,QAA6E,aAA7E;;AAEA;AACEC,yBADF;;;;AAKO,SALP;;AAOA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,KAAD,EAAmB;AACxC,MAAIA,KAAK,IAAI,CAAb,EAAgB;AACd,WAAOA,KAAK,GAAG,CAAf;AACD;;AAED,SAAOA,KAAP;AACD,CAND;;AAQA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,IAAD,EAAkB;AACtC;AACA,MAAMC,iBAAiB,GAAGD,IAAI,GAAG,CAAP,KAAa,CAAvC;AACA,MAAME,uBAAuB,GAAGF,IAAI,GAAG,GAAP,KAAe,CAA/C;AACA,MAAMG,wBAAwB,GAAGH,IAAI,GAAG,GAAP,KAAe,CAAhD;;AAEA,SAAOC,iBAAiB,IAAIC,uBAArB,IAAgDC,wBAAvD;AACD,CAPD;;AASA,WAAaC,kBAAb;;;;;;;AAOgBC,EAAAA,iBAPhB,GAOE,2BAAgCP,KAAhC,EAA+CE,IAA/C,EAAsE;AACpE,QAAIF,KAAK,KAAK,CAAd,EAAiB;AACf,UAAMQ,UAAU,GAAGN,IAAI,GAAGD,aAAa,CAACC,IAAD,CAAhB,GAAyB,KAAhD;;AAEA,aAAOM,UAAU,GAAG,EAAH,GAAQ,EAAzB;AACD;;AAED,QAAMC,eAAe,GAAGV,cAAc,CAACC,KAAD,CAAtC;AACA,WAAOS,eAAe,GAAG,CAAlB,KAAwB,CAAxB,GAA4B,EAA5B,GAAiC,EAAxC;AACD,GAhBH;;AAkBgBC,EAAAA,qBAlBhB,GAkBE;AACEC,EAAAA,IADF;AAEEC,EAAAA,UAFF;AAG4B;AAC1B,QAAID,IAAI,KAAKb,yBAAyB,CAACe,IAAvC,EAA6C;AAC3C,aAAOD,UAAU,CAACV,IAAlB;AACD,
|
|
1
|
+
{"version":3,"sources":["InternalDateGetter.ts"],"names":["MAX_DATE","MAX_MONTH","MAX_YEAR","MIN_DATE","MIN_MONTH","MIN_YEAR","InternalDateComponentType","calculateMonth","month","getIsLeapYear","year","isDividableByFour","isDividableByOneHundred","isDividableByFourHundred","InternalDateGetter","getMaxDaysInMonth","isLeapYear","calculatedMonth","getValueDateComponent","type","components","Year","Month","date","getDefaultMin","Date","getDefaultMax","undefined","getTodayComponents","getDate","getMonth","getFullYear","max","datesCustom","sort","a","b","toNumber","min"],"mappings":"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","sourcesContent":["import { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from './constants';\nimport { InternalDate } from './InternalDate';\nimport {\n InternalDateComponentType,\n InternalDateComponentsRaw,\n InternalDateComponentRaw,\n InternalDateComponents,\n} from './types';\n\nconst calculateMonth = (month: number) => {\n if (month <= 7) {\n return month + 1;\n }\n\n return month;\n};\n\nconst getIsLeapYear = (year: number) => {\n // The year is considered leap if it's either dividable by 4, 100 or 400.\n const isDividableByFour = year % 4 === 0;\n const isDividableByOneHundred = year % 100 === 0;\n const isDividableByFourHundred = year % 400 === 0;\n\n return isDividableByFour || isDividableByOneHundred || isDividableByFourHundred;\n};\n\nexport class InternalDateGetter {\n public static max = (datesCustom: InternalDate[]): InternalDate =>\n datesCustom.sort((a, b) => b.toNumber() - a.toNumber())[0];\n\n public static min = (datesCustom: InternalDate[]): InternalDate =>\n datesCustom.sort((a, b) => a.toNumber() - b.toNumber())[0];\n\n public static getMaxDaysInMonth(month: number, year?: number): number {\n if (month === 2) {\n const isLeapYear = year ? getIsLeapYear(year) : false;\n\n return isLeapYear ? 29 : 28;\n }\n\n const calculatedMonth = calculateMonth(month);\n return calculatedMonth % 2 === 0 ? 31 : 30;\n }\n\n public static getValueDateComponent(\n type: InternalDateComponentType | null,\n components: InternalDateComponentsRaw,\n ): InternalDateComponentRaw {\n if (type === InternalDateComponentType.Year) {\n return components.year;\n }\n\n if (type === InternalDateComponentType.Month) {\n return components.month;\n }\n\n return components.date;\n }\n\n public static getDefaultMin(type: InternalDateComponentType): number {\n if (type === InternalDateComponentType.Year) {\n return MIN_YEAR;\n } else if (type === InternalDateComponentType.Month) {\n return MIN_MONTH;\n } else if (type === InternalDateComponentType.Date) {\n return MIN_DATE;\n }\n return MIN_DATE;\n }\n\n public static getDefaultMax(type: InternalDateComponentType | null, components?: InternalDateComponents): number {\n if (type === InternalDateComponentType.Year) {\n return MAX_YEAR;\n } else if (type === InternalDateComponentType.Month) {\n return MAX_MONTH;\n } else if (type === InternalDateComponentType.Date) {\n if (components === undefined) {\n return MAX_DATE;\n }\n const { year, month } = components;\n return year && month ? InternalDateGetter.getMaxDaysInMonth(month, year) : MAX_DATE;\n }\n return MAX_DATE;\n }\n\n public static getTodayComponents() {\n const date = new Date();\n return {\n date: date.getDate(),\n month: date.getMonth() + 1,\n year: date.getFullYear(),\n };\n }\n}\n"]}
|
|
@@ -6,7 +6,7 @@ export declare class InternalDateGetter {
|
|
|
6
6
|
static getMaxDaysInMonth(month: number, year?: number): number;
|
|
7
7
|
static getValueDateComponent(type: InternalDateComponentType | null, components: InternalDateComponentsRaw): InternalDateComponentRaw;
|
|
8
8
|
static getDefaultMin(type: InternalDateComponentType): number;
|
|
9
|
-
static getDefaultMax(type: InternalDateComponentType, components?: InternalDateComponents): number;
|
|
9
|
+
static getDefaultMax(type: InternalDateComponentType | null, components?: InternalDateComponents): number;
|
|
10
10
|
static getTodayComponents(): {
|
|
11
11
|
date: number;
|
|
12
12
|
month: number;
|
|
@@ -17,20 +17,40 @@ var calculateEndDate = function calculateEndDate(endDate) {
|
|
|
17
17
|
return Infinity;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
+
var getValue = function getValue(type, _ref) {
|
|
21
|
+
var year = _ref.year,
|
|
22
|
+
month = _ref.month,
|
|
23
|
+
date = _ref.date;
|
|
24
|
+
|
|
25
|
+
if (type === InternalDateComponentType.Year) {
|
|
26
|
+
return year;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (type === InternalDateComponentType.Month) {
|
|
30
|
+
return month;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return date;
|
|
34
|
+
};
|
|
35
|
+
|
|
20
36
|
export var InternalDateValidator = /*#__PURE__*/function () {
|
|
21
37
|
function InternalDateValidator() {}
|
|
22
38
|
|
|
23
|
-
InternalDateValidator.checkForNull = function checkForNull(
|
|
24
|
-
var year =
|
|
25
|
-
month =
|
|
26
|
-
date =
|
|
39
|
+
InternalDateValidator.checkForNull = function checkForNull(_ref2, type) {
|
|
40
|
+
var year = _ref2.year,
|
|
41
|
+
month = _ref2.month,
|
|
42
|
+
date = _ref2.date;
|
|
27
43
|
|
|
28
44
|
if (type !== undefined) {
|
|
29
45
|
if (type === InternalDateComponentType.Year) {
|
|
30
46
|
return year !== null;
|
|
31
|
-
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (type === InternalDateComponentType.Month) {
|
|
32
50
|
return month !== null;
|
|
33
|
-
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (type === InternalDateComponentType.All) {
|
|
34
54
|
return year !== null && month !== null && date !== null;
|
|
35
55
|
}
|
|
36
56
|
|
|
@@ -40,33 +60,27 @@ export var InternalDateValidator = /*#__PURE__*/function () {
|
|
|
40
60
|
return !(year === null || month === null || date === null);
|
|
41
61
|
};
|
|
42
62
|
|
|
43
|
-
InternalDateValidator.checkLimits = function checkLimits(
|
|
44
|
-
var year =
|
|
45
|
-
month =
|
|
46
|
-
date =
|
|
63
|
+
InternalDateValidator.checkLimits = function checkLimits(_ref3, type) {
|
|
64
|
+
var year = _ref3.year,
|
|
65
|
+
month = _ref3.month,
|
|
66
|
+
date = _ref3.date;
|
|
47
67
|
|
|
48
68
|
if (type !== undefined) {
|
|
49
|
-
var
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return date;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
var value = getValue();
|
|
69
|
+
var value = getValue(type, {
|
|
70
|
+
date: date,
|
|
71
|
+
month: month,
|
|
72
|
+
year: year
|
|
73
|
+
});
|
|
60
74
|
return value >= InternalDateGetter.getDefaultMin(type) && value <= InternalDateGetter.getDefaultMax(type);
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
return year >= InternalDateGetter.getDefaultMin(InternalDateComponentType.Year) && year <= InternalDateGetter.getDefaultMax(InternalDateComponentType.Year) && month >= InternalDateGetter.getDefaultMin(InternalDateComponentType.Month) && month <= InternalDateGetter.getDefaultMax(InternalDateComponentType.Month) && date >= InternalDateGetter.getDefaultMin(InternalDateComponentType.Date) && date <= InternalDateGetter.getDefaultMax(InternalDateComponentType.Date);
|
|
64
78
|
};
|
|
65
79
|
|
|
66
|
-
InternalDateValidator.compareWithNativeDate = function compareWithNativeDate(
|
|
67
|
-
var year =
|
|
68
|
-
month =
|
|
69
|
-
date =
|
|
80
|
+
InternalDateValidator.compareWithNativeDate = function compareWithNativeDate(_ref4) {
|
|
81
|
+
var year = _ref4.year,
|
|
82
|
+
month = _ref4.month,
|
|
83
|
+
date = _ref4.date;
|
|
70
84
|
var nativeDate = new Date(Date.UTC(year, month - 1, date));
|
|
71
85
|
return nativeDate.getUTCFullYear() === year && nativeDate.getUTCMonth() + 1 === month && nativeDate.getUTCDate() === date;
|
|
72
86
|
};
|
|
@@ -81,30 +95,30 @@ export var InternalDateValidator = /*#__PURE__*/function () {
|
|
|
81
95
|
return date >= calculatedStartDate && date <= calculatedEndDate;
|
|
82
96
|
};
|
|
83
97
|
|
|
84
|
-
InternalDateValidator.checkRangePiecemeal = function checkRangePiecemeal(type,
|
|
85
|
-
var year =
|
|
86
|
-
month =
|
|
87
|
-
date =
|
|
98
|
+
InternalDateValidator.checkRangePiecemeal = function checkRangePiecemeal(type, _ref5, startComponents, endComponents) {
|
|
99
|
+
var year = _ref5.year,
|
|
100
|
+
month = _ref5.month,
|
|
101
|
+
date = _ref5.date;
|
|
88
102
|
|
|
89
103
|
if (startComponents === null && endComponents === null) {
|
|
90
104
|
return true;
|
|
91
105
|
}
|
|
92
106
|
|
|
93
|
-
var
|
|
94
|
-
_ref5$year = _ref5.year,
|
|
95
|
-
startYear = _ref5$year === void 0 ? -Infinity : _ref5$year,
|
|
96
|
-
_ref5$month = _ref5.month,
|
|
97
|
-
startMonth = _ref5$month === void 0 ? -Infinity : _ref5$month,
|
|
98
|
-
_ref5$date = _ref5.date,
|
|
99
|
-
startDate = _ref5$date === void 0 ? -Infinity : _ref5$date;
|
|
100
|
-
|
|
101
|
-
var _ref6 = endComponents || {},
|
|
107
|
+
var _ref6 = startComponents || {},
|
|
102
108
|
_ref6$year = _ref6.year,
|
|
103
|
-
|
|
109
|
+
startYear = _ref6$year === void 0 ? -Infinity : _ref6$year,
|
|
104
110
|
_ref6$month = _ref6.month,
|
|
105
|
-
|
|
111
|
+
startMonth = _ref6$month === void 0 ? -Infinity : _ref6$month,
|
|
106
112
|
_ref6$date = _ref6.date,
|
|
107
|
-
|
|
113
|
+
startDate = _ref6$date === void 0 ? -Infinity : _ref6$date;
|
|
114
|
+
|
|
115
|
+
var _ref7 = endComponents || {},
|
|
116
|
+
_ref7$year = _ref7.year,
|
|
117
|
+
endYear = _ref7$year === void 0 ? Infinity : _ref7$year,
|
|
118
|
+
_ref7$month = _ref7.month,
|
|
119
|
+
endMonth = _ref7$month === void 0 ? Infinity : _ref7$month,
|
|
120
|
+
_ref7$date = _ref7.date,
|
|
121
|
+
endDate = _ref7$date === void 0 ? Infinity : _ref7$date;
|
|
108
122
|
|
|
109
123
|
if (type === InternalDateComponentType.Year) {
|
|
110
124
|
return !(year < startYear || year > endYear);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["InternalDateValidator.ts"],"names":["InternalDateGetter","InternalDateComponentType","calculateStartDate","startDate","Infinity","calculateEndDate","endDate","
|
|
1
|
+
{"version":3,"sources":["InternalDateValidator.ts"],"names":["InternalDateGetter","InternalDateComponentType","calculateStartDate","startDate","Infinity","calculateEndDate","endDate","getValue","type","year","month","date","Year","Month","InternalDateValidator","checkForNull","undefined","All","checkLimits","value","getDefaultMin","getDefaultMax","Date","compareWithNativeDate","nativeDate","UTC","getUTCFullYear","getUTCMonth","getUTCDate","checkRangeFully","calculatedEndDate","calculatedStartDate","checkRangePiecemeal","startComponents","endComponents","startYear","startMonth","endYear","endMonth","testParseToNumber","Number","isNaN","parseInt","isEqualDateValues","a","b","toInternalString","isEqualDateFormats","getOrder","getSeparator"],"mappings":";AACA,SAASA,kBAAT,QAAmC,sBAAnC;AACA;;;;AAIEC,yBAJF;AAKO,SALP;;AAOA,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,SAAD,EAA8B;AACvD,MAAIA,SAAJ,EAAe;AACb,WAAOA,SAAP;AACD;;AAED,SAAO,CAACC,QAAR;AACD,CAND;;AAQA,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,OAAD,EAA4B;AACnD,MAAIA,OAAJ,EAAa;AACX,WAAOA,OAAP;AACD;;AAED,SAAOF,QAAP;AACD,CAND;;AAQA,IAAMG,QAAQ,GAAG,SAAXA,QAAW,CAACC,IAAD,QAA0F,KAAtDC,IAAsD,QAAtDA,IAAsD,CAAhDC,KAAgD,QAAhDA,KAAgD,CAAzCC,IAAyC,QAAzCA,IAAyC;AACzG,MAAIH,IAAI,KAAKP,yBAAyB,CAACW,IAAvC,EAA6C;AAC3C,WAAOH,IAAP;AACD;;AAED,MAAID,IAAI,KAAKP,yBAAyB,CAACY,KAAvC,EAA8C;AAC5C,WAAOH,KAAP;AACD;;AAED,SAAOC,IAAP;AACD,CAVD;;AAYA,WAAaG,qBAAb;AACgBC,EAAAA,YADhB,GACE,6BAA6EP,IAA7E,EAA+G,KAAlFC,IAAkF,SAAlFA,IAAkF,CAA5EC,KAA4E,SAA5EA,KAA4E,CAArEC,IAAqE,SAArEA,IAAqE;AAC7G,QAAIH,IAAI,KAAKQ,SAAb,EAAwB;AACtB,UAAIR,IAAI,KAAKP,yBAAyB,CAACW,IAAvC,EAA6C;AAC3C,eAAOH,IAAI,KAAK,IAAhB;AACD;;AAED,UAAID,IAAI,KAAKP,yBAAyB,CAACY,KAAvC,EAA8C;AAC5C,eAAOH,KAAK,KAAK,IAAjB;AACD;;AAED,UAAIF,IAAI,KAAKP,yBAAyB,CAACgB,GAAvC,EAA4C;AAC1C,eAAOR,IAAI,KAAK,IAAT,IAAiBC,KAAK,KAAK,IAA3B,IAAmCC,IAAI,KAAK,IAAnD;AACD;;AAED,aAAOA,IAAI,KAAK,IAAhB;AACD;;AAED,WAAO,EAAEF,IAAI,KAAK,IAAT,IAAiBC,KAAK,KAAK,IAA3B,IAAmCC,IAAI,KAAK,IAA9C,CAAP;AACD,GAnBH;;AAqBgBO,EAAAA,WArBhB,GAqBE;;AAEEV,EAAAA,IAFF;AAGW,OAFPC,IAEO,SAFPA,IAEO,CAFDC,KAEC,SAFDA,KAEC,CAFMC,IAEN,SAFMA,IAEN;AACT,QAAIH,IAAI,KAAKQ,SAAb,EAAwB;AACtB,UAAMG,KAAK,GAAGZ,QAAQ,CAACC,IAAD,EAAO,EAAEG,IAAI,EAAJA,IAAF,EAAQD,KAAK,EAALA,KAAR,EAAeD,IAAI,EAAJA,IAAf,EAAP,CAAtB;;AAEA,aAAOU,KAAK,IAAInB,kBAAkB,CAACoB,aAAnB,CAAiCZ,IAAjC,CAAT,IAAmDW,KAAK,IAAInB,kBAAkB,CAACqB,aAAnB,CAAiCb,IAAjC,CAAnE;AACD;;AAED;AACEC,MAAAA,IAAI,IAAIT,kBAAkB,CAACoB,aAAnB,CAAiCnB,yBAAyB,CAACW,IAA3D,CAAR;AACAH,MAAAA,IAAI,IAAIT,kBAAkB,CAACqB,aAAnB,CAAiCpB,yBAAyB,CAACW,IAA3D,CADR;AAEAF,MAAAA,KAAK,IAAIV,kBAAkB,CAACoB,aAAnB,CAAiCnB,yBAAyB,CAACY,KAA3D,CAFT;AAGAH,MAAAA,KAAK,IAAIV,kBAAkB,CAACqB,aAAnB,CAAiCpB,yBAAyB,CAACY,KAA3D,CAHT;AAIAF,MAAAA,IAAI,IAAIX,kBAAkB,CAACoB,aAAnB,CAAiCnB,yBAAyB,CAACqB,IAA3D,CAJR;AAKAX,MAAAA,IAAI,IAAIX,kBAAkB,CAACqB,aAAnB,CAAiCpB,yBAAyB,CAACqB,IAA3D,CANV;;AAQD,GAvCH;;AAyCgBC,EAAAA,qBAzChB,GAyCE,sCAAkG,KAA5Dd,IAA4D,SAA5DA,IAA4D,CAAtDC,KAAsD,SAAtDA,KAAsD,CAA/CC,IAA+C,SAA/CA,IAA+C;AAChG,QAAMa,UAAgB,GAAG,IAAIF,IAAJ,CAASA,IAAI,CAACG,GAAL,CAAShB,IAAT,EAAeC,KAAK,GAAG,CAAvB,EAA0BC,IAA1B,CAAT,CAAzB;AACA;AACEa,MAAAA,UAAU,CAACE,cAAX,OAAgCjB,IAAhC,IAAwCe,UAAU,CAACG,WAAX,KAA2B,CAA3B,KAAiCjB,KAAzE,IAAkFc,UAAU,CAACI,UAAX,OAA4BjB,IADhH;;AAGD,GA9CH;;AAgDgBkB,EAAAA,eAhDhB,GAgDE,yBAA8BlB,IAA9B,EAA4CR,SAA5C,EAAsEG,OAAtE,EAAuG;AACrG,QAAIH,SAAS,KAAK,IAAd,IAAsBG,OAAO,KAAK,IAAtC,EAA4C;AAC1C,aAAO,IAAP;AACD;;AAED,QAAMwB,iBAAiB,GAAGzB,gBAAgB,CAACC,OAAD,CAA1C;AACA,QAAMyB,mBAAmB,GAAG7B,kBAAkB,CAACC,SAAD,CAA9C;AACA,WAAOQ,IAAI,IAAIoB,mBAAR,IAA+BpB,IAAI,IAAImB,iBAA9C;AACD,GAxDH;;AA0DgBE,EAAAA,mBA1DhB,GA0DE;AACExB,EAAAA,IADF;;AAGEyB,EAAAA,eAHF;AAIEC,EAAAA,aAJF;AAKW,OAHPzB,IAGO,SAHPA,IAGO,CAHDC,KAGC,SAHDA,KAGC,CAHMC,IAGN,SAHMA,IAGN;AACT,QAAIsB,eAAe,KAAK,IAApB,IAA4BC,aAAa,KAAK,IAAlD,EAAwD;AACtD,aAAO,IAAP;AACD;AACD;;;;AAIID,IAAAA,eAAe,IAAI,EAJvB,oBACExB,IADF,CACQ0B,SADR,2BACoB,CAAC/B,QADrB,kCAEEM,KAFF,CAES0B,UAFT,4BAEsB,CAAChC,QAFvB,kCAGEO,IAHF,CAGQR,SAHR,2BAGoB,CAACC,QAHrB;AAKA,gBAA2F8B,aAAa,IAAI,EAA5G,oBAAQzB,IAAR,CAAc4B,OAAd,2BAAwBjC,QAAxB,kCAAkCM,KAAlC,CAAyC4B,QAAzC,4BAAoDlC,QAApD,kCAA8DO,IAA9D,CAAoEL,OAApE,2BAA8EF,QAA9E;;AAEA,QAAII,IAAI,KAAKP,yBAAyB,CAACW,IAAvC,EAA6C;AAC3C,aAAO,EAAEH,IAAI,GAAG0B,SAAP,IAAoB1B,IAAI,GAAG4B,OAA7B,CAAP;AACD,KAFD,MAEO,IAAI7B,IAAI,KAAKP,yBAAyB,CAACY,KAAvC,EAA8C;AACnD,aAAO,EAAGJ,IAAI,KAAK0B,SAAT,IAAsBzB,KAAK,GAAG0B,UAA/B,IAA+C3B,IAAI,KAAK4B,OAAT,IAAoB3B,KAAK,GAAG4B,QAA7E,CAAP;AACD,KAFM,MAEA,IAAI9B,IAAI,KAAKP,yBAAyB,CAACqB,IAAvC,EAA6C;AAClD,aAAO;AACJb,MAAAA,IAAI,KAAK0B,SAAT,IAAsBzB,KAAK,KAAK0B,UAAhC,IAA8CzB,IAAI,GAAGR,SAAtD;AACCM,MAAAA,IAAI,KAAK4B,OAAT,IAAoB3B,KAAK,KAAK4B,QAA9B,IAA0C3B,IAAI,GAAGL,OAF7C,CAAP;;AAID;AACD,WAAO,IAAP;AACD,GArFH;;AAuFgBiC,EAAAA,iBAvFhB,GAuFE,2BAAgCpB,KAAhC,EAA0E;AACxE,WAAOA,KAAK,KAAK,IAAV,KAAmB,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAACqB,MAAM,CAACC,KAAP,CAAaC,QAAQ,CAACvB,KAAD,EAAQ,EAAR,CAArB,CAAjD,CAAP;AACD,GAzFH;;AA2FgBwB,EAAAA,iBA3FhB,GA2FE,2BAAgCC,CAAhC,EAAiDC,CAAjD,EAA2E;AACzE,WAAOD,CAAC,CAACE,gBAAF,OAAyBD,CAAC,CAACC,gBAAF,EAAhC;AACD,GA7FH;;AA+FgBC,EAAAA,kBA/FhB,GA+FE,4BAAiCH,CAAjC,EAAkDC,CAAlD,EAA4E;AAC1E,WAAOD,CAAC,CAACI,QAAF,OAAiBH,CAAC,CAACG,QAAF,EAAjB,IAAiCJ,CAAC,CAACK,YAAF,OAAqBJ,CAAC,CAACI,YAAF,EAA7D;AACD,GAjGH","sourcesContent":["import { InternalDate } from './InternalDate';\nimport { InternalDateGetter } from './InternalDateGetter';\nimport {\n InternalDateComponentRaw,\n InternalDateComponentsNumber,\n InternalDateComponentsRaw,\n InternalDateComponentType,\n} from './types';\n\nconst calculateStartDate = (startDate: number | null) => {\n if (startDate) {\n return startDate;\n }\n\n return -Infinity;\n};\n\nconst calculateEndDate = (endDate: number | null) => {\n if (endDate) {\n return endDate;\n }\n\n return Infinity;\n};\n\nconst getValue = (type: InternalDateComponentType, { year, month, date }: InternalDateComponentsNumber) => {\n if (type === InternalDateComponentType.Year) {\n return year;\n }\n\n if (type === InternalDateComponentType.Month) {\n return month;\n }\n\n return date;\n};\n\nexport class InternalDateValidator {\n public static checkForNull({ year, month, date }: InternalDateComponentsRaw, type?: InternalDateComponentType) {\n if (type !== undefined) {\n if (type === InternalDateComponentType.Year) {\n return year !== null;\n }\n\n if (type === InternalDateComponentType.Month) {\n return month !== null;\n }\n\n if (type === InternalDateComponentType.All) {\n return year !== null && month !== null && date !== null;\n }\n\n return date !== null;\n }\n\n return !(year === null || month === null || date === null);\n }\n\n public static checkLimits(\n { year, month, date }: InternalDateComponentsNumber,\n type?: InternalDateComponentType,\n ): boolean {\n if (type !== undefined) {\n const value = getValue(type, { date, month, year });\n\n return value >= InternalDateGetter.getDefaultMin(type) && value <= InternalDateGetter.getDefaultMax(type);\n }\n\n return (\n year >= InternalDateGetter.getDefaultMin(InternalDateComponentType.Year) &&\n year <= InternalDateGetter.getDefaultMax(InternalDateComponentType.Year) &&\n month >= InternalDateGetter.getDefaultMin(InternalDateComponentType.Month) &&\n month <= InternalDateGetter.getDefaultMax(InternalDateComponentType.Month) &&\n date >= InternalDateGetter.getDefaultMin(InternalDateComponentType.Date) &&\n date <= InternalDateGetter.getDefaultMax(InternalDateComponentType.Date)\n );\n }\n\n public static compareWithNativeDate({ year, month, date }: InternalDateComponentsNumber): boolean {\n const nativeDate: Date = new Date(Date.UTC(year, month - 1, date));\n return (\n nativeDate.getUTCFullYear() === year && nativeDate.getUTCMonth() + 1 === month && nativeDate.getUTCDate() === date\n );\n }\n\n public static checkRangeFully(date: number, startDate: number | null, endDate: number | null): boolean {\n if (startDate === null && endDate === null) {\n return true;\n }\n\n const calculatedEndDate = calculateEndDate(endDate);\n const calculatedStartDate = calculateStartDate(startDate);\n return date >= calculatedStartDate && date <= calculatedEndDate;\n }\n\n public static checkRangePiecemeal(\n type: InternalDateComponentType,\n { year, month, date }: InternalDateComponentsNumber,\n startComponents: InternalDateComponentsNumber | null,\n endComponents: InternalDateComponentsNumber | null,\n ): boolean {\n if (startComponents === null && endComponents === null) {\n return true;\n }\n const {\n year: startYear = -Infinity,\n month: startMonth = -Infinity,\n date: startDate = -Infinity,\n } = startComponents || {};\n const { year: endYear = Infinity, month: endMonth = Infinity, date: endDate = Infinity } = endComponents || {};\n\n if (type === InternalDateComponentType.Year) {\n return !(year < startYear || year > endYear);\n } else if (type === InternalDateComponentType.Month) {\n return !((year === startYear && month < startMonth) || (year === endYear && month > endMonth));\n } else if (type === InternalDateComponentType.Date) {\n return !(\n (year === startYear && month === startMonth && date < startDate) ||\n (year === endYear && month === endMonth && date > endDate)\n );\n }\n return true;\n }\n\n public static testParseToNumber(value: InternalDateComponentRaw): boolean {\n return value !== null && (typeof value === 'number' || !Number.isNaN(parseInt(value, 10)));\n }\n\n public static isEqualDateValues(a: InternalDate, b: InternalDate): boolean {\n return a.toInternalString() === b.toInternalString();\n }\n\n public static isEqualDateFormats(a: InternalDate, b: InternalDate): boolean {\n return a.getOrder() === b.getOrder() && a.getSeparator() === b.getSeparator();\n }\n}\n"]}
|