@gravity-ui/date-components 3.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/DateField/utils.js +11 -1
- package/dist/cjs/components/DateField/utils.js.map +1 -1
- package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +1 -0
- package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +2 -3
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
- package/dist/cjs/components/RelativeDateField/RelativeDateField.js +14 -4
- package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +1 -0
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +18 -31
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js +3 -2
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +5 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +5 -2
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css +13 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css.map +1 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +11 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +100 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css +6 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +3 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +8 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +2 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +2 -2
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +2 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css +0 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +1 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +2 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/index.d.ts +1 -0
- package/dist/cjs/components/RelativeRangeDatePicker/index.js +3 -1
- package/dist/cjs/components/RelativeRangeDatePicker/index.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/types.d.ts +4 -1
- package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
- package/dist/esm/components/DateField/utils.js +11 -1
- package/dist/esm/components/DateField/utils.js.map +1 -1
- package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +1 -0
- package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
- package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +2 -3
- package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
- package/dist/esm/components/RelativeDateField/RelativeDateField.js +14 -4
- package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +1 -0
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +18 -31
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +3 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +5 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +5 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css +13 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css.map +1 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +11 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +97 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css +6 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +3 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +9 -4
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +2 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +2 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +2 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css +0 -3
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +1 -3
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +2 -3
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/index.d.ts +1 -0
- package/dist/esm/components/RelativeRangeDatePicker/index.js +1 -0
- package/dist/esm/components/RelativeRangeDatePicker/index.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/types.d.ts +4 -1
- package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +0 -16
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css.map +0 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +0 -9
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +0 -94
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js.map +0 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +0 -16
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css.map +0 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +0 -9
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +0 -90
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js.map +0 -1
package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickerForm.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AA+Cb,gCA+FC;;AA3ID,6CAAyC;AAGzC,gDAA2C;AAC3C,6EAA+D;AAI/D,mDAA2C;AAG3C,6CAAqC;AAErC,0CAA4B;AAC5B,sGAA8F;AAE9F,4BAA2B;AAE3B,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,iCAAiC,CAAC,CAAC;AA0BnD,SAAgB,UAAU,CACtB,KAEC;;IAED,MAAM,KAAK,GAAG,IAAA,6EAAqC,EAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,UAAU,GAA4B;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,mBAAmB;QACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,cAAc,EAAE,QAAQ;KAC3B,CAAC;IACF,MAAM,EAAC,iBAAiB,EAAC,GAAG,KAAK,CAAC;IAClC,OAAO,CACH,iCAAK,SAAS,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAC,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,aACtE,iCAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,aACxB,uBAAC,uCAAkB,oBACX,UAAU,IACd,iBAAiB,EACb,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAE9E,eAAe,EAAE,CAAA,MAAA,KAAK,CAAC,eAAe,0CAAE,SAAS,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACzE,YAAY,EACR,CAAA,MAAA,MAAA,KAAK,CAAC,eAAe,0CAAE,MAAM,0CAAE,IAAI,CAAC,IAAI,CAAC,KAAI,IAAA,WAAI,EAAC,qBAAqB,CAAC,EAE5E,gBAAgB,EAAE,MAAA,KAAK,CAAC,gBAAgB,0CAAE,OAAO,CAAC,KAAK,CAAC,EACxD,KAAK,EAAE,IAAA,WAAI,EAAC,MAAM,CAAC,EACnB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAC1B,EACF,uBAAC,uCAAkB,oBACX,UAAU,IACd,iBAAiB,EACb,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAE5E,eAAe,EAAE,CAAA,MAAA,KAAK,CAAC,aAAa,0CAAE,SAAS,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACvE,YAAY,EACR,CAAA,MAAA,MAAA,KAAK,CAAC,aAAa,0CAAE,MAAM,0CAAE,IAAI,CAAC,IAAI,CAAC,KAAI,IAAA,WAAI,EAAC,qBAAqB,CAAC,EAE1E,gBAAgB,EAAE,MAAA,KAAK,CAAC,gBAAgB,0CAAE,KAAK,CAAC,KAAK,CAAC,EACtD,KAAK,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,EACjB,KAAK,EAAE,KAAK,CAAC,GAAG,EAChB,QAAQ,EAAE,KAAK,CAAC,MAAM,EACtB,OAAO,UACT,IACA,EACL,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxC,uBAAC,cAAM,IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,EACzB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,OAAO,EAAE,GAAG,EAAE;oBACV,KAAK,CAAC,UAAU,EAAE,CAAC;oBACnB,KAAK,CAAC,OAAO,EAAE,CAAC;gBACpB,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EACrB,KAAK,EAAC,KAAK,YAEV,IAAA,WAAI,EAAC,OAAO,CAAC,GACT,CACZ,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpC,uBAAC,iBAAO,IACJ,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,cAAc,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBAC3B,KAAK,CAAC,QAAQ,CACV,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAC,EAChC,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAC,CACjC,CAAC;oBACF,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;wBACzB,KAAK,CAAC,OAAO,EAAE,CAAC;oBACpB,CAAC;gBACL,CAAC,EACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,GACzB,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CACnB,gCAAK,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,YACrB,uBAAC,aAAK,IACF,KAAK,EAAE,KAAK,CAAC,QAAQ,EACrB,QAAQ,EAAE,KAAK,CAAC,WAAW,EAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,IAAI,EAAE,KAAK,CAAC,IAAI,GAClB,GACA,CACT,CAAC,CAAC,CAAC,IAAI,IACN,CACT,CAAC;AACN,CAAC","sourcesContent":["'use client';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Button} from '@gravity-ui/uikit';\nimport type {TextInputSize} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {RelativeDatePicker} from '../../../RelativeDatePicker';\nimport type {RelativeDatePickerProps} from '../../../RelativeDatePicker';\nimport type {DomProps, StyleProps} from '../../../types';\nimport type {RelativeRangeDatePickerStateOptions} from '../../hooks/useRelativeRangeDatePickerState';\nimport {Presets} from '../Presets/Presets';\nimport type {Preset} from '../Presets/defaultPresets';\nimport type {PresetTab} from '../Presets/utils';\nimport {Zones} from '../Zones/Zones';\n\nimport {i18n} from './i18n';\nimport {useRelativeRangeDatePickerDialogState} from './useRelativeRangeDatePickerDialogState';\n\nimport './PickerForm.scss';\n\nconst b = block('relative-range-date-picker-form');\n\nexport interface PickerFormProps extends RelativeRangeDatePickerStateOptions, DomProps, StyleProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Whether the values is immutable.\n * @default false\n */\n readOnly?: boolean;\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 /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for presets, if empty array docs will be hidden */\n docs?: Preset[];\n}\n\nexport function PickerForm(\n props: PickerFormProps & {\n onApply: () => void;\n },\n) {\n const state = useRelativeRangeDatePickerDialogState(props);\n\n const fieldProps: RelativeDatePickerProps = {\n timeZone: state.timeZone,\n format: props.format,\n minValue: props.minValue,\n maxValue: props.maxValue,\n hasClear: props.allowNullableValues,\n readOnly: props.readOnly,\n size: props.size,\n errorPlacement: 'inside',\n };\n const {isDateUnavailable} = props;\n return (\n <div className={b({size: props.size}, props.className)} style={props.style}>\n <div className={b('pickers')}>\n <RelativeDatePicker\n {...fieldProps}\n isDateUnavailable={\n isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined\n }\n validationState={state.startValidation?.isInvalid ? 'invalid' : undefined}\n errorMessage={\n state.startValidation?.errors?.join('\\n') || i18n('Value is incorrect.')\n }\n placeholderValue={props.placeholderValue?.startOf('day')}\n label={i18n('From')}\n value={state.start}\n onUpdate={state.setStart}\n />\n <RelativeDatePicker\n {...fieldProps}\n isDateUnavailable={\n isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined\n }\n validationState={state.endValidation?.isInvalid ? 'invalid' : undefined}\n errorMessage={\n state.endValidation?.errors?.join('\\n') || i18n('Value is incorrect.')\n }\n placeholderValue={props.placeholderValue?.endOf('day')}\n label={i18n('To')}\n value={state.end}\n onUpdate={state.setEnd}\n roundUp\n />\n </div>\n {props.withApplyButton && !props.readOnly ? (\n <Button\n disabled={state.isInvalid}\n size={props.size}\n onClick={() => {\n state.applyValue();\n props.onApply();\n }}\n className={b('apply')}\n width=\"max\"\n >\n {i18n('Apply')}\n </Button>\n ) : null}\n {props.withPresets && !props.readOnly ? (\n <Presets\n size={props.size}\n presetTabs={props.presetTabs}\n onChoosePreset={(start, end) => {\n state.setRange(\n {type: 'relative', value: start},\n {type: 'relative', value: end},\n );\n if (!props.withApplyButton) {\n props.onApply();\n }\n }}\n minValue={props.minValue}\n docs={props.docs}\n className={b('presets')}\n />\n ) : null}\n {props.withZonesList ? (\n <div className={b('zone')}>\n <Zones\n value={state.timeZone}\n onUpdate={state.setTimeZone}\n disabled={props.readOnly}\n size={props.size}\n />\n </div>\n ) : null}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PickerForm.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Button, Text} from '@gravity-ui/uikit';\nimport type {TextInputSize} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {RelativeDatePicker} from '../../../RelativeDatePicker';\nimport type {RelativeDatePickerProps} from '../../../RelativeDatePicker';\nimport type {DomProps, StyleProps} from '../../../types';\nimport type {RelativeRangeDatePickerStateOptions} from '../../hooks/useRelativeRangeDatePickerState';\nimport {Presets} from '../Presets/Presets';\nimport type {Preset} from '../Presets/defaultPresets';\nimport type {PresetTab} from '../Presets/utils';\nimport {Zones} from '../Zones/Zones';\n\nimport {PickerDoc} from './PickerDoc';\nimport {i18n} from './i18n';\nimport {useRelativeRangeDatePickerDialogState} from './useRelativeRangeDatePickerDialogState';\n\nimport './PickerForm.scss';\n\nconst b = block('relative-range-date-picker-form');\n\nexport interface PickerFormProps extends RelativeRangeDatePickerStateOptions, DomProps, StyleProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Whether the values is immutable.\n * @default false\n */\n readOnly?: boolean;\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 /** 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}\n\nexport function PickerForm(\n props: PickerFormProps & {\n onApply: () => void;\n },\n) {\n const state = useRelativeRangeDatePickerDialogState(props);\n\n const fieldProps: RelativeDatePickerProps = {\n timeZone: state.timeZone,\n format: props.format,\n minValue: props.minValue,\n maxValue: props.maxValue,\n hasClear: props.allowNullableValues,\n readOnly: props.readOnly,\n size: props.size,\n errorPlacement: 'inside',\n };\n const {isDateUnavailable, withHeader = false} = props;\n return (\n <div className={b({size: props.size}, props.className)} style={props.style}>\n {withHeader && (\n <div className={b('header')}>\n <Text variant={props.size === 'xl' ? 'subheader-3' : 'subheader-2'}>\n {i18n('Select the interval')}\n </Text>\n <PickerDoc\n size={props.size}\n docs={props.docs}\n onStartUpdate={(start) => {\n state.setStart({type: 'relative', value: start});\n }}\n onEndUpdate={(end) => {\n state.setEnd({type: 'relative', value: end});\n }}\n />\n </div>\n )}\n\n <div className={b('pickers')}>\n <RelativeDatePicker\n {...fieldProps}\n isDateUnavailable={\n isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined\n }\n validationState={state.startValidation?.isInvalid ? 'invalid' : undefined}\n errorMessage={\n state.startValidation?.errors?.join('\\n') || i18n('Value is incorrect.')\n }\n placeholderValue={props.placeholderValue?.startOf('day')}\n label={i18n('From')}\n value={state.start}\n onUpdate={state.setStart}\n />\n <RelativeDatePicker\n {...fieldProps}\n isDateUnavailable={\n isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined\n }\n validationState={state.endValidation?.isInvalid ? 'invalid' : undefined}\n errorMessage={\n state.endValidation?.errors?.join('\\n') || i18n('Value is incorrect.')\n }\n placeholderValue={props.placeholderValue?.endOf('day')}\n label={i18n('To')}\n value={state.end}\n onUpdate={state.setEnd}\n roundUp\n />\n </div>\n {props.withApplyButton && !props.readOnly ? (\n <Button\n disabled={state.isInvalid}\n size={props.size}\n onClick={() => {\n state.applyValue();\n props.onApply();\n }}\n className={b('apply')}\n width=\"max\"\n >\n {i18n('Apply')}\n </Button>\n ) : null}\n {props.withPresets && !props.readOnly ? (\n <Presets\n size={props.size}\n presetTabs={props.presetTabs}\n onChoosePreset={(start, end) => {\n state.setRange(\n {type: 'relative', value: start},\n {type: 'relative', value: end},\n );\n if (!props.withApplyButton) {\n props.onApply();\n }\n }}\n minValue={props.minValue}\n className={b('presets')}\n />\n ) : null}\n {props.withZonesList ? (\n <div className={b('zone')}>\n <Zones\n value={state.timeZone}\n onUpdate={state.setTimeZone}\n disabled={props.readOnly}\n size={props.size}\n />\n </div>\n ) : null}\n </div>\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const i18n: ((key: "Value is required." | "\"From\" can't be after \"To\"." | "From" | "To" | "Value is incorrect." | "Apply", params?: import("@gravity-ui/i18n").Params) => string) & {
|
|
1
|
+
export declare const i18n: ((key: "Value is required." | "\"From\" can't be after \"To\"." | "From" | "To" | "Value is incorrect." | "Apply" | "Select the interval", params?: import("@gravity-ui/i18n").Params) => string) & {
|
|
2
2
|
keysetData: {
|
|
3
|
-
"g-date-relative-range-date-picker-dialog": Record<"Value is required." | "\"From\" can't be after \"To\"." | "From" | "To" | "Value is incorrect." | "Apply", import("@gravity-ui/i18n").KeyData>;
|
|
3
|
+
"g-date-relative-range-date-picker-dialog": Record<"Value is required." | "\"From\" can't be after \"To\"." | "From" | "To" | "Value is incorrect." | "Apply" | "Select the interval", import("@gravity-ui/i18n").KeyData>;
|
|
4
4
|
};
|
|
5
5
|
};
|
|
@@ -12,9 +12,6 @@
|
|
|
12
12
|
.g-date-relative-range-date-picker-presets__list-container {
|
|
13
13
|
outline: none;
|
|
14
14
|
}
|
|
15
|
-
.g-date-relative-range-date-picker-presets__doc {
|
|
16
|
-
margin-inline-start: auto;
|
|
17
|
-
}
|
|
18
15
|
.g-date-relative-range-date-picker-presets__content {
|
|
19
16
|
overflow: auto;
|
|
20
17
|
height: 128px;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["components/RelativeRangeDatePicker/components/Presets/data:;charset=utf-8,@use%20'@gravity-ui/uikit/variables';%0A%0A$block:%20'.%23%7Bvariables.$ns%7Drelative-range-date-picker-presets';%0A%0A%23%7B$block%7D%20%7B%0A%20%20%20%20--g-list-item-padding:%200%20var(--_--g-date-picker-presets-padding,%200);%0A%0A%20%20%20%20&__tabs%20%7B%0A%20%20%20%20%20%20%20%20--g-tabs-border-width:%200;%0A%0A%20%20%20%20%20%20%20%20display:%20flex;%0A%20%20%20%20%20%20%20%20align-items:%20center;%0A%20%20%20%20%20%20%20%20gap:%20var(--g-spacing-2);%0A%0A%20%20%20%20%20%20%20%20padding-inline:%20var(--_--g-date-picker-presets-padding,%200);%0A%0A%20%20%20%20%20%20%20%20box-shadow:%20inset%200%20-1px%20var(--g-color-line-generic);%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__list-container%20%7B%0A%20%20%20%20%20%20%20%20outline:%20none;%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__doc%20%7B%0A%20%20%20%20%20%20%20%20margin-inline-start:%20auto;%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__content%20%7B%0A%20%20%20%20%20%20%20%20overflow:%20auto;%0A%0A%20%20%20%20%20%20%20%20height:%20128px;%0A%20%20%20%20%7D%0A%0A%20%20%20%20&_size%20%7B%0A%20%20%20%20%20%20%20%20&_l%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%7B$block%7D__content%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height:%20144px;%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20&_xl%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%7B$block%7D__content%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height:%20162px;%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20@include%20mixins.text-body-2();%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A","components/RelativeRangeDatePicker/components/Presets/file:/home/runner/work/date-components/date-components/node_modules/@gravity-ui/uikit/styles/mixins.scss"],"names":[],"mappings":"AAKA;EACI;;AAEA;EACI;EAEA;EACA;EACA;EAEA;EAEA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EAEA;;AAKI;EACI;;AAIJ;EACI;EC+HZ;EACA;EACA;EACA","sourcesContent":["@use '@gravity-ui/uikit/styles/mixins';\n@use '../../../variables';\n\n$block: '.#{variables.$ns}relative-range-date-picker-presets';\n\n#{$block} {\n --g-list-item-padding: 0 var(--_--g-date-picker-presets-padding, 0);\n\n &__tabs {\n --g-tabs-border-width: 0;\n\n display: flex;\n align-items: center;\n gap: var(--g-spacing-2);\n\n padding-inline: var(--_--g-date-picker-presets-padding, 0);\n\n box-shadow: inset 0 -1px var(--g-color-line-generic);\n }\n\n &__list-container {\n outline: none;\n }\n\n &__doc {\n margin-inline-start: auto;\n }\n\n &__content {\n overflow: auto;\n\n height: 128px;\n }\n\n &_size {\n &_l {\n #{$block}__content {\n height: 144px;\n }\n }\n &_xl {\n #{$block}__content {\n height: 162px;\n @include mixins.text-body-2();\n }\n }\n }\n}\n","@use 'sass:list';\n@use 'sass:selector';\n\n@mixin overflow-ellipsis($type: ellipsis) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: $type;\n}\n\n@mixin button-reset() {\n padding: 0;\n\n font-family: var(--g-text-body-font-family);\n font-size: inherit;\n font-weight: var(--g-text-body-font-weight);\n\n color: inherit;\n background: none;\n border: none;\n outline: none;\n cursor: pointer;\n}\n\n@mixin expand-interactive-area($h: 4px, $v: $h) {\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n inset: logical (-$v) (-$h) (-$v);\n }\n}\n\n@mixin max-height($height) {\n max-height: $height;\n overflow-y: auto;\n}\n\n@mixin max-text-width($width: 100%) {\n @include overflow-ellipsis();\n\n max-width: $width;\n}\n\n@mixin aspect-ratio($ratio) {\n position: relative;\n\n &::before {\n display: block;\n content: '';\n width: 100%;\n padding-block-start: $ratio * 100%;\n }\n\n > *:only-child {\n position: absolute;\n inset: 0;\n }\n}\n\n@function get-pin-selector($mod, $selector, $append: true) {\n @if $append {\n @return selector.append($mod, $selector);\n } @else {\n @return list.join($mod, $selector, $separator: space);\n }\n}\n\n@mixin pin($block, $selectors, $radius, $append: true) {\n @each $selector in $selectors {\n &#{get-pin-selector(#{$block}_pin_round-round, $selector, $append)} {\n border-radius: $radius;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-brick, $selector, $append)} {\n border-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-clear, $selector, $append)} {\n border-radius: 0;\n border-inline: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-circle, $selector, $append)} {\n border-radius: 100px;\n }\n\n &#{get-pin-selector(#{$block}_pin_round-brick, $selector, $append)} {\n border-start-start-radius: $radius;\n border-start-end-radius: 0;\n border-end-start-radius: $radius;\n border-end-end-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-round, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: $radius;\n border-end-start-radius: 0;\n border-end-end-radius: $radius;\n }\n\n &#{get-pin-selector(#{$block}_pin_round-clear, $selector, $append)} {\n border-start-start-radius: $radius;\n border-start-end-radius: 0;\n border-end-start-radius: $radius;\n border-end-end-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-round, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: $radius;\n border-end-start-radius: 0;\n border-end-end-radius: $radius;\n border-inline-start: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-clear, $selector, $append)} {\n border-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-brick, $selector, $append)} {\n border-radius: 0;\n border-inline-start: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-brick, $selector, $append)} {\n border-start-start-radius: 100px;\n border-start-end-radius: 0;\n border-end-start-radius: 100px;\n border-end-end-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-circle, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: 100px;\n border-end-start-radius: 0;\n border-end-end-radius: 100px;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-clear, $selector, $append)} {\n border-start-start-radius: 100px;\n border-start-end-radius: 0;\n border-end-start-radius: 100px;\n border-end-end-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-circle, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: 100px;\n border-end-start-radius: 0;\n border-end-end-radius: 100px;\n border-inline-start: 0;\n }\n }\n}\n\n// Typography\n\n@mixin text-body-1() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-1-font-size);\n line-height: var(--g-text-body-1-line-height);\n}\n\n@mixin text-body-2() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-2-font-size);\n line-height: var(--g-text-body-2-line-height);\n}\n\n@mixin text-body-3() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-3-font-size);\n line-height: var(--g-text-body-3-line-height);\n}\n\n@mixin text-body-short() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-short-font-size);\n line-height: var(--g-text-body-short-line-height);\n}\n\n@mixin text-caption-1() {\n font-family: var(--g-text-caption-font-family);\n font-weight: var(--g-text-caption-font-weight);\n font-size: var(--g-text-caption-1-font-size);\n line-height: var(--g-text-caption-1-line-height);\n}\n\n@mixin text-caption-2() {\n font-family: var(--g-text-caption-font-family);\n font-weight: var(--g-text-caption-font-weight);\n font-size: var(--g-text-caption-2-font-size);\n line-height: var(--g-text-caption-2-line-height);\n}\n\n@mixin text-header-1() {\n font-family: var(--g-text-header-font-family);\n font-weight: var(--g-text-header-font-weight);\n font-size: var(--g-text-header-1-font-size);\n line-height: var(--g-text-header-1-line-height);\n}\n\n@mixin text-header-2() {\n font-family: var(--g-text-header-font-family);\n font-weight: var(--g-text-header-font-weight);\n font-size: var(--g-text-header-2-font-size);\n line-height: var(--g-text-header-2-line-height);\n}\n\n@mixin text-subheader-1() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-1-font-size);\n line-height: var(--g-text-subheader-1-line-height);\n}\n\n@mixin text-subheader-2() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-2-font-size);\n line-height: var(--g-text-subheader-2-line-height);\n}\n\n@mixin text-subheader-3() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-3-font-size);\n line-height: var(--g-text-subheader-3-line-height);\n}\n\n@mixin text-display-1() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-1-font-size);\n line-height: var(--g-text-display-1-line-height);\n}\n\n@mixin text-display-2() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-2-font-size);\n line-height: var(--g-text-display-2-line-height);\n}\n\n@mixin text-display-3() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-3-font-size);\n line-height: var(--g-text-display-3-line-height);\n}\n\n@mixin text-display-4() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-4-font-size);\n line-height: var(--g-text-display-4-line-height);\n}\n\n@mixin text-code-1() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-1-font-size);\n line-height: var(--g-text-code-1-line-height);\n}\n\n@mixin text-code-2() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-2-font-size);\n line-height: var(--g-text-code-2-line-height);\n}\n\n@mixin text-code-3() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-3-font-size);\n line-height: var(--g-text-code-3-line-height);\n}\n\n@mixin text-code-inline-1() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-1-font-size);\n line-height: var(--g-text-code-inline-1-line-height);\n}\n\n@mixin text-code-inline-2() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-2-font-size);\n line-height: var(--g-text-code-inline-2-line-height);\n}\n\n@mixin text-code-inline-3() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-3-font-size);\n line-height: var(--g-text-code-inline-3-line-height);\n}\n\n@mixin text-accent() {\n font-weight: var(--g-text-accent-font-weight);\n}\n\n@mixin loading($loading-color-1: rgba(255, 255, 255, 0.3), $loading-color-2: transparent) {\n background-image: repeating-linear-gradient(\n -45deg,\n $loading-color-1,\n $loading-color-1 4px,\n $loading-color-2 4px,\n $loading-color-2 8px\n );\n background-size: 150%;\n background-clip: padding-box;\n\n // stylelint-disable-next-line no-unknown-animations\n animation: g-loading-animation 0.5s linear infinite;\n}\n\n@mixin scrollbar() {\n &::-webkit-scrollbar,\n *::-webkit-scrollbar {\n width: var(--g-scrollbar-width);\n height: var(--g-scrollbar-width);\n background: var(--g-color-scroll-track);\n }\n\n &::-webkit-scrollbar-track,\n *::-webkit-scrollbar-track {\n background: var(--g-color-scroll-track);\n }\n\n &::-webkit-scrollbar-corner,\n *::-webkit-scrollbar-corner {\n background: var(--g-color-scroll-corner);\n }\n\n &::-webkit-scrollbar-thumb,\n *::-webkit-scrollbar-thumb {\n background: var(--g-color-scroll-handle);\n }\n\n &::-webkit-scrollbar-thumb:hover,\n *::-webkit-scrollbar-thumb:hover {\n background: var(--g-color-scroll-handle-hover);\n }\n}\n"],"file":"Presets.css"}
|
|
1
|
+
{"version":3,"sources":["components/RelativeRangeDatePicker/components/Presets/data:;charset=utf-8,@use%20'@gravity-ui/uikit/variables';%0A%0A$block:%20'.%23%7Bvariables.$ns%7Drelative-range-date-picker-presets';%0A%0A%23%7B$block%7D%20%7B%0A%20%20%20%20--g-list-item-padding:%200%20var(--_--g-date-picker-presets-padding,%200);%0A%0A%20%20%20%20&__tabs%20%7B%0A%20%20%20%20%20%20%20%20--g-tabs-border-width:%200;%0A%0A%20%20%20%20%20%20%20%20display:%20flex;%0A%20%20%20%20%20%20%20%20align-items:%20center;%0A%20%20%20%20%20%20%20%20gap:%20var(--g-spacing-2);%0A%0A%20%20%20%20%20%20%20%20padding-inline:%20var(--_--g-date-picker-presets-padding,%200);%0A%0A%20%20%20%20%20%20%20%20box-shadow:%20inset%200%20-1px%20var(--g-color-line-generic);%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__list-container%20%7B%0A%20%20%20%20%20%20%20%20outline:%20none;%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__content%20%7B%0A%20%20%20%20%20%20%20%20overflow:%20auto;%0A%0A%20%20%20%20%20%20%20%20height:%20128px;%0A%20%20%20%20%7D%0A%0A%20%20%20%20&_size%20%7B%0A%20%20%20%20%20%20%20%20&_l%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%7B$block%7D__content%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height:%20144px;%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20&_xl%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%7B$block%7D__content%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height:%20162px;%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20@include%20mixins.text-body-2();%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A","components/RelativeRangeDatePicker/components/Presets/file:/home/runner/work/date-components/date-components/node_modules/@gravity-ui/uikit/styles/mixins.scss"],"names":[],"mappings":"AAKA;EACI;;AAEA;EACI;EAEA;EACA;EACA;EAEA;EAEA;;AAGJ;EACI;;AAGJ;EACI;EAEA;;AAKI;EACI;;AAIJ;EACI;ECmIZ;EACA;EACA;EACA","sourcesContent":["@use '@gravity-ui/uikit/styles/mixins';\n@use '../../../variables';\n\n$block: '.#{variables.$ns}relative-range-date-picker-presets';\n\n#{$block} {\n --g-list-item-padding: 0 var(--_--g-date-picker-presets-padding, 0);\n\n &__tabs {\n --g-tabs-border-width: 0;\n\n display: flex;\n align-items: center;\n gap: var(--g-spacing-2);\n\n padding-inline: var(--_--g-date-picker-presets-padding, 0);\n\n box-shadow: inset 0 -1px var(--g-color-line-generic);\n }\n\n &__list-container {\n outline: none;\n }\n\n &__content {\n overflow: auto;\n\n height: 128px;\n }\n\n &_size {\n &_l {\n #{$block}__content {\n height: 144px;\n }\n }\n &_xl {\n #{$block}__content {\n height: 162px;\n @include mixins.text-body-2();\n }\n }\n }\n}\n","@use 'sass:list';\n@use 'sass:selector';\n\n@mixin overflow-ellipsis($type: ellipsis) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: $type;\n}\n\n@mixin button-reset() {\n padding: 0;\n\n font-family: var(--g-text-body-font-family);\n font-size: inherit;\n font-weight: var(--g-text-body-font-weight);\n\n color: inherit;\n background: none;\n border: none;\n outline: none;\n cursor: pointer;\n}\n\n@mixin expand-interactive-area($h: 4px, $v: $h) {\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n inset: logical (-$v) (-$h) (-$v);\n }\n}\n\n@mixin max-height($height) {\n max-height: $height;\n overflow-y: auto;\n}\n\n@mixin max-text-width($width: 100%) {\n @include overflow-ellipsis();\n\n max-width: $width;\n}\n\n@mixin aspect-ratio($ratio) {\n position: relative;\n\n &::before {\n display: block;\n content: '';\n width: 100%;\n padding-block-start: $ratio * 100%;\n }\n\n > *:only-child {\n position: absolute;\n inset: 0;\n }\n}\n\n@function get-pin-selector($mod, $selector, $append: true) {\n @if $append {\n @return selector.append($mod, $selector);\n } @else {\n @return list.join($mod, $selector, $separator: space);\n }\n}\n\n@mixin pin($block, $selectors, $radius, $append: true) {\n @each $selector in $selectors {\n &#{get-pin-selector(#{$block}_pin_round-round, $selector, $append)} {\n border-radius: $radius;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-brick, $selector, $append)} {\n border-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-clear, $selector, $append)} {\n border-radius: 0;\n border-inline: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-circle, $selector, $append)} {\n border-radius: 100px;\n }\n\n &#{get-pin-selector(#{$block}_pin_round-brick, $selector, $append)} {\n border-start-start-radius: $radius;\n border-start-end-radius: 0;\n border-end-start-radius: $radius;\n border-end-end-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-round, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: $radius;\n border-end-start-radius: 0;\n border-end-end-radius: $radius;\n }\n\n &#{get-pin-selector(#{$block}_pin_round-clear, $selector, $append)} {\n border-start-start-radius: $radius;\n border-start-end-radius: 0;\n border-end-start-radius: $radius;\n border-end-end-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-round, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: $radius;\n border-end-start-radius: 0;\n border-end-end-radius: $radius;\n border-inline-start: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-clear, $selector, $append)} {\n border-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-brick, $selector, $append)} {\n border-radius: 0;\n border-inline-start: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-brick, $selector, $append)} {\n border-start-start-radius: 100px;\n border-start-end-radius: 0;\n border-end-start-radius: 100px;\n border-end-end-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-circle, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: 100px;\n border-end-start-radius: 0;\n border-end-end-radius: 100px;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-clear, $selector, $append)} {\n border-start-start-radius: 100px;\n border-start-end-radius: 0;\n border-end-start-radius: 100px;\n border-end-end-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-circle, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: 100px;\n border-end-start-radius: 0;\n border-end-end-radius: 100px;\n border-inline-start: 0;\n }\n }\n}\n\n// Typography\n\n@mixin text-body-1() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-1-font-size);\n line-height: var(--g-text-body-1-line-height);\n}\n\n@mixin text-body-2() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-2-font-size);\n line-height: var(--g-text-body-2-line-height);\n}\n\n@mixin text-body-3() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-3-font-size);\n line-height: var(--g-text-body-3-line-height);\n}\n\n@mixin text-body-short() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-short-font-size);\n line-height: var(--g-text-body-short-line-height);\n}\n\n@mixin text-caption-1() {\n font-family: var(--g-text-caption-font-family);\n font-weight: var(--g-text-caption-font-weight);\n font-size: var(--g-text-caption-1-font-size);\n line-height: var(--g-text-caption-1-line-height);\n}\n\n@mixin text-caption-2() {\n font-family: var(--g-text-caption-font-family);\n font-weight: var(--g-text-caption-font-weight);\n font-size: var(--g-text-caption-2-font-size);\n line-height: var(--g-text-caption-2-line-height);\n}\n\n@mixin text-header-1() {\n font-family: var(--g-text-header-font-family);\n font-weight: var(--g-text-header-font-weight);\n font-size: var(--g-text-header-1-font-size);\n line-height: var(--g-text-header-1-line-height);\n}\n\n@mixin text-header-2() {\n font-family: var(--g-text-header-font-family);\n font-weight: var(--g-text-header-font-weight);\n font-size: var(--g-text-header-2-font-size);\n line-height: var(--g-text-header-2-line-height);\n}\n\n@mixin text-subheader-1() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-1-font-size);\n line-height: var(--g-text-subheader-1-line-height);\n}\n\n@mixin text-subheader-2() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-2-font-size);\n line-height: var(--g-text-subheader-2-line-height);\n}\n\n@mixin text-subheader-3() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-3-font-size);\n line-height: var(--g-text-subheader-3-line-height);\n}\n\n@mixin text-display-1() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-1-font-size);\n line-height: var(--g-text-display-1-line-height);\n}\n\n@mixin text-display-2() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-2-font-size);\n line-height: var(--g-text-display-2-line-height);\n}\n\n@mixin text-display-3() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-3-font-size);\n line-height: var(--g-text-display-3-line-height);\n}\n\n@mixin text-display-4() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-4-font-size);\n line-height: var(--g-text-display-4-line-height);\n}\n\n@mixin text-code-1() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-1-font-size);\n line-height: var(--g-text-code-1-line-height);\n}\n\n@mixin text-code-2() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-2-font-size);\n line-height: var(--g-text-code-2-line-height);\n}\n\n@mixin text-code-3() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-3-font-size);\n line-height: var(--g-text-code-3-line-height);\n}\n\n@mixin text-code-inline-1() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-1-font-size);\n line-height: var(--g-text-code-inline-1-line-height);\n}\n\n@mixin text-code-inline-2() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-2-font-size);\n line-height: var(--g-text-code-inline-2-line-height);\n}\n\n@mixin text-code-inline-3() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-3-font-size);\n line-height: var(--g-text-code-inline-3-line-height);\n}\n\n@mixin text-accent() {\n font-weight: var(--g-text-accent-font-weight);\n}\n\n@mixin loading($loading-color-1: rgba(255, 255, 255, 0.3), $loading-color-2: transparent) {\n background-image: repeating-linear-gradient(\n -45deg,\n $loading-color-1,\n $loading-color-1 4px,\n $loading-color-2 4px,\n $loading-color-2 8px\n );\n background-size: 150%;\n background-clip: padding-box;\n\n // stylelint-disable-next-line no-unknown-animations\n animation: g-loading-animation 0.5s linear infinite;\n}\n\n@mixin scrollbar() {\n &::-webkit-scrollbar,\n *::-webkit-scrollbar {\n width: var(--g-scrollbar-width);\n height: var(--g-scrollbar-width);\n background: var(--g-color-scroll-track);\n }\n\n &::-webkit-scrollbar-track,\n *::-webkit-scrollbar-track {\n background: var(--g-color-scroll-track);\n }\n\n &::-webkit-scrollbar-corner,\n *::-webkit-scrollbar-corner {\n background: var(--g-color-scroll-corner);\n }\n\n &::-webkit-scrollbar-thumb,\n *::-webkit-scrollbar-thumb {\n background: var(--g-color-scroll-handle);\n }\n\n &::-webkit-scrollbar-thumb:hover,\n *::-webkit-scrollbar-thumb:hover {\n background: var(--g-color-scroll-handle-hover);\n }\n}\n"],"file":"Presets.css"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
|
-
import type { Preset } from "./defaultPresets.js";
|
|
3
2
|
import type { PresetTab } from "./utils.js";
|
|
4
3
|
import "./Presets.css";
|
|
5
4
|
export interface PresetProps {
|
|
@@ -9,9 +8,8 @@ export interface PresetProps {
|
|
|
9
8
|
minValue?: DateTime;
|
|
10
9
|
size?: 's' | 'm' | 'l' | 'xl';
|
|
11
10
|
presetTabs?: PresetTab[];
|
|
12
|
-
docs?: Preset[];
|
|
13
11
|
}
|
|
14
|
-
export declare function Presets({ className, size, minValue, withTime, onChoosePreset, presetTabs,
|
|
12
|
+
export declare function Presets({ className, size, minValue, withTime, onChoosePreset, presetTabs, }: PresetProps): import("react/jsx-runtime").JSX.Element | null;
|
|
15
13
|
export declare const SIZE_TO_ITEM_HEIGHT: {
|
|
16
14
|
s: number;
|
|
17
15
|
m: number;
|
|
@@ -8,11 +8,10 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
8
8
|
const react_1 = tslib_1.__importDefault(require("react"));
|
|
9
9
|
const uikit_1 = require("@gravity-ui/uikit");
|
|
10
10
|
const cn_1 = require("../../../../utils/cn.js");
|
|
11
|
-
const PresetsDoc_1 = require("./PresetsDoc.js");
|
|
12
11
|
const utils_1 = require("./utils.js");
|
|
13
12
|
require("./Presets.css");
|
|
14
13
|
const b = (0, cn_1.block)('relative-range-date-picker-presets');
|
|
15
|
-
function Presets({ className, size = 'm', minValue, withTime, onChoosePreset, presetTabs,
|
|
14
|
+
function Presets({ className, size = 'm', minValue, withTime, onChoosePreset, presetTabs, }) {
|
|
16
15
|
var _a, _b;
|
|
17
16
|
const tabs = react_1.default.useMemo(() => {
|
|
18
17
|
return (0, utils_1.filterPresetTabs)(presetTabs !== null && presetTabs !== void 0 ? presetTabs : (0, utils_1.getDefaultPresetTabs)({ withTime }), { minValue });
|
|
@@ -28,7 +27,7 @@ function Presets({ className, size = 'm', minValue, withTime, onChoosePreset, pr
|
|
|
28
27
|
if (activeTab.id !== activeTabId) {
|
|
29
28
|
setActiveTab(activeTab.id);
|
|
30
29
|
}
|
|
31
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: b({ size }, className), children: (0, jsx_runtime_1.jsxs)(uikit_1.TabProvider, { value: activeTabId, onUpdate: setActiveTab, children: [(0, jsx_runtime_1.
|
|
30
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: b({ size }, className), children: (0, jsx_runtime_1.jsxs)(uikit_1.TabProvider, { value: activeTabId, onUpdate: setActiveTab, children: [(0, jsx_runtime_1.jsx)("div", { className: b('tabs'), children: (0, jsx_runtime_1.jsx)(uikit_1.TabList, { size: size === 's' ? 'm' : size, children: tabs.map(({ id, title }) => ((0, jsx_runtime_1.jsx)(uikit_1.Tab, { value: id, children: title }, id))) }) }), (0, jsx_runtime_1.jsx)(uikit_1.TabPanel, { className: b('content'), value: activeTabId, children: (0, jsx_runtime_1.jsx)(PresetsList, { presets: activeTab.presets, onChoosePreset: onChoosePreset, size: size }) })] }) }));
|
|
32
31
|
}
|
|
33
32
|
exports.SIZE_TO_ITEM_HEIGHT = {
|
|
34
33
|
s: 28,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Presets.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/Presets.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;
|
|
1
|
+
{"version":3,"file":"Presets.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/Presets.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 {List, Tab, TabList, TabPanel, TabProvider} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\n\nimport type {Preset} from './defaultPresets';\nimport {filterPresetTabs, getDefaultPresetTabs} from './utils';\nimport type {PresetTab} from './utils';\n\nimport './Presets.scss';\n\nconst b = block('relative-range-date-picker-presets');\n\nexport interface PresetProps {\n className?: string;\n onChoosePreset: (start: string, end: string) => void;\n withTime?: boolean;\n minValue?: DateTime;\n size?: 's' | 'm' | 'l' | 'xl';\n presetTabs?: PresetTab[];\n}\nexport function Presets({\n className,\n size = 'm',\n minValue,\n withTime,\n onChoosePreset,\n presetTabs,\n}: PresetProps) {\n const tabs = React.useMemo(() => {\n return filterPresetTabs(presetTabs ?? getDefaultPresetTabs({withTime}), {minValue});\n }, [withTime, minValue, presetTabs]);\n\n const [activeTabId, setActiveTab] = React.useState(tabs[0]?.id);\n\n if (tabs.length === 0) {\n return null;\n }\n\n const activeTab = tabs.find((tab) => tab.id === activeTabId) ?? tabs[0];\n if (!activeTab) {\n return null;\n }\n\n if (activeTab.id !== activeTabId) {\n setActiveTab(activeTab.id);\n }\n\n return (\n <div className={b({size}, className)}>\n <TabProvider value={activeTabId} onUpdate={setActiveTab}>\n <div className={b('tabs')}>\n <TabList size={size === 's' ? 'm' : size}>\n {tabs.map(({id, title}) => (\n <Tab key={id} value={id}>\n {title}\n </Tab>\n ))}\n </TabList>\n </div>\n <TabPanel className={b('content')} value={activeTabId}>\n <PresetsList\n presets={activeTab.presets}\n onChoosePreset={onChoosePreset}\n size={size}\n />\n </TabPanel>\n </TabProvider>\n </div>\n );\n}\nexport const SIZE_TO_ITEM_HEIGHT = {\n s: 28,\n m: 28,\n l: 32,\n xl: 36,\n};\n\ninterface PresetsListProps {\n size?: 's' | 'm' | 'l' | 'xl';\n presets: Preset[];\n onChoosePreset: (start: string, end: string) => void;\n}\nfunction PresetsList({presets, onChoosePreset, size = 'm'}: PresetsListProps) {\n const ref = React.useRef<List<Preset>>(null);\n\n React.useEffect(() => {\n const list = ref.current;\n const container = ref.current?.refContainer.current?.node as HTMLDivElement | undefined;\n if (list && container) {\n try {\n container.setAttribute('tabindex', '0');\n container.setAttribute('class', b('list-container'));\n const handleFocus = () => {\n if (list.getActiveItem() === null) {\n list.activateItem(0, true);\n }\n };\n container.addEventListener('focus', handleFocus);\n return () => {\n container.removeEventListener('focus', handleFocus);\n };\n } catch {\n // Oooops\n }\n }\n return undefined;\n }, []);\n\n return (\n <List\n ref={ref}\n className={b('list')}\n itemClassName={b('item')}\n items={presets}\n filterable={false}\n virtualized={false}\n renderItem={(item) => item.title}\n itemHeight={SIZE_TO_ITEM_HEIGHT[size]}\n onItemClick={(item) => {\n onChoosePreset(item.from, item.to);\n }}\n />\n );\n}\n"]}
|
|
@@ -9,3 +9,4 @@ export { DEFAULT_DATE_PRESETS, DEFAULT_TIME_PRESETS, DEFAULT_OTHERS_PRESETS, } f
|
|
|
9
9
|
export { getDefaultPresetTabs } from "./components/Presets/utils.js";
|
|
10
10
|
export type { Preset as RelativeRangeDatePickerPreset } from "./components/Presets/defaultPresets.js";
|
|
11
11
|
export type { PresetTab as RelativeRangeDatePickerPresetTab } from "./components/Presets/utils.js";
|
|
12
|
+
export { getPresetTitle as getRelativeRangeDatePickerPresetTitle } from "./components/Presets/utils.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getDefaultPresetTabs = exports.DEFAULT_OTHERS_PRESETS = exports.DEFAULT_TIME_PRESETS = exports.DEFAULT_DATE_PRESETS = exports.RelativeRangeDatePickerForm = exports.RelativeRangeDatePickerDialog = void 0;
|
|
3
|
+
exports.getRelativeRangeDatePickerPresetTitle = exports.getDefaultPresetTabs = exports.DEFAULT_OTHERS_PRESETS = exports.DEFAULT_TIME_PRESETS = exports.DEFAULT_DATE_PRESETS = exports.RelativeRangeDatePickerForm = exports.RelativeRangeDatePickerDialog = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
tslib_1.__exportStar(require("./RelativeRangeDatePicker.js"), exports);
|
|
6
6
|
tslib_1.__exportStar(require("./types.js"), exports);
|
|
@@ -15,4 +15,6 @@ Object.defineProperty(exports, "DEFAULT_TIME_PRESETS", { enumerable: true, get:
|
|
|
15
15
|
Object.defineProperty(exports, "DEFAULT_OTHERS_PRESETS", { enumerable: true, get: function () { return defaultPresets_1.DEFAULT_OTHERS_PRESETS; } });
|
|
16
16
|
var utils_1 = require("./components/Presets/utils.js");
|
|
17
17
|
Object.defineProperty(exports, "getDefaultPresetTabs", { enumerable: true, get: function () { return utils_1.getDefaultPresetTabs; } });
|
|
18
|
+
var utils_2 = require("./components/Presets/utils.js");
|
|
19
|
+
Object.defineProperty(exports, "getRelativeRangeDatePickerPresetTitle", { enumerable: true, get: function () { return utils_2.getPresetTitle; } });
|
|
18
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/index.ts"],"names":[],"mappings":";;;;AAAA,uEAA0C;AAC1C,qDAAwB;AACxB,0EAAqG;AAA7F,6HAAA,YAAY,OAAiC;AAErD,sEAA+F;AAAvF,yHAAA,UAAU,OAA+B;AAEjD,qFAAwD;AACxD,yEAI6C;AAHzC,sHAAA,oBAAoB,OAAA;AACpB,sHAAA,oBAAoB,OAAA;AACpB,wHAAA,sBAAsB,OAAA;AAE1B,uDAAgE;AAAxD,6GAAA,oBAAoB,OAAA","sourcesContent":["export * from './RelativeRangeDatePicker';\nexport * from './types';\nexport {PickerDialog as RelativeRangeDatePickerDialog} from './components/PickerDialog/PickerDialog';\nexport type {PickerDialogProps as RelativeRangeDatePickerDialogProps} from './components/PickerDialog/PickerDialog';\nexport {PickerForm as RelativeRangeDatePickerForm} from './components/PickerDialog/PickerForm';\nexport type {PickerFormProps as RelativeRangeDatePickerFormProps} from './components/PickerDialog/PickerForm';\nexport * from './hooks/useRelativeRangeDatePickerState';\nexport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_TIME_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n} from './components/Presets/defaultPresets';\nexport {getDefaultPresetTabs} from './components/Presets/utils';\nexport type {Preset as RelativeRangeDatePickerPreset} from './components/Presets/defaultPresets';\nexport type {PresetTab as RelativeRangeDatePickerPresetTab} from './components/Presets/utils';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/index.ts"],"names":[],"mappings":";;;;AAAA,uEAA0C;AAC1C,qDAAwB;AACxB,0EAAqG;AAA7F,6HAAA,YAAY,OAAiC;AAErD,sEAA+F;AAAvF,yHAAA,UAAU,OAA+B;AAEjD,qFAAwD;AACxD,yEAI6C;AAHzC,sHAAA,oBAAoB,OAAA;AACpB,sHAAA,oBAAoB,OAAA;AACpB,wHAAA,sBAAsB,OAAA;AAE1B,uDAAgE;AAAxD,6GAAA,oBAAoB,OAAA;AAG5B,uDAAmG;AAA3F,8HAAA,cAAc,OAAyC","sourcesContent":["export * from './RelativeRangeDatePicker';\nexport * from './types';\nexport {PickerDialog as RelativeRangeDatePickerDialog} from './components/PickerDialog/PickerDialog';\nexport type {PickerDialogProps as RelativeRangeDatePickerDialogProps} from './components/PickerDialog/PickerDialog';\nexport {PickerForm as RelativeRangeDatePickerForm} from './components/PickerDialog/PickerForm';\nexport type {PickerFormProps as RelativeRangeDatePickerFormProps} from './components/PickerDialog/PickerForm';\nexport * from './hooks/useRelativeRangeDatePickerState';\nexport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_TIME_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n} from './components/Presets/defaultPresets';\nexport {getDefaultPresetTabs} from './components/Presets/utils';\nexport type {Preset as RelativeRangeDatePickerPreset} from './components/Presets/defaultPresets';\nexport type {PresetTab as RelativeRangeDatePickerPresetTab} from './components/Presets/utils';\nexport {getPresetTitle as getRelativeRangeDatePickerPresetTitle} from './components/Presets/utils';\n"]}
|
|
@@ -12,6 +12,7 @@ export interface RelativeRangeDatePickerRenderControlProps {
|
|
|
12
12
|
errorMessage?: React.ReactNode;
|
|
13
13
|
validationState?: 'invalid';
|
|
14
14
|
open: boolean;
|
|
15
|
+
setOpen: (open: boolean) => void;
|
|
15
16
|
triggerProps: RelativeRangeDatePickerTriggerProps;
|
|
16
17
|
}
|
|
17
18
|
export interface RelativeRangeDatePickerProps extends RelativeRangeDatePickerStateOptions, DomProps, AccessibilityProps, InputBase, InputDOMProps, TextInputProps, Validation, FocusableProps, StyleProps, PopupStyleProps {
|
|
@@ -25,9 +26,11 @@ export interface RelativeRangeDatePickerProps extends RelativeRangeDatePickerSta
|
|
|
25
26
|
withZonesList?: boolean;
|
|
26
27
|
/** Show relative range presets */
|
|
27
28
|
withPresets?: boolean;
|
|
29
|
+
/** Show header with docs tooltip */
|
|
30
|
+
withHeader?: boolean;
|
|
28
31
|
/** Custom preset tabs */
|
|
29
32
|
presetTabs?: PresetTab[];
|
|
30
|
-
/** Custom docs for
|
|
33
|
+
/** Custom docs for picker, if empty array docs will be hidden */
|
|
31
34
|
docs?: Preset[];
|
|
32
35
|
/** Show selected relative values as absolute dates */
|
|
33
36
|
alwaysShowAsAbsolute?: boolean;
|
|
@@ -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 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 /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for
|
|
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 /** 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"]}
|
|
@@ -498,8 +498,18 @@ function parseDate(options) {
|
|
|
498
498
|
function isDateStringWithTimeZone(str) {
|
|
499
499
|
return /z$/i.test(str) || /[+-]\d\d:\d\d$/.test(str);
|
|
500
500
|
}
|
|
501
|
+
/**
|
|
502
|
+
* Trims leading and trailing spaces from a string and replaces multiple consecutive spaces with a single space.
|
|
503
|
+
*
|
|
504
|
+
* @param str - The input string to process.
|
|
505
|
+
* @returns The processed string with trimmed spaces and single spaces between words.
|
|
506
|
+
*/
|
|
507
|
+
function trimExtraSpaces(str) {
|
|
508
|
+
return str.trim().replace(/\s+/g, ' ');
|
|
509
|
+
}
|
|
501
510
|
export function parseDateFromString(str, format, timeZone) {
|
|
502
|
-
|
|
511
|
+
const input = typeof str === 'string' ? trimExtraSpaces(str) : str;
|
|
512
|
+
let date = parseDate({ input, format, timeZone });
|
|
503
513
|
if (date.isValid()) {
|
|
504
514
|
if (timeZone && !isDateStringWithTimeZone(str)) {
|
|
505
515
|
const time = parseDate({ input: str, format });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/DateField/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTime, expandFormat} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport {mergeDateTime} from '../utils/dates';\n\nimport {i18n} from './i18n';\nimport type {\n AvailableSections,\n DateFieldSection,\n DateFieldSectionType,\n DateFieldSectionWithoutPosition,\n DateFormatTokenMap,\n FormatInfo,\n} from './types';\n\nexport const EDITABLE_SEGMENTS: AvailableSections = {\n year: true,\n quarter: true,\n month: true,\n day: true,\n hour: true,\n minute: true,\n second: true,\n dayPeriod: true,\n weekday: true,\n};\n\nconst escapedCharacters = {start: '[', end: ']'};\n\nconst formatTokenMap: DateFormatTokenMap = {\n // Year\n YY: 'year',\n YYYY: 'year',\n\n // Quarter\n Q: 'quarter',\n\n // Month\n M: 'month',\n MM: 'month',\n MMM: {sectionType: 'month', contentType: 'letter'},\n MMMM: {sectionType: 'month', contentType: 'letter'},\n\n // Day of the month\n D: 'day',\n DD: 'day',\n Do: 'day',\n\n // Day of the week\n d: 'weekday',\n dd: {sectionType: 'weekday', contentType: 'letter'},\n ddd: {sectionType: 'weekday', contentType: 'letter'},\n dddd: {sectionType: 'weekday', contentType: 'letter'},\n\n // Day period AM, PM\n A: {sectionType: 'dayPeriod', contentType: 'letter'},\n a: {sectionType: 'dayPeriod', contentType: 'letter'},\n\n // Hours\n H: 'hour',\n HH: 'hour',\n h: 'hour',\n hh: 'hour',\n\n // Minutes\n m: 'minute',\n mm: 'minute',\n\n // Seconds\n s: 'second',\n ss: 'second',\n\n // Timezone\n z: {sectionType: 'timeZoneName', contentType: 'letter'},\n zzz: {sectionType: 'timeZoneName', contentType: 'letter'},\n Z: {sectionType: 'timeZoneName', contentType: 'letter'},\n ZZ: {sectionType: 'timeZoneName', contentType: 'letter'},\n};\n\nfunction getDateSectionConfigFromFormatToken(formatToken: string): {\n type: DateFieldSectionType;\n contentType: 'letter' | 'digit';\n} {\n const config = formatTokenMap[formatToken];\n\n if (!config) {\n // eslint-disable-next-line no-console\n console.error(\n [\n `The token \"${formatToken}\" is not supported by the Date field.`,\n 'Please try using another token.',\n ].join('\\n'),\n );\n return {\n type: 'literal',\n contentType: 'letter',\n };\n }\n\n if (typeof config === 'string') {\n return {\n type: config,\n contentType: 'digit',\n };\n }\n\n return {\n type: config.sectionType,\n contentType: config.contentType,\n };\n}\n\nfunction isFourDigitYearFormat(format: string) {\n return dateTime().format(format).length === 4;\n}\n\nfunction isHour12(format: string) {\n return dateTime().set('hour', 15).format(format) !== '15';\n}\n\nexport function getSectionLimits(section: DateFieldSectionWithoutPosition, date: DateTime) {\n const {type, format} = section;\n switch (type) {\n case 'year': {\n const isFourDigit = isFourDigitYearFormat(format);\n return {\n minValue: isFourDigit ? 1 : 0,\n maxValue: isFourDigit ? 9999 : 99,\n };\n }\n case 'quarter': {\n return {minValue: 1, maxValue: 4};\n }\n case 'month': {\n return {\n minValue: 0,\n maxValue: 11,\n };\n }\n case 'weekday': {\n return {\n minValue: 0,\n maxValue: 6,\n };\n }\n case 'day': {\n return {\n minValue: 1,\n maxValue: date ? date.daysInMonth() : 31,\n };\n }\n case 'hour': {\n if (isHour12(format)) {\n const isPM = date.hour() >= 12;\n return {\n minValue: isPM ? 12 : 0,\n maxValue: isPM ? 23 : 11,\n };\n }\n return {\n minValue: 0,\n maxValue: 23,\n };\n }\n case 'minute':\n case 'second': {\n return {\n minValue: 0,\n maxValue: 59,\n };\n }\n }\n return {};\n}\n\nexport function getSectionValue(section: DateFieldSectionWithoutPosition, date: DateTime) {\n const type = section.type;\n switch (type) {\n case 'year': {\n return isFourDigitYearFormat(section.format)\n ? date.year()\n : Number(date.format(section.format));\n }\n case 'quarter':\n case 'month':\n case 'hour':\n case 'minute':\n case 'second': {\n return date[type]();\n }\n case 'day': {\n return date.date();\n }\n case 'weekday': {\n return date.day();\n }\n case 'dayPeriod': {\n return date.hour() >= 12 ? 12 : 0;\n }\n }\n return undefined;\n}\n\nconst TYPE_MAPPING = {\n weekday: 'day',\n day: 'date',\n dayPeriod: 'hour',\n} as const;\n\nexport function getDurationUnitFromSectionType(type: DateFieldSectionType) {\n if (type === 'literal' || type === 'timeZoneName' || type === 'unknown') {\n throw new Error(`${type} section does not have duration unit.`);\n }\n\n if (type in TYPE_MAPPING) {\n return TYPE_MAPPING[type as keyof typeof TYPE_MAPPING];\n }\n\n return type as Exclude<\n DateFieldSectionType,\n keyof typeof TYPE_MAPPING | 'literal' | 'timeZoneName' | 'unknown'\n >;\n}\n\nexport function addSegment(section: DateFieldSection, date: DateTime, amount: number) {\n let val = section.value ?? 0;\n if (section.type === 'dayPeriod') {\n val = date.hour() + (date.hour() >= 12 ? -12 : 12);\n } else {\n val = val + amount;\n const min = section.minValue;\n const max = section.maxValue;\n if (typeof min === 'number' && typeof max === 'number') {\n const length = max - min + 1;\n val = ((val - min + length) % length) + min;\n }\n }\n\n if (section.type === 'year' && !isFourDigitYearFormat(section.format)) {\n val = dateTime({input: `${val}`.padStart(2, '0'), format: section.format}).year();\n }\n\n if (section.type === 'quarter') {\n return date.set(getDurationUnitFromSectionType('month'), val * 3 - 1);\n }\n\n const type = getDurationUnitFromSectionType(section.type);\n return date.set(type, val);\n}\n\nexport function setSegment(section: DateFieldSection, date: DateTime, amount: number) {\n const type = section.type;\n switch (type) {\n case 'year': {\n return date.set(\n 'year',\n isFourDigitYearFormat(section.format)\n ? amount\n : dateTime({\n input: `${amount}`.padStart(2, '0'),\n format: section.format,\n }).year(),\n );\n }\n case 'quarter': {\n return date.set(getDurationUnitFromSectionType('month'), amount * 3 - 1);\n }\n case 'day':\n case 'weekday':\n case 'month': {\n return date.set(getDurationUnitFromSectionType(type), amount);\n }\n case 'dayPeriod': {\n const hours = date.hour();\n const wasPM = hours >= 12;\n const isPM = amount >= 12;\n if (isPM === wasPM) {\n return date;\n }\n return date.set('hour', wasPM ? hours - 12 : hours + 12);\n }\n case 'hour': {\n // In 12 hour time, ensure that AM/PM does not change\n let sectionAmount = amount;\n if (section.minValue === 12 || section.maxValue === 11) {\n const hours = date.hour();\n const wasPM = hours >= 12;\n if (!wasPM && sectionAmount === 12) {\n sectionAmount = 0;\n }\n if (wasPM && sectionAmount < 12) {\n sectionAmount += 12;\n }\n }\n return date.set('hour', sectionAmount);\n }\n case 'minute':\n case 'second': {\n return date.set(type, amount);\n }\n }\n\n return date;\n}\n\nfunction doesSectionHaveLeadingZeros(\n contentType: 'digit' | 'letter',\n sectionType: DateFieldSectionType,\n format: string,\n) {\n if (contentType !== 'digit') {\n return false;\n }\n\n switch (sectionType) {\n case 'year': {\n if (isFourDigitYearFormat(format)) {\n const formatted0001 = dateTime().set('year', 1).format(format);\n return formatted0001 === '0001';\n }\n\n const formatted2001 = dateTime().set('year', 2001).format(format);\n return formatted2001 === '01';\n }\n\n case 'quarter': {\n return false;\n }\n\n case 'month': {\n return dateTime().startOf('year').format(format).length > 1;\n }\n\n case 'day': {\n return dateTime().startOf('month').format(format).length > 1;\n }\n\n case 'weekday': {\n return dateTime().startOf('week').format(format).length > 1;\n }\n\n case 'hour': {\n return dateTime().set('hour', 1).format(format).length > 1;\n }\n\n case 'minute': {\n return dateTime().set('minute', 1).format(format).length > 1;\n }\n\n case 'second': {\n return dateTime().set('second', 1).format(format).length > 1;\n }\n\n default: {\n throw new Error('Invalid section type');\n }\n }\n}\n\nfunction getSectionPlaceholder(\n sectionConfig: Pick<DateFieldSection, 'type' | 'contentType'>,\n currentTokenValue: string,\n) {\n switch (sectionConfig.type) {\n case 'year': {\n return i18n('year_placeholder').repeat(dateTime().format(currentTokenValue).length);\n }\n\n case 'quarter': {\n return i18n('quarter_placeholder');\n }\n\n case 'month': {\n return i18n('month_placeholder').repeat(sectionConfig.contentType === 'letter' ? 4 : 2);\n }\n\n case 'day': {\n return i18n('day_placeholder').repeat(2);\n }\n\n case 'weekday': {\n return i18n('weekday_placeholder').repeat(\n sectionConfig.contentType === 'letter' ? 4 : 2,\n );\n }\n\n case 'hour': {\n return i18n('hour_placeholder').repeat(2);\n }\n\n case 'minute': {\n return i18n('minute_placeholder').repeat(2);\n }\n\n case 'second': {\n return i18n('second_placeholder').repeat(2);\n }\n\n case 'dayPeriod': {\n return i18n('dayPeriod_placeholder');\n }\n\n default: {\n return currentTokenValue;\n }\n }\n}\n\nexport function splitFormatIntoSections(format: string) {\n const sections: DateFieldSectionWithoutPosition[] = [];\n\n const expandedFormat = expandFormat(format);\n\n let currentTokenValue = '';\n let isSeparator = false;\n let isInEscapeBoundary = false;\n for (let i = 0; i < expandedFormat.length; i++) {\n const char = expandedFormat[i] || '';\n if (isInEscapeBoundary) {\n if (char === escapedCharacters.end) {\n isInEscapeBoundary = false;\n continue;\n }\n currentTokenValue += char;\n } else if (char.match(/[a-zA-Z]/)) {\n if (isSeparator) {\n addLiteralSection(sections, currentTokenValue);\n currentTokenValue = '';\n }\n isSeparator = false;\n currentTokenValue += char;\n } else {\n if (!isSeparator) {\n addFormatSection(sections, currentTokenValue);\n currentTokenValue = '';\n }\n isSeparator = true;\n if (char === escapedCharacters.start) {\n isInEscapeBoundary = true;\n } else {\n currentTokenValue += char;\n }\n }\n }\n if (currentTokenValue) {\n if (isSeparator) {\n addLiteralSection(sections, currentTokenValue);\n } else {\n addFormatSection(sections, currentTokenValue);\n }\n }\n\n return sections;\n}\n\nfunction addFormatSection(sections: DateFieldSectionWithoutPosition[], token: string) {\n if (!token) {\n return;\n }\n\n const sectionConfig = getDateSectionConfigFromFormatToken(token);\n\n const hasLeadingZeros = doesSectionHaveLeadingZeros(\n sectionConfig.contentType,\n sectionConfig.type,\n token,\n );\n\n sections.push({\n ...sectionConfig,\n format: token,\n placeholder: getSectionPlaceholder(sectionConfig, token),\n options: getSectionOptions(sectionConfig, token),\n hasLeadingZeros,\n });\n}\n\nfunction addLiteralSection(sections: DateFieldSectionWithoutPosition[], token: string) {\n if (!token) {\n return;\n }\n\n sections.push({\n type: 'literal',\n contentType: 'letter',\n format: token,\n placeholder: token,\n hasLeadingZeros: false,\n });\n}\n\nfunction getSectionOptions(\n section: Pick<DateFieldSectionWithoutPosition, 'type' | 'contentType'>,\n token: string,\n) {\n switch (section.type) {\n case 'month': {\n const format = section.contentType === 'letter' ? token : 'MMMM';\n let date = dateTime().startOf('year');\n const options: string[] = [];\n for (let i = 0; i < 12; i++) {\n options.push(date.format(format).toLocaleUpperCase());\n date = date.add(1, 'months');\n }\n return options;\n }\n case 'dayPeriod': {\n const amDayPeriod = dateTime().hour(0);\n const pmDayPeriod = amDayPeriod.hour(12);\n const options = [\n amDayPeriod.format(token).toLocaleUpperCase(),\n pmDayPeriod.format(token).toLocaleUpperCase(),\n ];\n return options;\n }\n case 'weekday': {\n const format = section.contentType === 'letter' ? token : 'dddd';\n let date = dateTime().day(0);\n const options: string[] = [];\n for (let i = 0; i < 7; i++) {\n options.push(date.format(format).toLocaleUpperCase());\n date = date.add(1, 'day');\n }\n return options;\n }\n }\n\n return undefined;\n}\n\nexport function cleanString(dirtyString: string) {\n return dirtyString.replace(/[\\u2066\\u2067\\u2068\\u2069]/g, '');\n}\n\nexport function getEditableSections(\n sections: DateFieldSectionWithoutPosition[],\n value: DateTime,\n validSegments: AvailableSections,\n) {\n let position = 1;\n const newSections: DateFieldSection[] = [];\n let previousEditableSection = -1;\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (!section) {\n continue;\n }\n\n const newSection = toEditableSection(\n section,\n value,\n validSegments,\n position,\n previousEditableSection,\n );\n\n newSections.push(newSection);\n\n if (isEditableSection(section)) {\n for (let j = Math.max(0, previousEditableSection); j <= i; j++) {\n const prevSection = newSections[j];\n if (prevSection) {\n prevSection.nextEditableSection = i;\n if (prevSection.previousEditableSection === -1) {\n prevSection.previousEditableSection = i;\n }\n }\n }\n previousEditableSection = i;\n }\n\n position += newSection.textValue.length;\n }\n\n return newSections;\n}\n\nexport function isEditableSection(section: DateFieldSectionWithoutPosition): boolean {\n return EDITABLE_SEGMENTS[section.type] ?? false;\n}\n\nexport function toEditableSection(\n section: DateFieldSectionWithoutPosition,\n value: DateTime,\n validSegments: AvailableSections,\n position: number,\n previousEditableSection: number,\n): DateFieldSection {\n const isEditable = isEditableSection(section);\n let renderedValue = section.placeholder;\n if ((isEditable && validSegments[section.type]) || section.type === 'timeZoneName') {\n renderedValue = value.format(section.format);\n if (section.contentType === 'digit' && renderedValue.length < section.placeholder.length) {\n renderedValue = renderedValue.padStart(section.placeholder.length, '0');\n }\n }\n\n // use bidirectional context to allow the browser autodetect text direction\n renderedValue = '\\u2068' + renderedValue + '\\u2069';\n\n const sectionLength = renderedValue.length;\n\n const newSection = {\n ...section,\n value: getSectionValue(section, value),\n textValue: renderedValue,\n start: position,\n end: position + sectionLength,\n modified: false,\n previousEditableSection,\n nextEditableSection: previousEditableSection,\n ...getSectionLimits(section, value),\n };\n\n return newSection;\n}\n\nexport function getCurrentEditableSectionIndex(\n sections: DateFieldSection[],\n selectedSections: 'all' | number,\n) {\n const currentIndex =\n selectedSections === 'all' || selectedSections === -1 ? 0 : selectedSections;\n const section = sections[currentIndex];\n if (section && !EDITABLE_SEGMENTS[section.type]) {\n return section.nextEditableSection;\n }\n return section ? currentIndex : -1;\n}\n\nexport function formatSections(sections: DateFieldSection[]): string {\n // use ltr direction context to get predictable navigation inside input\n return '\\u2066' + sections.map((s) => s.textValue).join('') + '\\u2069';\n}\n\nfunction parseDate(options: {input: string; format: string; timeZone?: string}) {\n let date = dateTime(options);\n if (!date.isValid()) {\n date = dateTime({...options, format: undefined});\n }\n return date;\n}\n\nfunction isDateStringWithTimeZone(str: string) {\n return /z$/i.test(str) || /[+-]\\d\\d:\\d\\d$/.test(str);\n}\n\nexport function parseDateFromString(str: string, format: string, timeZone?: string): DateTime {\n let date = parseDate({input: str, format, timeZone});\n if (date.isValid()) {\n if (timeZone && !isDateStringWithTimeZone(str)) {\n const time = parseDate({input: str, format});\n date = mergeDateTime(date, time);\n }\n }\n\n return date;\n}\n\nexport function isAllSegmentsValid(\n allSegments: AvailableSections,\n validSegments: AvailableSections,\n) {\n return Object.keys(allSegments).every((key) => validSegments[key as keyof AvailableSections]);\n}\n\nexport function useFormatSections(format: string) {\n const usedFormat = format;\n const [sections, setSections] = React.useState(() => splitFormatIntoSections(usedFormat));\n\n const [previousFormat, setFormat] = React.useState(usedFormat);\n if (usedFormat !== previousFormat) {\n setFormat(usedFormat);\n setSections(splitFormatIntoSections(usedFormat));\n }\n\n return sections;\n}\n\nconst dateUnits = ['day', 'month', 'quarter', 'year'] satisfies DateFieldSectionType[];\nconst timeUnits = ['second', 'minute', 'hour'] satisfies DateFieldSectionType[];\n\nexport function getFormatInfo(sections: DateFieldSectionWithoutPosition[]): FormatInfo {\n const availableUnits: AvailableSections = {};\n let hasDate = false;\n let hasTime = false;\n let minDateUnitIndex = dateUnits.length - 1;\n let minTimeUnitIndex = timeUnits.length - 1;\n for (const s of sections) {\n if (!isEditableSection(s)) {\n continue;\n }\n const dateUnitIndex = dateUnits.indexOf(s.type as any);\n const timeUnitIndex = timeUnits.indexOf(s.type as any);\n availableUnits[s.type] = true;\n hasDate ||= dateUnitIndex !== -1;\n hasTime ||= timeUnitIndex !== -1;\n minDateUnitIndex =\n dateUnitIndex === -1 ? minDateUnitIndex : Math.min(dateUnitIndex, minDateUnitIndex);\n minTimeUnitIndex =\n timeUnitIndex === -1 ? minTimeUnitIndex : Math.min(timeUnitIndex, minTimeUnitIndex);\n }\n return {\n availableUnits,\n hasDate,\n hasTime,\n minDateUnit: dateUnits[minDateUnitIndex] ?? 'day',\n minTimeUnit: timeUnits[minTimeUnitIndex] ?? 'second',\n };\n}\n\nexport function adjustDateToFormat(\n date: DateTime,\n formatInfo: FormatInfo,\n method: 'startOf' | 'endOf' = 'startOf',\n) {\n let newDate = date;\n if (formatInfo.hasDate) {\n if (formatInfo.minDateUnit !== 'day') {\n newDate = newDate[method](formatInfo.minDateUnit);\n newDate = mergeDateTime(newDate, date);\n }\n }\n if (formatInfo.hasTime) {\n newDate = mergeDateTime(newDate, date[method](formatInfo.minTimeUnit));\n }\n\n return newDate;\n}\n\nexport function markValidSection(\n allSections: AvailableSections,\n editableSections: AvailableSections,\n unit: DateFieldSectionType,\n) {\n const validSections = {...editableSections};\n validSections[unit] = true;\n if (validSections.day && validSections.month && validSections.year && allSections.weekday) {\n validSections.weekday = true;\n }\n if (validSections.month && allSections.quarter) {\n validSections.quarter = true;\n }\n if (validSections.quarter && allSections.month) {\n validSections.month = true;\n }\n if (validSections.hour && allSections.dayPeriod) {\n validSections.dayPeriod = true;\n }\n\n return validSections;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/DateField/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTime, expandFormat} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport {mergeDateTime} from '../utils/dates';\n\nimport {i18n} from './i18n';\nimport type {\n AvailableSections,\n DateFieldSection,\n DateFieldSectionType,\n DateFieldSectionWithoutPosition,\n DateFormatTokenMap,\n FormatInfo,\n} from './types';\n\nexport const EDITABLE_SEGMENTS: AvailableSections = {\n year: true,\n quarter: true,\n month: true,\n day: true,\n hour: true,\n minute: true,\n second: true,\n dayPeriod: true,\n weekday: true,\n};\n\nconst escapedCharacters = {start: '[', end: ']'};\n\nconst formatTokenMap: DateFormatTokenMap = {\n // Year\n YY: 'year',\n YYYY: 'year',\n\n // Quarter\n Q: 'quarter',\n\n // Month\n M: 'month',\n MM: 'month',\n MMM: {sectionType: 'month', contentType: 'letter'},\n MMMM: {sectionType: 'month', contentType: 'letter'},\n\n // Day of the month\n D: 'day',\n DD: 'day',\n Do: 'day',\n\n // Day of the week\n d: 'weekday',\n dd: {sectionType: 'weekday', contentType: 'letter'},\n ddd: {sectionType: 'weekday', contentType: 'letter'},\n dddd: {sectionType: 'weekday', contentType: 'letter'},\n\n // Day period AM, PM\n A: {sectionType: 'dayPeriod', contentType: 'letter'},\n a: {sectionType: 'dayPeriod', contentType: 'letter'},\n\n // Hours\n H: 'hour',\n HH: 'hour',\n h: 'hour',\n hh: 'hour',\n\n // Minutes\n m: 'minute',\n mm: 'minute',\n\n // Seconds\n s: 'second',\n ss: 'second',\n\n // Timezone\n z: {sectionType: 'timeZoneName', contentType: 'letter'},\n zzz: {sectionType: 'timeZoneName', contentType: 'letter'},\n Z: {sectionType: 'timeZoneName', contentType: 'letter'},\n ZZ: {sectionType: 'timeZoneName', contentType: 'letter'},\n};\n\nfunction getDateSectionConfigFromFormatToken(formatToken: string): {\n type: DateFieldSectionType;\n contentType: 'letter' | 'digit';\n} {\n const config = formatTokenMap[formatToken];\n\n if (!config) {\n // eslint-disable-next-line no-console\n console.error(\n [\n `The token \"${formatToken}\" is not supported by the Date field.`,\n 'Please try using another token.',\n ].join('\\n'),\n );\n return {\n type: 'literal',\n contentType: 'letter',\n };\n }\n\n if (typeof config === 'string') {\n return {\n type: config,\n contentType: 'digit',\n };\n }\n\n return {\n type: config.sectionType,\n contentType: config.contentType,\n };\n}\n\nfunction isFourDigitYearFormat(format: string) {\n return dateTime().format(format).length === 4;\n}\n\nfunction isHour12(format: string) {\n return dateTime().set('hour', 15).format(format) !== '15';\n}\n\nexport function getSectionLimits(section: DateFieldSectionWithoutPosition, date: DateTime) {\n const {type, format} = section;\n switch (type) {\n case 'year': {\n const isFourDigit = isFourDigitYearFormat(format);\n return {\n minValue: isFourDigit ? 1 : 0,\n maxValue: isFourDigit ? 9999 : 99,\n };\n }\n case 'quarter': {\n return {minValue: 1, maxValue: 4};\n }\n case 'month': {\n return {\n minValue: 0,\n maxValue: 11,\n };\n }\n case 'weekday': {\n return {\n minValue: 0,\n maxValue: 6,\n };\n }\n case 'day': {\n return {\n minValue: 1,\n maxValue: date ? date.daysInMonth() : 31,\n };\n }\n case 'hour': {\n if (isHour12(format)) {\n const isPM = date.hour() >= 12;\n return {\n minValue: isPM ? 12 : 0,\n maxValue: isPM ? 23 : 11,\n };\n }\n return {\n minValue: 0,\n maxValue: 23,\n };\n }\n case 'minute':\n case 'second': {\n return {\n minValue: 0,\n maxValue: 59,\n };\n }\n }\n return {};\n}\n\nexport function getSectionValue(section: DateFieldSectionWithoutPosition, date: DateTime) {\n const type = section.type;\n switch (type) {\n case 'year': {\n return isFourDigitYearFormat(section.format)\n ? date.year()\n : Number(date.format(section.format));\n }\n case 'quarter':\n case 'month':\n case 'hour':\n case 'minute':\n case 'second': {\n return date[type]();\n }\n case 'day': {\n return date.date();\n }\n case 'weekday': {\n return date.day();\n }\n case 'dayPeriod': {\n return date.hour() >= 12 ? 12 : 0;\n }\n }\n return undefined;\n}\n\nconst TYPE_MAPPING = {\n weekday: 'day',\n day: 'date',\n dayPeriod: 'hour',\n} as const;\n\nexport function getDurationUnitFromSectionType(type: DateFieldSectionType) {\n if (type === 'literal' || type === 'timeZoneName' || type === 'unknown') {\n throw new Error(`${type} section does not have duration unit.`);\n }\n\n if (type in TYPE_MAPPING) {\n return TYPE_MAPPING[type as keyof typeof TYPE_MAPPING];\n }\n\n return type as Exclude<\n DateFieldSectionType,\n keyof typeof TYPE_MAPPING | 'literal' | 'timeZoneName' | 'unknown'\n >;\n}\n\nexport function addSegment(section: DateFieldSection, date: DateTime, amount: number) {\n let val = section.value ?? 0;\n if (section.type === 'dayPeriod') {\n val = date.hour() + (date.hour() >= 12 ? -12 : 12);\n } else {\n val = val + amount;\n const min = section.minValue;\n const max = section.maxValue;\n if (typeof min === 'number' && typeof max === 'number') {\n const length = max - min + 1;\n val = ((val - min + length) % length) + min;\n }\n }\n\n if (section.type === 'year' && !isFourDigitYearFormat(section.format)) {\n val = dateTime({input: `${val}`.padStart(2, '0'), format: section.format}).year();\n }\n\n if (section.type === 'quarter') {\n return date.set(getDurationUnitFromSectionType('month'), val * 3 - 1);\n }\n\n const type = getDurationUnitFromSectionType(section.type);\n return date.set(type, val);\n}\n\nexport function setSegment(section: DateFieldSection, date: DateTime, amount: number) {\n const type = section.type;\n switch (type) {\n case 'year': {\n return date.set(\n 'year',\n isFourDigitYearFormat(section.format)\n ? amount\n : dateTime({\n input: `${amount}`.padStart(2, '0'),\n format: section.format,\n }).year(),\n );\n }\n case 'quarter': {\n return date.set(getDurationUnitFromSectionType('month'), amount * 3 - 1);\n }\n case 'day':\n case 'weekday':\n case 'month': {\n return date.set(getDurationUnitFromSectionType(type), amount);\n }\n case 'dayPeriod': {\n const hours = date.hour();\n const wasPM = hours >= 12;\n const isPM = amount >= 12;\n if (isPM === wasPM) {\n return date;\n }\n return date.set('hour', wasPM ? hours - 12 : hours + 12);\n }\n case 'hour': {\n // In 12 hour time, ensure that AM/PM does not change\n let sectionAmount = amount;\n if (section.minValue === 12 || section.maxValue === 11) {\n const hours = date.hour();\n const wasPM = hours >= 12;\n if (!wasPM && sectionAmount === 12) {\n sectionAmount = 0;\n }\n if (wasPM && sectionAmount < 12) {\n sectionAmount += 12;\n }\n }\n return date.set('hour', sectionAmount);\n }\n case 'minute':\n case 'second': {\n return date.set(type, amount);\n }\n }\n\n return date;\n}\n\nfunction doesSectionHaveLeadingZeros(\n contentType: 'digit' | 'letter',\n sectionType: DateFieldSectionType,\n format: string,\n) {\n if (contentType !== 'digit') {\n return false;\n }\n\n switch (sectionType) {\n case 'year': {\n if (isFourDigitYearFormat(format)) {\n const formatted0001 = dateTime().set('year', 1).format(format);\n return formatted0001 === '0001';\n }\n\n const formatted2001 = dateTime().set('year', 2001).format(format);\n return formatted2001 === '01';\n }\n\n case 'quarter': {\n return false;\n }\n\n case 'month': {\n return dateTime().startOf('year').format(format).length > 1;\n }\n\n case 'day': {\n return dateTime().startOf('month').format(format).length > 1;\n }\n\n case 'weekday': {\n return dateTime().startOf('week').format(format).length > 1;\n }\n\n case 'hour': {\n return dateTime().set('hour', 1).format(format).length > 1;\n }\n\n case 'minute': {\n return dateTime().set('minute', 1).format(format).length > 1;\n }\n\n case 'second': {\n return dateTime().set('second', 1).format(format).length > 1;\n }\n\n default: {\n throw new Error('Invalid section type');\n }\n }\n}\n\nfunction getSectionPlaceholder(\n sectionConfig: Pick<DateFieldSection, 'type' | 'contentType'>,\n currentTokenValue: string,\n) {\n switch (sectionConfig.type) {\n case 'year': {\n return i18n('year_placeholder').repeat(dateTime().format(currentTokenValue).length);\n }\n\n case 'quarter': {\n return i18n('quarter_placeholder');\n }\n\n case 'month': {\n return i18n('month_placeholder').repeat(sectionConfig.contentType === 'letter' ? 4 : 2);\n }\n\n case 'day': {\n return i18n('day_placeholder').repeat(2);\n }\n\n case 'weekday': {\n return i18n('weekday_placeholder').repeat(\n sectionConfig.contentType === 'letter' ? 4 : 2,\n );\n }\n\n case 'hour': {\n return i18n('hour_placeholder').repeat(2);\n }\n\n case 'minute': {\n return i18n('minute_placeholder').repeat(2);\n }\n\n case 'second': {\n return i18n('second_placeholder').repeat(2);\n }\n\n case 'dayPeriod': {\n return i18n('dayPeriod_placeholder');\n }\n\n default: {\n return currentTokenValue;\n }\n }\n}\n\nexport function splitFormatIntoSections(format: string) {\n const sections: DateFieldSectionWithoutPosition[] = [];\n\n const expandedFormat = expandFormat(format);\n\n let currentTokenValue = '';\n let isSeparator = false;\n let isInEscapeBoundary = false;\n for (let i = 0; i < expandedFormat.length; i++) {\n const char = expandedFormat[i] || '';\n if (isInEscapeBoundary) {\n if (char === escapedCharacters.end) {\n isInEscapeBoundary = false;\n continue;\n }\n currentTokenValue += char;\n } else if (char.match(/[a-zA-Z]/)) {\n if (isSeparator) {\n addLiteralSection(sections, currentTokenValue);\n currentTokenValue = '';\n }\n isSeparator = false;\n currentTokenValue += char;\n } else {\n if (!isSeparator) {\n addFormatSection(sections, currentTokenValue);\n currentTokenValue = '';\n }\n isSeparator = true;\n if (char === escapedCharacters.start) {\n isInEscapeBoundary = true;\n } else {\n currentTokenValue += char;\n }\n }\n }\n if (currentTokenValue) {\n if (isSeparator) {\n addLiteralSection(sections, currentTokenValue);\n } else {\n addFormatSection(sections, currentTokenValue);\n }\n }\n\n return sections;\n}\n\nfunction addFormatSection(sections: DateFieldSectionWithoutPosition[], token: string) {\n if (!token) {\n return;\n }\n\n const sectionConfig = getDateSectionConfigFromFormatToken(token);\n\n const hasLeadingZeros = doesSectionHaveLeadingZeros(\n sectionConfig.contentType,\n sectionConfig.type,\n token,\n );\n\n sections.push({\n ...sectionConfig,\n format: token,\n placeholder: getSectionPlaceholder(sectionConfig, token),\n options: getSectionOptions(sectionConfig, token),\n hasLeadingZeros,\n });\n}\n\nfunction addLiteralSection(sections: DateFieldSectionWithoutPosition[], token: string) {\n if (!token) {\n return;\n }\n\n sections.push({\n type: 'literal',\n contentType: 'letter',\n format: token,\n placeholder: token,\n hasLeadingZeros: false,\n });\n}\n\nfunction getSectionOptions(\n section: Pick<DateFieldSectionWithoutPosition, 'type' | 'contentType'>,\n token: string,\n) {\n switch (section.type) {\n case 'month': {\n const format = section.contentType === 'letter' ? token : 'MMMM';\n let date = dateTime().startOf('year');\n const options: string[] = [];\n for (let i = 0; i < 12; i++) {\n options.push(date.format(format).toLocaleUpperCase());\n date = date.add(1, 'months');\n }\n return options;\n }\n case 'dayPeriod': {\n const amDayPeriod = dateTime().hour(0);\n const pmDayPeriod = amDayPeriod.hour(12);\n const options = [\n amDayPeriod.format(token).toLocaleUpperCase(),\n pmDayPeriod.format(token).toLocaleUpperCase(),\n ];\n return options;\n }\n case 'weekday': {\n const format = section.contentType === 'letter' ? token : 'dddd';\n let date = dateTime().day(0);\n const options: string[] = [];\n for (let i = 0; i < 7; i++) {\n options.push(date.format(format).toLocaleUpperCase());\n date = date.add(1, 'day');\n }\n return options;\n }\n }\n\n return undefined;\n}\n\nexport function cleanString(dirtyString: string) {\n return dirtyString.replace(/[\\u2066\\u2067\\u2068\\u2069]/g, '');\n}\n\nexport function getEditableSections(\n sections: DateFieldSectionWithoutPosition[],\n value: DateTime,\n validSegments: AvailableSections,\n) {\n let position = 1;\n const newSections: DateFieldSection[] = [];\n let previousEditableSection = -1;\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (!section) {\n continue;\n }\n\n const newSection = toEditableSection(\n section,\n value,\n validSegments,\n position,\n previousEditableSection,\n );\n\n newSections.push(newSection);\n\n if (isEditableSection(section)) {\n for (let j = Math.max(0, previousEditableSection); j <= i; j++) {\n const prevSection = newSections[j];\n if (prevSection) {\n prevSection.nextEditableSection = i;\n if (prevSection.previousEditableSection === -1) {\n prevSection.previousEditableSection = i;\n }\n }\n }\n previousEditableSection = i;\n }\n\n position += newSection.textValue.length;\n }\n\n return newSections;\n}\n\nexport function isEditableSection(section: DateFieldSectionWithoutPosition): boolean {\n return EDITABLE_SEGMENTS[section.type] ?? false;\n}\n\nexport function toEditableSection(\n section: DateFieldSectionWithoutPosition,\n value: DateTime,\n validSegments: AvailableSections,\n position: number,\n previousEditableSection: number,\n): DateFieldSection {\n const isEditable = isEditableSection(section);\n let renderedValue = section.placeholder;\n if ((isEditable && validSegments[section.type]) || section.type === 'timeZoneName') {\n renderedValue = value.format(section.format);\n if (section.contentType === 'digit' && renderedValue.length < section.placeholder.length) {\n renderedValue = renderedValue.padStart(section.placeholder.length, '0');\n }\n }\n\n // use bidirectional context to allow the browser autodetect text direction\n renderedValue = '\\u2068' + renderedValue + '\\u2069';\n\n const sectionLength = renderedValue.length;\n\n const newSection = {\n ...section,\n value: getSectionValue(section, value),\n textValue: renderedValue,\n start: position,\n end: position + sectionLength,\n modified: false,\n previousEditableSection,\n nextEditableSection: previousEditableSection,\n ...getSectionLimits(section, value),\n };\n\n return newSection;\n}\n\nexport function getCurrentEditableSectionIndex(\n sections: DateFieldSection[],\n selectedSections: 'all' | number,\n) {\n const currentIndex =\n selectedSections === 'all' || selectedSections === -1 ? 0 : selectedSections;\n const section = sections[currentIndex];\n if (section && !EDITABLE_SEGMENTS[section.type]) {\n return section.nextEditableSection;\n }\n return section ? currentIndex : -1;\n}\n\nexport function formatSections(sections: DateFieldSection[]): string {\n // use ltr direction context to get predictable navigation inside input\n return '\\u2066' + sections.map((s) => s.textValue).join('') + '\\u2069';\n}\n\nfunction parseDate(options: {input: string; format: string; timeZone?: string}) {\n let date = dateTime(options);\n if (!date.isValid()) {\n date = dateTime({...options, format: undefined});\n }\n return date;\n}\n\nfunction isDateStringWithTimeZone(str: string) {\n return /z$/i.test(str) || /[+-]\\d\\d:\\d\\d$/.test(str);\n}\n\n/**\n * Trims leading and trailing spaces from a string and replaces multiple consecutive spaces with a single space.\n *\n * @param str - The input string to process.\n * @returns The processed string with trimmed spaces and single spaces between words.\n */\nfunction trimExtraSpaces(str: string) {\n return str.trim().replace(/\\s+/g, ' ');\n}\n\nexport function parseDateFromString(str: string, format: string, timeZone?: string): DateTime {\n const input = typeof str === 'string' ? trimExtraSpaces(str) : str;\n let date = parseDate({input, format, timeZone});\n if (date.isValid()) {\n if (timeZone && !isDateStringWithTimeZone(str)) {\n const time = parseDate({input: str, format});\n date = mergeDateTime(date, time);\n }\n }\n\n return date;\n}\n\nexport function isAllSegmentsValid(\n allSegments: AvailableSections,\n validSegments: AvailableSections,\n) {\n return Object.keys(allSegments).every((key) => validSegments[key as keyof AvailableSections]);\n}\n\nexport function useFormatSections(format: string) {\n const usedFormat = format;\n const [sections, setSections] = React.useState(() => splitFormatIntoSections(usedFormat));\n\n const [previousFormat, setFormat] = React.useState(usedFormat);\n if (usedFormat !== previousFormat) {\n setFormat(usedFormat);\n setSections(splitFormatIntoSections(usedFormat));\n }\n\n return sections;\n}\n\nconst dateUnits = ['day', 'month', 'quarter', 'year'] satisfies DateFieldSectionType[];\nconst timeUnits = ['second', 'minute', 'hour'] satisfies DateFieldSectionType[];\n\nexport function getFormatInfo(sections: DateFieldSectionWithoutPosition[]): FormatInfo {\n const availableUnits: AvailableSections = {};\n let hasDate = false;\n let hasTime = false;\n let minDateUnitIndex = dateUnits.length - 1;\n let minTimeUnitIndex = timeUnits.length - 1;\n for (const s of sections) {\n if (!isEditableSection(s)) {\n continue;\n }\n const dateUnitIndex = dateUnits.indexOf(s.type as any);\n const timeUnitIndex = timeUnits.indexOf(s.type as any);\n availableUnits[s.type] = true;\n hasDate ||= dateUnitIndex !== -1;\n hasTime ||= timeUnitIndex !== -1;\n minDateUnitIndex =\n dateUnitIndex === -1 ? minDateUnitIndex : Math.min(dateUnitIndex, minDateUnitIndex);\n minTimeUnitIndex =\n timeUnitIndex === -1 ? minTimeUnitIndex : Math.min(timeUnitIndex, minTimeUnitIndex);\n }\n return {\n availableUnits,\n hasDate,\n hasTime,\n minDateUnit: dateUnits[minDateUnitIndex] ?? 'day',\n minTimeUnit: timeUnits[minTimeUnitIndex] ?? 'second',\n };\n}\n\nexport function adjustDateToFormat(\n date: DateTime,\n formatInfo: FormatInfo,\n method: 'startOf' | 'endOf' = 'startOf',\n) {\n let newDate = date;\n if (formatInfo.hasDate) {\n if (formatInfo.minDateUnit !== 'day') {\n newDate = newDate[method](formatInfo.minDateUnit);\n newDate = mergeDateTime(newDate, date);\n }\n }\n if (formatInfo.hasTime) {\n newDate = mergeDateTime(newDate, date[method](formatInfo.minTimeUnit));\n }\n\n return newDate;\n}\n\nexport function markValidSection(\n allSections: AvailableSections,\n editableSections: AvailableSections,\n unit: DateFieldSectionType,\n) {\n const validSections = {...editableSections};\n validSections[unit] = true;\n if (validSections.day && validSections.month && validSections.year && allSections.weekday) {\n validSections.weekday = true;\n }\n if (validSections.month && allSections.quarter) {\n validSections.quarter = true;\n }\n if (validSections.quarter && allSections.month) {\n validSections.month = true;\n }\n if (validSections.hour && allSections.dayPeriod) {\n validSections.dayPeriod = true;\n }\n\n return validSections;\n}\n"]}
|
|
@@ -104,6 +104,7 @@ export function useDatePickerProps(state, _a) {
|
|
|
104
104
|
: state.dateFieldState.displayValue.start);
|
|
105
105
|
},
|
|
106
106
|
modal: !props.disableFocusTrap,
|
|
107
|
+
returnFocus: !props.disableFocusTrap,
|
|
107
108
|
disablePortal: props.disablePortal,
|
|
108
109
|
placement: props.popupPlacement,
|
|
109
110
|
offset: props.popupOffset,
|