@gravity-ui/date-components 3.4.1 → 3.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
  3. package/dist/cjs/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  4. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  5. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +5 -3
  6. package/dist/cjs/components/DateField/hooks/useDateFieldState.js.map +1 -1
  7. package/dist/cjs/components/DateField/utils.js +7 -7
  8. package/dist/cjs/components/DateField/utils.js.map +1 -1
  9. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  10. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  11. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +9 -3
  12. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
  13. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  14. package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
  15. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  16. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +1 -1
  17. package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
  18. package/dist/cjs/components/types/inputs.js.map +1 -1
  19. package/dist/cjs/package.json +1 -1
  20. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  21. package/dist/esm/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  22. package/dist/esm/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  23. package/dist/esm/components/DateField/hooks/useDateFieldState.js +6 -4
  24. package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
  25. package/dist/esm/components/DateField/utils.js +7 -7
  26. package/dist/esm/components/DateField/utils.js.map +1 -1
  27. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  28. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  29. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +10 -4
  30. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
  31. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  32. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  33. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  34. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +1 -1
  35. package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
  36. package/dist/esm/components/types/inputs.js.map +1 -1
  37. package/dist/esm/package.json +1 -1
  38. package/package.json +36 -48
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","sourceRoot":"../../../../src","sources":["components/DatePicker/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Calendar as CalendarIcon, Clock as ClockIcon} from '@gravity-ui/icons';\nimport {Button, Icon, Popup, TextInput, useMobile} from '@gravity-ui/uikit';\n\nimport {Calendar} from '../Calendar';\nimport type {CalendarProps} from '../Calendar';\nimport {DateField} from '../DateField';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n PopupStyleProps,\n StyleProps,\n TextInputProps,\n} from '../types';\n\nimport {MobileCalendar} from './MobileCalendar';\nimport {StubButton} from './StubButton';\nimport type {DatePickerStateOptions} from './hooks/datePickerStateFactory';\nimport {useDatePickerProps} from './hooks/useDatePickerProps';\nimport {useDatePickerState} from './hooks/useDatePickerState';\nimport {b} from './utils';\n\nimport './DatePicker.scss';\n\nexport interface DatePickerProps<T = DateTime>\n extends DatePickerStateOptions<T>,\n TextInputProps,\n FocusableProps,\n KeyboardEvents,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n PopupStyleProps {\n children?: (props: CalendarProps<T>) => React.ReactNode;\n disablePortal?: boolean;\n disableFocusTrap?: boolean;\n}\n\nexport function DatePicker({className, ...props}: DatePickerProps) {\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n\n const state = useDatePickerState(props);\n\n const {groupProps, fieldProps, calendarButtonProps, popupProps, calendarProps, timeInputProps} =\n useDatePickerProps(state, props);\n\n const isMobile = useMobile();\n const isOnlyTime = state.formatInfo.hasTime && !state.formatInfo.hasDate;\n\n return (\n <div className={b(null, className)} {...groupProps}>\n {isMobile ? (\n <MobileCalendar props={props} state={state} />\n ) : (\n !isOnlyTime && (\n <div ref={setAnchor} className={b('popup-anchor')}>\n <Popup anchorElement={anchor} {...popupProps}>\n <div className={b('popup-content')}>\n {typeof props.children === 'function' ? (\n props.children(calendarProps)\n ) : (\n <Calendar {...calendarProps} />\n )}\n {state.formatInfo.hasTime && (\n <div className={b('time-field-wrapper')}>\n <DateField {...timeInputProps} />\n </div>\n )}\n </div>\n </Popup>\n </div>\n )\n )}\n <TextInput\n {...fieldProps}\n className={b('field', {mobile: isMobile})}\n hasClear={!isMobile && fieldProps.hasClear}\n endContent={\n <React.Fragment>\n {!isMobile && !isOnlyTime && (\n <Button {...calendarButtonProps}>\n <Icon data={CalendarIcon} />\n </Button>\n )}\n {(isMobile || isOnlyTime) && (\n <StubButton\n size={calendarButtonProps.size}\n icon={isOnlyTime ? ClockIcon : CalendarIcon}\n />\n )}\n </React.Fragment>\n }\n />\n <HiddenInput\n name={props.name}\n value={state.value}\n toStringValue={(value) => value?.toISOString() ?? ''}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"DatePicker.js","sourceRoot":"../../../../src","sources":["components/DatePicker/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Calendar as CalendarIcon, Clock as ClockIcon} from '@gravity-ui/icons';\nimport {Button, Icon, Popup, TextInput, useMobile} from '@gravity-ui/uikit';\n\nimport {Calendar} from '../Calendar';\nimport type {CalendarProps} from '../Calendar';\nimport {DateField} from '../DateField';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n PopupStyleProps,\n StyleProps,\n TextInputProps,\n} from '../types';\n\nimport {MobileCalendar} from './MobileCalendar';\nimport {StubButton} from './StubButton';\nimport type {DatePickerStateOptions} from './hooks/datePickerStateFactory';\nimport {useDatePickerProps} from './hooks/useDatePickerProps';\nimport {useDatePickerState} from './hooks/useDatePickerState';\nimport {b} from './utils';\n\nimport './DatePicker.scss';\n\nexport interface DatePickerProps<T = DateTime>\n extends\n DatePickerStateOptions<T>,\n TextInputProps,\n FocusableProps,\n KeyboardEvents,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n PopupStyleProps {\n children?: (props: CalendarProps<T>) => React.ReactNode;\n disablePortal?: boolean;\n disableFocusTrap?: boolean;\n}\n\nexport function DatePicker({className, ...props}: DatePickerProps) {\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n\n const state = useDatePickerState(props);\n\n const {groupProps, fieldProps, calendarButtonProps, popupProps, calendarProps, timeInputProps} =\n useDatePickerProps(state, props);\n\n const isMobile = useMobile();\n const isOnlyTime = state.formatInfo.hasTime && !state.formatInfo.hasDate;\n\n return (\n <div className={b(null, className)} {...groupProps}>\n {isMobile ? (\n <MobileCalendar props={props} state={state} />\n ) : (\n !isOnlyTime && (\n <div ref={setAnchor} className={b('popup-anchor')}>\n <Popup anchorElement={anchor} {...popupProps}>\n <div className={b('popup-content')}>\n {typeof props.children === 'function' ? (\n props.children(calendarProps)\n ) : (\n <Calendar {...calendarProps} />\n )}\n {state.formatInfo.hasTime && (\n <div className={b('time-field-wrapper')}>\n <DateField {...timeInputProps} />\n </div>\n )}\n </div>\n </Popup>\n </div>\n )\n )}\n <TextInput\n {...fieldProps}\n className={b('field', {mobile: isMobile})}\n hasClear={!isMobile && fieldProps.hasClear}\n endContent={\n <React.Fragment>\n {!isMobile && !isOnlyTime && (\n <Button {...calendarButtonProps}>\n <Icon data={CalendarIcon} />\n </Button>\n )}\n {(isMobile || isOnlyTime) && (\n <StubButton\n size={calendarButtonProps.size}\n icon={isOnlyTime ? ClockIcon : CalendarIcon}\n />\n )}\n </React.Fragment>\n }\n />\n <HiddenInput\n name={props.name}\n value={state.value}\n toStringValue={(value) => value?.toISOString() ?? ''}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"datePickerStateFactory.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/hooks/datePickerStateFactory.ts"],"names":[],"mappings":";;AA8EA,wDAkLC;;AAhQD,0DAA0B;AAG1B,6CAAqD;AAKrD,0EAAkE;AAsElE,SAAgB,sBAAsB,CAAyC,EAC3E,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,GACgB;IAClC,OAAO,SAAS,kBAAkB,CAAC,KAAQ;;QACvC,MAAM,EAAC,QAAQ,EAAE,QAAQ,EAAC,GAAG,KAAK,CAAC;QACnC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAA,0BAAkB,EACzC,KAAK,CAAC,IAAI,EACV,MAAA,KAAK,CAAC,WAAW,mCAAI,KAAK,EAC1B,KAAK,CAAC,YAAY,CACrB,CAAC;QAEF,MAAM,OAAO,GAA2C,QAAQ,CAAC;QAEjE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,0BAAkB,EACxC,KAAK,CAAC,KAAc,EACpB,MAAA,KAAK,CAAC,YAAY,mCAAI,IAAI,EAC1B,KAAK,CAAC,QAAQ,CACjB,CAAC;QACF,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAW,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAW,IAAI,CAAC,CAAC;QAE5E,MAAM,aAAa,GAAG,IAAA,uCAAkB,EACpC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,gBAAgB,CACxF,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC;QAEjD,IAAI,YAAY,GAAG,iBAAiB,CAAC;QACrC,IAAI,YAAY,GAAG,iBAAiB,CAAC;QAErC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;QAEnC,MAAM,WAAW,GAAG,CAAC,IAAO,EAAE,IAAO,EAAE,EAAE;YACrC,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBACvB,OAAO;YACX,CAAC;YAED,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;YAChE,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,iBAAiB,iCACjC,KAAK,KACR,KAAK;YACL,QAAQ,CAAC,IAAc;gBACnB,IAAI,IAAI,EAAE,CAAC;oBACP,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC;YACD,QAAQ;YACR,QAAQ,EACR,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,MAAM,EACN,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,QAAQ,IACV,CAAC;QAEH,MAAM,UAAU,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACrC,OAAO,SAAS,CAAC;YACrB,CAAC;YACD,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YACrE,IAAI,KAAK,EAAE,CAAC;gBACR,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACzE,IAAI,OAAO,EAAE,CAAC;gBACV,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACzE,IAAI,OAAO,EAAE,CAAC;gBACV,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;YAC9E,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEjE,IAAI,KAAK,EAAE,CAAC;YACR,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC5C,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACpC,YAAY,GAAG,YAAY,CAAC;YAChC,CAAC;QACL,CAAC;QAED,gGAAgG;QAChG,MAAM,UAAU,GAAG,CAAC,QAAW,EAAE,EAAE;YAC/B,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBACvB,OAAO;YACX,CAAC;YAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YACxE,MAAM,WAAW,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC;YACvD,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;oBAC9B,WAAW,CAAC,OAAO,EAAE,YAAY,IAAI,OAAO,CAAC,CAAC;gBAClD,CAAC;qBAAM,CAAC;oBACJ,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YACpC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,QAAkB,EAAE,EAAE;YACtC,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBACvB,OAAO;YACX,CAAC;YAED,MAAM,OAAO,GAAG,kBAAkB,CAC9B,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,kBAAkB,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAChE,cAAc,CAAC,UAAU,CAC5B,CAAC;YAEF,IAAI,YAAY,EAAE,CAAC;gBACf,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACJ,eAAe,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YACrD,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;QAC/C,CAAC;QAED,OAAO;YACH,KAAK;YACL,QAAQ,CAAC,OAAiB;gBACtB,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnC,OAAO;gBACX,CAAC;gBAED,IAAI,OAAO,EAAE,CAAC;oBACV,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;gBAClD,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC;YACD,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,YAAY;YACvB,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,UAAU;YACxB,QAAQ;YACR,QAAQ;YACR,MAAM;YACN,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,OAAO;YAC1C,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,OAAO;YAC1C,UAAU;YACV,QAAQ;YACR,MAAM;YACN,OAAO,CAAC,SAAS,EAAE,MAAM;gBACrB,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,YAAY,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBAC5E,WAAW,CACP,YAAY,EACZ,YAAY,IAAI,kBAAkB,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAC7E,CAAC;gBACN,CAAC;gBAED,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,cAAc;SACjB,CAAC;IACN,CAAC,CAAC;AACN,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {DateFieldState} from '../../DateField';\nimport type {FormatInfo} from '../../DateField/types';\nimport type {DateFieldBase, PopupTriggerProps} from '../../types';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\n\ntype OpenChangeReason =\n | 'EscapeKeyDown'\n | 'FocusOut'\n | 'ClickOutside'\n | 'ValueSelected'\n | 'TriggerButtonClick'\n | 'ShortcutKeyDown';\n\nexport interface DatePickerState<T = DateTime> {\n /** The currently selected date. */\n value: T | null;\n /** Sets the selected date. */\n setValue: (value: T | null) => void;\n /**\n * The date portion of the value. This may be set prior to `value` if the user has\n * selected a date but has not yet selected a time.\n */\n dateValue: T | null;\n /** Sets the date portion of the value. */\n setDateValue: (value: T) => void;\n /**\n * The time portion of the value. This may be set prior to `value` if the user has\n * selected a time but has not yet selected a date.\n */\n timeValue: T | null;\n /** Sets the time portion of the value. */\n setTimeValue: (value: T | null) => void;\n /** Whether the field is read only. */\n readOnly?: boolean;\n /** Whether the field is disabled. */\n disabled?: boolean;\n /** Format of the date when rendered in the input. */\n format: string;\n /** Format info */\n formatInfo: FormatInfo;\n /**\n * @deprecated use formatInfo.hasDate instead\n * Whether the date picker supports selecting a date.\n */\n hasDate: boolean;\n /**\n * @deprecated use formatInfo.hasTime instead\n * Whether the date picker supports selecting a time.\n */\n hasTime: boolean;\n /** Format of the time when rendered in the input. */\n timeFormat?: string;\n timeZone: string;\n /** Whether the calendar popover is currently open. */\n isOpen: boolean;\n /** Sets whether the calendar popover is open. */\n setOpen: (isOpen: boolean, reason: OpenChangeReason) => void;\n dateFieldState: DateFieldState<T>;\n}\n\nexport interface DatePickerStateFactoryOptions<T, O extends DateFieldBase<T>> {\n getPlaceholderTime: (placeholderValue: DateTime | undefined, timeZone?: string) => T;\n mergeDateTime: (date: T, time: T) => T;\n setTimezone: (date: T, timeZone: string) => T;\n getDateTime: (date: T | null | undefined) => DateTime | undefined;\n useDateFieldState: (props: O) => DateFieldState<T>;\n adjustDateToFormat: (date: T, info: FormatInfo) => T;\n}\n\nexport interface DatePickerStateOptions<T>\n extends DateFieldBase<T>,\n PopupTriggerProps<[OpenChangeReason]> {}\n\nexport function datePickerStateFactory<T, O extends DatePickerStateOptions<T>>({\n getPlaceholderTime,\n mergeDateTime,\n setTimezone,\n getDateTime,\n useDateFieldState,\n adjustDateToFormat,\n}: DatePickerStateFactoryOptions<T, O>) {\n return function useDatePickerState(props: O): DatePickerState<T> {\n const {disabled, readOnly} = props;\n const [isOpen, _setOpen] = useControlledState(\n props.open,\n props.defaultOpen ?? false,\n props.onOpenChange,\n );\n\n const setOpen: NonNullable<typeof props.onOpenChange> = _setOpen;\n\n const [value, setValue] = useControlledState(\n props.value as never,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n const [selectedDateInner, setSelectedDate] = React.useState<T | null>(null);\n const [selectedTimeInner, setSelectedTime] = React.useState<T | null>(null);\n\n const inputTimeZone = useDefaultTimeZone(\n getDateTime(props.value) || getDateTime(props.defaultValue) || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n let selectedDate = selectedDateInner;\n let selectedTime = selectedTimeInner;\n\n const format = props.format || 'L';\n\n const commitValue = (date: T, time: T) => {\n if (disabled || readOnly) {\n return;\n }\n\n setValue(setTimezone(mergeDateTime(date, time), inputTimeZone));\n setSelectedDate(null);\n setSelectedTime(null);\n };\n\n const dateFieldState = useDateFieldState({\n ...props,\n value,\n onUpdate(date: T | null) {\n if (date) {\n commitValue(date, date);\n } else {\n setValue(null);\n }\n },\n disabled,\n readOnly,\n validationState: props.validationState,\n minValue: props.minValue,\n maxValue: props.maxValue,\n isDateUnavailable: props.isDateUnavailable,\n format,\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n\n const timeFormat = React.useMemo(() => {\n if (!dateFieldState.formatInfo.hasTime) {\n return undefined;\n }\n const timeFormatParts: string[] = [];\n const hours = dateFieldState.sections.find((s) => s.type === 'hour');\n if (hours) {\n timeFormatParts.push(hours.format);\n }\n const minutes = dateFieldState.sections.find((s) => s.type === 'minute');\n if (minutes) {\n timeFormatParts.push(minutes.format);\n }\n const seconds = dateFieldState.sections.find((s) => s.type === 'second');\n if (seconds) {\n timeFormatParts.push(seconds.format);\n }\n const dayPeriod = dateFieldState.sections.find((s) => s.type === 'dayPeriod');\n return timeFormatParts.join(':') + (dayPeriod ? ` ${dayPeriod.format}` : '');\n }, [dateFieldState.formatInfo.hasTime, dateFieldState.sections]);\n\n if (value) {\n selectedDate = setTimezone(value, timeZone);\n if (dateFieldState.formatInfo.hasTime) {\n selectedTime = selectedDate;\n }\n }\n\n // Intercept setValue to make sure the Time section is not changed by date selection in Calendar\n const selectDate = (newValue: T) => {\n if (disabled || readOnly) {\n return;\n }\n\n const newDate = adjustDateToFormat(newValue, dateFieldState.formatInfo);\n const shouldClose = !dateFieldState.formatInfo.hasTime;\n if (dateFieldState.formatInfo.hasTime) {\n if (selectedTime || shouldClose) {\n commitValue(newDate, selectedTime || newDate);\n } else {\n setSelectedDate(newDate);\n }\n } else {\n commitValue(newDate, newDate);\n }\n\n if (shouldClose) {\n setOpen(false, 'ValueSelected');\n }\n };\n\n const selectTime = (newValue: T | null) => {\n if (disabled || readOnly) {\n return;\n }\n\n const newTime = adjustDateToFormat(\n newValue ?? getPlaceholderTime(props.placeholderValue, timeZone),\n dateFieldState.formatInfo,\n );\n\n if (selectedDate) {\n commitValue(selectedDate, newTime);\n } else {\n setSelectedTime(newTime);\n }\n };\n\n if (dateFieldState.formatInfo.hasTime && !selectedTime) {\n selectedTime = dateFieldState.displayValue;\n }\n\n return {\n value,\n setValue(newDate: T | null) {\n if (props.readOnly || props.disabled) {\n return;\n }\n\n if (newDate) {\n setValue(setTimezone(newDate, inputTimeZone));\n } else {\n setValue(null);\n }\n },\n dateValue: selectedDate,\n timeValue: selectedTime,\n setDateValue: selectDate,\n setTimeValue: selectTime,\n disabled,\n readOnly,\n format,\n formatInfo: dateFieldState.formatInfo,\n hasDate: dateFieldState.formatInfo.hasDate,\n hasTime: dateFieldState.formatInfo.hasTime,\n timeFormat,\n timeZone,\n isOpen,\n setOpen(newIsOpen, reason) {\n if (!newIsOpen && !value && selectedDate && dateFieldState.formatInfo.hasTime) {\n commitValue(\n selectedDate,\n selectedTime || getPlaceholderTime(props.placeholderValue, props.timeZone),\n );\n }\n\n setOpen(newIsOpen, reason);\n },\n dateFieldState,\n };\n };\n}\n"]}
1
+ {"version":3,"file":"datePickerStateFactory.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/hooks/datePickerStateFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {DateFieldState} from '../../DateField';\nimport type {FormatInfo} from '../../DateField/types';\nimport type {DateFieldBase, PopupTriggerProps} from '../../types';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\n\ntype OpenChangeReason =\n | 'EscapeKeyDown'\n | 'FocusOut'\n | 'ClickOutside'\n | 'ValueSelected'\n | 'TriggerButtonClick'\n | 'ShortcutKeyDown';\n\nexport interface DatePickerState<T = DateTime> {\n /** The currently selected date. */\n value: T | null;\n /** Sets the selected date. */\n setValue: (value: T | null) => void;\n /**\n * The date portion of the value. This may be set prior to `value` if the user has\n * selected a date but has not yet selected a time.\n */\n dateValue: T | null;\n /** Sets the date portion of the value. */\n setDateValue: (value: T) => void;\n /**\n * The time portion of the value. This may be set prior to `value` if the user has\n * selected a time but has not yet selected a date.\n */\n timeValue: T | null;\n /** Sets the time portion of the value. */\n setTimeValue: (value: T | null) => void;\n /** Whether the field is read only. */\n readOnly?: boolean;\n /** Whether the field is disabled. */\n disabled?: boolean;\n /** Format of the date when rendered in the input. */\n format: string;\n /** Format info */\n formatInfo: FormatInfo;\n /**\n * @deprecated use formatInfo.hasDate instead\n * Whether the date picker supports selecting a date.\n */\n hasDate: boolean;\n /**\n * @deprecated use formatInfo.hasTime instead\n * Whether the date picker supports selecting a time.\n */\n hasTime: boolean;\n /** Format of the time when rendered in the input. */\n timeFormat?: string;\n timeZone: string;\n /** Whether the calendar popover is currently open. */\n isOpen: boolean;\n /** Sets whether the calendar popover is open. */\n setOpen: (isOpen: boolean, reason: OpenChangeReason) => void;\n dateFieldState: DateFieldState<T>;\n}\n\nexport interface DatePickerStateFactoryOptions<T, O extends DateFieldBase<T>> {\n getPlaceholderTime: (placeholderValue: DateTime | undefined, timeZone?: string) => T;\n mergeDateTime: (date: T, time: T) => T;\n setTimezone: (date: T, timeZone: string) => T;\n getDateTime: (date: T | null | undefined) => DateTime | undefined;\n useDateFieldState: (props: O) => DateFieldState<T>;\n adjustDateToFormat: (date: T, info: FormatInfo) => T;\n}\n\nexport interface DatePickerStateOptions<T>\n extends DateFieldBase<T>, PopupTriggerProps<[OpenChangeReason]> {}\n\nexport function datePickerStateFactory<T, O extends DatePickerStateOptions<T>>({\n getPlaceholderTime,\n mergeDateTime,\n setTimezone,\n getDateTime,\n useDateFieldState,\n adjustDateToFormat,\n}: DatePickerStateFactoryOptions<T, O>) {\n return function useDatePickerState(props: O): DatePickerState<T> {\n const {disabled, readOnly} = props;\n const [isOpen, _setOpen] = useControlledState(\n props.open,\n props.defaultOpen ?? false,\n props.onOpenChange,\n );\n\n const setOpen: NonNullable<typeof props.onOpenChange> = _setOpen;\n\n const [value, setValue] = useControlledState(\n props.value as never,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n const [selectedDateInner, setSelectedDate] = React.useState<T | null>(null);\n const [selectedTimeInner, setSelectedTime] = React.useState<T | null>(null);\n\n const inputTimeZone = useDefaultTimeZone(\n getDateTime(props.value) || getDateTime(props.defaultValue) || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n let selectedDate = selectedDateInner;\n let selectedTime = selectedTimeInner;\n\n const format = props.format || 'L';\n\n const commitValue = (date: T, time: T) => {\n if (disabled || readOnly) {\n return;\n }\n\n setValue(setTimezone(mergeDateTime(date, time), inputTimeZone));\n setSelectedDate(null);\n setSelectedTime(null);\n };\n\n const dateFieldState = useDateFieldState({\n ...props,\n value,\n onUpdate(date: T | null) {\n if (date) {\n commitValue(date, date);\n } else {\n setValue(null);\n }\n },\n disabled,\n readOnly,\n validationState: props.validationState,\n minValue: props.minValue,\n maxValue: props.maxValue,\n isDateUnavailable: props.isDateUnavailable,\n format,\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n\n const timeFormat = React.useMemo(() => {\n if (!dateFieldState.formatInfo.hasTime) {\n return undefined;\n }\n const timeFormatParts: string[] = [];\n const hours = dateFieldState.sections.find((s) => s.type === 'hour');\n if (hours) {\n timeFormatParts.push(hours.format);\n }\n const minutes = dateFieldState.sections.find((s) => s.type === 'minute');\n if (minutes) {\n timeFormatParts.push(minutes.format);\n }\n const seconds = dateFieldState.sections.find((s) => s.type === 'second');\n if (seconds) {\n timeFormatParts.push(seconds.format);\n }\n const dayPeriod = dateFieldState.sections.find((s) => s.type === 'dayPeriod');\n return timeFormatParts.join(':') + (dayPeriod ? ` ${dayPeriod.format}` : '');\n }, [dateFieldState.formatInfo.hasTime, dateFieldState.sections]);\n\n if (value) {\n selectedDate = setTimezone(value, timeZone);\n if (dateFieldState.formatInfo.hasTime) {\n selectedTime = selectedDate;\n }\n }\n\n // Intercept setValue to make sure the Time section is not changed by date selection in Calendar\n const selectDate = (newValue: T) => {\n if (disabled || readOnly) {\n return;\n }\n\n const newDate = adjustDateToFormat(newValue, dateFieldState.formatInfo);\n const shouldClose = !dateFieldState.formatInfo.hasTime;\n if (dateFieldState.formatInfo.hasTime) {\n if (selectedTime || shouldClose) {\n commitValue(newDate, selectedTime || newDate);\n } else {\n setSelectedDate(newDate);\n }\n } else {\n commitValue(newDate, newDate);\n }\n\n if (shouldClose) {\n setOpen(false, 'ValueSelected');\n }\n };\n\n const selectTime = (newValue: T | null) => {\n if (disabled || readOnly) {\n return;\n }\n\n const newTime = adjustDateToFormat(\n newValue ?? getPlaceholderTime(props.placeholderValue, timeZone),\n dateFieldState.formatInfo,\n );\n\n if (selectedDate) {\n commitValue(selectedDate, newTime);\n } else {\n setSelectedTime(newTime);\n }\n };\n\n if (dateFieldState.formatInfo.hasTime && !selectedTime) {\n selectedTime = dateFieldState.displayValue;\n }\n\n return {\n value,\n setValue(newDate: T | null) {\n if (props.readOnly || props.disabled) {\n return;\n }\n\n if (newDate) {\n setValue(setTimezone(newDate, inputTimeZone));\n } else {\n setValue(null);\n }\n },\n dateValue: selectedDate,\n timeValue: selectedTime,\n setDateValue: selectDate,\n setTimeValue: selectTime,\n disabled,\n readOnly,\n format,\n formatInfo: dateFieldState.formatInfo,\n hasDate: dateFieldState.formatInfo.hasDate,\n hasTime: dateFieldState.formatInfo.hasTime,\n timeFormat,\n timeZone,\n isOpen,\n setOpen(newIsOpen, reason) {\n if (!newIsOpen && !value && selectedDate && dateFieldState.formatInfo.hasTime) {\n commitValue(\n selectedDate,\n selectedTime || getPlaceholderTime(props.placeholderValue, props.timeZone),\n );\n }\n\n setOpen(newIsOpen, reason);\n },\n dateFieldState,\n };\n };\n}\n"]}
@@ -49,15 +49,19 @@ function useRangeDateFieldState(props) {
49
49
  timeZone,
50
50
  }));
51
51
  }
52
+ const { lang } = (0, uikit_1.useLang)();
52
53
  const displayValue = value &&
53
54
  value.start.isValid() &&
54
55
  value.end.isValid() &&
55
56
  Object.keys(validSegments.start).length >= Object.keys(allSegments).length &&
56
57
  Object.keys(validSegments.end).length >= Object.keys(allSegments).length
57
- ? { start: value.start.timeZone(timeZone), end: value.end.timeZone(timeZone) }
58
+ ? {
59
+ start: value.start.timeZone(timeZone).locale(lang),
60
+ end: value.end.timeZone(timeZone).locale(lang),
61
+ }
58
62
  : {
59
- start: placeholderDate.start.timeZone(timeZone),
60
- end: placeholderDate.end.timeZone(timeZone),
63
+ start: placeholderDate.start.timeZone(timeZone).locale(lang),
64
+ end: placeholderDate.end.timeZone(timeZone).locale(lang),
61
65
  };
62
66
  const sectionsState = useSectionsState(sections, displayValue, validSegments, delimiter);
63
67
  const [selectedSections, setSelectedSections] = react_1.default.useState(-1);
@@ -204,6 +208,8 @@ function useSectionsState(sections, value, validSegments, delimiter) {
204
208
  if (sections !== state.sections ||
205
209
  validSegments !== state.validSegments ||
206
210
  !(value.start.isSame(state.value.start) && value.end.isSame(state.value.end)) ||
211
+ value.start.timeZone() !== state.value.start.timeZone() ||
212
+ value.start.locale() !== state.value.start.locale() ||
207
213
  delimiter !== state.delimiter) {
208
214
  setState({
209
215
  value,
@@ -1 +1 @@
1
- {"version":3,"file":"useRangeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/RangeDateField/hooks/useRangeDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport {useBaseDateFieldState} from '../../DateField';\nimport type {DateFieldState} from '../../DateField';\nimport type {DateFieldSectionType, DateFieldSectionWithoutPosition} from '../../DateField/types';\nimport type {EDITABLE_SEGMENTS} from '../../DateField/utils';\nimport {\n addSegment,\n adjustDateToFormat,\n getFormatInfo,\n isAllSegmentsValid,\n markValidSection,\n parseDateFromString,\n setSegment,\n useFormatSections,\n} from '../../DateField/utils';\nimport type {DateFieldBase} from '../../types/datePicker';\nimport type {RangeValue} from '../../types/inputs';\nimport {isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {createPlaceholderRangeValue, getRangeEditableSections, isValidRange} from '../utils';\n\nexport interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {\n delimiter?: string;\n}\n\nconst RANGE_FORMAT_DELIMITER = ' — ';\n\nexport type RangeDateFieldState = DateFieldState<RangeValue<DateTime>>;\n\nexport function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState {\n const [value, setRange] = useControlledState(\n props.value,\n props.defaultValue || null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value?.start || props.defaultValue?.start || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateRange = (v: RangeValue<DateTime> | null) => {\n setRange(\n v ? {start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone)} : v,\n );\n };\n\n const [placeholderDate, setPlaceholderDate] = React.useState<RangeValue<DateTime>>(() => {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n\n const format = props.format || 'L';\n const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n\n const allSegments = formatInfo.availableUnits;\n\n // eslint-disable-next-line prefer-const\n let [validSegments, setValidSegments] = React.useState<RangeValue<typeof EDITABLE_SEGMENTS>>(\n () => (value ? {start: {...allSegments}, end: {...allSegments}} : {start: {}, end: {}}),\n );\n\n if (\n value &&\n (!isAllSegmentsValid(allSegments, validSegments.start) ||\n !isAllSegmentsValid(allSegments, validSegments.end))\n ) {\n setValidSegments({start: {...allSegments}, end: {...allSegments}});\n }\n\n if (\n !value &&\n Object.keys(allSegments).length > 0 &&\n isAllSegmentsValid(allSegments, validSegments.start) &&\n Object.keys(validSegments.start).length === Object.keys(allSegments).length &&\n isAllSegmentsValid(allSegments, validSegments.end) &&\n Object.keys(validSegments.end).length === Object.keys(allSegments).length\n ) {\n validSegments = {start: {}, end: {}};\n setValidSegments(validSegments);\n setPlaceholderDate(\n createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }),\n );\n }\n\n const displayValue =\n value &&\n value.start.isValid() &&\n value.end.isValid() &&\n Object.keys(validSegments.start).length >= Object.keys(allSegments).length &&\n Object.keys(validSegments.end).length >= Object.keys(allSegments).length\n ? {start: value.start.timeZone(timeZone), end: value.end.timeZone(timeZone)}\n : {\n start: placeholderDate.start.timeZone(timeZone),\n end: placeholderDate.end.timeZone(timeZone),\n };\n const sectionsState = useSectionsState(sections, displayValue, validSegments, delimiter);\n\n const [selectedSections, setSelectedSections] = React.useState<number | 'all'>(-1);\n\n const selectedSectionIndexes = React.useMemo<{\n startIndex: number;\n endIndex: number;\n } | null>(() => {\n if (selectedSections === -1) {\n return null;\n }\n\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n\n if (typeof selectedSections === 'number') {\n return {startIndex: selectedSections, endIndex: selectedSections};\n }\n\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex(\n (section) => section.type === selectedSections,\n );\n\n return {startIndex: selectedSectionIndex, endIndex: selectedSectionIndex};\n }\n\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n\n function setValue(newValue: RangeValue<DateTime>) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (\n isAllSegmentsValid(allSegments, validSegments.start) &&\n isAllSegmentsValid(allSegments, validSegments.end)\n ) {\n if (!value || !(newValue.start.isSame(value.start) && newValue.end.isSame(value.end))) {\n handleUpdateRange({\n start: adjustDateToFormat(newValue.start, formatInfo, 'startOf'),\n end: adjustDateToFormat(newValue.end, formatInfo, 'endOf'),\n });\n }\n } else {\n if (value) {\n handleUpdateRange(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n\n function markValid(portion: 'start' | 'end', part: DateFieldSectionType) {\n validSegments[portion] = markValidSection(allSegments, validSegments[portion], part);\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n const section = sectionsState.editableSections[sectionIndex];\n markValid(portion, section.type);\n setValue({\n ...displayValue,\n [portion]: setSegment(section, displayValue[portion], amount),\n });\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (validSegments[portion][section.type]) {\n setValue({\n ...displayValue,\n [portion]: addSegment(section, displayValue[portion], amount),\n });\n } else {\n markValid(portion, section.type);\n if (Object.keys(validSegments[portion]).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n\n function flushValidSection(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n delete validSegments[portion][sectionsState.editableSections[sectionIndex].type];\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function flushAllValidSections() {\n validSegments = {start: {}, end: {}};\n setValidSegments({start: {}, end: {}});\n }\n\n function getSectionValue(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n return displayValue[portion];\n }\n\n function setSectionValue(sectionIndex: number, currentValue: DateTime) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n setValue({...displayValue, [portion]: currentValue});\n }\n\n function createPlaceholder() {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n }\n\n function setValueFromString(str: string) {\n const [startDate = '', endDate = ''] = str.split(delimiter);\n const parseDate = props.parseDateFromString ?? parseDateFromString;\n const start = parseDate(startDate, format, timeZone);\n const end = parseDate(endDate, format, timeZone);\n if (start.isValid() && end.isValid()) {\n handleUpdateRange({start, end});\n return true;\n }\n return false;\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && !isValidRange(value) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);\n\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty:\n Object.keys(validSegments.start).length === 0 &&\n Object.keys(validSegments.end).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateRange,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\n\nfunction useSectionsState(\n sections: DateFieldSectionWithoutPosition[],\n value: RangeValue<DateTime>,\n validSegments: RangeValue<typeof EDITABLE_SEGMENTS>,\n delimiter: string,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n };\n });\n\n if (\n sections !== state.sections ||\n validSegments !== state.validSegments ||\n !(value.start.isSame(state.value.start) && value.end.isSame(state.value.end)) ||\n delimiter !== state.delimiter\n ) {\n setState({\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n });\n }\n\n return state;\n}\n"]}
1
+ {"version":3,"file":"useRangeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/RangeDateField/hooks/useRangeDateFieldState.ts"],"names":[],"mappings":";;AAiCA,wDAiPC;;AAlRD,0DAA0B;AAG1B,6CAA8D;AAE9D,wDAAsD;AAItD,oDAS+B;AAG/B,gDAA4C;AAC5C,0EAAkE;AAClE,6CAA6F;AAM7F,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAIrC,SAAgB,sBAAsB,CAAC,KAAiC;;IACpE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,0BAAkB,EACxC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,KAAK,CAAC,QAAQ,CACjB,CAAC;IAEF,MAAM,aAAa,GAAG,IAAA,uCAAkB,EACpC,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,KAAK,MAAI,MAAA,KAAK,CAAC,YAAY,0CAAE,KAAK,CAAA,IAAI,KAAK,CAAC,gBAAgB,CAC5E,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC;IAEjD,MAAM,iBAAiB,GAAG,CAAC,CAA8B,EAAE,EAAE;QACzD,QAAQ,CACJ,CAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CACvF,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAuB,GAAG,EAAE;QACpF,OAAO,IAAA,mCAA2B,EAAC;YAC/B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,QAAQ;SACX,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;IACnC,MAAM,SAAS,GAAG,MAAA,KAAK,CAAC,SAAS,mCAAI,sBAAsB,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAA,yBAAiB,EAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAA,qBAAa,EAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC;IAE9C,wCAAwC;IACxC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,eAAK,CAAC,QAAQ,CAClD,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,KAAK,oBAAM,WAAW,CAAC,EAAE,GAAG,oBAAM,WAAW,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAC,CAAC,CAC1F,CAAC;IAEF,IACI,KAAK;QACL,CAAC,CAAC,IAAA,0BAAkB,EAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC;YAClD,CAAC,IAAA,0BAAkB,EAAC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAC1D,CAAC;QACC,gBAAgB,CAAC,EAAC,KAAK,oBAAM,WAAW,CAAC,EAAE,GAAG,oBAAM,WAAW,CAAC,EAAC,CAAC,CAAC;IACvE,CAAC;IAED,IACI,CAAC,KAAK;QACN,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;QACnC,IAAA,0BAAkB,EAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM;QAC3E,IAAA,0BAAkB,EAAC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAC3E,CAAC;QACC,aAAa,GAAG,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAC,CAAC;QACrC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChC,kBAAkB,CACd,IAAA,mCAA2B,EAAC;YACxB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,QAAQ;SACX,CAAC,CACL,CAAC;IACN,CAAC;IAED,MAAM,EAAC,IAAI,EAAC,GAAG,IAAA,eAAO,GAAE,CAAC;IACzB,MAAM,YAAY,GACd,KAAK;QACL,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;QACrB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;QACnB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM;QAC1E,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM;QACpE,CAAC,CAAC;YACI,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YAClD,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;SACjD;QACH,CAAC,CAAC;YACI,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YAC5D,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;SAC3D,CAAC;IACZ,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAEzF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAiB,CAAC,CAAC,CAAC,CAAC;IAEnF,MAAM,sBAAsB,GAAG,eAAK,CAAC,OAAO,CAGlC,GAAG,EAAE;QACX,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,gBAAgB,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;gBACH,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;aACtD,CAAC;QACN,CAAC;QAED,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,EAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAC,CAAC;QACtE,CAAC;QAED,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,oBAAoB,GAAG,aAAa,CAAC,gBAAgB,CAAC,SAAS,CACjE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,gBAAgB,CACjD,CAAC;YAEF,OAAO,EAAC,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,EAAC,CAAC;QAC9E,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC5B,CAAC,EAAE,CAAC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvD,SAAS,QAAQ,CAAC,QAA8B;QAC5C,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,IACI,IAAA,0BAAkB,EAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC;YACpD,IAAA,0BAAkB,EAAC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,EACpD,CAAC;YACC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACpF,iBAAiB,CAAC;oBACd,KAAK,EAAE,IAAA,0BAAkB,EAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC;oBAChE,GAAG,EAAE,IAAA,0BAAkB,EAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;iBAC7D,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,KAAK,EAAE,CAAC;gBACR,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YACD,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,SAAS,SAAS,CAAC,OAAwB,EAAE,IAA0B;QACnE,aAAa,CAAC,OAAO,CAAC,GAAG,IAAA,wBAAgB,EAAC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QACrF,gBAAgB,iCAAK,aAAa,KAAE,CAAC,OAAO,CAAC,oBAAM,aAAa,CAAC,OAAO,CAAC,KAAG,CAAC;IACjF,CAAC;IAED,SAAS,UAAU,CAAC,YAAoB,EAAE,MAAc;QACpD,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC7D,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,QAAQ,iCACD,YAAY,KACf,CAAC,OAAO,CAAC,EAAE,IAAA,kBAAU,EAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAC/D,CAAC;IACP,CAAC;IAED,SAAS,aAAa,CAAC,YAAoB,EAAE,MAAc;QACvD,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,QAAQ,iCACD,YAAY,KACf,CAAC,OAAO,CAAC,EAAE,IAAA,kBAAU,EAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAC/D,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC;gBAChF,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAED,SAAS,iBAAiB,CAAC,YAAoB;QAC3C,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;QACjF,gBAAgB,iCAAK,aAAa,KAAE,CAAC,OAAO,CAAC,oBAAM,aAAa,CAAC,OAAO,CAAC,KAAG,CAAC;IACjF,CAAC;IAED,SAAS,qBAAqB;QAC1B,aAAa,GAAG,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAC,CAAC;QACrC,gBAAgB,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAC,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,eAAe,CAAC,YAAoB;QACzC,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,eAAe,CAAC,YAAoB,EAAE,YAAsB;QACjE,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,QAAQ,iCAAK,YAAY,KAAE,CAAC,OAAO,CAAC,EAAE,YAAY,IAAE,CAAC;IACzD,CAAC;IAED,SAAS,iBAAiB;QACtB,OAAO,IAAA,mCAA2B,EAAC;YAC/B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,QAAQ;SACX,CAAC,CAAC;IACP,CAAC;IAED,SAAS,kBAAkB,CAAC,GAAW;;QACnC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAA,KAAK,CAAC,mBAAmB,mCAAI,2BAAmB,CAAC;QACnE,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjD,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YACnC,iBAAiB,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,eAAe,GACjB,KAAK,CAAC,eAAe;QACrB,CAAC,IAAA,iBAAS,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,CAAC,IAAA,iBAAS,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,CAAC,KAAK,IAAI,CAAC,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,CAAC,KAAK,KAAI,MAAA,KAAK,CAAC,iBAAiB,sDAAG,KAAK,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,CAAC,KAAK,KAAI,MAAA,KAAK,CAAC,iBAAiB,sDAAG,KAAK,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE5E,OAAO,IAAA,iCAAqB,EAAC;QACzB,KAAK;QACL,YAAY;QACZ,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,QAAQ;QACR,eAAe;QACf,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,UAAU;QACV,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,sBAAsB;QACtB,gBAAgB;QAChB,OAAO,EACH,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAC/C,qBAAqB;QACrB,iBAAiB;QACjB,mBAAmB;QACnB,QAAQ;QACR,OAAO,EAAE,iBAAiB;QAC1B,aAAa;QACb,UAAU;QACV,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,kBAAkB;KACrB,CAAC,CAAC;AACP,CAAC;AAED,SAAS,gBAAgB,CACrB,QAA2C,EAC3C,KAA2B,EAC3B,aAAmD,EACnD,SAAiB;IAEjB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC1C,OAAO;YACH,KAAK;YACL,QAAQ;YACR,aAAa;YACb,SAAS;YACT,gBAAgB,EAAE,IAAA,gCAAwB,EAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;SACxF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IACI,QAAQ,KAAK,KAAK,CAAC,QAAQ;QAC3B,aAAa,KAAK,KAAK,CAAC,aAAa;QACrC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7E,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;QACvD,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;QACnD,SAAS,KAAK,KAAK,CAAC,SAAS,EAC/B,CAAC;QACC,QAAQ,CAAC;YACL,KAAK;YACL,QAAQ;YACR,aAAa;YACb,SAAS;YACT,gBAAgB,EAAE,IAAA,gCAAwB,EAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;SACxF,CAAC,CAAC;IACP,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState, useLang} from '@gravity-ui/uikit';\n\nimport {useBaseDateFieldState} from '../../DateField';\nimport type {DateFieldState} from '../../DateField';\nimport type {DateFieldSectionType, DateFieldSectionWithoutPosition} from '../../DateField/types';\nimport type {EDITABLE_SEGMENTS} from '../../DateField/utils';\nimport {\n addSegment,\n adjustDateToFormat,\n getFormatInfo,\n isAllSegmentsValid,\n markValidSection,\n parseDateFromString,\n setSegment,\n useFormatSections,\n} from '../../DateField/utils';\nimport type {DateFieldBase} from '../../types/datePicker';\nimport type {RangeValue} from '../../types/inputs';\nimport {isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {createPlaceholderRangeValue, getRangeEditableSections, isValidRange} from '../utils';\n\nexport interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {\n delimiter?: string;\n}\n\nconst RANGE_FORMAT_DELIMITER = ' — ';\n\nexport type RangeDateFieldState = DateFieldState<RangeValue<DateTime>>;\n\nexport function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState {\n const [value, setRange] = useControlledState(\n props.value,\n props.defaultValue || null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value?.start || props.defaultValue?.start || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateRange = (v: RangeValue<DateTime> | null) => {\n setRange(\n v ? {start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone)} : v,\n );\n };\n\n const [placeholderDate, setPlaceholderDate] = React.useState<RangeValue<DateTime>>(() => {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n\n const format = props.format || 'L';\n const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n\n const allSegments = formatInfo.availableUnits;\n\n // eslint-disable-next-line prefer-const\n let [validSegments, setValidSegments] = React.useState<RangeValue<typeof EDITABLE_SEGMENTS>>(\n () => (value ? {start: {...allSegments}, end: {...allSegments}} : {start: {}, end: {}}),\n );\n\n if (\n value &&\n (!isAllSegmentsValid(allSegments, validSegments.start) ||\n !isAllSegmentsValid(allSegments, validSegments.end))\n ) {\n setValidSegments({start: {...allSegments}, end: {...allSegments}});\n }\n\n if (\n !value &&\n Object.keys(allSegments).length > 0 &&\n isAllSegmentsValid(allSegments, validSegments.start) &&\n Object.keys(validSegments.start).length === Object.keys(allSegments).length &&\n isAllSegmentsValid(allSegments, validSegments.end) &&\n Object.keys(validSegments.end).length === Object.keys(allSegments).length\n ) {\n validSegments = {start: {}, end: {}};\n setValidSegments(validSegments);\n setPlaceholderDate(\n createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }),\n );\n }\n\n const {lang} = useLang();\n const displayValue =\n value &&\n value.start.isValid() &&\n value.end.isValid() &&\n Object.keys(validSegments.start).length >= Object.keys(allSegments).length &&\n Object.keys(validSegments.end).length >= Object.keys(allSegments).length\n ? {\n start: value.start.timeZone(timeZone).locale(lang),\n end: value.end.timeZone(timeZone).locale(lang),\n }\n : {\n start: placeholderDate.start.timeZone(timeZone).locale(lang),\n end: placeholderDate.end.timeZone(timeZone).locale(lang),\n };\n const sectionsState = useSectionsState(sections, displayValue, validSegments, delimiter);\n\n const [selectedSections, setSelectedSections] = React.useState<number | 'all'>(-1);\n\n const selectedSectionIndexes = React.useMemo<{\n startIndex: number;\n endIndex: number;\n } | null>(() => {\n if (selectedSections === -1) {\n return null;\n }\n\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n\n if (typeof selectedSections === 'number') {\n return {startIndex: selectedSections, endIndex: selectedSections};\n }\n\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex(\n (section) => section.type === selectedSections,\n );\n\n return {startIndex: selectedSectionIndex, endIndex: selectedSectionIndex};\n }\n\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n\n function setValue(newValue: RangeValue<DateTime>) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (\n isAllSegmentsValid(allSegments, validSegments.start) &&\n isAllSegmentsValid(allSegments, validSegments.end)\n ) {\n if (!value || !(newValue.start.isSame(value.start) && newValue.end.isSame(value.end))) {\n handleUpdateRange({\n start: adjustDateToFormat(newValue.start, formatInfo, 'startOf'),\n end: adjustDateToFormat(newValue.end, formatInfo, 'endOf'),\n });\n }\n } else {\n if (value) {\n handleUpdateRange(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n\n function markValid(portion: 'start' | 'end', part: DateFieldSectionType) {\n validSegments[portion] = markValidSection(allSegments, validSegments[portion], part);\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n const section = sectionsState.editableSections[sectionIndex];\n markValid(portion, section.type);\n setValue({\n ...displayValue,\n [portion]: setSegment(section, displayValue[portion], amount),\n });\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (validSegments[portion][section.type]) {\n setValue({\n ...displayValue,\n [portion]: addSegment(section, displayValue[portion], amount),\n });\n } else {\n markValid(portion, section.type);\n if (Object.keys(validSegments[portion]).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n\n function flushValidSection(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n delete validSegments[portion][sectionsState.editableSections[sectionIndex].type];\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function flushAllValidSections() {\n validSegments = {start: {}, end: {}};\n setValidSegments({start: {}, end: {}});\n }\n\n function getSectionValue(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n return displayValue[portion];\n }\n\n function setSectionValue(sectionIndex: number, currentValue: DateTime) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n setValue({...displayValue, [portion]: currentValue});\n }\n\n function createPlaceholder() {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n }\n\n function setValueFromString(str: string) {\n const [startDate = '', endDate = ''] = str.split(delimiter);\n const parseDate = props.parseDateFromString ?? parseDateFromString;\n const start = parseDate(startDate, format, timeZone);\n const end = parseDate(endDate, format, timeZone);\n if (start.isValid() && end.isValid()) {\n handleUpdateRange({start, end});\n return true;\n }\n return false;\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && !isValidRange(value) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);\n\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty:\n Object.keys(validSegments.start).length === 0 &&\n Object.keys(validSegments.end).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateRange,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\n\nfunction useSectionsState(\n sections: DateFieldSectionWithoutPosition[],\n value: RangeValue<DateTime>,\n validSegments: RangeValue<typeof EDITABLE_SEGMENTS>,\n delimiter: string,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n };\n });\n\n if (\n sections !== state.sections ||\n validSegments !== state.validSegments ||\n !(value.start.isSame(state.value.start) && value.end.isSame(state.value.end)) ||\n value.start.timeZone() !== state.value.start.timeZone() ||\n value.start.locale() !== state.value.start.locale() ||\n delimiter !== state.delimiter\n ) {\n setState({\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n });\n }\n\n return state;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RangeDateSelection.js","sourceRoot":"../../../../src","sources":["components/RangeDateSelection/RangeDateSelection.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Minus, Plus} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport type {AccessibilityProps, DomProps, StyleProps} from '../types';\nimport {filterDOMProps} from '../utils/filterDOMProps';\n\nimport {DateTimeRuler} from './components/Ruler/Ruler';\nimport type {ViewportDimensions, ViewportInterval} from './components/Ruler/Ruler';\nimport {SelectionControl} from './components/SelectionControl/SelectionControl';\nimport {useRangeDateSelectionState} from './hooks/useRangeDateSelectionState';\nimport type {RangeDateSelectionOptions} from './hooks/useRangeDateSelectionState';\nimport {i18n} from './i18n';\n\nimport './RangeDateSelection.scss';\n\nconst b = block('range-date-selection');\n\nexport interface RangeDateSelectionProps\n extends RangeDateSelectionOptions,\n DomProps,\n StyleProps,\n AccessibilityProps {\n /** Formats time ticks */\n formatTime?: (time: DateTime) => string;\n /** Displays now line */\n displayNow?: boolean;\n /** Enables dragging ruler */\n draggableRuler?: boolean;\n /** Displays buttons to scale selection */\n hasScaleButtons?: boolean;\n /** Position of scale buttons */\n scaleButtonsPosition?: 'start' | 'end';\n /** Renders additional svg content in the ruler */\n renderAdditionalRulerContent?: (props: {\n interval: ViewportInterval;\n dimensions: ViewportDimensions;\n }) => React.ReactNode;\n}\n\nexport function RangeDateSelection(props: RangeDateSelectionProps) {\n const state = useRangeDateSelectionState(props);\n\n const [isDraggingRuler, setDraggingRuler] = React.useState(false);\n\n const handleRulerMoveStart = () => {\n state.setDraggingValue(state.value);\n setDraggingRuler(true);\n };\n const handleRulerMove = (d: number) => {\n const intervalWidth = state.viewportInterval.end.diff(state.viewportInterval.start);\n const delta = -Math.floor((d * intervalWidth) / 100);\n state.move(delta);\n };\n const handleRulerMoveEnd = () => {\n setDraggingRuler(false);\n state.endDragging();\n };\n\n let id = React.useId();\n id = props.id ?? id;\n\n const {t} = i18n.useTranslation();\n\n return (\n <div\n {...filterDOMProps(props, {labelable: true})}\n id={id}\n className={b(null, props.className)}\n style={props.style}\n dir=\"ltr\" // TODO: RTL support\n >\n <DateTimeRuler\n className={b('ruler', {dragging: isDraggingRuler})}\n {...state.viewportInterval}\n onMoveStart={handleRulerMoveStart}\n onMove={props.draggableRuler ? handleRulerMove : undefined}\n onMoveEnd={handleRulerMoveEnd}\n dragDisabled={state.isDragging}\n displayNow={props.displayNow}\n minValue={props.minValue}\n maxValue={props.maxValue}\n formatTime={props.formatTime}\n timeZone={state.timeZone}\n renderAdditionalRulerContent={props.renderAdditionalRulerContent}\n >\n <SelectionControl className={b('selection')} state={state} aria-labelledby={id} />\n </DateTimeRuler>\n {props.hasScaleButtons ? (\n <div className={b('buttons', {position: props.scaleButtonsPosition ?? 'start'})}>\n <Button\n view=\"flat-secondary\"\n size=\"xs\"\n onClick={() => {\n state.startDragging();\n state.scale(0.5);\n state.endDragging();\n }}\n aria-label={t('Decrease range')}\n >\n <Icon data={Minus} />\n </Button>\n <Button\n view=\"flat-secondary\"\n size=\"xs\"\n onClick={() => {\n state.startDragging();\n state.scale(1.5);\n state.endDragging();\n }}\n aria-label={t('Increase range')}\n >\n <Icon data={Plus} />\n </Button>\n </div>\n ) : null}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"RangeDateSelection.js","sourceRoot":"../../../../src","sources":["components/RangeDateSelection/RangeDateSelection.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Minus, Plus} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport type {AccessibilityProps, DomProps, StyleProps} from '../types';\nimport {filterDOMProps} from '../utils/filterDOMProps';\n\nimport {DateTimeRuler} from './components/Ruler/Ruler';\nimport type {ViewportDimensions, ViewportInterval} from './components/Ruler/Ruler';\nimport {SelectionControl} from './components/SelectionControl/SelectionControl';\nimport {useRangeDateSelectionState} from './hooks/useRangeDateSelectionState';\nimport type {RangeDateSelectionOptions} from './hooks/useRangeDateSelectionState';\nimport {i18n} from './i18n';\n\nimport './RangeDateSelection.scss';\n\nconst b = block('range-date-selection');\n\nexport interface RangeDateSelectionProps\n extends RangeDateSelectionOptions, DomProps, StyleProps, AccessibilityProps {\n /** Formats time ticks */\n formatTime?: (time: DateTime) => string;\n /** Displays now line */\n displayNow?: boolean;\n /** Enables dragging ruler */\n draggableRuler?: boolean;\n /** Displays buttons to scale selection */\n hasScaleButtons?: boolean;\n /** Position of scale buttons */\n scaleButtonsPosition?: 'start' | 'end';\n /** Renders additional svg content in the ruler */\n renderAdditionalRulerContent?: (props: {\n interval: ViewportInterval;\n dimensions: ViewportDimensions;\n }) => React.ReactNode;\n}\n\nexport function RangeDateSelection(props: RangeDateSelectionProps) {\n const state = useRangeDateSelectionState(props);\n\n const [isDraggingRuler, setDraggingRuler] = React.useState(false);\n\n const handleRulerMoveStart = () => {\n state.setDraggingValue(state.value);\n setDraggingRuler(true);\n };\n const handleRulerMove = (d: number) => {\n const intervalWidth = state.viewportInterval.end.diff(state.viewportInterval.start);\n const delta = -Math.floor((d * intervalWidth) / 100);\n state.move(delta);\n };\n const handleRulerMoveEnd = () => {\n setDraggingRuler(false);\n state.endDragging();\n };\n\n let id = React.useId();\n id = props.id ?? id;\n\n const {t} = i18n.useTranslation();\n\n return (\n <div\n {...filterDOMProps(props, {labelable: true})}\n id={id}\n className={b(null, props.className)}\n style={props.style}\n dir=\"ltr\" // TODO: RTL support\n >\n <DateTimeRuler\n className={b('ruler', {dragging: isDraggingRuler})}\n {...state.viewportInterval}\n onMoveStart={handleRulerMoveStart}\n onMove={props.draggableRuler ? handleRulerMove : undefined}\n onMoveEnd={handleRulerMoveEnd}\n dragDisabled={state.isDragging}\n displayNow={props.displayNow}\n minValue={props.minValue}\n maxValue={props.maxValue}\n formatTime={props.formatTime}\n timeZone={state.timeZone}\n renderAdditionalRulerContent={props.renderAdditionalRulerContent}\n >\n <SelectionControl className={b('selection')} state={state} aria-labelledby={id} />\n </DateTimeRuler>\n {props.hasScaleButtons ? (\n <div className={b('buttons', {position: props.scaleButtonsPosition ?? 'start'})}>\n <Button\n view=\"flat-secondary\"\n size=\"xs\"\n onClick={() => {\n state.startDragging();\n state.scale(0.5);\n state.endDragging();\n }}\n aria-label={t('Decrease range')}\n >\n <Icon data={Minus} />\n </Button>\n <Button\n view=\"flat-secondary\"\n size=\"xs\"\n onClick={() => {\n state.startDragging();\n state.scale(1.5);\n state.endDragging();\n }}\n aria-label={t('Increase range')}\n >\n <Icon data={Plus} />\n </Button>\n </div>\n ) : null}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RelativeDateField.js","sourceRoot":"../../../../src","sources":["components/RelativeDateField/RelativeDateField.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {Popup, TextInput, useFocusWithin, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {Calendar} from '../Calendar';\nimport {DateField} from '../DateField';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n PopupStyleProps,\n StyleProps,\n TextInputExtendProps,\n TextInputProps,\n} from '../types';\nimport {filterDOMProps} from '../utils/filterDOMProps';\n\nimport {useRelativeDateFieldProps} from './hooks/useRelativeDateFieldProps';\nimport {useRelativeDateFieldState} from './hooks/useRelativeDateFieldState';\nimport type {RelativeDateFieldOptions} from './hooks/useRelativeDateFieldState';\n\nimport './RelativeDateField.scss';\n\nconst b = block('relative-date-field');\n\nexport interface RelativeDateFieldProps\n extends RelativeDateFieldOptions,\n TextInputProps,\n TextInputExtendProps,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n FocusableProps,\n KeyboardEvents,\n PopupStyleProps {\n /**\n * Show time field in popup\n * @default false\n */\n hasTime?: boolean;\n}\nexport function RelativeDateField(props: RelativeDateFieldProps) {\n const state = useRelativeDateFieldState(props);\n const {inputProps, calendarProps, timeInputProps} = useRelativeDateFieldProps(state, props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\n\n const [isOpen, setOpen] = React.useState(false);\n const dialogClosing = React.useRef(false);\n\n const {focusWithinProps} = useFocusWithin({\n onFocusWithinChange: (isFocusWithin) => {\n if (!dialogClosing.current) {\n setOpen(isFocusWithin);\n }\n },\n isDisabled: isMobile,\n });\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return (\n <div\n {...DOMProps}\n role=\"group\"\n className={b(null, props.className)}\n style={props.style}\n {...focusWithinProps}\n >\n <TextInput\n {...inputProps}\n className={b('field')}\n ref={setAnchor}\n onBlur={props.onBlur}\n onKeyDown={(e) => {\n inputProps.onKeyDown?.(e);\n if (\n !e.defaultPrevented &&\n e.altKey &&\n (e.key === 'ArrowDown' || e.key === 'ArrowUp')\n ) {\n e.preventDefault();\n e.stopPropagation();\n setOpen(true);\n }\n }}\n controlProps={{\n ...inputProps.controlProps,\n onClick: () => {\n setOpen(true);\n },\n }}\n />\n <HiddenInput\n name={props.name}\n value={state.value}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n {!isMobile && (\n <Popup\n anchorElement={anchor}\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) {\n setOpen(false);\n }\n dialogClosing.current = !open;\n }}\n onTransitionOutComplete={() => {\n setTimeout(() => {\n dialogClosing.current = false;\n });\n }}\n placement={props.popupPlacement}\n offset={props.popupOffset}\n className={props.popupClassName}\n style={props.popupStyle}\n >\n <div className={b('popup-content')}>\n <Calendar {...calendarProps} />\n {props.hasTime ? (\n <div className={b('time-field-wrapper')}>\n <DateField className={b('time-field')} {...timeInputProps} />\n </div>\n ) : null}\n </div>\n </Popup>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"RelativeDateField.js","sourceRoot":"../../../../src","sources":["components/RelativeDateField/RelativeDateField.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {Popup, TextInput, useFocusWithin, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {Calendar} from '../Calendar';\nimport {DateField} from '../DateField';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n PopupStyleProps,\n StyleProps,\n TextInputExtendProps,\n TextInputProps,\n} from '../types';\nimport {filterDOMProps} from '../utils/filterDOMProps';\n\nimport {useRelativeDateFieldProps} from './hooks/useRelativeDateFieldProps';\nimport {useRelativeDateFieldState} from './hooks/useRelativeDateFieldState';\nimport type {RelativeDateFieldOptions} from './hooks/useRelativeDateFieldState';\n\nimport './RelativeDateField.scss';\n\nconst b = block('relative-date-field');\n\nexport interface RelativeDateFieldProps\n extends\n RelativeDateFieldOptions,\n TextInputProps,\n TextInputExtendProps,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n FocusableProps,\n KeyboardEvents,\n PopupStyleProps {\n /**\n * Show time field in popup\n * @default false\n */\n hasTime?: boolean;\n}\nexport function RelativeDateField(props: RelativeDateFieldProps) {\n const state = useRelativeDateFieldState(props);\n const {inputProps, calendarProps, timeInputProps} = useRelativeDateFieldProps(state, props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\n\n const [isOpen, setOpen] = React.useState(false);\n const dialogClosing = React.useRef(false);\n\n const {focusWithinProps} = useFocusWithin({\n onFocusWithinChange: (isFocusWithin) => {\n if (!dialogClosing.current) {\n setOpen(isFocusWithin);\n }\n },\n isDisabled: isMobile,\n });\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return (\n <div\n {...DOMProps}\n role=\"group\"\n className={b(null, props.className)}\n style={props.style}\n {...focusWithinProps}\n >\n <TextInput\n {...inputProps}\n className={b('field')}\n ref={setAnchor}\n onBlur={props.onBlur}\n onKeyDown={(e) => {\n inputProps.onKeyDown?.(e);\n if (\n !e.defaultPrevented &&\n e.altKey &&\n (e.key === 'ArrowDown' || e.key === 'ArrowUp')\n ) {\n e.preventDefault();\n e.stopPropagation();\n setOpen(true);\n }\n }}\n controlProps={{\n ...inputProps.controlProps,\n onClick: () => {\n setOpen(true);\n },\n }}\n />\n <HiddenInput\n name={props.name}\n value={state.value}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n {!isMobile && (\n <Popup\n anchorElement={anchor}\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) {\n setOpen(false);\n }\n dialogClosing.current = !open;\n }}\n onTransitionOutComplete={() => {\n setTimeout(() => {\n dialogClosing.current = false;\n });\n }}\n placement={props.popupPlacement}\n offset={props.popupOffset}\n className={props.popupClassName}\n style={props.popupStyle}\n >\n <div className={b('popup-content')}>\n <Calendar {...calendarProps} />\n {props.hasTime ? (\n <div className={b('time-field-wrapper')}>\n <DateField className={b('time-field')} {...timeInputProps} />\n </div>\n ) : null}\n </div>\n </Popup>\n )}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RelativeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeDatePicker/RelativeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {\n Calendar as CalendarIcon,\n Clock as ClockIcon,\n Function as FunctionIcon,\n} from '@gravity-ui/icons';\nimport {Button, Icon, Popup, TextInput, useForkRef, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {Calendar} from '../Calendar';\nimport type {CalendarProps} from '../Calendar';\nimport {DateField} from '../DateField';\nimport {MobileCalendar} from '../DatePicker/MobileCalendar';\nimport {StubButton} from '../DatePicker/StubButton';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n PopupStyleProps,\n StyleProps,\n TextInputProps,\n} from '../types';\n\nimport {useRelativeDatePickerProps} from './hooks/useRelativeDatePickerProps';\nimport {useRelativeDatePickerState} from './hooks/useRelativeDatePickerState';\nimport type {RelativeDatePickerStateOptions, Value} from './hooks/useRelativeDatePickerState';\n\nimport './RelativeDatePicker.scss';\n\nconst b = block('relative-date-picker');\n\nexport interface RelativeDatePickerProps\n extends RelativeDatePickerStateOptions,\n TextInputProps,\n FocusableProps,\n KeyboardEvents,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n PopupStyleProps {\n children?: (props: CalendarProps) => React.ReactNode;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function RelativeDatePicker(props: RelativeDatePickerProps) {\n const state = useRelativeDatePickerState(props);\n\n const {\n groupProps,\n fieldProps,\n modeSwitcherProps,\n calendarButtonProps,\n popupProps,\n calendarProps,\n timeInputProps,\n } = useRelativeDatePickerProps(state, props);\n\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\n const handleRef = useForkRef(groupProps.ref, setAnchor);\n\n const isMobile = useMobile();\n const isOnlyTime =\n state.datePickerState.formatInfo.hasTime && !state.datePickerState.formatInfo.hasDate;\n\n return (\n <div {...groupProps} ref={handleRef} className={b(null, props.className)}>\n {isMobile && state.mode === 'absolute' && (\n <MobileCalendar\n state={state.datePickerState}\n props={{\n id: props.id,\n disabled: props.disabled,\n readOnly: props.readOnly,\n placeholderValue: props.placeholderValue,\n timeZone: props.timeZone,\n }}\n />\n )}\n <TextInput\n {...fieldProps}\n controlProps={{\n ...fieldProps.controlProps,\n disabled: isMobile && state.mode === 'absolute',\n className: b('input', {mobile: isMobile && state.mode === 'absolute'}),\n }}\n hasClear={props.hasClear && !(isMobile && state.mode === 'absolute')}\n startContent={\n <Button {...modeSwitcherProps}>\n <Icon data={FunctionIcon} />\n </Button>\n }\n endContent={\n <React.Fragment>\n {!isMobile && !isOnlyTime && (\n <Button {...calendarButtonProps}>\n <Icon data={CalendarIcon} />\n </Button>\n )}\n {!isMobile && isOnlyTime && (\n <StubButton size={calendarButtonProps.size} icon={ClockIcon} />\n )}\n {isMobile && state.mode === 'absolute' && (\n <StubButton\n size={calendarButtonProps.size}\n icon={isOnlyTime ? ClockIcon : CalendarIcon}\n />\n )}\n </React.Fragment>\n }\n />\n <HiddenInput\n name={props.name}\n value={state.value?.type}\n disabled={state.disabled}\n form={props.form}\n />\n <HiddenInput\n name={props.name}\n value={state.value}\n toStringValue={(value) => getNativeValue(value)}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n {!isMobile && !isOnlyTime && (\n <Popup {...popupProps} anchorElement={anchor}>\n <div className={b('popup-content')}>\n {typeof props.children === 'function' ? (\n props.children(calendarProps)\n ) : (\n <Calendar {...calendarProps} />\n )}\n {state.datePickerState.formatInfo.hasTime && (\n <div className={b('time-field-wrapper')}>\n <DateField {...timeInputProps} />\n </div>\n )}\n </div>\n </Popup>\n )}\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
1
+ {"version":3,"file":"RelativeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeDatePicker/RelativeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {\n Calendar as CalendarIcon,\n Clock as ClockIcon,\n Function as FunctionIcon,\n} from '@gravity-ui/icons';\nimport {Button, Icon, Popup, TextInput, useForkRef, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {Calendar} from '../Calendar';\nimport type {CalendarProps} from '../Calendar';\nimport {DateField} from '../DateField';\nimport {MobileCalendar} from '../DatePicker/MobileCalendar';\nimport {StubButton} from '../DatePicker/StubButton';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n PopupStyleProps,\n StyleProps,\n TextInputProps,\n} from '../types';\n\nimport {useRelativeDatePickerProps} from './hooks/useRelativeDatePickerProps';\nimport {useRelativeDatePickerState} from './hooks/useRelativeDatePickerState';\nimport type {RelativeDatePickerStateOptions, Value} from './hooks/useRelativeDatePickerState';\n\nimport './RelativeDatePicker.scss';\n\nconst b = block('relative-date-picker');\n\nexport interface RelativeDatePickerProps\n extends\n RelativeDatePickerStateOptions,\n TextInputProps,\n FocusableProps,\n KeyboardEvents,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n PopupStyleProps {\n children?: (props: CalendarProps) => React.ReactNode;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function RelativeDatePicker(props: RelativeDatePickerProps) {\n const state = useRelativeDatePickerState(props);\n\n const {\n groupProps,\n fieldProps,\n modeSwitcherProps,\n calendarButtonProps,\n popupProps,\n calendarProps,\n timeInputProps,\n } = useRelativeDatePickerProps(state, props);\n\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\n const handleRef = useForkRef(groupProps.ref, setAnchor);\n\n const isMobile = useMobile();\n const isOnlyTime =\n state.datePickerState.formatInfo.hasTime && !state.datePickerState.formatInfo.hasDate;\n\n return (\n <div {...groupProps} ref={handleRef} className={b(null, props.className)}>\n {isMobile && state.mode === 'absolute' && (\n <MobileCalendar\n state={state.datePickerState}\n props={{\n id: props.id,\n disabled: props.disabled,\n readOnly: props.readOnly,\n placeholderValue: props.placeholderValue,\n timeZone: props.timeZone,\n }}\n />\n )}\n <TextInput\n {...fieldProps}\n controlProps={{\n ...fieldProps.controlProps,\n disabled: isMobile && state.mode === 'absolute',\n className: b('input', {mobile: isMobile && state.mode === 'absolute'}),\n }}\n hasClear={props.hasClear && !(isMobile && state.mode === 'absolute')}\n startContent={\n <Button {...modeSwitcherProps}>\n <Icon data={FunctionIcon} />\n </Button>\n }\n endContent={\n <React.Fragment>\n {!isMobile && !isOnlyTime && (\n <Button {...calendarButtonProps}>\n <Icon data={CalendarIcon} />\n </Button>\n )}\n {!isMobile && isOnlyTime && (\n <StubButton size={calendarButtonProps.size} icon={ClockIcon} />\n )}\n {isMobile && state.mode === 'absolute' && (\n <StubButton\n size={calendarButtonProps.size}\n icon={isOnlyTime ? ClockIcon : CalendarIcon}\n />\n )}\n </React.Fragment>\n }\n />\n <HiddenInput\n name={props.name}\n value={state.value?.type}\n disabled={state.disabled}\n form={props.form}\n />\n <HiddenInput\n name={props.name}\n value={state.value}\n toStringValue={(value) => getNativeValue(value)}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n {!isMobile && !isOnlyTime && (\n <Popup {...popupProps} anchorElement={anchor}>\n <div className={b('popup-content')}>\n {typeof props.children === 'function' ? (\n props.children(calendarProps)\n ) : (\n <Calendar {...calendarProps} />\n )}\n {state.datePickerState.formatInfo.hasTime && (\n <div className={b('time-field-wrapper')}>\n <DateField {...timeInputProps} />\n </div>\n )}\n </div>\n </Popup>\n )}\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
@@ -14,7 +14,7 @@
14
14
  flex-direction: column;
15
15
  }
16
16
  .g-date-relative-range-date-picker__value-label-tooltip {
17
- --g-popover-max-width: "none";
17
+ --g-popover-max-width: 'none';
18
18
  }
19
19
  .g-date-relative-range-date-picker__value-label-item, .g-date-relative-range-date-picker__value-label-to, .g-date-relative-range-date-picker__value-label-tz {
20
20
  text-align: center;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputBase,\n InputDOMProps,\n PopupStyleProps,\n RangeValue,\n StyleProps,\n TextInputProps,\n Validation,\n} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport type {PresetTab} from './components/Presets/utils';\nimport type {\n RelativeRangeDatePickerStateOptions,\n RelativeRangeDatePickerValue,\n} from './hooks/useRelativeRangeDatePickerState';\n\nexport type RelativeRangeDatePickerTriggerProps = Pick<\n React.AllHTMLAttributes<HTMLElement>,\n | 'id'\n | 'role'\n | 'aria-controls'\n | 'aria-haspopup'\n | 'aria-expanded'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-details'\n | 'onClick'\n | 'onKeyDown'\n | 'disabled'\n | 'readOnly'\n>;\n\nexport interface RelativeRangeDatePickerRenderControlProps {\n ref: React.Ref<HTMLElement>;\n value: RelativeRangeDatePickerValue | null;\n title: string;\n errorMessage?: React.ReactNode;\n validationState?: 'invalid';\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerProps: RelativeRangeDatePickerTriggerProps;\n}\n\nexport interface RelativeRangeDatePickerProps\n extends RelativeRangeDatePickerStateOptions,\n DomProps,\n AccessibilityProps,\n InputBase,\n InputDOMProps,\n TextInputProps,\n Validation,\n FocusableProps,\n StyleProps,\n PopupStyleProps {\n /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */\n format?: string;\n /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */\n placeholderValue?: DateTime;\n /** Apply changes with button */\n withApplyButton?: boolean;\n /** Show time zone selector */\n withZonesList?: boolean;\n /** Show relative range presets */\n withPresets?: boolean;\n /** Apply presets immediately */\n applyPresetsImmediately?: boolean;\n /** Show header with docs tooltip */\n withHeader?: boolean;\n /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for picker, if empty array docs will be hidden */\n docs?: Preset[];\n /** Show selected relative values as absolute dates */\n alwaysShowAsAbsolute?: boolean;\n /** */\n getRangeTitle?: (value: RangeValue<Value | null> | null, timeZone: string) => string;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Used to render control. */\n renderControl?: (props: RelativeRangeDatePickerRenderControlProps) => React.ReactElement;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputBase,\n InputDOMProps,\n PopupStyleProps,\n RangeValue,\n StyleProps,\n TextInputProps,\n Validation,\n} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport type {PresetTab} from './components/Presets/utils';\nimport type {\n RelativeRangeDatePickerStateOptions,\n RelativeRangeDatePickerValue,\n} from './hooks/useRelativeRangeDatePickerState';\n\nexport type RelativeRangeDatePickerTriggerProps = Pick<\n React.AllHTMLAttributes<HTMLElement>,\n | 'id'\n | 'role'\n | 'aria-controls'\n | 'aria-haspopup'\n | 'aria-expanded'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-details'\n | 'onClick'\n | 'onKeyDown'\n | 'disabled'\n | 'readOnly'\n>;\n\nexport interface RelativeRangeDatePickerRenderControlProps {\n ref: React.Ref<HTMLElement>;\n value: RelativeRangeDatePickerValue | null;\n title: string;\n errorMessage?: React.ReactNode;\n validationState?: 'invalid';\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerProps: RelativeRangeDatePickerTriggerProps;\n}\n\nexport interface RelativeRangeDatePickerProps\n extends\n RelativeRangeDatePickerStateOptions,\n DomProps,\n AccessibilityProps,\n InputBase,\n InputDOMProps,\n TextInputProps,\n Validation,\n FocusableProps,\n StyleProps,\n PopupStyleProps {\n /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */\n format?: string;\n /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */\n placeholderValue?: DateTime;\n /** Apply changes with button */\n withApplyButton?: boolean;\n /** Show time zone selector */\n withZonesList?: boolean;\n /** Show relative range presets */\n withPresets?: boolean;\n /** Apply presets immediately */\n applyPresetsImmediately?: boolean;\n /** Show header with docs tooltip */\n withHeader?: boolean;\n /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for picker, if empty array docs will be hidden */\n docs?: Preset[];\n /** Show selected relative values as absolute dates */\n alwaysShowAsAbsolute?: boolean;\n /** */\n getRangeTitle?: (value: RangeValue<Value | null> | null, timeZone: string) => string;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Used to render control. */\n renderControl?: (props: RelativeRangeDatePickerRenderControlProps) => React.ReactElement;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"inputs.js","sourceRoot":"../../../../src","sources":["components/types/inputs.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n TextInputProps as TextInputBaseProps,\n TextInputPin,\n TextInputSize,\n TextInputView,\n} from '@gravity-ui/uikit';\n\nexport type ValidationState = 'invalid';\n\nexport interface AccessibilityProps {\n /** Defines a string value that labels the current element. */\n 'aria-label'?: string;\n /** Identifies the element (or elements) that labels the current element. */\n 'aria-labelledby'?: string;\n /** Identifies the element (or elements) that describes the object. */\n 'aria-describedby'?: string;\n /** Identifies the element (or elements) that provide a detailed, extended description for the object. */\n 'aria-details'?: string;\n}\n\nexport interface ValueBase<T, C = T> {\n /** The current value (controlled). */\n value?: T;\n /** The default value (uncontrolled). */\n defaultValue?: T;\n /** Handler that is called when the value changes. */\n onUpdate?: (value: C) => void;\n}\n\nexport interface Validation\n extends Pick<TextInputBaseProps, 'validationState' | 'errorMessage' | 'errorPlacement'> {}\n\nexport interface DomProps {\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface InputDOMProps {\n /**\n * The name of the input element, used when submitting an HTML form.\n */\n name?: string;\n /**\n * The id of a form element in the same document. If this attribute is not set,\n * the input element is associated with its ancestor form element, if any.\n */\n form?: string;\n}\nexport interface InputBase {\n /**\n * Whether the field is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the calendar value is immutable.\n * @default false\n */\n readOnly?: boolean;\n}\n\nexport interface TextInputProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Corner rounding\n * @default 'round-round'\n */\n pin?: TextInputPin;\n /** Control view */\n view?: TextInputView;\n /** Inner field label */\n label?: TextInputBaseProps['label'];\n /** Text that appears in the field when it has no value set */\n placeholder?: string;\n /**\n * Show clear button\n * @default false\n */\n hasClear?: boolean;\n}\n\nexport interface TextInputExtendProps {\n /**\n * User`s node rendered before label and input\n */\n startContent?: TextInputBaseProps['startContent'];\n /**\n * User`s node rendered after input and clear button\n */\n endContent?: TextInputBaseProps['endContent'];\n}\n\nexport interface RangeValue<T> {\n /** The start value of the range. */\n start: T;\n /** The end value of the range. */\n end: T;\n}\n"]}
1
+ {"version":3,"file":"inputs.js","sourceRoot":"../../../../src","sources":["components/types/inputs.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n TextInputProps as TextInputBaseProps,\n TextInputPin,\n TextInputSize,\n TextInputView,\n} from '@gravity-ui/uikit';\n\nexport type ValidationState = 'invalid';\n\nexport interface AccessibilityProps {\n /** Defines a string value that labels the current element. */\n 'aria-label'?: string;\n /** Identifies the element (or elements) that labels the current element. */\n 'aria-labelledby'?: string;\n /** Identifies the element (or elements) that describes the object. */\n 'aria-describedby'?: string;\n /** Identifies the element (or elements) that provide a detailed, extended description for the object. */\n 'aria-details'?: string;\n}\n\nexport interface ValueBase<T, C = T> {\n /** The current value (controlled). */\n value?: T;\n /** The default value (uncontrolled). */\n defaultValue?: T;\n /** Handler that is called when the value changes. */\n onUpdate?: (value: C) => void;\n}\n\nexport interface Validation extends Pick<\n TextInputBaseProps,\n 'validationState' | 'errorMessage' | 'errorPlacement'\n> {}\n\nexport interface DomProps {\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface InputDOMProps {\n /**\n * The name of the input element, used when submitting an HTML form.\n */\n name?: string;\n /**\n * The id of a form element in the same document. If this attribute is not set,\n * the input element is associated with its ancestor form element, if any.\n */\n form?: string;\n}\nexport interface InputBase {\n /**\n * Whether the field is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the calendar value is immutable.\n * @default false\n */\n readOnly?: boolean;\n}\n\nexport interface TextInputProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Corner rounding\n * @default 'round-round'\n */\n pin?: TextInputPin;\n /** Control view */\n view?: TextInputView;\n /** Inner field label */\n label?: TextInputBaseProps['label'];\n /** Text that appears in the field when it has no value set */\n placeholder?: string;\n /**\n * Show clear button\n * @default false\n */\n hasClear?: boolean;\n}\n\nexport interface TextInputExtendProps {\n /**\n * User`s node rendered before label and input\n */\n startContent?: TextInputBaseProps['startContent'];\n /**\n * User`s node rendered after input and clear button\n */\n endContent?: TextInputBaseProps['endContent'];\n}\n\nexport interface RangeValue<T> {\n /** The start value of the range. */\n start: T;\n /** The end value of the range. */\n end: T;\n}\n"]}
@@ -1 +1 @@
1
- {"type":"commonjs","version":"3.4.1","sideEffects":["*.css","*.scss"]}
1
+ {"type":"commonjs","version":"3.4.2","sideEffects":["*.css","*.scss"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.js","sourceRoot":"../../../../src","sources":["components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAC,YAAY,EAAC,wCAAqC;AAE1D,OAAO,EAAC,gBAAgB,EAAC,kDAA+C;AAIxE,sCAAuC;AAcvC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAkC,SAAS,QAAQ,CACvF,KAAoB,EACpB,GAAG;IAEH,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAEtC,OAAO,KAAC,YAAY,kBAAC,GAAG,EAAE,GAAG,IAAM,KAAK,IAAE,KAAK,EAAE,KAAK,IAAI,CAAC;AAC/D,CAAC,CAAC,CAAC","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport {CalendarView} from '../CalendarView/CalendarView';\nimport type {CalendarInstance, CalendarSize} from '../CalendarView/CalendarView';\nimport {useCalendarState} from '../CalendarView/hooks/useCalendarState';\nimport type {CalendarStateOptions} from '../CalendarView/hooks/useCalendarState';\nimport type {AccessibilityProps, DomProps, FocusEvents, StyleProps} from '../types';\n\nimport '../CalendarView/Calendar.scss';\n\nexport interface CalendarProps<T = DateTime>\n extends CalendarStateOptions<T>,\n DomProps,\n StyleProps,\n FocusEvents,\n AccessibilityProps {\n /**\n * The size of the element.\n * @default m\n */\n size?: CalendarSize;\n}\nexport const Calendar = React.forwardRef<CalendarInstance, CalendarProps>(function Calendar(\n props: CalendarProps,\n ref,\n) {\n const state = useCalendarState(props);\n\n return <CalendarView ref={ref} {...props} state={state} />;\n});\n"]}
1
+ {"version":3,"file":"Calendar.js","sourceRoot":"../../../../src","sources":["components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAC,YAAY,EAAC,wCAAqC;AAE1D,OAAO,EAAC,gBAAgB,EAAC,kDAA+C;AAIxE,sCAAuC;AAUvC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAkC,SAAS,QAAQ,CACvF,KAAoB,EACpB,GAAG;IAEH,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAEtC,OAAO,KAAC,YAAY,kBAAC,GAAG,EAAE,GAAG,IAAM,KAAK,IAAE,KAAK,EAAE,KAAK,IAAI,CAAC;AAC/D,CAAC,CAAC,CAAC","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport {CalendarView} from '../CalendarView/CalendarView';\nimport type {CalendarInstance, CalendarSize} from '../CalendarView/CalendarView';\nimport {useCalendarState} from '../CalendarView/hooks/useCalendarState';\nimport type {CalendarStateOptions} from '../CalendarView/hooks/useCalendarState';\nimport type {AccessibilityProps, DomProps, FocusEvents, StyleProps} from '../types';\n\nimport '../CalendarView/Calendar.scss';\n\nexport interface CalendarProps<T = DateTime>\n extends CalendarStateOptions<T>, DomProps, StyleProps, FocusEvents, AccessibilityProps {\n /**\n * The size of the element.\n * @default m\n */\n size?: CalendarSize;\n}\nexport const Calendar = React.forwardRef<CalendarInstance, CalendarProps>(function Calendar(\n props: CalendarProps,\n ref,\n) {\n const state = useCalendarState(props);\n\n return <CalendarView ref={ref} {...props} state={state} />;\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendarState.js","sourceRoot":"../../../../../src","sources":["components/CalendarView/hooks/useCalendarState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {ValueBase} from '../../types';\nimport {constrainValue, createPlaceholderValue, isWeekend, mergeDateTime} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {calendarLayouts} from '../utils';\n\nimport type {CalendarLayout, CalendarState, CalendarStateOptionsBase} from './types';\n\nexport interface CalendarStateOptions<T = DateTime>\n extends ValueBase<T | null, T>,\n CalendarStateOptionsBase {}\n\nexport type {CalendarState} from './types';\n\nconst defaultModes: Record<CalendarLayout, boolean> = {\n days: true,\n months: true,\n quarters: false,\n years: true,\n};\nexport function useCalendarState(props: CalendarStateOptions): CalendarState {\n const {disabled, readOnly, modes = defaultModes} = props;\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n const availableModes = calendarLayouts.filter((l) => modes[l]);\n const minMode = availableModes[0] || 'days';\n\n const [mode, setMode] = useControlledState(\n props.mode,\n props.defaultMode ?? minMode,\n props.onUpdateMode,\n );\n\n const currentMode = mode && availableModes.includes(mode) ? mode : minMode;\n\n const inputTimeZone = useDefaultTimeZone(\n props.value || props.defaultValue || props.focusedValue || props.defaultFocusedValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const minValue = React.useMemo(\n () => (props.minValue ? props.minValue.timeZone(timeZone) : undefined),\n [timeZone, props.minValue],\n );\n\n const maxValue = React.useMemo(\n () => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined),\n [timeZone, props.maxValue],\n );\n\n const focusedValue = React.useMemo(() => {\n if (!props.focusedValue) {\n return props.focusedValue;\n }\n return constrainValue(props.focusedValue.timeZone(timeZone), minValue, maxValue);\n }, [props.focusedValue, minValue, maxValue, timeZone]);\n\n const defaultFocusedValue = React.useMemo(() => {\n const defaultValue =\n (props.defaultFocusedValue ? props.defaultFocusedValue : value)?.timeZone(timeZone) ||\n createPlaceholderValue({timeZone}).startOf(minMode);\n return constrainValue(defaultValue, minValue, maxValue);\n }, [maxValue, minValue, props.defaultFocusedValue, timeZone, value, minMode]);\n const [focusedDateInner, setFocusedDate] = useControlledState(\n focusedValue,\n defaultFocusedValue,\n (date: DateTime) => {\n props.onFocusUpdate?.(date.timeZone(inputTimeZone));\n },\n );\n\n const focusedDate =\n focusedDateInner?.timeZone(timeZone) ??\n constrainValue(createPlaceholderValue({timeZone}), minValue, maxValue);\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n }\n\n function focusCell(date: DateTime) {\n setFocusedDate(constrainValue(date.startOf(currentMode), minValue, maxValue));\n }\n\n const [isFocused, setFocused] = React.useState(props.autoFocus || false);\n\n const startDate = getStartDate(focusedDate, currentMode);\n const endDate = getEndDate(focusedDate, currentMode);\n\n return {\n disabled,\n readOnly,\n value,\n setValue(date: DateTime) {\n if (!disabled && !readOnly) {\n let newValue = constrainValue(date, minValue, maxValue);\n if (this.isCellUnavailable(newValue)) {\n return;\n }\n if (value) {\n // If there is a date already selected, then we want to keep its time\n newValue = mergeDateTime(newValue, value.timeZone(timeZone));\n }\n setValue(newValue.timeZone(inputTimeZone));\n }\n },\n timeZone,\n selectDate(date: DateTime, force = false) {\n if (!disabled) {\n if (!readOnly && (force || this.mode === minMode)) {\n this.setValue(date.startOf(minMode));\n if (force && currentMode !== minMode) {\n setMode(minMode);\n }\n } else {\n this.zoomIn();\n }\n }\n },\n minValue,\n maxValue,\n focusedDate,\n startDate,\n endDate,\n setFocusedDate(date: DateTime) {\n focusCell(date);\n setFocused(true);\n },\n focusNextCell() {\n focusCell(focusedDate.add(1, this.mode));\n },\n focusPreviousCell() {\n focusCell(focusedDate.subtract(1, this.mode));\n },\n focusNextRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.add(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(1, 'years'));\n } else {\n focusCell(focusedDate.add(3, this.mode));\n }\n },\n focusPreviousRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(1, 'years'));\n } else {\n focusCell(focusedDate.subtract(3, this.mode));\n }\n },\n focusNextPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.add({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(4, 'years'));\n } else {\n focusCell(focusedDate.add(12, this.mode));\n }\n },\n focusPreviousPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(4, 'years'));\n } else {\n focusCell(focusedDate.subtract(12, this.mode));\n }\n },\n focusSectionStart() {\n focusCell(getStartDate(focusedDate, this.mode));\n },\n focusSectionEnd() {\n focusCell(getEndDate(focusedDate, this.mode));\n },\n zoomIn() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) - 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n zoomOut() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) + 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n selectFocusedDate() {\n this.selectDate(focusedDate, true);\n },\n isFocused,\n setFocused,\n isInvalid(date: DateTime) {\n return isInvalid(date, this.minValue, this.maxValue, this.mode);\n },\n isPreviousPageInvalid() {\n const prev = this.startDate.subtract(1, 'day');\n return this.isInvalid(prev);\n },\n isNextPageInvalid() {\n const next = this.endDate.endOf(this.mode).add(1, 'day');\n return this.isInvalid(next);\n },\n isSelected(date: DateTime) {\n return Boolean(\n value &&\n date.isSame(value.timeZone(timeZone), currentMode) &&\n !this.isCellDisabled(date),\n );\n },\n isCellUnavailable(date: DateTime) {\n if (this.mode === minMode) {\n return Boolean(props.isDateUnavailable && props.isDateUnavailable(date));\n } else {\n return false;\n }\n },\n isCellFocused(date: DateTime) {\n return this.isFocused && focusedDate && date.isSame(focusedDate, currentMode);\n },\n isCellDisabled(date: DateTime) {\n return this.disabled || this.isInvalid(date);\n },\n isWeekend(date: DateTime) {\n if (this.mode !== 'days') {\n return false;\n }\n if (typeof props.isWeekend === 'function') {\n return props.isWeekend(date);\n }\n return isWeekend(date);\n },\n isCurrent(date: DateTime) {\n return dateTime({timeZone}).isSame(date, this.mode);\n },\n mode: currentMode,\n setMode,\n availableModes,\n };\n}\n\nfunction getStartDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.startOf('month');\n }\n\n if (mode === 'months') {\n return date.startOf('year');\n }\n\n if (mode === 'quarters') {\n const year = Math.floor(date.year() / 4) * 4;\n return date.startOf('year').set('year', year);\n }\n\n const year = Math.floor(date.year() / 12) * 12;\n return date.startOf('year').set('year', year);\n}\n\nfunction getEndDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.endOf('month').startOf('day');\n }\n\n if (mode === 'months') {\n return date.endOf('year').startOf('month');\n }\n\n const startDate = getStartDate(date, mode);\n if (mode === 'quarters') {\n return startDate.add(15, 'quarters');\n }\n\n return startDate.add({[mode]: 11});\n}\n\nfunction isInvalid(\n date: DateTime,\n minValue?: DateTime,\n maxValue?: DateTime,\n mode: CalendarLayout = 'days',\n) {\n const constrainedDate = constrainValue(date, minValue, maxValue);\n return !constrainedDate.isSame(date, mode);\n}\n"]}
1
+ {"version":3,"file":"useCalendarState.js","sourceRoot":"../../../../../src","sources":["components/CalendarView/hooks/useCalendarState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {ValueBase} from '../../types';\nimport {constrainValue, createPlaceholderValue, isWeekend, mergeDateTime} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {calendarLayouts} from '../utils';\n\nimport type {CalendarLayout, CalendarState, CalendarStateOptionsBase} from './types';\n\nexport interface CalendarStateOptions<T = DateTime>\n extends ValueBase<T | null, T>, CalendarStateOptionsBase {}\n\nexport type {CalendarState} from './types';\n\nconst defaultModes: Record<CalendarLayout, boolean> = {\n days: true,\n months: true,\n quarters: false,\n years: true,\n};\nexport function useCalendarState(props: CalendarStateOptions): CalendarState {\n const {disabled, readOnly, modes = defaultModes} = props;\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n const availableModes = calendarLayouts.filter((l) => modes[l]);\n const minMode = availableModes[0] || 'days';\n\n const [mode, setMode] = useControlledState(\n props.mode,\n props.defaultMode ?? minMode,\n props.onUpdateMode,\n );\n\n const currentMode = mode && availableModes.includes(mode) ? mode : minMode;\n\n const inputTimeZone = useDefaultTimeZone(\n props.value || props.defaultValue || props.focusedValue || props.defaultFocusedValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const minValue = React.useMemo(\n () => (props.minValue ? props.minValue.timeZone(timeZone) : undefined),\n [timeZone, props.minValue],\n );\n\n const maxValue = React.useMemo(\n () => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined),\n [timeZone, props.maxValue],\n );\n\n const focusedValue = React.useMemo(() => {\n if (!props.focusedValue) {\n return props.focusedValue;\n }\n return constrainValue(props.focusedValue.timeZone(timeZone), minValue, maxValue);\n }, [props.focusedValue, minValue, maxValue, timeZone]);\n\n const defaultFocusedValue = React.useMemo(() => {\n const defaultValue =\n (props.defaultFocusedValue ? props.defaultFocusedValue : value)?.timeZone(timeZone) ||\n createPlaceholderValue({timeZone}).startOf(minMode);\n return constrainValue(defaultValue, minValue, maxValue);\n }, [maxValue, minValue, props.defaultFocusedValue, timeZone, value, minMode]);\n const [focusedDateInner, setFocusedDate] = useControlledState(\n focusedValue,\n defaultFocusedValue,\n (date: DateTime) => {\n props.onFocusUpdate?.(date.timeZone(inputTimeZone));\n },\n );\n\n const focusedDate =\n focusedDateInner?.timeZone(timeZone) ??\n constrainValue(createPlaceholderValue({timeZone}), minValue, maxValue);\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n }\n\n function focusCell(date: DateTime) {\n setFocusedDate(constrainValue(date.startOf(currentMode), minValue, maxValue));\n }\n\n const [isFocused, setFocused] = React.useState(props.autoFocus || false);\n\n const startDate = getStartDate(focusedDate, currentMode);\n const endDate = getEndDate(focusedDate, currentMode);\n\n return {\n disabled,\n readOnly,\n value,\n setValue(date: DateTime) {\n if (!disabled && !readOnly) {\n let newValue = constrainValue(date, minValue, maxValue);\n if (this.isCellUnavailable(newValue)) {\n return;\n }\n if (value) {\n // If there is a date already selected, then we want to keep its time\n newValue = mergeDateTime(newValue, value.timeZone(timeZone));\n }\n setValue(newValue.timeZone(inputTimeZone));\n }\n },\n timeZone,\n selectDate(date: DateTime, force = false) {\n if (!disabled) {\n if (!readOnly && (force || this.mode === minMode)) {\n this.setValue(date.startOf(minMode));\n if (force && currentMode !== minMode) {\n setMode(minMode);\n }\n } else {\n this.zoomIn();\n }\n }\n },\n minValue,\n maxValue,\n focusedDate,\n startDate,\n endDate,\n setFocusedDate(date: DateTime) {\n focusCell(date);\n setFocused(true);\n },\n focusNextCell() {\n focusCell(focusedDate.add(1, this.mode));\n },\n focusPreviousCell() {\n focusCell(focusedDate.subtract(1, this.mode));\n },\n focusNextRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.add(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(1, 'years'));\n } else {\n focusCell(focusedDate.add(3, this.mode));\n }\n },\n focusPreviousRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(1, 'years'));\n } else {\n focusCell(focusedDate.subtract(3, this.mode));\n }\n },\n focusNextPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.add({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(4, 'years'));\n } else {\n focusCell(focusedDate.add(12, this.mode));\n }\n },\n focusPreviousPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(4, 'years'));\n } else {\n focusCell(focusedDate.subtract(12, this.mode));\n }\n },\n focusSectionStart() {\n focusCell(getStartDate(focusedDate, this.mode));\n },\n focusSectionEnd() {\n focusCell(getEndDate(focusedDate, this.mode));\n },\n zoomIn() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) - 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n zoomOut() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) + 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n selectFocusedDate() {\n this.selectDate(focusedDate, true);\n },\n isFocused,\n setFocused,\n isInvalid(date: DateTime) {\n return isInvalid(date, this.minValue, this.maxValue, this.mode);\n },\n isPreviousPageInvalid() {\n const prev = this.startDate.subtract(1, 'day');\n return this.isInvalid(prev);\n },\n isNextPageInvalid() {\n const next = this.endDate.endOf(this.mode).add(1, 'day');\n return this.isInvalid(next);\n },\n isSelected(date: DateTime) {\n return Boolean(\n value &&\n date.isSame(value.timeZone(timeZone), currentMode) &&\n !this.isCellDisabled(date),\n );\n },\n isCellUnavailable(date: DateTime) {\n if (this.mode === minMode) {\n return Boolean(props.isDateUnavailable && props.isDateUnavailable(date));\n } else {\n return false;\n }\n },\n isCellFocused(date: DateTime) {\n return this.isFocused && focusedDate && date.isSame(focusedDate, currentMode);\n },\n isCellDisabled(date: DateTime) {\n return this.disabled || this.isInvalid(date);\n },\n isWeekend(date: DateTime) {\n if (this.mode !== 'days') {\n return false;\n }\n if (typeof props.isWeekend === 'function') {\n return props.isWeekend(date);\n }\n return isWeekend(date);\n },\n isCurrent(date: DateTime) {\n return dateTime({timeZone}).isSame(date, this.mode);\n },\n mode: currentMode,\n setMode,\n availableModes,\n };\n}\n\nfunction getStartDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.startOf('month');\n }\n\n if (mode === 'months') {\n return date.startOf('year');\n }\n\n if (mode === 'quarters') {\n const year = Math.floor(date.year() / 4) * 4;\n return date.startOf('year').set('year', year);\n }\n\n const year = Math.floor(date.year() / 12) * 12;\n return date.startOf('year').set('year', year);\n}\n\nfunction getEndDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.endOf('month').startOf('day');\n }\n\n if (mode === 'months') {\n return date.endOf('year').startOf('month');\n }\n\n const startDate = getStartDate(date, mode);\n if (mode === 'quarters') {\n return startDate.add(15, 'quarters');\n }\n\n return startDate.add({[mode]: 11});\n}\n\nfunction isInvalid(\n date: DateTime,\n minValue?: DateTime,\n maxValue?: DateTime,\n mode: CalendarLayout = 'days',\n) {\n const constrainedDate = constrainValue(date, minValue, maxValue);\n return !constrainedDate.isSame(date, mode);\n}\n"]}