@consta/uikit 4.15.0 → 4.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/__internal__/src/components/Combobox/Combobox.js +1 -1
  2. package/__internal__/src/components/Combobox/Combobox.js.map +1 -1
  3. package/__internal__/src/components/Combobox/helpers.d.ts +14 -6
  4. package/__internal__/src/components/Combobox/helpers.js.map +1 -1
  5. package/__internal__/src/components/DatePicker/DatePickerFieldTypeDate/helpers.js +1 -1
  6. package/__internal__/src/components/DatePicker/DatePickerFieldTypeDate/helpers.js.map +1 -1
  7. package/__internal__/src/components/DatePicker/DatePickerFieldTypeDateTime/helpers.js +1 -1
  8. package/__internal__/src/components/DatePicker/DatePickerFieldTypeDateTime/helpers.js.map +1 -1
  9. package/__internal__/src/components/DatePicker/DatePickerFieldTypeMonth/helpers.js +1 -1
  10. package/__internal__/src/components/DatePicker/DatePickerFieldTypeMonth/helpers.js.map +1 -1
  11. package/__internal__/src/components/DatePicker/DatePickerFieldTypeTime/helpers.js +1 -1
  12. package/__internal__/src/components/DatePicker/DatePickerFieldTypeTime/helpers.js.map +1 -1
  13. package/__internal__/src/components/DatePicker/DatePickerFieldTypeYear/helpers.js +1 -1
  14. package/__internal__/src/components/DatePicker/DatePickerFieldTypeYear/helpers.js.map +1 -1
  15. package/__internal__/src/components/DatePicker/helpers.d.ts +1 -0
  16. package/__internal__/src/components/DatePicker/helpers.js +1 -1
  17. package/__internal__/src/components/DatePicker/helpers.js.map +1 -1
  18. package/__internal__/src/components/SelectComponents/SelectDropdown/SelectDropdown.d.ts +5 -2
  19. package/__internal__/src/components/SelectComponents/SelectDropdown/SelectDropdown.js +1 -1
  20. package/__internal__/src/components/SelectComponents/SelectDropdown/SelectDropdown.js.map +1 -1
  21. package/__internal__/src/components/SelectComponents/SelectItem/SelectItem.d.ts +2 -0
  22. package/__internal__/src/components/SelectComponents/SelectItem/SelectItem.js +1 -1
  23. package/__internal__/src/components/SelectComponents/SelectItem/SelectItem.js.map +1 -1
  24. package/__internal__/src/components/SelectComponents/SelectItemAll/SelectItemAll.css +1 -0
  25. package/__internal__/src/components/SelectComponents/SelectItemAll/SelectSelectAll.d.ts +13 -0
  26. package/__internal__/src/components/SelectComponents/SelectItemAll/SelectSelectAll.js +2 -0
  27. package/__internal__/src/components/SelectComponents/SelectItemAll/SelectSelectAll.js.map +1 -0
  28. package/__internal__/src/components/TagBase/TagBase.d.ts +1 -1
  29. package/__internal__/src/hooks/useBreakpoints/addPrefix.d.ts +1 -0
  30. package/__internal__/src/hooks/useBreakpoints/addPrefix.js +2 -0
  31. package/__internal__/src/hooks/useBreakpoints/addPrefix.js.map +1 -0
  32. package/__internal__/src/hooks/useBreakpoints/index.d.ts +1 -0
  33. package/__internal__/src/hooks/useBreakpoints/index.js +1 -1
  34. package/__internal__/src/hooks/useBreakpoints/index.js.map +1 -1
  35. package/__internal__/src/hooks/useSelect/useSelect.d.ts +5 -2
  36. package/__internal__/src/hooks/useSelect/useSelect.js +1 -1
  37. package/__internal__/src/hooks/useSelect/useSelect.js.map +1 -1
  38. package/__internal__/src/utils/getGroups.d.ts +12 -0
  39. package/__internal__/src/utils/getGroups.js +1 -1
  40. package/__internal__/src/utils/getGroups.js.map +1 -1
  41. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["addHours","addMinutes","addSeconds","format","isValid","isWithinInterval","parse","startOfDay","startOfHour","startOfMinute","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","getLabelHours","getLabelMinutes","getLabelSeconds","datePickerPropFormatTypeTime","getParts","getPartsDate","getTimeEnum","datePickerErrorTypes","usePicker","props","value","onChange","onError","multiplicityHours","multiplicityMinutes","multiplicitySeconds","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","formatParts","handleChange","e","current","partsTime","HH","mm","ss","filter","item","length","date","Date","start","end","type","getTime","options","mask","pattern","blocks","MaskedEnum","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeTime/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport {\n addHours,\n addMinutes,\n addSeconds,\n format,\n isValid,\n isWithinInterval,\n parse,\n startOfDay,\n startOfHour,\n startOfMinute,\n} from 'date-fns';\nimport IMask from 'imask';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n getLabelHours,\n getLabelMinutes,\n getLabelSeconds,\n} from '../../DateTime/helpers';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropFormatTypeTime,\n getParts,\n getPartsDate,\n getTimeEnum,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeTimePropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeTimeProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeTimePropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n multiplicitySeconds?: number;\n multiplicityMinutes?: number;\n multiplicityHours?: number;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeTimePropOnChange;\n onError?: DatePickerPropOnError;\n multiplicityHours: number | undefined;\n multiplicitySeconds: number | undefined;\n multiplicityMinutes: number | undefined;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const formatParts = useMemo(\n () => getParts(formatProp, ':'),\n [formatProp, separator],\n );\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n const partsTime = getPartsDate(stringValue, formatProp, ':', false, [\n 'HH',\n 'mm',\n 'ss',\n ]);\n\n const [HH, mm, ss] = partsTime;\n if (partsTime.filter((item) => !!item).length === formatParts.length) {\n const date = parse(\n `${HH}:${mm}:${ss}`,\n datePickerPropFormatTypeTime,\n value || new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n date,\n HH,\n mm,\n ss,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n HH:\n multiplicityHours && multiplicityHours > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 24,\n multiplicityHours,\n startOfDay,\n addHours,\n getLabelHours,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 23,\n },\n mm:\n multiplicityMinutes && multiplicityMinutes > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicityMinutes,\n startOfHour,\n addMinutes,\n getLabelMinutes,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n ss:\n multiplicitySeconds && multiplicitySeconds > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicitySeconds,\n startOfMinute,\n addSeconds,\n getLabelSeconds,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const [HH, mm, ss] = getPartsDate(string, formatProp, ':', false, [\n 'HH',\n 'mm',\n 'ss',\n ]);\n if (\n HH &&\n mm &&\n ss &&\n !isValid(\n parse(\n `${HH}:${mm}:${ss}`,\n datePickerPropFormatTypeTime,\n new Date(),\n ),\n )\n ) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n HH,\n mm,\n ss,\n });\n return false;\n }\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [\n formatProp,\n separator,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n ],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","names":["addHours","addMinutes","addSeconds","format","isValid","isWithinInterval","parse","startOfDay","startOfHour","startOfMinute","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","getLabelHours","getLabelMinutes","getLabelSeconds","getPartDate","getParts","getPartsDate","getTimeEnum","datePickerErrorTypes","usePicker","props","value","onChange","onError","multiplicityHours","multiplicityMinutes","multiplicitySeconds","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","formatArray","valueArray","validArray","map","marker","filter","item","length","date","join","Date","start","end","HH","mm","ss","type","getTime","options","mask","pattern","blocks","MaskedEnum","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeTime/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport {\n addHours,\n addMinutes,\n addSeconds,\n format,\n isValid,\n isWithinInterval,\n parse,\n startOfDay,\n startOfHour,\n startOfMinute,\n} from 'date-fns';\nimport IMask from 'imask';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n getLabelHours,\n getLabelMinutes,\n getLabelSeconds,\n} from '../../DateTime/helpers';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport { getPartDate, getParts, getPartsDate, getTimeEnum } from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeTimePropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeTimeProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeTimePropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n multiplicitySeconds?: number;\n multiplicityMinutes?: number;\n multiplicityHours?: number;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeTimePropOnChange;\n onError?: DatePickerPropOnError;\n multiplicityHours: number | undefined;\n multiplicitySeconds: number | undefined;\n multiplicityMinutes: number | undefined;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(stringValue, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (formatArray.length === validArray.length) {\n const date = parse(\n valueArray.join(':'),\n formatArray.join(':'),\n value || new Date(),\n );\n\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n const [HH, mm, ss] = getPartsDate(\n stringValue,\n formatProp,\n ':',\n false,\n ['HH', 'mm', 'ss'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n date,\n HH,\n mm,\n ss,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n HH:\n multiplicityHours && multiplicityHours > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 24,\n multiplicityHours,\n startOfDay,\n addHours,\n getLabelHours,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 23,\n },\n mm:\n multiplicityMinutes && multiplicityMinutes > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicityMinutes,\n startOfHour,\n addMinutes,\n getLabelMinutes,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n ss:\n multiplicitySeconds && multiplicitySeconds > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicitySeconds,\n startOfMinute,\n addSeconds,\n getLabelSeconds,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(string, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (\n formatArray.length === validArray.length &&\n !isValid(\n parse(valueArray.join(':'), formatArray.join(':'), new Date()),\n )\n ) {\n const [HH, mm, ss] = getPartsDate(string, formatProp, ':', false, [\n 'HH',\n 'mm',\n 'ss',\n ]);\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n HH,\n mm,\n ss,\n });\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [\n formatProp,\n separator,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n ],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{format as _format,isValid,isWithinInterval,parse as _parse}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef";import{datePickerPropFormatTypeYear,getPartsDate}from"../helpers";import{datePickerErrorTypes}from"../types";export var usePicker=function(a){var b=a.value,c=a.onChange,d=a.onError,f=a.format,g=a.separator,h=a.maxDate,i=a.minDate,j=useMutableRef(c),k=useMutableRef(b),l=useMutableRef(d),m=useState(b&&isValid(b)?_format(b,f):null),n=_slicedToArray(m,2),o=n[0],p=n[1],q=useMutableRef(o),r=useCallback(function(a){var b=a.e,c=a.value;if(q.current!==c){p(c);var d=j.current,e=k.current;if(d){if(!c)return void(e&&d({e:b,value:null}));var m=getPartsDate(c,f,g,!1,["yyyy"]),n=_slicedToArray(m,1),o=n[0];if(o){var s=_parse("".concat(o),datePickerPropFormatTypeYear,new Date);if(!isWithinInterval(s,{start:i,end:h})){var r;return null===(r=l.current)||void 0===r?void 0:r.call(l,{type:datePickerErrorTypes[0],stringValue:c,yyyy:o,date:s}),void(e&&d({e:b,value:null}))}d({e:b,value:s})}else e&&d({e:b,value:null})}}},[null===i||void 0===i?void 0:i.getTime(),null===h||void 0===h?void 0:h.getTime(),f,g]),s=useMemo(function(){return{mask:Date,pattern:f,blocks:{yyyy:{mask:IMask.MaskedRange,from:1,to:9999}},lazy:!0,autofix:!0,format:function format(a){return _format(a,f)},parse:function parse(a){return _parse(a,f,new Date)},validate:function validate(a){var b=getPartsDate(a,f,g,!1,["yyyy"]),c=_slicedToArray(b,1),e=c[0];return!e||isValid(_parse("".concat(e),datePickerPropFormatTypeYear,new Date))||(d&&d({type:datePickerErrorTypes[1],stringValue:a,yyyy:e}),!1)}}},[f,g]),t=useIMask({value:o,onChange:function(a,b){return null===r||void 0===r?void 0:r(b)},maskOptions:s}),u=t.inputRef;return useEffect(function(){b&&isValid(b)?p(_format(b,f)):(null===o||void 0===o?void 0:o.length)===f.length&&p("")},[null===b||void 0===b?void 0:b.getTime()]),{stringValue:o,inputRef:u,clearValue:function clearValue(a){p(null),null===c||void 0===c?void 0:c({e:a,value:null})}}};
1
+ import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{format as _format,isValid,isWithinInterval,parse as _parse}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef";import{datePickerPropSeparatorDefault,getPartDate,getParts,getPartsDate}from"../helpers";import{datePickerErrorTypes}from"../types";export var usePicker=function(a){var b=a.value,c=a.onChange,d=a.onError,f=a.format,g=a.separator,h=a.maxDate,i=a.minDate,j=useMutableRef(c),k=useMutableRef(b),l=useMutableRef(d),m=useState(b&&isValid(b)?_format(b,f):null),n=_slicedToArray(m,2),o=n[0],p=n[1],q=useMutableRef(o),r=useCallback(function(a){var b=a.e,c=a.value;if(q.current!==c){p(c);var d=j.current,e=k.current;if(d){if(!c)return void(e&&d({e:b,value:null}));var m=getParts(f,g,!1),n=getParts(c,g,!1),o=m.map(function(a){return getPartDate(m,n,a)}).filter(function(a){return!!a});if(m.length===o.length){var v=_parse(n.join(datePickerPropSeparatorDefault),m.join(datePickerPropSeparatorDefault),new Date);if(!isWithinInterval(v,{start:i,end:h})){var r,s=getPartsDate(c,f,g,!1,["yyyy"]),t=_slicedToArray(s,1),u=t[0];return null===(r=l.current)||void 0===r?void 0:r.call(l,{type:datePickerErrorTypes[0],stringValue:c,yyyy:u,date:v}),void(e&&d({e:b,value:null}))}d({e:b,value:v})}else e&&d({e:b,value:null})}}},[null===i||void 0===i?void 0:i.getTime(),null===h||void 0===h?void 0:h.getTime(),f,g]),s=useMemo(function(){return{mask:Date,pattern:f,blocks:{yyyy:{mask:IMask.MaskedRange,from:1,to:9999}},lazy:!0,autofix:!0,format:function format(a){return _format(a,f)},parse:function parse(a){return _parse(a,f,new Date)},validate:function validate(a){var b=getParts(f,g,!1),c=getParts(a,g,!1),d=b.map(function(a){return getPartDate(b,c,a)}).filter(function(a){return!!a});if(b.length===d.length&&!isValid(_parse(c.join(datePickerPropSeparatorDefault),b.join(datePickerPropSeparatorDefault),new Date))){var e,h=getPartsDate(a,f,g,!1,["yyyy"]),i=_slicedToArray(h,1),j=i[0];return null===(e=l.current)||void 0===e?void 0:e.call(l,{type:datePickerErrorTypes[1],stringValue:a,yyyy:j}),!1}return!0}}},[f,g]),t=useIMask({value:o,onChange:function(a,b){return null===r||void 0===r?void 0:r(b)},maskOptions:s}),u=t.inputRef;return useEffect(function(){b&&isValid(b)?p(_format(b,f)):(null===o||void 0===o?void 0:o.length)===f.length&&p("")},[null===b||void 0===b?void 0:b.getTime()]),{stringValue:o,inputRef:u,clearValue:function clearValue(a){p(null),null===c||void 0===c?void 0:c({e:a,value:null})}}};
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["format","isValid","isWithinInterval","parse","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","datePickerPropFormatTypeYear","getPartsDate","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","yyyy","date","Date","start","end","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","length","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeYear/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport { format, isValid, isWithinInterval, parse } from 'date-fns';\nimport IMask from 'imask';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\nimport { useMutableRef } from '##/hooks/useMutableRef';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport { datePickerPropFormatTypeYear, getPartsDate } from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeYearPropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeYearProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeYearPropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeYearPropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n\n setStringValue(stringValue);\n\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const [yyyy] = getPartsDate(stringValue, formatProp, separator, false, [\n 'yyyy',\n ]);\n\n if (yyyy) {\n const date = parse(\n `${yyyy}`,\n datePickerPropFormatTypeYear,\n new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n yyyy,\n date,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const [yyyy] = getPartsDate(string, formatProp, separator, false, [\n 'yyyy',\n ]);\n\n if (\n yyyy &&\n !isValid(parse(`${yyyy}`, datePickerPropFormatTypeYear, new Date()))\n ) {\n onError &&\n onError({\n type: datePickerErrorTypes[1],\n stringValue: string,\n yyyy,\n });\n\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [formatProp, separator],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","names":["format","isValid","isWithinInterval","parse","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","datePickerPropSeparatorDefault","getPartDate","getParts","getPartsDate","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","formatArray","valueArray","validArray","map","marker","filter","item","length","date","join","Date","start","end","yyyy","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeYear/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport { format, isValid, isWithinInterval, parse } from 'date-fns';\nimport IMask from 'imask';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\nimport { useMutableRef } from '##/hooks/useMutableRef';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropSeparatorDefault,\n getPartDate,\n getParts,\n getPartsDate,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeYearPropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeYearProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeYearPropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeYearPropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n\n setStringValue(stringValue);\n\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(stringValue, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (formatArray.length === validArray.length) {\n const date = parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n const [yyyy] = getPartsDate(\n stringValue,\n formatProp,\n separator,\n false,\n ['yyyy'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n yyyy,\n date,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(string, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (\n formatArray.length === validArray.length &&\n !isValid(\n parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n ),\n )\n ) {\n const [yyyy] = getPartsDate(string, formatProp, separator, false, [\n 'yyyy',\n ]);\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n\n yyyy,\n });\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [formatProp, separator],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"iEACA,OAASA,MAAM,GAANA,QAAT,CAAiBC,OAAjB,CAA0BC,gBAA1B,CAA4CC,KAAK,GAALA,OAA5C,KAAyD,UAAzD,CACA,MAAOC,MAAP,KAAkB,OAAlB,CACA,OAASC,WAAT,CAAsBC,SAAtB,CAAiCC,OAAjC,CAA0CC,QAA1C,KAA0D,OAA1D,CAEA,OAASC,QAAT,uBACA,OAASC,aAAT,oCAUA,OACEC,8BADF,CAEEC,WAFF,CAGEC,QAHF,CAIEC,YAJF,kBAMA,OAASC,oBAAT,gBA0DA,MAAO,IAAMC,UAAS,CAAG,SAACC,CAAD,CAA2B,IAEhDC,EAFgD,CAS9CD,CAT8C,CAEhDC,KAFgD,CAGhDC,CAHgD,CAS9CF,CAT8C,CAGhDE,QAHgD,CAIhDC,CAJgD,CAS9CH,CAT8C,CAIhDG,OAJgD,CAKxCC,CALwC,CAS9CJ,CAT8C,CAKhDjB,MALgD,CAMhDsB,CANgD,CAS9CL,CAT8C,CAMhDK,SANgD,CAOhDC,CAPgD,CAS9CN,CAT8C,CAOhDM,OAPgD,CAQhDC,CARgD,CAS9CP,CAT8C,CAQhDO,OARgD,CAU5CC,CAAW,CAAGf,aAAa,CAACS,CAAD,CAViB,CAW5CO,CAAQ,CAAGhB,aAAa,CAACQ,CAAD,CAXoB,CAY5CS,CAAU,CAAGjB,aAAa,CAACU,CAAD,CAZkB,GAcZZ,QAAQ,CAC5CU,CAAK,EAAIjB,OAAO,CAACiB,CAAD,CAAhB,CAA0BlB,OAAM,CAACkB,CAAD,CAAQG,CAAR,CAAhC,CAAsD,IADV,CAdI,uBAc3CO,CAd2C,MAc9BC,CAd8B,MAiB5CC,CAAc,CAAGpB,aAAa,CAACkB,CAAD,CAjBc,CAmB5CG,CAAY,CAAG1B,WAAW,CAC9B,WAAmE,IAAhE2B,EAAgE,GAAhEA,CAAgE,CAAtDJ,CAAsD,GAA7DV,KAA6D,CACjE,GAAIY,CAAc,CAACG,OAAf,GAA2BL,CAA/B,EAIAC,CAAc,CAACD,CAAD,CAJd,IAMMT,EAAQ,CAAGM,CAAW,CAACQ,OAN7B,CAOMf,CAAK,CAAGQ,CAAQ,CAACO,OAPvB,CASA,GAAId,CAAJ,CAAc,CACZ,GAAI,CAACS,CAAL,CAIE,YAHIV,CAGJ,EAFEC,CAAQ,CAAC,CAAEa,CAAC,CAADA,CAAF,CAAKd,KAAK,CAAE,IAAZ,CAAD,CAEV,EALU,GAQNgB,EAAW,CAAGrB,QAAQ,CAACQ,CAAD,CAAaC,CAAb,IARhB,CASNa,CAAU,CAAGtB,QAAQ,CAACe,CAAD,CAAcN,CAAd,IATf,CAUNc,CAAU,CAAGF,CAAW,CAC3BG,GADgB,CACZ,SAACC,CAAD,QAAY1B,YAAW,CAACsB,CAAD,CAAcC,CAAd,CAA0BG,CAA1B,CAAvB,CADY,EAEhBC,MAFgB,CAET,SAACC,CAAD,UAAkBA,CAAlB,CAFS,CAVP,CAcZ,GAAIN,CAAW,CAACO,MAAZ,GAAuBL,CAAU,CAACK,MAAtC,CAA8C,CAC5C,GAAMC,EAAI,CAAGvC,MAAK,CAChBgC,CAAU,CAACQ,IAAX,CAAgBhC,8BAAhB,CADgB,CAEhBuB,CAAW,CAACS,IAAZ,CAAiBhC,8BAAjB,CAFgB,CAGhB,GAAIiC,KAHY,CAAlB,CAKA,GAAI,CAAC1C,gBAAgB,CAACwC,CAAD,CAAO,CAAEG,KAAK,CAAErB,CAAT,CAAkBsB,GAAG,CAAEvB,CAAvB,CAAP,CAArB,CAA+D,SAC9CT,YAAY,CACzBc,CADyB,CAEzBP,CAFyB,CAGzBC,CAHyB,IAKzB,CAAC,MAAD,CALyB,CADkC,uBACtDyB,CADsD,MAmB7D,iBAVApB,CAAU,CAACM,OAUX,qBAVA,OAAAN,CAAU,CAAW,CACnBqB,IAAI,CAAEjC,oBAAoB,CAAC,CAAD,CADP,CAEnBa,WAAW,CAAXA,CAFmB,CAGnBmB,IAAI,CAAJA,CAHmB,CAInBL,IAAI,CAAJA,CAJmB,CAAX,CAUV,MAHIxB,CAGJ,EAFEC,CAAQ,CAAC,CAAEa,CAAC,CAADA,CAAF,CAAKd,KAAK,CAAE,IAAZ,CAAD,CAEV,CACD,CACDC,CAAQ,CAAC,CAAEa,CAAC,CAADA,CAAF,CAAKd,KAAK,CAAEwB,CAAZ,CAAD,CACT,CA5BD,IA4BWxB,EA5BX,EA6BEC,CAAQ,CAAC,CAAEa,CAAC,CAADA,CAAF,CAAKd,KAAK,CAAE,IAAZ,CAAD,CAEX,CAtDD,CAuDD,CAzD6B,CA0D9B,QAACM,CAAD,WAACA,CAAD,QAACA,CAAO,CAAEyB,OAAT,EAAD,QAAqB1B,CAArB,WAAqBA,CAArB,QAAqBA,CAAO,CAAE0B,OAAT,EAArB,CAAyC5B,CAAzC,CAAqDC,CAArD,CA1D8B,CAnBkB,CAgF5C4B,CAAiD,CAAG3C,OAAO,CAC/D,iBACG,CACC4C,IAAI,CAAEP,IADP,CAECQ,OAAO,CAAE/B,CAFV,CAGCgC,MAAM,CAAE,CACNN,IAAI,CAAE,CACJI,IAAI,CAAE/C,KAAK,CAACkD,WADR,CAEJC,IAAI,CAAE,CAFF,CAGJC,EAAE,CAAE,IAHA,CADA,CAHT,CAUCC,IAAI,GAVL,CAWCC,OAAO,GAXR,CAYC1D,MAAM,CAAE,gBAAC0C,CAAD,QAAgB1C,QAAM,CAAC0C,CAAD,CAAOrB,CAAP,CAAtB,CAZT,CAaClB,KAAK,CAAE,eAACwD,CAAD,QAAoBxD,OAAK,CAACwD,CAAD,CAAStC,CAAT,CAAqB,GAAIuB,KAAzB,CAAzB,CAbR,CAcCgB,QAAQ,CAAE,kBAACD,CAAD,CAAoB,IACtBzB,EAAW,CAAGrB,QAAQ,CAACQ,CAAD,CAAaC,CAAb,IADA,CAEtBa,CAAU,CAAGtB,QAAQ,CAAC8C,CAAD,CAASrC,CAAT,IAFC,CAGtBc,CAAU,CAAGF,CAAW,CAC3BG,GADgB,CACZ,SAACC,CAAD,QAAY1B,YAAW,CAACsB,CAAD,CAAcC,CAAd,CAA0BG,CAA1B,CAAvB,CADY,EAEhBC,MAFgB,CAET,SAACC,CAAD,UAAkBA,CAAlB,CAFS,CAHS,CAO5B,GACEN,CAAW,CAACO,MAAZ,GAAuBL,CAAU,CAACK,MAAlC,EACA,CAACxC,OAAO,CACNE,MAAK,CACHgC,CAAU,CAACQ,IAAX,CAAgBhC,8BAAhB,CADG,CAEHuB,CAAW,CAACS,IAAZ,CAAiBhC,8BAAjB,CAFG,CAGH,GAAIiC,KAHD,CADC,CAFV,CASE,SACe9B,YAAY,CAAC6C,CAAD,CAAStC,CAAT,CAAqBC,CAArB,IAAuC,CAChE,MADgE,CAAvC,CAD3B,uBACOyB,CADP,MAWA,iBANApB,CAAU,CAACM,OAMX,qBANA,OAAAN,CAAU,CAAW,CACnBqB,IAAI,CAAEjC,oBAAoB,CAAC,CAAD,CADP,CAEnBa,WAAW,CAAE+B,CAFM,CAInBZ,IAAI,CAAJA,CAJmB,CAAX,CAMV,GACD,CAED,QACD,CA7CF,CADH,CAD+D,CAkD/D,CAAC1B,CAAD,CAAaC,CAAb,CAlD+D,CAhFf,GAqI7Bb,QAAQ,CAAC,CAC5BS,KAAK,CAAEU,CADqB,CAE5BT,QAAQ,CAAE,SAAC0C,CAAD,CAAOC,CAAP,gBAAkB/B,CAAlB,WAAkBA,CAAlB,QAAkBA,CAAY,CAAG+B,CAAH,CAA9B,CAFkB,CAG5BC,WAAW,CAAEb,CAHe,CAAD,CArIqB,CAqI1Cc,CArI0C,GAqI1CA,QArI0C,CA6JlD,MAZA1D,UAAS,CAAC,UAAM,CACVY,CAAK,EAAIjB,OAAO,CAACiB,CAAD,CADN,CAEZW,CAAc,CAAC7B,OAAM,CAACkB,CAAD,CAAQG,CAAR,CAAP,CAFF,CAGH,QAAAO,CAAW,WAAXA,CAAA,QAAAA,CAAW,CAAEa,MAAb,IAAwBpB,CAAU,CAACoB,MAHhC,EAQZZ,CAAc,CAAC,EAAD,CAEjB,CAVQ,CAUN,QAACX,CAAD,WAACA,CAAD,QAACA,CAAK,CAAE+B,OAAP,EAAD,CAVM,CAYT,CAAO,CACLrB,WAAW,CAAXA,CADK,CAELoC,QAAQ,CAARA,CAFK,CAGLC,UAAU,CArBO,QAAbA,WAAa,CAACjC,CAAD,CAAc,CAC/BH,CAAc,CAAC,IAAD,CADiB,QAE/BV,CAF+B,WAE/BA,CAF+B,QAE/BA,CAAQ,CAAG,CAAEa,CAAC,CAADA,CAAF,CAAKd,KAAK,CAAE,IAAZ,CAAH,CACT,CAeM,CAKR,CAlKM"}
@@ -17,6 +17,7 @@ export declare const getMultiplicityTime: (format: string, multiplicityHours: nu
17
17
  export declare const getTimeEnum: (length: number, multiplicity: number | undefined, startOfUnits: (date: Date) => Date, addUnits: (date: Date, amount: number) => Date, getItemLabel: (date: Date) => string) => string[];
18
18
  export declare const getFormForStart: (form: TextFieldPropForm) => import("../FieldGroup/types").FieldGroupPropForm;
19
19
  export declare const getFormForEnd: (form: TextFieldPropForm) => import("../FieldGroup/types").FieldGroupPropForm;
20
+ export declare const getPartDate: (formatArray: string[], stringArray: string[], marker: string) => string | undefined;
20
21
  export declare const getParts: (format: string, separator: string, withTime?: boolean) => string[];
21
22
  export declare const getPartsDate: (value: string, format: string, separator: string, withTime: boolean, markers: string[]) => (string | undefined)[];
22
23
  export declare const isTypeWithTime: (type: DatePickerPropType) => boolean;
@@ -1,2 +1,2 @@
1
- import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{startOfToday}from"date-fns";import{range}from"../../utils/array";import{getForm}from"../FieldGroup/FieldGroup";export var datePickerPropSeparatorDefault=".";export var datePickerPropFormatTypeDate="dd".concat(".","MM").concat(".","yyyy");export var datePickerPropPlaceholderTypeDate="\u0414\u0414".concat(".","\u041C\u041C").concat(".","\u0413\u0413\u0413\u0413");export var datePickerPropFormatTypeTime="HH:mm:ss";export var datePickerPropPlaceholderTypeTime="\u0427\u0427:\u041C\u041C:\u0421\u0421";export var datePickerPropFormatTypeDateTime="".concat(datePickerPropFormatTypeDate," ").concat("HH:mm:ss");export var datePickerPropPlaceholderTypeDateTime="".concat(datePickerPropPlaceholderTypeDate," ").concat("\u0427\u0427:\u041C\u041C:\u0421\u0421");export var datePickerPropFormatTypeYear="yyyy";export var datePickerPropPlaceholderTypeYear="\u0413\u0413\u0413\u0413";export var datePickerPropFormatTypeMonth="MM".concat(".","yyyy");export var datePickerPropPlaceholderTypeMonth="MM".concat(".","\u0413\u0413\u0413\u0413");export var normalizeRangeValue=function(a){var b,c;return a[0]&&a[1]&&(null===(b=a[0])||void 0===b?void 0:b.getTime())>(null===(c=a[1])||void 0===c?void 0:c.getTime())?[a[1],a[0]]:a};export var getMultiplicityTime=function(a,b,c,d){var e,f=null===(e=a.split(" ")[1])||void 0===e?void 0:e.split(":"),g={HH:b,mm:c,ss:d};return["HH","mm","ss"].map(function(a){return 0>(null===f||void 0===f?void 0:f.indexOf(a))?0:g[a]})};export var getTimeEnum=function(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:1,c=2<arguments.length?arguments[2]:void 0,d=3<arguments.length?arguments[3]:void 0,e=4<arguments.length?arguments[4]:void 0,f=range(b?Math.floor(a/b):0);if(0===f.length)return[];var g=c(startOfToday());return f.map(function(a){return e(d(g,a*b))})};export var getFormForStart=function(a){return getForm(a,0,2)};export var getFormForEnd=function(a){return getForm(a,1,2)};var getPartDate=function(a,b,c){var d=a.indexOf(c);return 0<=d&&b[d]&&b[d].length===c.length?b[d]:void 0};export var getParts=function(a,b,c){if(c){var d=a.split(" "),e=_slicedToArray(d,2),f=e[0],g=e[1];return[].concat(_toConsumableArray(f?f.split(b):[]),_toConsumableArray(g?g.split(":"):[]))}return a.split(b)};export var getPartsDate=function(a,b,c,d,e){var f=getParts(b,c,d),g=getParts(a,c,d);return e.map(function(a){return getPartDate(f,g,a)})};export var isTypeWithTime=function(a){return-1!==a.indexOf("time")};var fieldPrefixs=["start","end"];export var getFieldName=function(a,b){return a?Array.isArray(a)?a[b]:"".concat(a,"_").concat(fieldPrefixs[b]):void 0};export var getDropdownZIndex=function(a){return"number"==typeof(null===a||void 0===a?void 0:a.zIndex)?a.zIndex+1:void 0};
1
+ import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{startOfToday}from"date-fns";import{range}from"../../utils/array";import{getForm}from"../FieldGroup/FieldGroup";export var datePickerPropSeparatorDefault=".";export var datePickerPropFormatTypeDate="dd".concat(".","MM").concat(".","yyyy");export var datePickerPropPlaceholderTypeDate="\u0414\u0414".concat(".","\u041C\u041C").concat(".","\u0413\u0413\u0413\u0413");export var datePickerPropFormatTypeTime="HH:mm:ss";export var datePickerPropPlaceholderTypeTime="\u0427\u0427:\u041C\u041C:\u0421\u0421";export var datePickerPropFormatTypeDateTime="".concat(datePickerPropFormatTypeDate," ").concat("HH:mm:ss");export var datePickerPropPlaceholderTypeDateTime="".concat(datePickerPropPlaceholderTypeDate," ").concat("\u0427\u0427:\u041C\u041C:\u0421\u0421");export var datePickerPropFormatTypeYear="yyyy";export var datePickerPropPlaceholderTypeYear="\u0413\u0413\u0413\u0413";export var datePickerPropFormatTypeMonth="MM".concat(".","yyyy");export var datePickerPropPlaceholderTypeMonth="MM".concat(".","\u0413\u0413\u0413\u0413");export var normalizeRangeValue=function(a){var b,c;return a[0]&&a[1]&&(null===(b=a[0])||void 0===b?void 0:b.getTime())>(null===(c=a[1])||void 0===c?void 0:c.getTime())?[a[1],a[0]]:a};export var getMultiplicityTime=function(a,b,c,d){var e,f=null===(e=a.split(" ")[1])||void 0===e?void 0:e.split(":"),g={HH:b,mm:c,ss:d};return["HH","mm","ss"].map(function(a){return 0>(null===f||void 0===f?void 0:f.indexOf(a))?0:g[a]})};export var getTimeEnum=function(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:1,c=2<arguments.length?arguments[2]:void 0,d=3<arguments.length?arguments[3]:void 0,e=4<arguments.length?arguments[4]:void 0,f=range(b?Math.floor(a/b):0);if(0===f.length)return[];var g=c(startOfToday());return f.map(function(a){return e(d(g,a*b))})};export var getFormForStart=function(a){return getForm(a,0,2)};export var getFormForEnd=function(a){return getForm(a,1,2)};export var getPartDate=function(a,b,c){var d=a.indexOf(c);return 0<=d&&b[d]&&b[d].length===c.length?b[d]:void 0};export var getParts=function(a,b,c){if(c){var d=a.split(" "),e=_slicedToArray(d,2),f=e[0],g=e[1];return[].concat(_toConsumableArray(f?f.split(b):[]),_toConsumableArray(g?g.split(":"):[]))}return a.split(b)};export var getPartsDate=function(a,b,c,d,e){var f=getParts(b,c,d),g=getParts(a,c,d);return e.map(function(a){return getPartDate(f,g,a)})};export var isTypeWithTime=function(a){return-1!==a.indexOf("time")};var fieldPrefixs=["start","end"];export var getFieldName=function(a,b){return a?Array.isArray(a)?a[b]:"".concat(a,"_").concat(fieldPrefixs[b]):void 0};export var getDropdownZIndex=function(a){return"number"==typeof(null===a||void 0===a?void 0:a.zIndex)?a.zIndex+1:void 0};
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["startOfToday","range","getForm","datePickerPropSeparatorDefault","datePickerPropFormatTypeDate","datePickerPropPlaceholderTypeDate","datePickerPropFormatTypeTime","datePickerPropPlaceholderTypeTime","datePickerPropFormatTypeDateTime","datePickerPropPlaceholderTypeDateTime","datePickerPropFormatTypeYear","datePickerPropPlaceholderTypeYear","datePickerPropFormatTypeMonth","datePickerPropPlaceholderTypeMonth","normalizeRangeValue","dateRange","getTime","getMultiplicityTime","format","multiplicityHours","multiplicityMinutes","multiplicitySeconds","formatArray","split","map","HH","mm","ss","marker","indexOf","getTimeEnum","length","multiplicity","startOfUnits","addUnits","getItemLabel","numbers","Math","floor","startDate","number","getFormForStart","form","getFormForEnd","getPartDate","stringArray","index","getParts","separator","withTime","date","time","getPartsDate","value","markers","isTypeWithTime","type","fieldPrefixs","getFieldName","name","rangeIndex","Array","isArray","getDropdownZIndex","style","zIndex"],"sources":["../../../../../src/components/DatePicker/helpers.ts"],"sourcesContent":["import { startOfToday } from 'date-fns';\n\nimport { range } from '../../utils/array';\nimport { DateRange } from '../../utils/types/Date';\nimport { getForm } from '../FieldGroup/FieldGroup';\nimport { TextFieldPropForm } from '../TextField/TextField';\nimport { DatePickerPropType } from './types';\n\nexport const datePickerPropSeparatorDefault = '.';\nexport const datePickerPropFormatTypeDate = `dd${datePickerPropSeparatorDefault}MM${datePickerPropSeparatorDefault}yyyy`;\nexport const datePickerPropPlaceholderTypeDate = `ДД${datePickerPropSeparatorDefault}ММ${datePickerPropSeparatorDefault}ГГГГ`;\n\nexport const datePickerPropFormatTypeTime = `HH:mm:ss`;\nexport const datePickerPropPlaceholderTypeTime = `ЧЧ:ММ:СС`;\n\nexport const datePickerPropFormatTypeDateTime = `${datePickerPropFormatTypeDate} ${datePickerPropFormatTypeTime}`;\nexport const datePickerPropPlaceholderTypeDateTime = `${datePickerPropPlaceholderTypeDate} ${datePickerPropPlaceholderTypeTime}`;\n\nexport const datePickerPropFormatTypeYear = `yyyy`;\nexport const datePickerPropPlaceholderTypeYear = `ГГГГ`;\n\nexport const datePickerPropFormatTypeMonth = `MM${datePickerPropSeparatorDefault}yyyy`;\nexport const datePickerPropPlaceholderTypeMonth = `MM${datePickerPropSeparatorDefault}ГГГГ`;\n\nexport const normalizeRangeValue = (dateRange: DateRange): DateRange => {\n if (\n dateRange[0] &&\n dateRange[1] &&\n dateRange[0]?.getTime() > dateRange[1]?.getTime()\n ) {\n return [dateRange[1], dateRange[0]];\n }\n return dateRange;\n};\n\nexport const getMultiplicityTime = (\n format: string,\n multiplicityHours: number | undefined,\n multiplicityMinutes: number | undefined,\n multiplicitySeconds: number | undefined,\n) => {\n const markers = ['HH', 'mm', 'ss'] as const;\n const formatArray = format.split(' ')[1]?.split(':');\n const map = {\n HH: multiplicityHours,\n mm: multiplicityMinutes,\n ss: multiplicitySeconds,\n } as const;\n\n return markers.map((marker) =>\n formatArray?.indexOf(marker) < 0 ? 0 : map[marker],\n );\n};\n\nexport const getTimeEnum = (\n length: number,\n multiplicity = 1,\n startOfUnits: (date: Date) => Date,\n addUnits: (date: Date, amount: number) => Date,\n getItemLabel: (date: Date) => string,\n) => {\n const numbers = range(multiplicity ? Math.floor(length / multiplicity) : 0);\n\n if (numbers.length === 0) {\n return [];\n }\n\n const startDate = startOfUnits(startOfToday());\n\n return numbers.map((number) => {\n return getItemLabel(addUnits(startDate, number * multiplicity));\n });\n};\n\nexport const getFormForStart = (form: TextFieldPropForm) => getForm(form, 0, 2);\nexport const getFormForEnd = (form: TextFieldPropForm) => getForm(form, 1, 2);\n\nconst getPartDate = (\n formatArray: string[],\n stringArray: string[],\n marker: string,\n) => {\n const index = formatArray.indexOf(marker);\n\n if (\n index >= 0 &&\n stringArray[index] &&\n stringArray[index].length === marker.length\n ) {\n return stringArray[index];\n }\n\n return undefined;\n};\n\nexport const getParts = (\n format: string,\n separator: string,\n withTime?: boolean,\n) => {\n if (withTime) {\n const [date, time] = format.split(' ');\n\n return [\n ...(date ? date.split(separator) : []),\n ...(time ? time.split(':') : []),\n ];\n }\n\n return format.split(separator);\n};\n\nexport const getPartsDate = (\n value: string,\n format: string,\n separator: string,\n withTime: boolean,\n markers: string[],\n) => {\n const formatArray = getParts(format, separator, withTime);\n const stringArray = getParts(value, separator, withTime);\n\n return markers.map((marker) => getPartDate(formatArray, stringArray, marker));\n};\n\nexport const isTypeWithTime = (type: DatePickerPropType) =>\n type.indexOf('time') !== -1;\n\nconst fieldPrefixs = ['start', 'end'] as const;\n\nexport const getFieldName = (\n name: [string?, string?] | string | undefined,\n rangeIndex: 0 | 1,\n) => {\n if (!name) {\n return undefined;\n }\n\n if (Array.isArray(name)) {\n return name[rangeIndex];\n }\n\n return `${name}_${fieldPrefixs[rangeIndex]}`;\n};\n\nexport const getDropdownZIndex = (style?: React.CSSProperties) =>\n typeof style?.zIndex === 'number' ? style.zIndex + 1 : undefined;\n"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","names":["startOfToday","range","getForm","datePickerPropSeparatorDefault","datePickerPropFormatTypeDate","datePickerPropPlaceholderTypeDate","datePickerPropFormatTypeTime","datePickerPropPlaceholderTypeTime","datePickerPropFormatTypeDateTime","datePickerPropPlaceholderTypeDateTime","datePickerPropFormatTypeYear","datePickerPropPlaceholderTypeYear","datePickerPropFormatTypeMonth","datePickerPropPlaceholderTypeMonth","normalizeRangeValue","dateRange","getTime","getMultiplicityTime","format","multiplicityHours","multiplicityMinutes","multiplicitySeconds","formatArray","split","map","HH","mm","ss","marker","indexOf","getTimeEnum","length","multiplicity","startOfUnits","addUnits","getItemLabel","numbers","Math","floor","startDate","number","getFormForStart","form","getFormForEnd","getPartDate","stringArray","index","getParts","separator","withTime","date","time","getPartsDate","value","markers","isTypeWithTime","type","fieldPrefixs","getFieldName","name","rangeIndex","Array","isArray","getDropdownZIndex","style","zIndex"],"sources":["../../../../../src/components/DatePicker/helpers.ts"],"sourcesContent":["import { startOfToday } from 'date-fns';\n\nimport { range } from '../../utils/array';\nimport { DateRange } from '../../utils/types/Date';\nimport { getForm } from '../FieldGroup/FieldGroup';\nimport { TextFieldPropForm } from '../TextField/TextField';\nimport { DatePickerPropType } from './types';\n\nexport const datePickerPropSeparatorDefault = '.';\nexport const datePickerPropFormatTypeDate = `dd${datePickerPropSeparatorDefault}MM${datePickerPropSeparatorDefault}yyyy`;\nexport const datePickerPropPlaceholderTypeDate = `ДД${datePickerPropSeparatorDefault}ММ${datePickerPropSeparatorDefault}ГГГГ`;\n\nexport const datePickerPropFormatTypeTime = `HH:mm:ss`;\nexport const datePickerPropPlaceholderTypeTime = `ЧЧ:ММ:СС`;\n\nexport const datePickerPropFormatTypeDateTime = `${datePickerPropFormatTypeDate} ${datePickerPropFormatTypeTime}`;\nexport const datePickerPropPlaceholderTypeDateTime = `${datePickerPropPlaceholderTypeDate} ${datePickerPropPlaceholderTypeTime}`;\n\nexport const datePickerPropFormatTypeYear = `yyyy`;\nexport const datePickerPropPlaceholderTypeYear = `ГГГГ`;\n\nexport const datePickerPropFormatTypeMonth = `MM${datePickerPropSeparatorDefault}yyyy`;\nexport const datePickerPropPlaceholderTypeMonth = `MM${datePickerPropSeparatorDefault}ГГГГ`;\n\nexport const normalizeRangeValue = (dateRange: DateRange): DateRange => {\n if (\n dateRange[0] &&\n dateRange[1] &&\n dateRange[0]?.getTime() > dateRange[1]?.getTime()\n ) {\n return [dateRange[1], dateRange[0]];\n }\n return dateRange;\n};\n\nexport const getMultiplicityTime = (\n format: string,\n multiplicityHours: number | undefined,\n multiplicityMinutes: number | undefined,\n multiplicitySeconds: number | undefined,\n) => {\n const markers = ['HH', 'mm', 'ss'] as const;\n const formatArray = format.split(' ')[1]?.split(':');\n const map = {\n HH: multiplicityHours,\n mm: multiplicityMinutes,\n ss: multiplicitySeconds,\n } as const;\n\n return markers.map((marker) =>\n formatArray?.indexOf(marker) < 0 ? 0 : map[marker],\n );\n};\n\nexport const getTimeEnum = (\n length: number,\n multiplicity = 1,\n startOfUnits: (date: Date) => Date,\n addUnits: (date: Date, amount: number) => Date,\n getItemLabel: (date: Date) => string,\n) => {\n const numbers = range(multiplicity ? Math.floor(length / multiplicity) : 0);\n\n if (numbers.length === 0) {\n return [];\n }\n\n const startDate = startOfUnits(startOfToday());\n\n return numbers.map((number) => {\n return getItemLabel(addUnits(startDate, number * multiplicity));\n });\n};\n\nexport const getFormForStart = (form: TextFieldPropForm) => getForm(form, 0, 2);\nexport const getFormForEnd = (form: TextFieldPropForm) => getForm(form, 1, 2);\n\nexport const getPartDate = (\n formatArray: string[],\n stringArray: string[],\n marker: string,\n) => {\n const index = formatArray.indexOf(marker);\n\n if (\n index >= 0 &&\n stringArray[index] &&\n stringArray[index].length === marker.length\n ) {\n return stringArray[index];\n }\n\n return undefined;\n};\n\nexport const getParts = (\n format: string,\n separator: string,\n withTime?: boolean,\n) => {\n if (withTime) {\n const [date, time] = format.split(' ');\n\n return [\n ...(date ? date.split(separator) : []),\n ...(time ? time.split(':') : []),\n ];\n }\n\n return format.split(separator);\n};\n\nexport const getPartsDate = (\n value: string,\n format: string,\n separator: string,\n withTime: boolean,\n markers: string[],\n) => {\n const formatArray = getParts(format, separator, withTime);\n const stringArray = getParts(value, separator, withTime);\n\n return markers.map((marker) => getPartDate(formatArray, stringArray, marker));\n};\n\nexport const isTypeWithTime = (type: DatePickerPropType) =>\n type.indexOf('time') !== -1;\n\nconst fieldPrefixs = ['start', 'end'] as const;\n\nexport const getFieldName = (\n name: [string?, string?] | string | undefined,\n rangeIndex: 0 | 1,\n) => {\n if (!name) {\n return undefined;\n }\n\n if (Array.isArray(name)) {\n return name[rangeIndex];\n }\n\n return `${name}_${fieldPrefixs[rangeIndex]}`;\n};\n\nexport const getDropdownZIndex = (style?: React.CSSProperties) =>\n typeof style?.zIndex === 'number' ? style.zIndex + 1 : undefined;\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import './SelectDropdown.css';
2
2
  import React from 'react';
3
+ import { SelectAllItem } from "../../../utils/getGroups";
3
4
  import { GetOptionPropsResult, OptionForCreate, OptionProps } from '../../../hooks/useSelect/useSelect';
4
5
  import { PropsWithJsxAttributes } from '../../../utils/types/PropsWithJsxAttributes';
5
6
  import { PopoverPropOffset } from '../../Popover/Popover';
@@ -10,7 +11,7 @@ export declare const defaultSelectDropdownPropForm: "default";
10
11
  declare type Props<ITEM, GROUP> = PropsWithJsxAttributes<{
11
12
  size: PropSize;
12
13
  controlRef: React.MutableRefObject<HTMLDivElement | null>;
13
- dropdownRef: React.MutableRefObject<HTMLDivElement | null>;
14
+ dropdownRef: React.Ref<HTMLDivElement>;
14
15
  getOptionProps(props: OptionProps<ITEM>): GetOptionPropsResult;
15
16
  form: SelectDropdownPropForm;
16
17
  isOpen: boolean;
@@ -18,10 +19,12 @@ declare type Props<ITEM, GROUP> = PropsWithJsxAttributes<{
18
19
  isLoading?: boolean;
19
20
  renderItem: (props: RenderItemProps<ITEM>) => JSX.Element | null;
20
21
  visibleItems: (OptionForCreate | {
21
- items: ITEM[];
22
+ items: Array<SelectAllItem | ITEM>;
22
23
  key: string | number;
23
24
  group?: GROUP;
24
25
  groupIndex: number;
26
+ checkedCount?: number;
27
+ totalCount?: number;
25
28
  })[];
26
29
  getGroupLabel?: (group: GROUP) => string;
27
30
  labelForCreate?: string;
@@ -1,2 +1,2 @@
1
- import _defineProperty from"@babel/runtime/helpers/defineProperty";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["controlRef","size","getOptionProps","dropdownRef","labelForCreate","className","labelForNotFound","labelForEmptyItems","hasItems","form","isOpen","offset","renderItem","visibleItems","isLoading","getGroupLabel","notFound"];function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import"./SelectDropdown.css";import React,{Fragment,useMemo,useRef}from"react";import{Transition}from"react-transition-group";import{cnListBox,ListItem,mapVerticalSpase}from"../../ListCanary";import{cnMixSpace}from"../../../mixs/MixSpace";import{isOptionForCreate}from"../../../hooks/useSelect/useSelect";import{animateTimeout,cnMixPopoverAnimate}from"../../../mixs/MixPopoverAnimate/MixPopoverAnimate";import{cn}from"../../../utils/bem";import{fabricIndex}from"../../../utils/fabricIndex";import{Popover}from"../../Popover/Popover";import{SelectCreateButton}from"../SelectCreateButton/SelectCreateButton";import{SelectGroupLabel}from"../SelectGroupLabel/SelectGroupLabel";import{SelectLoader}from"../SelectLoader/SelectLoader";export var selectDropdownform=["default","brick","round"];export var defaultSelectDropdownPropForm=selectDropdownform[0];var cnSelectDropdown=cn("SelectDropdown");export var SelectDropdown=function(a){var b=a.controlRef,c=a.size,d=a.getOptionProps,e=a.dropdownRef,f=a.labelForCreate,g=a.className,h=a.labelForNotFound,i=a.labelForEmptyItems,j=a.hasItems,k=!(void 0!==j)||j,l=a.form,m=a.isOpen,n=a.offset,o=void 0===n?"none":n,p=a.renderItem,q=a.visibleItems,r=a.isLoading,s=a.getGroupLabel,t=a.notFound,u=_objectWithoutProperties(a,_excluded),v="round"===l?"increased":"normal",w=useRef(null),x=useMemo(function(){return 0<q.filter(function(a){return isOptionForCreate(a)||Array.isArray(a.items)&&0<a.items.length}).length},[q]),y="none"===o?void 0:o;return React.createElement(Transition,{in:m,unmountOnExit:!0,nodeRef:w,timeout:animateTimeout},function(a){var j=fabricIndex(-1);return React.createElement(Popover,Object.assign({},u,{anchorRef:b,direction:"downStartLeft",possibleDirections:["downStartLeft","upStartLeft","downStartRight","upStartRight"],offset:y,ref:w,role:"listbox",className:cnSelectDropdown(null,[cnListBox({size:c,form:l,border:!0,shadow:!0}),cnMixPopoverAnimate({animate:a}),g]),equalAnchorWidth:!0}),React.createElement("div",{className:cnSelectDropdown("List",[cnMixSpace({pV:mapVerticalSpase[c]})]),ref:e},r&&React.createElement(SelectLoader,{mode:x?"blur":"empty"}),q.map(function(a){return isOptionForCreate(a)?React.createElement(SelectCreateButton,Object.assign({size:c,labelForCreate:f,inputValue:a.label,indent:v},d({index:j(),item:a}))):React.createElement(Fragment,{key:a.key},a.group&&s&&React.createElement(SelectGroupLabel,{label:s(a.group),size:c,indent:v}),a.items.map(function(b,c){return React.createElement(Fragment,{key:"".concat(a.key,"-").concat(c)},p(_objectSpread({item:b},d({index:j(),item:b}))))}))}),!r&&k&&t&&h&&React.createElement(ListItem,{size:c,label:h,innerOffset:v},h),!r&&!k&&i&&React.createElement(ListItem,{size:c,label:h,innerOffset:v},i)))})};
1
+ import _defineProperty from"@babel/runtime/helpers/defineProperty";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["controlRef","size","getOptionProps","dropdownRef","labelForCreate","className","labelForNotFound","labelForEmptyItems","hasItems","form","isOpen","offset","renderItem","visibleItems","isLoading","getGroupLabel","notFound"];function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import"./SelectDropdown.css";import React,{Fragment,useMemo,useRef}from"react";import{Transition}from"react-transition-group";import{cnListBox,ListItem,mapVerticalSpase}from"../../ListCanary";import{cnMixSpace}from"../../../mixs/MixSpace";import{isOptionForCreate,isOptionForSelectAll}from"../../../hooks/useSelect/useSelect";import{animateTimeout,cnMixPopoverAnimate}from"../../../mixs/MixPopoverAnimate/MixPopoverAnimate";import{cn}from"../../../utils/bem";import{fabricIndex}from"../../../utils/fabricIndex";import{Popover}from"../../Popover/Popover";import{SelectCreateButton}from"../SelectCreateButton/SelectCreateButton";import{SelectGroupLabel}from"../SelectGroupLabel/SelectGroupLabel";import{SelectItemAll}from"../SelectItemAll/SelectSelectAll";import{SelectLoader}from"../SelectLoader/SelectLoader";export var selectDropdownform=["default","brick","round"];export var defaultSelectDropdownPropForm=selectDropdownform[0];var cnSelectDropdown=cn("SelectDropdown");export var SelectDropdown=function(a){var b=a.controlRef,c=a.size,d=a.getOptionProps,e=a.dropdownRef,f=a.labelForCreate,g=a.className,h=a.labelForNotFound,i=a.labelForEmptyItems,j=a.hasItems,k=!(void 0!==j)||j,l=a.form,m=a.isOpen,n=a.offset,o=void 0===n?"none":n,p=a.renderItem,q=a.visibleItems,r=a.isLoading,s=a.getGroupLabel,t=a.notFound,u=_objectWithoutProperties(a,_excluded),v="round"===l?"increased":"normal",w=useRef(null),x=useMemo(function(){return 0<q.filter(function(a){return isOptionForCreate(a)||Array.isArray(a.items)&&0<a.items.length}).length},[q]),y="none"===o?void 0:o;return React.createElement(Transition,{in:m,unmountOnExit:!0,nodeRef:w,timeout:animateTimeout},function(a){var j=fabricIndex(-1);return React.createElement(Popover,Object.assign({},u,{anchorRef:b,direction:"downStartLeft",possibleDirections:["downStartLeft","upStartLeft","downStartRight","upStartRight"],offset:y,ref:w,role:"listbox",className:cnSelectDropdown(null,[cnListBox({size:c,form:l,border:!0,shadow:!0}),cnMixPopoverAnimate({animate:a}),g]),equalAnchorWidth:!0}),React.createElement("div",{className:cnSelectDropdown("List",[cnMixSpace({pV:mapVerticalSpase[c]})]),ref:e},r&&React.createElement(SelectLoader,{mode:x?"blur":"empty"}),q.map(function(a){return isOptionForCreate(a)?React.createElement(SelectCreateButton,Object.assign({size:c,labelForCreate:f,inputValue:a.label,indent:v},d({index:j(),item:a}))):React.createElement(Fragment,{key:a.key},a.group&&s&&React.createElement(SelectGroupLabel,{label:s(a.group),size:c,indent:v}),a.items.map(function(b,e){return isOptionForSelectAll(b)?React.createElement(SelectItemAll,Object.assign({indent:v,size:c},d({index:j(),item:b}),{intermediate:!!(b.checkedCount&&b.totalCount)&&b.checkedCount!==b.totalCount,checked:b.checkedCount===b.totalCount,countItems:b.checkedCount,total:b.totalCount})):React.createElement(Fragment,{key:"".concat(a.key,"-").concat(e)},p(_objectSpread({item:b},d({index:j(),item:b}))))}))}),!r&&k&&t&&h&&React.createElement(ListItem,{size:c,label:h,innerOffset:v},h),!r&&!k&&i&&React.createElement(ListItem,{size:c,label:h,innerOffset:v},i)))})};
2
2
  //# sourceMappingURL=SelectDropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectDropdown.js","names":["React","Fragment","useMemo","useRef","Transition","cnListBox","ListItem","mapVerticalSpase","cnMixSpace","isOptionForCreate","animateTimeout","cnMixPopoverAnimate","cn","fabricIndex","Popover","SelectCreateButton","SelectGroupLabel","SelectLoader","selectDropdownform","defaultSelectDropdownPropForm","cnSelectDropdown","SelectDropdown","props","controlRef","size","getOptionProps","dropdownRef","labelForCreate","className","labelForNotFound","labelForEmptyItems","hasItems","form","isOpen","offset","offsetProp","renderItem","visibleItems","isLoading","getGroupLabel","notFound","otherProps","indent","popoverRef","isListShowed","filter","group","Array","isArray","items","length","animate","getIndex","border","shadow","pV","map","label","index","item","key","i"],"sources":["../../../../../../src/components/SelectComponents/SelectDropdown/SelectDropdown.tsx"],"sourcesContent":["import './SelectDropdown.css';\n\nimport React, { Fragment, useMemo, useRef } from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport {\n cnListBox,\n ListItem,\n mapVerticalSpase,\n} from '##/components/ListCanary';\nimport { cnMixSpace } from '##/mixs/MixSpace';\n\nimport {\n GetOptionPropsResult,\n isOptionForCreate,\n OptionForCreate,\n OptionProps,\n} from '../../../hooks/useSelect/useSelect';\nimport {\n animateTimeout,\n cnMixPopoverAnimate,\n} from '../../../mixs/MixPopoverAnimate/MixPopoverAnimate';\nimport { cn } from '../../../utils/bem';\nimport { fabricIndex } from '../../../utils/fabricIndex';\nimport { PropsWithJsxAttributes } from '../../../utils/types/PropsWithJsxAttributes';\nimport { Popover, PopoverPropOffset } from '../../Popover/Popover';\nimport { SelectCreateButton } from '../SelectCreateButton/SelectCreateButton';\nimport { SelectGroupLabel } from '../SelectGroupLabel/SelectGroupLabel';\nimport { SelectLoader } from '../SelectLoader/SelectLoader';\nimport { PropSize, RenderItemProps } from '../types';\n\nexport const selectDropdownform = ['default', 'brick', 'round'] as const;\nexport type SelectDropdownPropForm = typeof selectDropdownform[number];\nexport const defaultSelectDropdownPropForm = selectDropdownform[0];\n\ntype Props<ITEM, GROUP> = PropsWithJsxAttributes<{\n size: PropSize;\n controlRef: React.MutableRefObject<HTMLDivElement | null>;\n dropdownRef: React.MutableRefObject<HTMLDivElement | null>;\n getOptionProps(props: OptionProps<ITEM>): GetOptionPropsResult;\n form: SelectDropdownPropForm;\n isOpen: boolean;\n offset?: PopoverPropOffset | 'none';\n isLoading?: boolean;\n renderItem: (props: RenderItemProps<ITEM>) => JSX.Element | null;\n visibleItems: (\n | OptionForCreate\n | {\n items: ITEM[];\n key: string | number;\n group?: GROUP;\n groupIndex: number;\n }\n )[];\n getGroupLabel?: (group: GROUP) => string;\n labelForCreate?: string;\n labelForNotFound?: string;\n labelForEmptyItems?: string;\n notFound?: boolean;\n hasItems?: boolean;\n}>;\n\ntype SelectDropdown = <ITEM, GROUP>(\n props: Props<ITEM, GROUP>,\n) => React.ReactElement | null;\n\nconst cnSelectDropdown = cn('SelectDropdown');\n\nexport const SelectDropdown: SelectDropdown = (props) => {\n const {\n controlRef,\n size,\n getOptionProps,\n dropdownRef,\n labelForCreate,\n className,\n labelForNotFound,\n labelForEmptyItems,\n hasItems = true,\n form,\n isOpen,\n offset: offsetProp = 'none',\n renderItem,\n visibleItems,\n isLoading,\n getGroupLabel,\n notFound,\n ...otherProps\n } = props;\n\n const indent = form === 'round' ? 'increased' : 'normal';\n\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const isListShowed = useMemo(() => {\n return (\n visibleItems.filter(\n (group) =>\n isOptionForCreate(group) ||\n (Array.isArray(group.items) && group.items.length > 0),\n ).length > 0\n );\n }, [visibleItems]);\n\n const offset = offsetProp === 'none' ? undefined : offsetProp;\n\n return (\n <Transition\n in={isOpen}\n unmountOnExit\n nodeRef={popoverRef}\n timeout={animateTimeout}\n >\n {(animate) => {\n const getIndex = fabricIndex(-1);\n return (\n <Popover\n {...otherProps}\n anchorRef={controlRef}\n direction=\"downStartLeft\"\n possibleDirections={[\n 'downStartLeft',\n 'upStartLeft',\n 'downStartRight',\n 'upStartRight',\n ]}\n offset={offset}\n ref={popoverRef}\n role=\"listbox\"\n className={cnSelectDropdown(null, [\n cnListBox({ size, form, border: true, shadow: true }),\n cnMixPopoverAnimate({ animate }),\n className,\n ])}\n equalAnchorWidth\n >\n <div\n className={cnSelectDropdown('List', [\n cnMixSpace({\n pV: mapVerticalSpase[size],\n }),\n ])}\n ref={dropdownRef}\n >\n {isLoading && (\n <SelectLoader mode={isListShowed ? 'blur' : 'empty'} />\n )}\n {visibleItems.map((group) => {\n if (isOptionForCreate(group)) {\n return (\n <SelectCreateButton\n size={size}\n labelForCreate={labelForCreate}\n inputValue={group.label}\n indent={indent}\n {...getOptionProps({ index: getIndex(), item: group })}\n />\n );\n }\n return (\n <Fragment key={group.key}>\n {group.group && getGroupLabel && (\n <SelectGroupLabel\n label={getGroupLabel(group.group)}\n size={size}\n indent={indent}\n />\n )}\n {group.items.map((item, i) => {\n return (\n <Fragment key={`${group.key}-${i}`}>\n {renderItem({\n item,\n ...getOptionProps({ index: getIndex(), item }),\n })}\n </Fragment>\n );\n })}\n </Fragment>\n );\n })}\n {!isLoading && hasItems && notFound && labelForNotFound && (\n <ListItem\n size={size}\n label={labelForNotFound}\n innerOffset={indent}\n >\n {labelForNotFound}\n </ListItem>\n )}\n {!isLoading && !hasItems && labelForEmptyItems && (\n <ListItem\n size={size}\n label={labelForNotFound}\n innerOffset={indent}\n >\n {labelForEmptyItems}\n </ListItem>\n )}\n </div>\n </Popover>\n );\n }}\n </Transition>\n );\n};\n"],"mappings":"y+BAAA,6BAEA,MAAOA,MAAP,EAAgBC,QAAhB,CAA0BC,OAA1B,CAAmCC,MAAnC,KAAiD,OAAjD,CACA,OAASC,UAAT,KAA2B,wBAA3B,CAEA,OACEC,SADF,CAEEC,QAFF,CAGEC,gBAHF,wBAKA,OAASC,UAAT,8BAEA,OAEEC,iBAFF,0CAMA,OACEC,cADF,CAEEC,mBAFF,yDAIA,OAASC,EAAT,0BACA,OAASC,WAAT,kCAEA,OAASC,OAAT,6BACA,OAASC,kBAAT,gDACA,OAASC,gBAAT,4CACA,OAASC,YAAT,oCAGA,MAAO,IAAMC,mBAAkB,CAAG,CAAC,SAAD,CAAY,OAAZ,CAAqB,OAArB,CAA3B,CAEP,MAAO,IAAMC,8BAA6B,CAAGD,kBAAkB,CAAC,CAAD,CAAxD,CAiCP,GAAME,iBAAgB,CAAGR,EAAE,CAAC,gBAAD,CAA3B,CAEA,MAAO,IAAMS,eAA8B,CAAG,SAACC,CAAD,CAAW,IAErDC,EAFqD,CAoBnDD,CApBmD,CAErDC,UAFqD,CAGrDC,CAHqD,CAoBnDF,CApBmD,CAGrDE,IAHqD,CAIrDC,CAJqD,CAoBnDH,CApBmD,CAIrDG,cAJqD,CAKrDC,CALqD,CAoBnDJ,CApBmD,CAKrDI,WALqD,CAMrDC,CANqD,CAoBnDL,CApBmD,CAMrDK,cANqD,CAOrDC,CAPqD,CAoBnDN,CApBmD,CAOrDM,SAPqD,CAQrDC,CARqD,CAoBnDP,CApBmD,CAQrDO,gBARqD,CASrDC,CATqD,CAoBnDR,CApBmD,CASrDQ,kBATqD,GAoBnDR,CApBmD,CAUrDS,QAVqD,CAUrDA,CAVqD,kBAWrDC,CAXqD,CAoBnDV,CApBmD,CAWrDU,IAXqD,CAYrDC,CAZqD,CAoBnDX,CApBmD,CAYrDW,MAZqD,GAoBnDX,CApBmD,CAarDY,MAbqD,CAa7CC,CAb6C,YAahC,MAbgC,GAcrDC,CAdqD,CAoBnDd,CApBmD,CAcrDc,UAdqD,CAerDC,CAfqD,CAoBnDf,CApBmD,CAerDe,YAfqD,CAgBrDC,CAhBqD,CAoBnDhB,CApBmD,CAgBrDgB,SAhBqD,CAiBrDC,CAjBqD,CAoBnDjB,CApBmD,CAiBrDiB,aAjBqD,CAkBrDC,CAlBqD,CAoBnDlB,CApBmD,CAkBrDkB,QAlBqD,CAmBlDC,CAnBkD,0BAoBnDnB,CApBmD,YAsBjDoB,CAAM,CAAY,OAAT,GAAAV,CAAI,CAAe,WAAf,CAA6B,QAtBO,CAwBjDW,CAAU,CAAGxC,MAAM,CAAiB,IAAjB,CAxB8B,CA0BjDyC,CAAY,CAAG1C,OAAO,CAAC,UAAM,CACjC,MAKa,EAJX,CAAAmC,CAAY,CAACQ,MAAb,CACE,SAACC,CAAD,QACErC,kBAAiB,CAACqC,CAAD,CAAjB,EACCC,KAAK,CAACC,OAAN,CAAcF,CAAK,CAACG,KAApB,GAAmD,CAArB,CAAAH,CAAK,CAACG,KAAN,CAAYC,MAF7C,CADF,EAIEA,MAEL,CAR2B,CAQzB,CAACb,CAAD,CARyB,CA1B2B,CAoCjDH,CAAM,CAAkB,MAAf,GAAAC,CAAU,QAA0BA,CApCI,CAsCvD,MACE,qBAAC,UAAD,EACE,GAAIF,CADN,CAEE,aAAa,GAFf,CAGE,OAAO,CAAEU,CAHX,CAIE,OAAO,CAAEjC,cAJX,EAMG,SAACyC,CAAD,CAAa,CACZ,GAAMC,EAAQ,CAAGvC,WAAW,CAAC,CAAC,CAAF,CAA5B,CACA,MACE,qBAAC,OAAD,kBACM4B,CADN,EAEE,SAAS,CAAElB,CAFb,CAGE,SAAS,CAAC,eAHZ,CAIE,kBAAkB,CAAE,CAClB,eADkB,CAElB,aAFkB,CAGlB,gBAHkB,CAIlB,cAJkB,CAJtB,CAUE,MAAM,CAAEW,CAVV,CAWE,GAAG,CAAES,CAXP,CAYE,IAAI,CAAC,SAZP,CAaE,SAAS,CAAEvB,gBAAgB,CAAC,IAAD,CAAO,CAChCf,SAAS,CAAC,CAAEmB,IAAI,CAAJA,CAAF,CAAQQ,IAAI,CAAJA,CAAR,CAAcqB,MAAM,GAApB,CAA4BC,MAAM,GAAlC,CAAD,CADuB,CAEhC3C,mBAAmB,CAAC,CAAEwC,OAAO,CAAPA,CAAF,CAAD,CAFa,CAGhCvB,CAHgC,CAAP,CAb7B,CAkBE,gBAAgB,GAlBlB,GAoBE,2BACE,SAAS,CAAER,gBAAgB,CAAC,MAAD,CAAS,CAClCZ,UAAU,CAAC,CACT+C,EAAE,CAAEhD,gBAAgB,CAACiB,CAAD,CADX,CAAD,CADwB,CAAT,CAD7B,CAME,GAAG,CAAEE,CANP,EAQGY,CAAS,EACR,oBAAC,YAAD,EAAc,IAAI,CAAEM,CAAY,CAAG,MAAH,CAAY,OAA5C,EATJ,CAWGP,CAAY,CAACmB,GAAb,CAAiB,SAACV,CAAD,CAAW,OACvBrC,kBAAiB,CAACqC,CAAD,CADM,CAGvB,oBAAC,kBAAD,gBACE,IAAI,CAAEtB,CADR,CAEE,cAAc,CAAEG,CAFlB,CAGE,UAAU,CAAEmB,CAAK,CAACW,KAHpB,CAIE,MAAM,CAAEf,CAJV,EAKMjB,CAAc,CAAC,CAAEiC,KAAK,CAAEN,CAAQ,EAAjB,CAAqBO,IAAI,CAAEb,CAA3B,CAAD,CALpB,EAHuB,CAazB,oBAAC,QAAD,EAAU,GAAG,CAAEA,CAAK,CAACc,GAArB,EACGd,CAAK,CAACA,KAAN,EAAeP,CAAf,EACC,oBAAC,gBAAD,EACE,KAAK,CAAEA,CAAa,CAACO,CAAK,CAACA,KAAP,CADtB,CAEE,IAAI,CAAEtB,CAFR,CAGE,MAAM,CAAEkB,CAHV,EAFJ,CAQGI,CAAK,CAACG,KAAN,CAAYO,GAAZ,CAAgB,SAACG,CAAD,CAAOE,CAAP,CAAa,CAC5B,MACE,qBAAC,QAAD,EAAU,GAAG,WAAKf,CAAK,CAACc,GAAX,aAAkBC,CAAlB,CAAb,EACGzB,CAAU,gBACTuB,IAAI,CAAJA,CADS,EAENlC,CAAc,CAAC,CAAEiC,KAAK,CAAEN,CAAQ,EAAjB,CAAqBO,IAAI,CAAJA,CAArB,CAAD,CAFR,EADb,CAOH,CATA,CARH,CAoBH,CAjCA,CAXH,CA6CG,CAACrB,CAAD,EAAcP,CAAd,EAA0BS,CAA1B,EAAsCX,CAAtC,EACC,oBAAC,QAAD,EACE,IAAI,CAAEL,CADR,CAEE,KAAK,CAAEK,CAFT,CAGE,WAAW,CAAEa,CAHf,EAKGb,CALH,CA9CJ,CAsDG,CAACS,CAAD,EAAc,CAACP,CAAf,EAA2BD,CAA3B,EACC,oBAAC,QAAD,EACE,IAAI,CAAEN,CADR,CAEE,KAAK,CAAEK,CAFT,CAGE,WAAW,CAAEa,CAHf,EAKGZ,CALH,CAvDJ,CApBF,CAsFH,CA/FH,CAkGH,CAzIM"}
1
+ {"version":3,"file":"SelectDropdown.js","names":["React","Fragment","useMemo","useRef","Transition","cnListBox","ListItem","mapVerticalSpase","cnMixSpace","isOptionForCreate","isOptionForSelectAll","animateTimeout","cnMixPopoverAnimate","cn","fabricIndex","Popover","SelectCreateButton","SelectGroupLabel","SelectItemAll","SelectLoader","selectDropdownform","defaultSelectDropdownPropForm","cnSelectDropdown","SelectDropdown","props","controlRef","size","getOptionProps","dropdownRef","labelForCreate","className","labelForNotFound","labelForEmptyItems","hasItems","form","isOpen","offset","offsetProp","renderItem","visibleItems","isLoading","getGroupLabel","notFound","otherProps","indent","popoverRef","isListShowed","filter","group","Array","isArray","items","length","animate","getIndex","border","shadow","pV","map","label","index","item","key","i","checkedCount","totalCount"],"sources":["../../../../../../src/components/SelectComponents/SelectDropdown/SelectDropdown.tsx"],"sourcesContent":["import './SelectDropdown.css';\n\nimport React, { Fragment, useMemo, useRef } from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport {\n cnListBox,\n ListItem,\n mapVerticalSpase,\n} from '##/components/ListCanary';\nimport { cnMixSpace } from '##/mixs/MixSpace';\nimport { SelectAllItem } from '##/utils/getGroups';\n\nimport {\n GetOptionPropsResult,\n isOptionForCreate,\n isOptionForSelectAll,\n OptionForCreate,\n OptionProps,\n} from '../../../hooks/useSelect/useSelect';\nimport {\n animateTimeout,\n cnMixPopoverAnimate,\n} from '../../../mixs/MixPopoverAnimate/MixPopoverAnimate';\nimport { cn } from '../../../utils/bem';\nimport { fabricIndex } from '../../../utils/fabricIndex';\nimport { PropsWithJsxAttributes } from '../../../utils/types/PropsWithJsxAttributes';\nimport { Popover, PopoverPropOffset } from '../../Popover/Popover';\nimport { SelectCreateButton } from '../SelectCreateButton/SelectCreateButton';\nimport { SelectGroupLabel } from '../SelectGroupLabel/SelectGroupLabel';\nimport { SelectItemAll } from '../SelectItemAll/SelectSelectAll';\nimport { SelectLoader } from '../SelectLoader/SelectLoader';\nimport { PropSize, RenderItemProps } from '../types';\n\nexport const selectDropdownform = ['default', 'brick', 'round'] as const;\nexport type SelectDropdownPropForm = typeof selectDropdownform[number];\nexport const defaultSelectDropdownPropForm = selectDropdownform[0];\n\ntype Props<ITEM, GROUP> = PropsWithJsxAttributes<{\n size: PropSize;\n controlRef: React.MutableRefObject<HTMLDivElement | null>;\n dropdownRef: React.Ref<HTMLDivElement>;\n getOptionProps(props: OptionProps<ITEM>): GetOptionPropsResult;\n form: SelectDropdownPropForm;\n isOpen: boolean;\n offset?: PopoverPropOffset | 'none';\n isLoading?: boolean;\n renderItem: (props: RenderItemProps<ITEM>) => JSX.Element | null;\n visibleItems: (\n | OptionForCreate\n | {\n items: Array<SelectAllItem | ITEM>;\n key: string | number;\n group?: GROUP;\n groupIndex: number;\n checkedCount?: number;\n totalCount?: number;\n }\n )[];\n getGroupLabel?: (group: GROUP) => string;\n labelForCreate?: string;\n labelForNotFound?: string;\n labelForEmptyItems?: string;\n notFound?: boolean;\n hasItems?: boolean;\n}>;\n\ntype SelectDropdown = <ITEM, GROUP>(\n props: Props<ITEM, GROUP>,\n) => React.ReactElement | null;\n\nconst cnSelectDropdown = cn('SelectDropdown');\n\nexport const SelectDropdown: SelectDropdown = (props) => {\n const {\n controlRef,\n size,\n getOptionProps,\n dropdownRef,\n labelForCreate,\n className,\n labelForNotFound,\n labelForEmptyItems,\n hasItems = true,\n form,\n isOpen,\n offset: offsetProp = 'none',\n renderItem,\n visibleItems,\n isLoading,\n getGroupLabel,\n notFound,\n ...otherProps\n } = props;\n\n const indent = form === 'round' ? 'increased' : 'normal';\n\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const isListShowed = useMemo(() => {\n return (\n visibleItems.filter(\n (group) =>\n isOptionForCreate(group) ||\n (Array.isArray(group.items) && group.items.length > 0),\n ).length > 0\n );\n }, [visibleItems]);\n\n const offset = offsetProp === 'none' ? undefined : offsetProp;\n\n return (\n <Transition\n in={isOpen}\n unmountOnExit\n nodeRef={popoverRef}\n timeout={animateTimeout}\n >\n {(animate) => {\n const getIndex = fabricIndex(-1);\n return (\n <Popover\n {...otherProps}\n anchorRef={controlRef}\n direction=\"downStartLeft\"\n possibleDirections={[\n 'downStartLeft',\n 'upStartLeft',\n 'downStartRight',\n 'upStartRight',\n ]}\n offset={offset}\n ref={popoverRef}\n role=\"listbox\"\n className={cnSelectDropdown(null, [\n cnListBox({ size, form, border: true, shadow: true }),\n cnMixPopoverAnimate({ animate }),\n className,\n ])}\n equalAnchorWidth\n >\n <div\n className={cnSelectDropdown('List', [\n cnMixSpace({\n pV: mapVerticalSpase[size],\n }),\n ])}\n ref={dropdownRef}\n >\n {isLoading && (\n <SelectLoader mode={isListShowed ? 'blur' : 'empty'} />\n )}\n {visibleItems.map((group) => {\n if (isOptionForCreate(group)) {\n return (\n <SelectCreateButton\n size={size}\n labelForCreate={labelForCreate}\n inputValue={group.label}\n indent={indent}\n {...getOptionProps({ index: getIndex(), item: group })}\n />\n );\n }\n return (\n <Fragment key={group.key}>\n {group.group && getGroupLabel && (\n <SelectGroupLabel\n label={getGroupLabel(group.group)}\n size={size}\n indent={indent}\n />\n )}\n {group.items.map((item, i) => {\n if (isOptionForSelectAll(item)) {\n return (\n <SelectItemAll\n indent={indent}\n size={size}\n {...getOptionProps({ index: getIndex(), item })}\n intermediate={\n item.checkedCount && item.totalCount\n ? item.checkedCount !== item.totalCount\n : false\n }\n checked={item.checkedCount === item.totalCount}\n countItems={item.checkedCount}\n total={item.totalCount}\n />\n );\n }\n return (\n <Fragment key={`${group.key}-${i}`}>\n {renderItem({\n item,\n ...getOptionProps({ index: getIndex(), item }),\n })}\n </Fragment>\n );\n })}\n </Fragment>\n );\n })}\n {!isLoading && hasItems && notFound && labelForNotFound && (\n <ListItem\n size={size}\n label={labelForNotFound}\n innerOffset={indent}\n >\n {labelForNotFound}\n </ListItem>\n )}\n {!isLoading && !hasItems && labelForEmptyItems && (\n <ListItem\n size={size}\n label={labelForNotFound}\n innerOffset={indent}\n >\n {labelForEmptyItems}\n </ListItem>\n )}\n </div>\n </Popover>\n );\n }}\n </Transition>\n );\n};\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import './SelectItem.css';
2
2
  import React from 'react';
3
3
  import { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';
4
+ import { CheckboxPropSize } from '../../Checkbox/Checkbox';
4
5
  import { PropSize } from '../types';
5
6
  export declare type SelectItemProps = PropsWithHTMLAttributes<{
6
7
  label: string;
@@ -11,5 +12,6 @@ export declare type SelectItemProps = PropsWithHTMLAttributes<{
11
12
  indent: 'normal' | 'increased';
12
13
  disabled: boolean | undefined;
13
14
  }, HTMLDivElement>;
15
+ export declare const sizeCheckboxMap: Record<PropSize, CheckboxPropSize>;
14
16
  export declare const cnSelectItem: import("@bem-react/classname").ClassNameFormatter;
15
17
  export declare const SelectItem: React.FC<SelectItemProps>;
@@ -1,2 +1,2 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["className","label","active","hovered","multiple","size","indent","disabled"];import"./SelectItem.css";import React from"react";import{ListItem}from"../../ListCanary";import{cn}from"../../../utils/bem";import{Checkbox}from"../../Checkbox/Checkbox";var sizeCheckboxMap={xs:"m",s:"m",m:"l",l:"l"};export var cnSelectItem=cn("SelectItem");export var SelectItem=function(a){var b=a.className,c=a.label,d=a.active,e=a.hovered,f=a.multiple,g=a.size,h=a.indent,i=a.disabled,j=_objectWithoutProperties(a,_excluded);return React.createElement(ListItem,Object.assign({},j,{className:cnSelectItem(null,[b]),"aria-selected":d,"aria-disabled":i,role:"option",label:c,innerOffset:h,size:g,active:e,checked:!f&&d,disabled:i,leftSide:f&&React.createElement(Checkbox,{checked:d,disabled:i,size:sizeCheckboxMap[g]})}),c)};
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["className","label","active","hovered","multiple","size","indent","disabled"];import"./SelectItem.css";import React from"react";import{ListItem}from"../../ListCanary";import{cn}from"../../../utils/bem";import{Checkbox}from"../../Checkbox/Checkbox";export var sizeCheckboxMap={xs:"m",s:"m",m:"l",l:"l"};export var cnSelectItem=cn("SelectItem");export var SelectItem=function(a){var b=a.className,c=a.label,d=a.active,e=a.hovered,f=a.multiple,g=a.size,h=a.indent,i=a.disabled,j=_objectWithoutProperties(a,_excluded);return React.createElement(ListItem,Object.assign({},j,{className:cnSelectItem(null,[b]),"aria-selected":d,"aria-disabled":i,role:"option",label:c,innerOffset:h,size:g,active:e,checked:!f&&d,disabled:i,leftSide:f&&React.createElement(Checkbox,{checked:d,disabled:i,size:sizeCheckboxMap[g]})}),c)};
2
2
  //# sourceMappingURL=SelectItem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectItem.js","names":["React","ListItem","cn","Checkbox","sizeCheckboxMap","xs","s","m","l","cnSelectItem","SelectItem","props","className","label","active","hovered","multiple","size","indent","disabled","otherProps"],"sources":["../../../../../../src/components/SelectComponents/SelectItem/SelectItem.tsx"],"sourcesContent":["import './SelectItem.css';\n\nimport React from 'react';\n\nimport { ListItem } from '##/components/ListCanary';\nimport { cn } from '##/utils/bem';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport { Checkbox, CheckboxPropSize } from '../../Checkbox/Checkbox';\nimport { PropSize } from '../types';\n\nexport type SelectItemProps = PropsWithHTMLAttributes<\n {\n label: string;\n active: boolean;\n hovered: boolean;\n multiple: boolean;\n size: PropSize;\n indent: 'normal' | 'increased';\n disabled: boolean | undefined;\n },\n HTMLDivElement\n>;\n\nconst sizeCheckboxMap: Record<PropSize, CheckboxPropSize> = {\n xs: 'm',\n s: 'm',\n m: 'l',\n l: 'l',\n};\n\nexport const cnSelectItem = cn('SelectItem');\n\nexport const SelectItem: React.FC<SelectItemProps> = (props) => {\n const {\n className,\n label,\n active,\n hovered,\n multiple,\n size,\n indent,\n disabled,\n ...otherProps\n } = props;\n\n return (\n <ListItem\n {...otherProps}\n className={cnSelectItem(null, [className])}\n aria-selected={active}\n aria-disabled={disabled}\n role=\"option\"\n label={label}\n innerOffset={indent}\n size={size}\n active={hovered}\n checked={!multiple && active}\n disabled={disabled}\n leftSide={\n multiple && (\n <Checkbox\n checked={active}\n disabled={disabled}\n size={sizeCheckboxMap[size]}\n />\n )\n }\n >\n {label}\n </ListItem>\n );\n};\n"],"mappings":"kLAAA,yBAEA,MAAOA,MAAP,KAAkB,OAAlB,CAEA,OAASC,QAAT,wBACA,OAASC,EAAT,0BAGA,OAASC,QAAT,+BAgBA,GAAMC,gBAAmD,CAAG,CAC1DC,EAAE,CAAE,GADsD,CAE1DC,CAAC,CAAE,GAFuD,CAG1DC,CAAC,CAAE,GAHuD,CAI1DC,CAAC,CAAE,GAJuD,CAA5D,CAOA,MAAO,IAAMC,aAAY,CAAGP,EAAE,CAAC,YAAD,CAAvB,CAEP,MAAO,IAAMQ,WAAqC,CAAG,SAACC,CAAD,CAAW,CAC9D,GACEC,EADF,CAUID,CAVJ,CACEC,SADF,CAEEC,CAFF,CAUIF,CAVJ,CAEEE,KAFF,CAGEC,CAHF,CAUIH,CAVJ,CAGEG,MAHF,CAIEC,CAJF,CAUIJ,CAVJ,CAIEI,OAJF,CAKEC,CALF,CAUIL,CAVJ,CAKEK,QALF,CAMEC,CANF,CAUIN,CAVJ,CAMEM,IANF,CAOEC,CAPF,CAUIP,CAVJ,CAOEO,MAPF,CAQEC,CARF,CAUIR,CAVJ,CAQEQ,QARF,CASKC,CATL,0BAUIT,CAVJ,YAYA,MACE,qBAAC,QAAD,kBACMS,CADN,EAEE,SAAS,CAAEX,YAAY,CAAC,IAAD,CAAO,CAACG,CAAD,CAAP,CAFzB,CAGE,gBAAeE,CAHjB,CAIE,gBAAeK,CAJjB,CAKE,IAAI,CAAC,QALP,CAME,KAAK,CAAEN,CANT,CAOE,WAAW,CAAEK,CAPf,CAQE,IAAI,CAAED,CARR,CASE,MAAM,CAAEF,CATV,CAUE,OAAO,CAAE,CAACC,CAAD,EAAaF,CAVxB,CAWE,QAAQ,CAAEK,CAXZ,CAYE,QAAQ,CACNH,CAAQ,EACN,oBAAC,QAAD,EACE,OAAO,CAAEF,CADX,CAEE,QAAQ,CAAEK,CAFZ,CAGE,IAAI,CAAEf,eAAe,CAACa,CAAD,CAHvB,EAdN,GAsBGJ,CAtBH,CAyBH,CAvCM"}
1
+ {"version":3,"file":"SelectItem.js","names":["React","ListItem","cn","Checkbox","sizeCheckboxMap","xs","s","m","l","cnSelectItem","SelectItem","props","className","label","active","hovered","multiple","size","indent","disabled","otherProps"],"sources":["../../../../../../src/components/SelectComponents/SelectItem/SelectItem.tsx"],"sourcesContent":["import './SelectItem.css';\n\nimport React from 'react';\n\nimport { ListItem } from '##/components/ListCanary';\nimport { cn } from '##/utils/bem';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport { Checkbox, CheckboxPropSize } from '../../Checkbox/Checkbox';\nimport { PropSize } from '../types';\n\nexport type SelectItemProps = PropsWithHTMLAttributes<\n {\n label: string;\n active: boolean;\n hovered: boolean;\n multiple: boolean;\n size: PropSize;\n indent: 'normal' | 'increased';\n disabled: boolean | undefined;\n },\n HTMLDivElement\n>;\n\nexport const sizeCheckboxMap: Record<PropSize, CheckboxPropSize> = {\n xs: 'm',\n s: 'm',\n m: 'l',\n l: 'l',\n};\n\nexport const cnSelectItem = cn('SelectItem');\n\nexport const SelectItem: React.FC<SelectItemProps> = (props) => {\n const {\n className,\n label,\n active,\n hovered,\n multiple,\n size,\n indent,\n disabled,\n ...otherProps\n } = props;\n\n return (\n <ListItem\n {...otherProps}\n className={cnSelectItem(null, [className])}\n aria-selected={active}\n aria-disabled={disabled}\n role=\"option\"\n label={label}\n innerOffset={indent}\n size={size}\n active={hovered}\n checked={!multiple && active}\n disabled={disabled}\n leftSide={\n multiple && (\n <Checkbox\n checked={active}\n disabled={disabled}\n size={sizeCheckboxMap[size]}\n />\n )\n }\n >\n {label}\n </ListItem>\n );\n};\n"],"mappings":"kLAAA,yBAEA,MAAOA,MAAP,KAAkB,OAAlB,CAEA,OAASC,QAAT,wBACA,OAASC,EAAT,0BAGA,OAASC,QAAT,+BAgBA,MAAO,IAAMC,gBAAmD,CAAG,CACjEC,EAAE,CAAE,GAD6D,CAEjEC,CAAC,CAAE,GAF8D,CAGjEC,CAAC,CAAE,GAH8D,CAIjEC,CAAC,CAAE,GAJ8D,CAA5D,CAOP,MAAO,IAAMC,aAAY,CAAGP,EAAE,CAAC,YAAD,CAAvB,CAEP,MAAO,IAAMQ,WAAqC,CAAG,SAACC,CAAD,CAAW,CAC9D,GACEC,EADF,CAUID,CAVJ,CACEC,SADF,CAEEC,CAFF,CAUIF,CAVJ,CAEEE,KAFF,CAGEC,CAHF,CAUIH,CAVJ,CAGEG,MAHF,CAIEC,CAJF,CAUIJ,CAVJ,CAIEI,OAJF,CAKEC,CALF,CAUIL,CAVJ,CAKEK,QALF,CAMEC,CANF,CAUIN,CAVJ,CAMEM,IANF,CAOEC,CAPF,CAUIP,CAVJ,CAOEO,MAPF,CAQEC,CARF,CAUIR,CAVJ,CAQEQ,QARF,CASKC,CATL,0BAUIT,CAVJ,YAYA,MACE,qBAAC,QAAD,kBACMS,CADN,EAEE,SAAS,CAAEX,YAAY,CAAC,IAAD,CAAO,CAACG,CAAD,CAAP,CAFzB,CAGE,gBAAeE,CAHjB,CAIE,gBAAeK,CAJjB,CAKE,IAAI,CAAC,QALP,CAME,KAAK,CAAEN,CANT,CAOE,WAAW,CAAEK,CAPf,CAQE,IAAI,CAAED,CARR,CASE,MAAM,CAAEF,CATV,CAUE,OAAO,CAAE,CAACC,CAAD,EAAaF,CAVxB,CAWE,QAAQ,CAAEK,CAXZ,CAYE,QAAQ,CACNH,CAAQ,EACN,oBAAC,QAAD,EACE,OAAO,CAAEF,CADX,CAEE,QAAQ,CAAEK,CAFZ,CAGE,IAAI,CAAEf,eAAe,CAACa,CAAD,CAHvB,EAdN,GAsBGJ,CAtBH,CAyBH,CAvCM"}
@@ -0,0 +1 @@
1
+ .ListItem.SelectItemAll:hover:not(.ListItem_active){background:transparent}
@@ -0,0 +1,13 @@
1
+ import { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';
2
+ import { PropSize } from '../types';
3
+ export declare type SelectItemAllProps = PropsWithHTMLAttributes<{
4
+ checked: boolean;
5
+ intermediate?: boolean;
6
+ size: PropSize;
7
+ hovered?: boolean;
8
+ indent?: 'normal' | 'increased';
9
+ countItems?: number;
10
+ total?: number;
11
+ }, HTMLDivElement>;
12
+ export declare const cnSelectItemAll: import("@bem-react/classname").ClassNameFormatter;
13
+ export declare const SelectItemAll: (props: SelectItemAllProps) => JSX.Element;
@@ -0,0 +1,2 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["checked","intermediate","size","indent","hovered","countItems","className","total"];import React from"react";import{ListItem}from"../../ListCanary";import{Text}from"../../Text";import{cn}from"../../../utils/bem";import{Checkbox}from"../../Checkbox/Checkbox";import{sizeCheckboxMap}from"../SelectItem/SelectItem";export var cnSelectItemAll=cn("SelectItemAll");var textSizeMap={xs:"s",s:"s",m:"m",l:"l"};export var SelectItemAll=function(a){var b=a.checked,c=a.intermediate,d=a.size,e=a.indent,f=a.hovered,g=a.countItems,h=void 0===g?0:g,i=a.className,j=a.total,k=void 0===j?0:j,l=_objectWithoutProperties(a,_excluded);return React.createElement(ListItem,Object.assign({},l,{className:cnSelectItemAll(null,[i]),"aria-selected":b,role:"option",label:"\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435",innerOffset:e,size:d,active:f,rightSide:React.createElement(Text,{size:textSizeMap[d],lineHeight:"xs",view:"ghost"},"".concat(h," \u0438\u0437 ").concat(k)),leftSide:React.createElement(Checkbox,{checked:b,intermediate:c,size:sizeCheckboxMap[d]})}),"\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435")};
2
+ //# sourceMappingURL=SelectSelectAll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectSelectAll.js","names":["React","ListItem","Text","cn","Checkbox","sizeCheckboxMap","cnSelectItemAll","textSizeMap","xs","s","m","l","SelectItemAll","props","checked","intermediate","size","indent","hovered","countItems","className","total","otherProps"],"sources":["../../../../../../src/components/SelectComponents/SelectItemAll/SelectSelectAll.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ListItem } from '##/components/ListCanary';\nimport { Text, TextPropSize } from '##/components/Text';\nimport { cn } from '##/utils/bem';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport { Checkbox } from '../../Checkbox/Checkbox';\nimport { sizeCheckboxMap } from '../SelectItem/SelectItem';\nimport { PropSize } from '../types';\n\nexport type SelectItemAllProps = PropsWithHTMLAttributes<\n {\n checked: boolean;\n intermediate?: boolean;\n size: PropSize;\n hovered?: boolean;\n indent?: 'normal' | 'increased';\n countItems?: number;\n total?: number;\n },\n HTMLDivElement\n>;\n\nexport const cnSelectItemAll = cn('SelectItemAll');\n\nconst textSizeMap: Record<PropSize, TextPropSize> = {\n xs: 's',\n s: 's',\n m: 'm',\n l: 'l',\n};\n\nexport const SelectItemAll = (props: SelectItemAllProps) => {\n const {\n checked,\n intermediate,\n size,\n indent,\n hovered,\n countItems = 0,\n className,\n total = 0,\n ...otherProps\n } = props;\n\n return (\n <ListItem\n {...otherProps}\n className={cnSelectItemAll(null, [className])}\n aria-selected={checked}\n role=\"option\"\n label=\"Выбрать все\"\n innerOffset={indent}\n size={size}\n active={hovered}\n rightSide={\n <Text\n size={textSizeMap[size]}\n lineHeight=\"xs\"\n view=\"ghost\"\n >{`${countItems} из ${total}`}</Text>\n }\n leftSide={\n <Checkbox\n checked={checked}\n intermediate={intermediate}\n size={sizeCheckboxMap[size]}\n />\n }\n >\n Выбрать все\n </ListItem>\n );\n};\n"],"mappings":"yLAAA,MAAOA,MAAP,KAAkB,OAAlB,CAEA,OAASC,QAAT,wBACA,OAASC,IAAT,kBACA,OAASC,EAAT,0BAGA,OAASC,QAAT,+BACA,OAASC,eAAT,gCAgBA,MAAO,IAAMC,gBAAe,CAAGH,EAAE,CAAC,eAAD,CAA1B,CAEP,GAAMI,YAA2C,CAAG,CAClDC,EAAE,CAAE,GAD8C,CAElDC,CAAC,CAAE,GAF+C,CAGlDC,CAAC,CAAE,GAH+C,CAIlDC,CAAC,CAAE,GAJ+C,CAApD,CAOA,MAAO,IAAMC,cAAa,CAAG,SAACC,CAAD,CAA+B,CAC1D,GACEC,EADF,CAUID,CAVJ,CACEC,OADF,CAEEC,CAFF,CAUIF,CAVJ,CAEEE,YAFF,CAGEC,CAHF,CAUIH,CAVJ,CAGEG,IAHF,CAIEC,CAJF,CAUIJ,CAVJ,CAIEI,MAJF,CAKEC,CALF,CAUIL,CAVJ,CAKEK,OALF,GAUIL,CAVJ,CAMEM,UANF,CAMEA,CANF,YAMe,CANf,GAOEC,CAPF,CAUIP,CAVJ,CAOEO,SAPF,GAUIP,CAVJ,CAQEQ,KARF,CAQEA,CARF,YAQU,CARV,GASKC,CATL,0BAUIT,CAVJ,YAYA,MACE,qBAAC,QAAD,kBACMS,CADN,EAEE,SAAS,CAAEhB,eAAe,CAAC,IAAD,CAAO,CAACc,CAAD,CAAP,CAF5B,CAGE,gBAAeN,CAHjB,CAIE,IAAI,CAAC,QAJP,CAKE,KAAK,CAAC,+DALR,CAME,WAAW,CAAEG,CANf,CAOE,IAAI,CAAED,CAPR,CAQE,MAAM,CAAEE,CARV,CASE,SAAS,CACP,oBAAC,IAAD,EACE,IAAI,CAAEX,WAAW,CAACS,CAAD,CADnB,CAEE,UAAU,CAAC,IAFb,CAGE,IAAI,CAAC,OAHP,YAIKG,CAJL,0BAIsBE,CAJtB,EAVJ,CAgBE,QAAQ,CACN,oBAAC,QAAD,EACE,OAAO,CAAEP,CADX,CAEE,YAAY,CAAEC,CAFhB,CAGE,IAAI,CAAEV,eAAe,CAACW,CAAD,CAHvB,EAjBJ,mEA2BH,CAzCM"}
@@ -6,7 +6,7 @@ export declare const tagBasePropSizeDefault: "m";
6
6
  export declare type TagBasePropSize = typeof tagBasePropSize[number];
7
7
  export declare const tagBasePropGroupNumberValue: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9];
8
8
  export declare const tagBasePropGroupStringValue: readonly ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
9
- export declare const tagBasePropGroup: (2 | 1 | "1" | 4 | 3 | 5 | "2" | 7 | 9 | "3" | "4" | "5" | 8 | "6" | 6 | "7" | "8" | "9")[];
9
+ export declare const tagBasePropGroup: (2 | 1 | "1" | 4 | 3 | 5 | "2" | 7 | 9 | "3" | "4" | "5" | "6" | "7" | "8" | 8 | 6 | "9")[];
10
10
  export declare type TagBasePropGroup = typeof tagBasePropGroup[number];
11
11
  export declare const tagBasePropView: readonly ["stroked", "filled"];
12
12
  export declare const tagBasePropViewDefault: "stroked";
@@ -0,0 +1 @@
1
+ export declare const addPrefix: (breakpoints: Record<string, boolean>, prefix?: string) => Record<string, boolean>;
@@ -0,0 +1,2 @@
1
+ var firstLetterUppercase=function(a){return a.charAt(0).toUpperCase()+a.slice(1).toLowerCase()};export var addPrefix=function(a){for(var b,c=1<arguments.length&&arguments[1]!==void 0?arguments[1]:"breakpoint",d=Object.keys(a),e={},f=0;f<d.length;f++)b=d[f],e["".concat(c).concat(firstLetterUppercase(b))]=a[b];return e};
2
+ //# sourceMappingURL=addPrefix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addPrefix.js","names":["firstLetterUppercase","string","charAt","toUpperCase","slice","toLowerCase","addPrefix","breakpoints","key","prefix","keys","Object","mods","index","length"],"sources":["../../../../../src/hooks/useBreakpoints/addPrefix.ts"],"sourcesContent":["const firstLetterUppercase = (string: string) =>\n string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n\nexport const addPrefix = (\n breakpoints: Record<string, boolean>,\n prefix = 'breakpoint',\n) => {\n const keys = Object.keys(breakpoints);\n const mods: Record<string, boolean> = {};\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n mods[`${prefix}${firstLetterUppercase(key)}`] = breakpoints[key];\n }\n return mods;\n};\n"],"mappings":"AAAA,GAAMA,qBAAoB,CAAG,SAACC,CAAD,QAC3BA,EAAM,CAACC,MAAP,CAAc,CAAd,EAAiBC,WAAjB,GAAiCF,CAAM,CAACG,KAAP,CAAa,CAAb,EAAgBC,WAAhB,EADN,CAA7B,CAGA,MAAO,IAAMC,UAAS,CAAG,SACvBC,CADuB,CAGpB,CAGH,OACQC,EADR,CAJAC,CAIA,wDAJS,YAIT,CAFMC,CAAI,CAAGC,MAAM,CAACD,IAAP,CAAYH,CAAZ,CAEb,CADMK,CAA6B,CAAG,EACtC,CAASC,CAAK,CAAG,CAAjB,CAAoBA,CAAK,CAAGH,CAAI,CAACI,MAAjC,CAAyCD,CAAK,EAA9C,CACQL,CADR,CACcE,CAAI,CAACG,CAAD,CADlB,CAEED,CAAI,WAAIH,CAAJ,SAAaT,oBAAoB,CAACQ,CAAD,CAAjC,EAAJ,CAAgDD,CAAW,CAACC,CAAD,CAF7D,CAIA,MAAOI,EACR,CAXM"}
@@ -1,2 +1,3 @@
1
1
  export * from './useBreakpoints';
2
2
  export * from './getLastPoint';
3
+ export * from './addPrefix';
@@ -1,2 +1,2 @@
1
- export*from"./useBreakpoints";export*from"./getLastPoint";
1
+ export*from"./useBreakpoints";export*from"./getLastPoint";export*from"./addPrefix";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/hooks/useBreakpoints/index.ts"],"sourcesContent":["export * from './useBreakpoints';\nexport * from './getLastPoint';\n"],"mappings":"AAAA,8BACA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/hooks/useBreakpoints/index.ts"],"sourcesContent":["export * from './useBreakpoints';\nexport * from './getLastPoint';\nexport * from './addPrefix';\n"],"mappings":"AAAA,8BACA,4BACA"}
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { CountedGroup, SelectAllItem } from '../../utils/getGroups';
2
3
  declare type IndexForHighlight = number | ((oldIndex: number) => number);
3
4
  declare type Group<ITEM, GROUP> = {
4
5
  items: ITEM[];
@@ -26,6 +27,7 @@ export declare type SelectProps<ITEM, GROUP, MULTIPLE extends boolean> = {
26
27
  dropdownRef: React.MutableRefObject<HTMLDivElement | null>;
27
28
  controlRef: React.MutableRefObject<HTMLDivElement | null>;
28
29
  disabled?: boolean;
30
+ selectAll?: boolean;
29
31
  getItemLabel: (item: ITEM) => string;
30
32
  getItemKey: (item: ITEM) => string | number;
31
33
  getItemDisabled?: (item: ITEM) => boolean | undefined;
@@ -44,7 +46,7 @@ export declare type SelectProps<ITEM, GROUP, MULTIPLE extends boolean> = {
44
46
  };
45
47
  export declare type OptionProps<ITEM> = {
46
48
  index: number;
47
- item: ITEM | OptionForCreate;
49
+ item: ITEM | OptionForCreate | SelectAllItem;
48
50
  };
49
51
  export declare type GetOptionPropsResult = {
50
52
  onClick: (e: React.SyntheticEvent) => void;
@@ -54,11 +56,12 @@ export declare type GetOptionPropsResult = {
54
56
  key: string | number;
55
57
  };
56
58
  export declare const isOptionForCreate: <ITEM, GROUP>(params: OptionForCreate | ITEM | Group<ITEM, GROUP>) => params is OptionForCreate;
59
+ export declare const isOptionForSelectAll: <ITEM, GROUP>(params: SelectAllItem | ITEM | Group<ITEM, GROUP>) => params is SelectAllItem;
57
60
  export declare function useSelect<ITEM, GROUP, MULTIPLE extends boolean>(params: SelectProps<ITEM, GROUP, MULTIPLE>): {
58
61
  isOpen: boolean;
59
62
  isFocused: boolean;
60
63
  highlightedIndex: number;
61
- visibleItems: (OptionForCreate | import("../../utils/getGroups").Group<ITEM, GROUP>)[];
64
+ visibleItems: (OptionForCreate | CountedGroup<ITEM, GROUP>)[];
62
65
  highlightIndex: (indexForHighlight: IndexForHighlight, scrollToHighlighted: boolean) => void;
63
66
  getOptionProps: ({ index, item, }: OptionProps<ITEM>) => GetOptionPropsResult;
64
67
  handleInputFocus: (e: React.FocusEvent<HTMLInputElement>) => void;
@@ -1,2 +1,2 @@
1
- import _defineProperty from"@babel/runtime/helpers/defineProperty";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function(a){function b(){return a.apply(this,arguments)}return b.toString=function(){return a.toString()},b}(function(a){throw a}),f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function(a){function b(){return a.apply(this,arguments)}return b.toString=function(){return a.toString()},b}(function(a){h=!0,f=a}),f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}import React,{useEffect,useMemo,useRef,useState}from"react";import{getGroups}from"../../utils/getGroups";import{useClickOutside}from"../useClickOutside/useClickOutside";import{useDebounce}from"../useDebounce/useDebounce";import{useKeys}from"../useKeys/useKeys";import{usePrevious}from"../usePrevious/usePrevious";import{scrollToIndex,useHoistedState}from"./helpers";var isMultipleParams=function(a){return a.multiple},isNotMultipleParams=function(a){return!a.multiple},actions={setOpen:"setOpen",setSearch:"setSearch",highlightIndex:"highlightIndex"},initialState={searchValue:"",resolvedSearchValue:"",isOpen:!1,highlightedIndex:0,scrollToHighlighted:!1};export var isOptionForCreate=function(a){return a&&Object.prototype.hasOwnProperty.call(a,"__optionForCreate")};export function useSelect(a){var b=a.items,c=a.dropdownRef,d=a.controlRef,e=a.disabled,f=void 0!==e&&e,g=a.multiple,h=void 0!==g&&g,i=a.getItemLabel,j=a.getItemKey,k=a.searchFunction,l=a.getItemGroupKey,m=a.groups,n=a.getGroupKey,o=a.sortGroups,p=a.getItemDisabled,q=a.onFocus,r=a.onBlur,s=a.searchValue,t=a.withoutClearSearch,u=useRef(null),v=useState(!1),w=_slicedToArray(v,2),x=w[0],y=w[1],z=a.value&&(Array.isArray(a.value)?a.value:[a.value])||[],A=useHoistedState(initialState),B=_slicedToArray(A,2),C=B[0],D=C.searchValue,E=C.isOpen,F=C.highlightedIndex,G=C.resolvedSearchValue,H=C.scrollToHighlighted,I=B[1],J=function(a,b){return-1!==i(a).toLocaleLowerCase().indexOf(b.toLocaleLowerCase())},K=React.useMemo(function(){if(G&&""!==G){var c=b.filter(function(a){return k?k(a,G):J(a,G)}),d=!!b.find(function(a){return i(a).toString().toLowerCase()===G.toLocaleLowerCase()});return[c,a.onCreate&&!d?{label:D,__optionForCreate:!0}:void 0]}return[b,void 0]},[b,G]),L=_slicedToArray(K,2),M=L[0],N=L[1],O=useMemo(function(){var a=getGroups(M,null!==m&&void 0!==m&&m.length?l:void 0,m,n,o);return N?[N].concat(_toConsumableArray(a)):a},[M,m,l,n,o,N]),P=useMemo(function(){var b=!1;return 0<D.length&&(b=0===O.filter(function(a){return isOptionForCreate(a)||0<a.items.length||a.group}).length&&!a.onCreate),b},[O]),Q=0!==b.length,R=function(){var a=0;if(0<z.length){var b,c=_createForOfIteratorHelper(O);try{for(c.s();!(b=c.n()).done;){var f=b.value;if(isOptionForCreate(f)){a++;continue}var d,e=_createForOfIteratorHelper(f.items);try{for(e.s();!(d=e.n()).done;){var g=d.value;if(j(g)===j(z[0]))return a;a++}}catch(a){e.e(a)}finally{e.f()}}}catch(a){c.e(a)}finally{c.f()}}return 0},S=React.useCallback(function(a){I(function(b){return _objectSpread(_objectSpread({},b),{},{isOpen:a})},actions.setOpen)},[I]),T=useDebounce(function(a){I(function(b){return _objectSpread(_objectSpread({},b),{},{resolvedSearchValue:a})},actions.setSearch)},300),U=React.useCallback(function(a){I(function(b){return _objectSpread(_objectSpread({},b),{},{searchValue:a})},actions.setSearch),T(a)},[I,T]),V=usePrevious(E);React.useLayoutEffect(function(){if(null!==z&&!V&&E){var a=R();0<M.length&&scrollToIndex(a,c)}});var W=React.useCallback(function(a,b){I(function(c){return _objectSpread(_objectSpread({},c),{},{highlightedIndex:Math.min(Math.max(0,"function"==typeof a?a(c.highlightedIndex):a),N?M.length:M.length-1),scrollToHighlighted:b})},actions.highlightIndex)},[M,I,N]),X=function(b,c){if(b.stopPropagation(),isMultipleParams(a)){var d,e=null===(d=a.value)||void 0===d?void 0:d.filter(function(a){return j(a)!==j(c)});a.onChange({e:b,value:null!==e&&void 0!==e&&e.length?e:null})}},Y=function(b,c){if(!(p&&p(c))){if(isMultipleParams(a)){var d=z.some(function(a){return j(a)===j(c)})?z.filter(function(a){return j(a)!==j(c)}):[].concat(_toConsumableArray(z),[c]);a.onChange({value:d.length?d:null,e:b})}isNotMultipleParams(a)&&(a.onChange({value:c,e:b}),S(!1)),t||U("")}},Z=function(b,c){a.onCreate&&a.onCreate({e:b,label:c}),S(!1),t||U("")},$=function(b){if(t||U(""),isMultipleParams(a)){var c=null===z||void 0===z?void 0:z.filter(function(a){return null===p||void 0===p?void 0:p(a)});a.onChange({value:c&&0<c.length?c:null,e:b})}isNotMultipleParams(a)&&a.onChange({value:null,e:b})},_=function(a,b){b.preventDefault(),f||S(!0),W(function(a){return a-1},!0)},aa=function(a,b){b.preventDefault(),f||S(!0),W(function(a){return a+1},!0)},ba=useKeys({ArrowUp:_,ArrowDown:aa,PageUp:_,PageDown:aa,Home:_,End:aa,Enter:function Enter(a,b){if(E){(D||M[F])&&b.preventDefault();var c=function(a){var b,c=0,d=_createForOfIteratorHelper(O);try{for(d.s();!(b=d.n()).done;){var e=b.value;if(isOptionForCreate(e))return c++,e;if(e.items.length+c>a)return e.items[a-c];c+=e.items.length}}catch(a){d.e(a)}finally{d.f()}},d=c(F);if(isOptionForCreate(d))return void Z(b,d.label);d&&Y(b,d)}},Escape:function Escape(){S(!1)},Tab:function Tab(){S(!1)},Backspace:function Backspace(a,b){D||(h?X(b,z[z.length-1]):$(b))}});useClickOutside({isActive:E,ignoreClicksInsideRefs:[c,d],handler:function handler(){S(!1)}}),React.useEffect(function(){f&&S(!1)},[f]),React.useEffect(function(){var a=R();W(a,!0)},[W]),React.useEffect(function(){0<M.length&&H&&scrollToIndex(F,c)},[F]);return useEffect(function(){s&&U(s)},[s]),{isOpen:E,isFocused:x,highlightedIndex:F,visibleItems:O,highlightIndex:W,getOptionProps:function getOptionProps(a){var b=a.index,c=a.item;if(isOptionForCreate(c))return{onClick:function onClick(a){Z(a,c.label)},onMouseEnter:function onMouseEnter(){W(b,!1)},active:!1,hovered:b===F,key:"__optionForCreate"};var d=j(c);return{onClick:function onClick(a){Y(a,c)},onMouseEnter:function onMouseEnter(){W(b,!1)},active:!!z.find(function(a){return j(a)===d}),hovered:b===F,key:d}},handleInputFocus:function handleInputFocus(a){f||(!x&&y(!0),"function"==typeof q&&q(a))},handleInputBlur:function handleInputBlur(a){if(E){var b;return void(null===(b=u.current)||void 0===b?void 0:b.focus())}x&&y(!1),"function"==typeof r&&r(a)},handleToggleDropdown:function handleToggleDropdown(){if(E)S(!1),y(!1);else{var a;S(!0),y(!0),null===(a=u.current)||void 0===a?void 0:a.focus()}},handleInputClick:function handleInputClick(){if(f||S(!E),h){var a;null===(a=u.current)||void 0===a?void 0:a.focus(),t||U("")}},inputRef:u,getKeyProps:ba,handleInputChange:function handleInputChange(a){f||!h&&0<z.length||U(a.target.value)},searchValue:D,clearValue:$,getHandleRemoveValue:function getHandleRemoveValue(a){return function(b){return X(b,a)}},notFound:P,hasItems:Q}}
1
+ import _defineProperty from"@babel/runtime/helpers/defineProperty";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function(a){function b(){return a.apply(this,arguments)}return b.toString=function(){return a.toString()},b}(function(a){throw a}),f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function(a){function b(){return a.apply(this,arguments)}return b.toString=function(){return a.toString()},b}(function(a){h=!0,f=a}),f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}import React,{useEffect,useMemo,useRef,useState}from"react";import{getCountedGroups,getGroups}from"../../utils/getGroups";import{useClickOutside}from"../useClickOutside/useClickOutside";import{useDebounce}from"../useDebounce/useDebounce";import{useKeys}from"../useKeys/useKeys";import{usePrevious}from"../usePrevious/usePrevious";import{scrollToIndex,useHoistedState}from"./helpers";var isMultipleParams=function(a){return a.multiple},isNotMultipleParams=function(a){return!a.multiple},actions={setOpen:"setOpen",setSearch:"setSearch",highlightIndex:"highlightIndex"},initialState={searchValue:"",resolvedSearchValue:"",isOpen:!1,highlightedIndex:0,scrollToHighlighted:!1};export var isOptionForCreate=function(a){return a&&Object.prototype.hasOwnProperty.call(a,"__optionForCreate")};export var isOptionForSelectAll=function(a){return a&&Object.prototype.hasOwnProperty.call(a,"__optionSelctAll")};export function useSelect(a){var b=a.items,c=a.dropdownRef,d=a.controlRef,e=a.disabled,f=void 0!==e&&e,g=a.multiple,h=void 0!==g&&g,i=a.getItemLabel,j=a.getItemKey,k=a.searchFunction,l=a.getItemGroupKey,m=a.groups,n=a.selectAll,o=void 0!==n&&n,p=a.getGroupKey,q=a.sortGroups,r=a.getItemDisabled,s=a.onFocus,t=a.onBlur,u=a.searchValue,v=a.withoutClearSearch,w=useRef(null),x=useState(!1),y=_slicedToArray(x,2),z=y[0],A=y[1],B=a.value&&(Array.isArray(a.value)?a.value:[a.value])||[],C=useHoistedState(initialState),D=_slicedToArray(C,2),E=D[0],F=E.searchValue,G=E.isOpen,H=E.highlightedIndex,I=E.resolvedSearchValue,J=E.scrollToHighlighted,K=D[1],L=function(a,b){return-1!==i(a).toLocaleLowerCase().indexOf(b.toLocaleLowerCase())},M=React.useMemo(function(){if(I&&""!==I){var c=b.filter(function(a){return k?k(a,I):L(a,I)}),d=!!b.find(function(a){return i(a).toString().toLowerCase()===I.toLocaleLowerCase()});return[c,a.onCreate&&!d?{label:F,__optionForCreate:!0}:void 0]}return[b,void 0]},[b,I]),N=_slicedToArray(M,2),O=N[0],P=N[1],Q=useMemo(function(){var b=getCountedGroups(getGroups(O,null!==m&&void 0!==m&&m.length?l:void 0,m,p,q),isMultipleParams(a)?a.value:[],o,j,r);return P?[P].concat(_toConsumableArray(b)):b},[B,o,O,m,l,r,p,q,P]),R=useMemo(function(){var b=!1;return 0<F.length&&(b=0===Q.filter(function(a){return isOptionForCreate(a)||0<a.items.length||a.group}).length&&!a.onCreate),b},[Q]),S=0!==b.length,T=function(){var a=0;if(0<B.length){var b,c=_createForOfIteratorHelper(Q);try{for(c.s();!(b=c.n()).done;){var f=b.value;if(isOptionForCreate(f)){a++;continue}var d,e=_createForOfIteratorHelper(f.items);try{for(e.s();!(d=e.n()).done;){var g=d.value;if(isOptionForSelectAll(g))return a;if(j(g)===j(B[0]))return a;a++}}catch(a){e.e(a)}finally{e.f()}}}catch(a){c.e(a)}finally{c.f()}}return 0},U=React.useCallback(function(a){K(function(b){return _objectSpread(_objectSpread({},b),{},{isOpen:a})},actions.setOpen)},[K]),V=useDebounce(function(a){K(function(b){return _objectSpread(_objectSpread({},b),{},{resolvedSearchValue:a})},actions.setSearch)},300),W=React.useCallback(function(a){K(function(b){return _objectSpread(_objectSpread({},b),{},{searchValue:a})},actions.setSearch),V(a)},[K,V]),X=usePrevious(G);React.useLayoutEffect(function(){if(null!==B&&!X&&G){var a=T();0<O.length&&scrollToIndex(a,c)}});var Y=React.useCallback(function(a,b){K(function(c){return _objectSpread(_objectSpread({},c),{},{highlightedIndex:Math.min(Math.max(0,"function"==typeof a?a(c.highlightedIndex):a),P?O.length:O.length-1),scrollToHighlighted:b})},actions.highlightIndex)},[O,K,P]),Z=function(b,c){if(b.stopPropagation(),isMultipleParams(a)){var d,e=null===(d=a.value)||void 0===d?void 0:d.filter(function(a){return j(a)!==j(c)});a.onChange({e:b,value:null!==e&&void 0!==e&&e.length?e:null})}},$=function(b,c){if(!(r&&r(c))){if(isMultipleParams(a)){var d=B.some(function(a){return j(a)===j(c)})?B.filter(function(a){return j(a)!==j(c)}):[].concat(_toConsumableArray(B),[c]);a.onChange({value:d.length?d:null,e:b})}isNotMultipleParams(a)&&(a.onChange({value:c,e:b}),U(!1)),v||W("")}},_=function(b){var c=b.e,d=b.items;if(isMultipleParams(a)){var e=r?d.filter(function(a){return!r(a)}):d,f=[],g=[];B.forEach(function(a){e.find(function(b){return j(a)===j(b)})?f.push(a):g.push(a)}),f.length===e.length?a.onChange({value:g,e:c}):a.onChange({e:c,value:[].concat(g,_toConsumableArray(e))})}},aa=function(b,c){a.onCreate&&a.onCreate({e:b,label:c}),U(!1),v||W("")},ba=function(b){if(v||W(""),isMultipleParams(a)){var c=null===B||void 0===B?void 0:B.filter(function(a){return null===r||void 0===r?void 0:r(a)});a.onChange({value:c&&0<c.length?c:null,e:b})}isNotMultipleParams(a)&&a.onChange({value:null,e:b})},ca=function(a,b){b.preventDefault(),f||U(!0),Y(function(a){return a-1},!0)},da=function(a,b){b.preventDefault(),f||U(!0),Y(function(a){return a+1},!0)},ea=useKeys({ArrowUp:ca,ArrowDown:da,PageUp:ca,PageDown:da,Home:ca,End:da,Enter:function Enter(a,b){if(G){(F||O[H])&&b.preventDefault();var c=function(a){var b,c=0,d=_createForOfIteratorHelper(Q);try{for(d.s();!(b=d.n()).done;){var e=b.value;if(isOptionForCreate(e))return c++,[void 0,e];if(e.items.length+c>a)return[e,e.items[a-c]];c+=e.items.length}}catch(a){d.e(a)}finally{d.f()}return[void 0,void 0]},d=c(H),e=_slicedToArray(d,2),f=e[0],g=e[1];if(isOptionForCreate(g))return void aa(b,g.label);if(isOptionForSelectAll(g)){var h;return void _({e:b,items:null!==(h=null===f||void 0===f?void 0:f.items.filter(function(a){return!isOptionForSelectAll(a)}))&&void 0!==h?h:[]})}g&&$(b,g)}},Escape:function Escape(){U(!1)},Tab:function Tab(){U(!1)},Backspace:function Backspace(a,b){F||(h?Z(b,B[B.length-1]):ba(b))}});useClickOutside({isActive:G,ignoreClicksInsideRefs:[c,d],handler:function handler(){U(!1)}}),React.useEffect(function(){f&&U(!1)},[f]),React.useEffect(function(){var a=T();Y(a,!0)},[Y]),React.useEffect(function(){0<O.length&&J&&scrollToIndex(H,c)},[H]);return useEffect(function(){u&&W(u)},[u]),{isOpen:G,isFocused:z,highlightedIndex:H,visibleItems:Q,highlightIndex:Y,getOptionProps:function getOptionProps(a){var b=a.index,c=a.item;if(isOptionForCreate(c))return{onClick:function onClick(a){aa(a,c.label)},onMouseEnter:function onMouseEnter(){Y(b,!1)},active:!1,hovered:b===H,key:"__optionForCreate"};if(isOptionForSelectAll(c)){var f=function(){var a,b=_createForOfIteratorHelper(Q);try{for(b.s();!(a=b.n()).done;){var e=a.value;if(isOptionForCreate(e))break;if(e.key===c.groupKey){var d;return null!==(d=null===e||void 0===e?void 0:e.items.filter(function(a){return!isOptionForSelectAll(a)}))&&void 0!==d?d:[]}}}catch(a){b.e(a)}finally{b.f()}return[]};return{onClick:function onClick(a){_({e:a,items:f()})},onMouseEnter:function onMouseEnter(){Y(b,!1)},active:!1,hovered:b===H,key:"__optionForSelectAll"}}var d=j(c);return{onClick:function onClick(a){$(a,c)},onMouseEnter:function onMouseEnter(){Y(b,!1)},active:!!B.find(function(a){return j(a)===d}),hovered:b===H,key:d}},handleInputFocus:function handleInputFocus(a){f||(!z&&A(!0),"function"==typeof s&&s(a))},handleInputBlur:function handleInputBlur(a){if(G){var b;return void(null===(b=w.current)||void 0===b?void 0:b.focus())}z&&A(!1),"function"==typeof t&&t(a)},handleToggleDropdown:function handleToggleDropdown(){if(G)U(!1),A(!1);else{var a;U(!0),A(!0),null===(a=w.current)||void 0===a?void 0:a.focus()}},handleInputClick:function handleInputClick(){if(f||U(!G),h){var a;null===(a=w.current)||void 0===a?void 0:a.focus(),v||W("")}},inputRef:w,getKeyProps:ea,handleInputChange:function handleInputChange(a){f||!h&&0<B.length||W(a.target.value)},searchValue:F,clearValue:ba,getHandleRemoveValue:function getHandleRemoveValue(a){return function(b){return Z(b,a)}},notFound:R,hasItems:S}}
2
2
  //# sourceMappingURL=useSelect.js.map