@owp/core 2.5.33 → 2.5.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/_virtual/index16.js +4 -4
  2. package/dist/_virtual/index17.js +4 -4
  3. package/dist/_virtual/index18.js +4 -4
  4. package/dist/_virtual/index19.js +4 -4
  5. package/dist/_virtual/index20.js +2 -2
  6. package/dist/_virtual/index21.js +2 -2
  7. package/dist/_virtual/index22.js +2 -2
  8. package/dist/_virtual/index3.js +2 -2
  9. package/dist/_virtual/index4.js +2 -2
  10. package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js +68 -62
  11. package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js.map +1 -1
  12. package/dist/components/OwpDialog/OwpAlertDialog.js +19 -18
  13. package/dist/components/OwpDialog/OwpAlertDialog.js.map +1 -1
  14. package/dist/components/OwpDialog/OwpDialog.js +34 -31
  15. package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
  16. package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js +18 -0
  17. package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js.map +1 -0
  18. package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js +25 -15
  19. package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js.map +1 -1
  20. package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
  21. package/dist/components/OwpNumberField/OwpNumberField.js +45 -24
  22. package/dist/components/OwpNumberField/OwpNumberField.js.map +1 -1
  23. package/dist/components/OwpPicker/OwpDatePicker.js +103 -103
  24. package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
  25. package/dist/components/OwpScrollbars/OwpScrollbars.js +79 -52
  26. package/dist/components/OwpScrollbars/OwpScrollbars.js.map +1 -1
  27. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +157 -157
  28. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
  29. package/dist/components/OwpTable/OwpDataTable.js +377 -342
  30. package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
  31. package/dist/components/OwpTable/OwpTable.js +20 -19
  32. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  33. package/dist/components/OwpTable/internal/OwpTableBase.js +81 -78
  34. package/dist/components/OwpTable/internal/OwpTableBase.js.map +1 -1
  35. package/dist/components/OwpTable/internal/treeGridTableStyle.js +88 -31
  36. package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
  37. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +304 -262
  38. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  39. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +229 -222
  40. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
  41. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +282 -277
  42. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  43. package/dist/configs/layoutConfig.js +0 -6
  44. package/dist/configs/layoutConfig.js.map +1 -1
  45. package/dist/constants/treeGrid.js +59 -46
  46. package/dist/constants/treeGrid.js.map +1 -1
  47. package/dist/constants.js +18 -18
  48. package/dist/constants.js.map +1 -1
  49. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +15 -15
  50. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
  51. package/dist/hooks/internal/useNavbar.js +4 -4
  52. package/dist/hooks/useConfirm.js +1 -1
  53. package/dist/hooks/useConfirm.js.map +1 -1
  54. package/dist/hooks/useOwpDialogs.js +19 -0
  55. package/dist/hooks/useOwpDialogs.js.map +1 -0
  56. package/dist/hooks.js +34 -32
  57. package/dist/hooks.js.map +1 -1
  58. package/dist/index.js +69 -71
  59. package/dist/index.js.map +1 -1
  60. package/dist/layout/Layout.js +23 -27
  61. package/dist/layout/Layout.js.map +1 -1
  62. package/dist/layout/components/layouts/FooterLayout.js.map +1 -1
  63. package/dist/layout/components/menus/PasswordChangeMenu.js +25 -25
  64. package/dist/layout/components/menus/PasswordChangeMenu.js.map +1 -1
  65. package/dist/layout/components/toggles/NavigationSearchToggle.js +4 -4
  66. package/dist/layout/components/toggles/NavigationSearchToggle.js.map +1 -1
  67. package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
  68. package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
  69. package/dist/layout/components/toggles/ThemePreviewToggle.js +14 -14
  70. package/dist/layout/components/toggles/ThemePreviewToggle.js.map +1 -1
  71. package/dist/node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/match/index.js +1 -1
  72. package/dist/node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/parse/index.js +1 -1
  73. package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +1 -1
  74. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
  75. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
  76. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/index.js +1 -1
  77. package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
  78. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
  79. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
  80. package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
  81. package/dist/owp-app.css +1 -1
  82. package/dist/types/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.d.ts +5 -3
  83. package/dist/types/components/OwpDialog/OwpAlertDialog.d.ts +1 -1
  84. package/dist/types/components/OwpDialog/internal/useDialogOpenFocusCleanup.d.ts +5 -0
  85. package/dist/types/components/OwpErrorBoundary/OwpErrorBoundary.d.ts +8 -14
  86. package/dist/types/components/OwpNumberField/OwpNumberField.d.ts +18 -4
  87. package/dist/types/components/OwpScrollbars/OwpScrollbars.d.ts +28 -14
  88. package/dist/types/components/OwpTable/internal/OwpTableBase.d.ts +3 -1
  89. package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +61 -2
  90. package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +2 -1
  91. package/dist/types/configs/layoutConfig.d.ts +0 -6
  92. package/dist/types/constants/index.d.ts +0 -1
  93. package/dist/types/constants/treeGrid.d.ts +9 -0
  94. package/dist/types/features/themePreview/dialogs/ThemePreviewDialog.d.ts +1 -1
  95. package/dist/types/hooks/index.d.ts +1 -0
  96. package/dist/types/hooks/useOwpDialogs.d.ts +5 -0
  97. package/dist/types/hooks/useOwpSettings.d.ts +0 -6
  98. package/dist/types/index.d.ts +0 -1
  99. package/dist/types/store/atoms/owpSettingsAtoms.d.ts +0 -6
  100. package/dist/types/types/OwpDialogTypes.d.ts +1 -0
  101. package/dist/types/types/OwpRouteTypes.d.ts +25 -0
  102. package/dist/types/types/index.d.ts +2 -0
  103. package/dist/types/utils/index.d.ts +0 -1
  104. package/dist/types/utils/internal/blurActiveElement.d.ts +4 -0
  105. package/dist/utils/internal/blurActiveElement.js +12 -0
  106. package/dist/utils/internal/blurActiveElement.js.map +1 -0
  107. package/dist/utils/{navigationUtils.js → internal/navigationUtils.js} +3 -3
  108. package/dist/utils/internal/navigationUtils.js.map +1 -0
  109. package/dist/utils.js +23 -25
  110. package/dist/utils.js.map +1 -1
  111. package/package.json +1 -1
  112. package/dist/components/OwpEventEmitter/OwpEventEmitter.js +0 -51
  113. package/dist/components/OwpEventEmitter/OwpEventEmitter.js.map +0 -1
  114. package/dist/layout/components/layouts/LeftSideLayout.js +0 -13
  115. package/dist/layout/components/layouts/LeftSideLayout.js.map +0 -1
  116. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js +0 -66
  117. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js.map +0 -1
  118. package/dist/node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/css/perfect-scrollbar.css +0 -1
  119. package/dist/types/components/OwpEventEmitter/OwpEventEmitter.d.ts +0 -27
  120. package/dist/types/components/OwpEventEmitter/index.d.ts +0 -1
  121. package/dist/types/layout/components/layouts/LeftSideLayout.d.ts +0 -6
  122. package/dist/types/utils/common/OwpUtils.d.ts +0 -119
  123. package/dist/types/utils/common/index.d.ts +0 -1
  124. package/dist/utils/common/OwpUtils.js +0 -196
  125. package/dist/utils/common/OwpUtils.js.map +0 -1
  126. package/dist/utils/navigationUtils.js.map +0 -1
  127. /package/dist/types/utils/{navigationUtils.d.ts → internal/navigationUtils.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"OwpDatePicker.js","sources":["../../../src/components/OwpPicker/OwpDatePicker.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n IconButton,\n InputAdornment,\n Paper,\n type TextFieldProps,\n} from '@mui/material';\nimport clsx from 'clsx';\nimport { enUS } from 'date-fns/locale/en-US';\nimport { ko } from 'date-fns/locale/ko';\nimport dayjs from '@/dayjs';\nimport {\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n useMemo,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport ReactDatePicker, {\n CalendarContainer as ReactDatePickerCalendarContainer,\n registerLocale,\n setDefaultLocale,\n type DatePickerProps,\n type ReactDatePickerCustomHeaderProps,\n} from 'react-datepicker';\nimport { AnimatedCalendarContainer } from './internal/AnimatedCalendarContainer';\nimport { CalendarContainer } from './internal/CalendarContainer';\nimport { DatePickerInput } from './internal/DatePickerInput';\nimport {\n getOwpDatePickerCalendarClassName,\n useOwpDatePickerCalendarHeaderState,\n} from './internal/useOwpDatePickerCalendarHeaderState';\nimport { OwpDatePickerCalendarHeader } from './internal/OwpDatePickerCalendarHeader';\nimport {\n getOwpDatePickerEditorPaperSx,\n getOwpPickerEditorInputSx,\n} from './internal/pickerEditorStyles';\nimport {\n PICKER_REOPEN_SUPPRESSION_DURATION,\n PICKER_TRANSITION_DURATION,\n} from './internal/useOwpPickerPopperTransition';\nimport { OwpTextMaskField, type OwpTextMaskFieldChangeEvent } from '../OwpTextField';\nimport {\n PICKER_INVALID_INPUT_MESSAGE_KEY,\n VALUE_DATE_FORMATTER,\n VALUE_MONTH_FORMATTER,\n VALUE_TIME_FORMATTER,\n VALUE_YEAR_FORMATTER,\n} from './constants';\nimport { getAdjacentFocusableElement, getPickerInputMask } from './utils';\n\nregisterLocale('ko', ko);\nregisterLocale('en', enUS);\nsetDefaultLocale('ko');\n\nexport type DatePickerValue = string | Date;\ntype DatePickerCalendarContainerProps = HTMLAttributes<HTMLDivElement> & {\n showTime?: boolean;\n showTimeSelectOnly?: boolean;\n};\ntype OwpDatePickerTextFieldFocusEvent = Parameters<NonNullable<TextFieldProps['onFocus']>>[0];\ntype OwpDatePickerTextFieldKeyDownEvent = Parameters<NonNullable<TextFieldProps['onKeyDown']>>[0];\n\n/** DatePicker 외부 입력에서 피커 open 처리할 키 여부 */\nconst isDatePickerOpenKey = (event: OwpDatePickerTextFieldKeyDownEvent) => {\n if (\n event.ctrlKey ||\n event.altKey ||\n event.metaKey ||\n event.key === 'Escape' ||\n event.key === 'Enter' ||\n event.key === 'Tab'\n ) {\n return false;\n }\n\n return true;\n};\n\n/** DatePicker 상단 입력 값 파싱 */\nconst parseDatePickerInput = (value: string, valueFormatter: string) => {\n const normalizedValue = value.trim();\n\n if (valueFormatter === VALUE_YEAR_FORMATTER) {\n const normalizedDateValue = `${normalizedValue}-01-01`;\n const parsedValue = dayjs(normalizedDateValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedDateValue\n ? parsedValue\n : null;\n }\n\n if (valueFormatter === VALUE_MONTH_FORMATTER) {\n const normalizedDateValue = `${normalizedValue}-01`;\n const parsedValue = dayjs(normalizedDateValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedDateValue\n ? parsedValue\n : null;\n }\n\n const parsedValue = dayjs(normalizedValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedValue\n ? parsedValue\n : null;\n};\n\ninterface OwnProps {\n className?: string;\n label?: string;\n variant?: TextFieldProps['variant'];\n sx?: TextFieldProps['sx'];\n value?: DatePickerValue;\n useAmPm?: boolean;\n disabledClearButton?: boolean;\n disabledFutureDates?: boolean;\n showMonthPicker?: boolean;\n fullWidth?: boolean;\n onChange?: (value?: DatePickerValue) => void;\n textFieldProps?: Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange'>;\n}\n\ntype OwpDatePickerProps = OwnProps & DatePickerProps;\n\n/**\n * OwpDatePicker 컴포넌트\n * @param className CSS 클래스명\n * @param label 입력 라벨\n * @param variant variant 값\n * @param sx sx 값\n * @param value 현재 값\n * @param useAmPm 오전/오후 포맷 사용 여부\n * @param onChange onChange 핸들러\n */\nconst OwpDatePicker = ({\n className,\n label,\n variant = 'standard',\n sx,\n value,\n useAmPm,\n onChange,\n fullWidth,\n showYearPicker,\n showMonthPicker,\n showTimeSelect,\n showTimeSelectOnly,\n showTimeInput,\n textFieldProps,\n disabledClearButton,\n disabledFutureDates,\n popperClassName: popperClassNameProp,\n popperContainer: popperContainerProp,\n ...datePickerProps\n}: OwpDatePickerProps) => {\n const {\n selectsMultiple,\n selectsRange,\n selected,\n startDate,\n endDate,\n calendarClassName: calendarClassNameProp,\n calendarContainer: calendarContainerProp,\n open: openProp,\n openToDate: openToDateProp,\n onCalendarOpen,\n onCalendarClose,\n onClickOutside,\n onInputClick,\n preventOpenOnFocus,\n renderCustomHeader: renderCustomHeaderProp,\n shouldCloseOnSelect: shouldCloseOnSelectProp,\n allowSameDay: allowSameDayProp,\n ...resolvedDatePickerProps\n } = datePickerProps;\n void [selectsMultiple, selectsRange, selected, startDate, endDate];\n const { t, i18n } = useOwpTranslation();\n const [popperPlacement, setPopperPlacement] =\n useState<NonNullable<DatePickerProps['popperPlacement']>>('bottom-start');\n const [isCalendarOpen, setIsCalendarOpen] = useState(false);\n const [inputDraftValue, setInputDraftValue] = useState('');\n const [hasPickerInputCommitError, setHasPickerInputCommitError] = useState(false);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const externalInputRef = useRef<HTMLInputElement | null>(null);\n const pickerInputRef = useRef<HTMLInputElement | null>(null);\n const datePickerRef = useRef<ReactDatePicker | null>(null);\n const suppressOpenUntilRef = useRef(0);\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const datePickerLocale = languageId === 'kr' ? 'ko' : 'en';\n\n const valueFormatter = useMemo(() => {\n if (showYearPicker) {\n return VALUE_YEAR_FORMATTER;\n }\n\n if (showMonthPicker) {\n return VALUE_MONTH_FORMATTER;\n }\n\n if (showTimeSelectOnly) {\n return VALUE_TIME_FORMATTER;\n }\n\n if (showTimeInput || showTimeSelect) {\n return `${VALUE_DATE_FORMATTER} ${VALUE_TIME_FORMATTER}`;\n }\n return VALUE_DATE_FORMATTER;\n }, [showYearPicker, showMonthPicker, showTimeInput, showTimeSelect, showTimeSelectOnly]);\n\n const selectedValue = useMemo(() => {\n if (!value) return null;\n\n if (showTimeSelectOnly && typeof value === 'string') {\n const [hoursText = '', minutesText = ''] = value.split(':');\n const hours = Number(hoursText);\n const minutes = Number(minutesText);\n\n if (Number.isNaN(hours) || Number.isNaN(minutes)) {\n return null;\n }\n\n const selectedDate = new Date();\n selectedDate.setHours(hours, minutes, 0, 0);\n\n return selectedDate;\n }\n\n return new Date(value);\n }, [showTimeSelectOnly, value]);\n\n const selectedInputValue = useMemo(() => {\n if (!value || typeof value !== 'string') {\n return value ? dayjs(value).format(valueFormatter) : '';\n }\n\n const parsedValue = parseDatePickerInput(value, valueFormatter);\n\n return parsedValue?.isValid() ? parsedValue.format(valueFormatter) : value;\n }, [value, valueFormatter]);\n const allowPickerInput = !showTimeSelectOnly && !showTimeInput && !showTimeSelect;\n const shouldClosePickerOnSelect = shouldCloseOnSelectProp !== false;\n const reactDatePickerShouldCloseOnSelect =\n allowPickerInput && showYearPicker ? false : shouldCloseOnSelectProp;\n const {\n calendarDisplayDate,\n calendarHeaderPickerView,\n calendarHeaderView,\n closeCalendarHeaderPicker,\n isCalendarHeaderViewOpen,\n resetCalendarDisplayDate,\n selectCalendarDisplayDate,\n toggleCalendarHeaderPicker,\n } = useOwpDatePickerCalendarHeaderState({\n showMonthPicker,\n showYearPicker,\n });\n const isCalendarHeaderDropdownDisabled = Boolean(showYearPicker);\n const selectedPickerValue = useMemo(() => {\n if (!allowPickerInput || !inputDraftValue) {\n return selectedValue;\n }\n\n const parsedInputDraftValue = parseDatePickerInput(inputDraftValue, valueFormatter);\n\n return parsedInputDraftValue?.isValid() ? parsedInputDraftValue.toDate() : selectedValue;\n }, [allowPickerInput, inputDraftValue, selectedValue, valueFormatter]);\n\n /** MUI-like DatePicker calendar header */\n const renderOwpCalendarHeader = (headerProps: ReactDatePickerCustomHeaderProps) => {\n return (\n <OwpDatePickerCalendarHeader\n {...headerProps}\n disableDropdown={isCalendarHeaderDropdownDisabled}\n pickerView={calendarHeaderPickerView}\n selectedDate={selectedPickerValue}\n showMonthPicker={showMonthPicker}\n showYearPicker={showYearPicker}\n view={isCalendarHeaderDropdownDisabled ? null : calendarHeaderView}\n onCloseView={closeCalendarHeaderPicker}\n onSelectViewDate={selectCalendarDisplayDate}\n onToggleView={toggleCalendarHeaderPicker}\n />\n );\n };\n\n const isOpenSuppressed = () => Date.now() < suppressOpenUntilRef.current;\n\n const openPicker = () => {\n if (isOpenSuppressed()) {\n return;\n }\n\n if (allowPickerInput) {\n setIsCalendarOpen(true);\n setInputDraftValue(selectedInputValue);\n setHasPickerInputCommitError(false);\n }\n };\n\n const closePicker = (skipSetBlur?: boolean) => {\n if (allowPickerInput) {\n setIsCalendarOpen(false);\n }\n\n closeCalendarHeaderPicker();\n datePickerRef.current?.setOpen(false, skipSetBlur);\n };\n\n const focusAdjacentElement = (isBackward?: boolean) => {\n const rootElement = rootRef.current;\n\n if (!rootElement) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n getAdjacentFocusableElement(rootElement, isBackward)?.focus();\n });\n };\n\n const focusExternalInput = () => {\n window.requestAnimationFrame(() => {\n externalInputRef.current?.focus();\n });\n };\n\n const handleSelect = (dateValue?: Date | null) => {\n const nextValue = dateValue ? dayjs(dateValue).format(valueFormatter) : undefined;\n\n setInputDraftValue(nextValue ?? '');\n setHasPickerInputCommitError(false);\n onChange?.(nextValue);\n\n if (allowPickerInput) {\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n\n if (showYearPicker && shouldClosePickerOnSelect) {\n closePicker(true);\n }\n\n focusExternalInput();\n }\n };\n\n const commitInputDraftValue = (showError?: boolean) => {\n if (!inputDraftValue) {\n setHasPickerInputCommitError(false);\n onChange?.('');\n\n return true;\n }\n\n const parsedInput = parseDatePickerInput(inputDraftValue, valueFormatter);\n\n if (!parsedInput?.isValid()) {\n if (showError && inputDraftValue) {\n setHasPickerInputCommitError(true);\n }\n\n return false;\n }\n\n const nextValue = parsedInput.format(valueFormatter);\n setInputDraftValue(nextValue);\n setHasPickerInputCommitError(false);\n onChange?.(nextValue);\n\n return true;\n };\n\n const handleCalendarOpen = () => {\n if (isOpenSuppressed()) {\n datePickerRef.current?.setOpen(false, true);\n return;\n }\n\n setIsCalendarOpen(true);\n resetCalendarDisplayDate(selectedPickerValue ?? openToDateProp ?? null);\n setInputDraftValue(selectedInputValue);\n setHasPickerInputCommitError(false);\n onCalendarOpen?.();\n };\n\n const handleCalendarClose = () => {\n setIsCalendarOpen(false);\n resetCalendarDisplayDate();\n setHasPickerInputCommitError(false);\n closeCalendarHeaderPicker();\n onCalendarClose?.();\n };\n\n const handleInputClick = () => {\n openPicker();\n onInputClick?.();\n };\n\n const handleExternalInputFocus = (event: OwpDatePickerTextFieldFocusEvent) => {\n textFieldProps?.onFocus?.(event);\n\n if (event.defaultPrevented || !allowPickerInput) {\n return;\n }\n\n openPicker();\n };\n\n const handleExternalInputKeyDown = (event: OwpDatePickerTextFieldKeyDownEvent) => {\n textFieldProps?.onKeyDown?.(event);\n\n if (event.defaultPrevented || !isDatePickerOpenKey(event)) {\n return;\n }\n\n openPicker();\n };\n\n const handleClickOutside: NonNullable<DatePickerProps['onClickOutside']> = (event) => {\n commitInputDraftValue();\n closePicker();\n onClickOutside?.(event);\n };\n\n const handlePickerInputChange = (event: OwpTextMaskFieldChangeEvent) => {\n const nextInputValue = event.target.value;\n const parsedInput = parseDatePickerInput(nextInputValue, valueFormatter);\n\n setInputDraftValue(nextInputValue);\n setHasPickerInputCommitError(false);\n\n if (!parsedInput?.isValid()) {\n return;\n }\n\n const nextDate = parsedInput.toDate();\n resetCalendarDisplayDate(nextDate);\n datePickerRef.current?.setPreSelection(nextDate);\n };\n\n const handlePickerInputKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setInputDraftValue(selectedInputValue);\n setHasPickerInputCommitError(false);\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n closePicker(true);\n focusExternalInput();\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== 'Tab') {\n return;\n }\n\n event.preventDefault();\n\n if (!commitInputDraftValue(true)) {\n return;\n }\n\n if (event.key === 'Tab') {\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n closePicker(true);\n focusAdjacentElement(event.shiftKey);\n return;\n }\n\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n closePicker(true);\n focusExternalInput();\n };\n\n const handlePickerInputClear = () => {\n setInputDraftValue('');\n setHasPickerInputCommitError(false);\n onChange?.('');\n };\n\n /** 외부 입력 clear 처리 */\n const handleExternalInputClear = () => {\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n setInputDraftValue('');\n setHasPickerInputCommitError(false);\n resetCalendarDisplayDate();\n closePicker(true);\n onChange?.('');\n };\n\n const handleInputAreaClick = () => {\n if (!showTimeSelectOnly) {\n return;\n }\n\n setPopperPlacement('bottom-start');\n };\n\n const handleIconClick = () => {\n if (!showTimeSelectOnly) {\n return;\n }\n\n setPopperPlacement('bottom-end');\n };\n\n useEffect(() => {\n if (!allowPickerInput || !isCalendarOpen) {\n return undefined;\n }\n\n const focusPickerInput = () => {\n pickerInputRef.current?.focus();\n };\n const animationFrameId = window.requestAnimationFrame(() => {\n focusPickerInput();\n });\n const focusTimerId = window.setTimeout(() => {\n focusPickerInput();\n });\n const transitionFocusTimerId = window.setTimeout(() => {\n focusPickerInput();\n }, PICKER_TRANSITION_DURATION);\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n window.clearTimeout(focusTimerId);\n window.clearTimeout(transitionFocusTimerId);\n };\n }, [allowPickerInput, isCalendarOpen]);\n\n const PopperContainer = useMemo(() => {\n const ContainerComponent = popperContainerProp ?? CalendarContainer;\n\n /** DatePicker animated popper container */\n return ({ children }: { children?: ReactNode }) => (\n <AnimatedCalendarContainer container={ContainerComponent}>{children}</AnimatedCalendarContainer>\n );\n }, [popperContainerProp]);\n\n const DatePickerCalendarContainer = ({\n children,\n className: calendarContainerClassName,\n ...calendarContainerProps\n }: DatePickerCalendarContainerProps) => {\n if (!allowPickerInput) {\n const ContainerComponent = calendarContainerProp ?? ReactDatePickerCalendarContainer;\n\n return (\n <ContainerComponent className={calendarContainerClassName} {...calendarContainerProps}>\n {children}\n </ContainerComponent>\n );\n }\n\n return (\n <Paper elevation={8} sx={getOwpDatePickerEditorPaperSx()}>\n <OwpTextMaskField\n autoFocus\n inputRef={pickerInputRef}\n fullWidth\n size=\"small\"\n variant=\"outlined\"\n value={inputDraftValue}\n error={hasPickerInputCommitError}\n helperText={hasPickerInputCommitError ? t(PICKER_INVALID_INPUT_MESSAGE_KEY) : undefined}\n mask={getPickerInputMask(valueFormatter)}\n placeholder={valueFormatter}\n onChange={handlePickerInputChange}\n onKeyDown={handlePickerInputKeyDown}\n inputProps={{\n inputMode: 'numeric',\n 'aria-label': valueFormatter,\n }}\n endAdornment={\n <InputAdornment\n position=\"end\"\n sx={{\n marginLeft: 0,\n }}\n >\n <IconButton\n size=\"small\"\n tabIndex={-1}\n aria-label={t('Button.초기화')}\n disabled={!inputDraftValue}\n onClick={handlePickerInputClear}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n sx={{\n margin: 0,\n padding: 0.25,\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n }\n sx={getOwpPickerEditorInputSx('100%')}\n />\n <div\n className={calendarContainerClassName}\n {...calendarContainerProps}\n style={{\n ...calendarContainerProps.style,\n border: 0,\n display: 'block',\n lineHeight: 'normal',\n position: 'relative',\n }}\n >\n {children}\n </div>\n </Paper>\n );\n };\n\n return (\n <div ref={rootRef} className={clsx(fullWidth && 'w-full')}>\n <ReactDatePicker\n ref={datePickerRef}\n locale={datePickerLocale}\n calendarContainer={DatePickerCalendarContainer}\n calendarClassName={getOwpDatePickerCalendarClassName({\n className: calendarClassNameProp,\n isHeaderViewOpen: !isCalendarHeaderDropdownDisabled && isCalendarHeaderViewOpen,\n showMonthPicker,\n showYearPicker,\n })}\n popperPlacement={showTimeSelectOnly ? popperPlacement : 'bottom-start'}\n popperContainer={PopperContainer}\n popperClassName={clsx('owp-animated-datepicker-popper', popperClassNameProp)}\n className={clsx(fullWidth && 'w-full')}\n wrapperClassName={clsx(fullWidth && 'w-full', datePickerProps?.wrapperClassName)}\n maxDate={disabledFutureDates ? new Date() : undefined}\n showYearPicker={showYearPicker}\n showMonthYearPicker={showMonthPicker}\n showTimeSelect={showTimeSelect}\n showTimeSelectOnly={showTimeSelectOnly}\n showTimeInput={showTimeInput}\n showPopperArrow={false}\n shouldCloseOnSelect={reactDatePickerShouldCloseOnSelect}\n open={allowPickerInput ? isCalendarOpen : openProp}\n preventOpenOnFocus={allowPickerInput ? true : preventOpenOnFocus}\n openToDate={calendarDisplayDate ?? openToDateProp}\n selected={selectedPickerValue}\n allowSameDay={allowPickerInput || allowSameDayProp}\n onChange={handleSelect}\n onCalendarOpen={handleCalendarOpen}\n onCalendarClose={handleCalendarClose}\n onClickOutside={handleClickOutside}\n onInputClick={handleInputClick}\n renderCustomHeader={renderCustomHeaderProp ?? renderOwpCalendarHeader}\n dateFormat={showTimeSelectOnly ? (useAmPm ? 'aa hh:mm' : VALUE_TIME_FORMATTER) : 'Pp'}\n timeFormat={showTimeSelectOnly ? (useAmPm ? 'aa hh:mm' : VALUE_TIME_FORMATTER) : undefined}\n customInput={\n <DatePickerInput\n className={clsx(\n showYearPicker && 'w-[140px]',\n showMonthPicker && 'w-[160px]',\n !showYearPicker && !showMonthPicker && 'w-[172px]',\n (showTimeInput || showTimeSelect) && 'w-[200px]',\n showTimeSelectOnly && !useAmPm && 'w-[140px]',\n showTimeSelectOnly && useAmPm && 'w-[170px]',\n className,\n )}\n label={label}\n variant={variant}\n sx={sx}\n {...textFieldProps}\n inputElementRef={externalInputRef}\n onInputFocus={handleExternalInputFocus}\n onInputKeyDown={handleExternalInputKeyDown}\n reset={handleExternalInputClear}\n fullWidth={fullWidth}\n disabledClearButton={disabledClearButton}\n valueFormatter={valueFormatter}\n showTimeSelect={showTimeSelect}\n showTimeSelectOnly={showTimeSelectOnly}\n onInputAreaClick={handleInputAreaClick}\n onIconClick={handleIconClick}\n />\n }\n timeCaption={showTimeSelectOnly ? `${t('Common.시간')}: ` : undefined}\n timeInputLabel={`${t('Common.시간')}: `}\n {...resolvedDatePickerProps}\n />\n </div>\n );\n};\n\nexport { OwpDatePicker };\n"],"names":["registerLocale","ko","enUS","setDefaultLocale","isDatePickerOpenKey","__name","event","parseDatePickerInput","value","valueFormatter","normalizedValue","VALUE_YEAR_FORMATTER","normalizedDateValue","parsedValue","dayjs","VALUE_DATE_FORMATTER","VALUE_MONTH_FORMATTER","OwpDatePicker","className","label","variant","sx","useAmPm","onChange","fullWidth","showYearPicker","showMonthPicker","showTimeSelect","showTimeSelectOnly","showTimeInput","textFieldProps","disabledClearButton","disabledFutureDates","popperClassNameProp","popperContainerProp","datePickerProps","selectsMultiple","selectsRange","selected","startDate","endDate","calendarClassNameProp","calendarContainerProp","openProp","openToDateProp","onCalendarOpen","onCalendarClose","onClickOutside","onInputClick","preventOpenOnFocus","renderCustomHeaderProp","shouldCloseOnSelectProp","allowSameDayProp","resolvedDatePickerProps","t","i18n","useOwpTranslation","popperPlacement","setPopperPlacement","useState","isCalendarOpen","setIsCalendarOpen","inputDraftValue","setInputDraftValue","hasPickerInputCommitError","setHasPickerInputCommitError","rootRef","useRef","externalInputRef","pickerInputRef","datePickerRef","suppressOpenUntilRef","datePickerLocale","useMemo","VALUE_TIME_FORMATTER","selectedValue","hoursText","minutesText","hours","minutes","selectedDate","selectedInputValue","allowPickerInput","shouldClosePickerOnSelect","reactDatePickerShouldCloseOnSelect","calendarDisplayDate","calendarHeaderPickerView","calendarHeaderView","closeCalendarHeaderPicker","isCalendarHeaderViewOpen","resetCalendarDisplayDate","selectCalendarDisplayDate","toggleCalendarHeaderPicker","useOwpDatePickerCalendarHeaderState","isCalendarHeaderDropdownDisabled","selectedPickerValue","parsedInputDraftValue","renderOwpCalendarHeader","headerProps","jsx","OwpDatePickerCalendarHeader","isOpenSuppressed","openPicker","closePicker","skipSetBlur","_a","focusAdjacentElement","isBackward","rootElement","getAdjacentFocusableElement","focusExternalInput","handleSelect","dateValue","nextValue","PICKER_REOPEN_SUPPRESSION_DURATION","commitInputDraftValue","showError","parsedInput","handleCalendarOpen","handleCalendarClose","handleInputClick","handleExternalInputFocus","handleExternalInputKeyDown","handleClickOutside","handlePickerInputChange","nextInputValue","nextDate","handlePickerInputKeyDown","handlePickerInputClear","handleExternalInputClear","handleInputAreaClick","handleIconClick","useEffect","focusPickerInput","animationFrameId","focusTimerId","transitionFocusTimerId","PICKER_TRANSITION_DURATION","PopperContainer","ContainerComponent","CalendarContainer","children","AnimatedCalendarContainer","DatePickerCalendarContainer","calendarContainerClassName","calendarContainerProps","Paper","getOwpDatePickerEditorPaperSx","OwpTextMaskField","PICKER_INVALID_INPUT_MESSAGE_KEY","getPickerInputMask","InputAdornment","IconButton","ClearIcon","getOwpPickerEditorInputSx","ReactDatePickerCalendarContainer","clsx","ReactDatePicker","getOwpDatePickerCalendarClassName","DatePickerInput"],"mappings":"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"}
1
+ {"version":3,"file":"OwpDatePicker.js","sources":["../../../src/components/OwpPicker/OwpDatePicker.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n IconButton,\n InputAdornment,\n Paper,\n type TextFieldProps,\n} from '@mui/material';\nimport clsx from 'clsx';\nimport { enUS } from 'date-fns/locale/en-US';\nimport { ko } from 'date-fns/locale/ko';\nimport dayjs from '@/dayjs';\nimport {\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n useMemo,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport ReactDatePicker, {\n CalendarContainer as ReactDatePickerCalendarContainer,\n registerLocale,\n setDefaultLocale,\n type DatePickerProps,\n type ReactDatePickerCustomHeaderProps,\n} from 'react-datepicker';\nimport { AnimatedCalendarContainer } from './internal/AnimatedCalendarContainer';\nimport { CalendarContainer } from './internal/CalendarContainer';\nimport { DatePickerInput } from './internal/DatePickerInput';\nimport {\n getOwpDatePickerCalendarClassName,\n useOwpDatePickerCalendarHeaderState,\n} from './internal/useOwpDatePickerCalendarHeaderState';\nimport { OwpDatePickerCalendarHeader } from './internal/OwpDatePickerCalendarHeader';\nimport {\n getOwpDatePickerEditorPaperSx,\n getOwpPickerEditorInputSx,\n} from './internal/pickerEditorStyles';\nimport {\n PICKER_REOPEN_SUPPRESSION_DURATION,\n PICKER_TRANSITION_DURATION,\n} from './internal/useOwpPickerPopperTransition';\nimport { OwpTextMaskField, type OwpTextMaskFieldChangeEvent } from '../OwpTextField';\nimport {\n PICKER_INVALID_INPUT_MESSAGE_KEY,\n VALUE_DATE_FORMATTER,\n VALUE_MONTH_FORMATTER,\n VALUE_TIME_FORMATTER,\n VALUE_YEAR_FORMATTER,\n} from './constants';\nimport { getAdjacentFocusableElement, getPickerInputMask } from './utils';\n\nregisterLocale('ko', ko);\nregisterLocale('en', enUS);\nsetDefaultLocale('ko');\n\nexport type DatePickerValue = string | Date;\ntype DatePickerCalendarContainerProps = HTMLAttributes<HTMLDivElement> & {\n showTime?: boolean;\n showTimeSelectOnly?: boolean;\n};\ntype OwpDatePickerTextFieldFocusEvent = Parameters<NonNullable<TextFieldProps['onFocus']>>[0];\ntype OwpDatePickerTextFieldKeyDownEvent = Parameters<NonNullable<TextFieldProps['onKeyDown']>>[0];\n\n/** DatePicker 외부 입력에서 피커 open 처리할 키 여부 */\nconst isDatePickerOpenKey = (event: OwpDatePickerTextFieldKeyDownEvent) => {\n if (\n event.ctrlKey ||\n event.altKey ||\n event.metaKey ||\n event.key === 'Escape' ||\n event.key === 'Enter' ||\n event.key === 'Tab'\n ) {\n return false;\n }\n\n return true;\n};\n\n/** DatePicker 상단 입력 값 파싱 */\nconst parseDatePickerInput = (value: string, valueFormatter: string) => {\n const normalizedValue = value.trim();\n\n if (valueFormatter === VALUE_YEAR_FORMATTER) {\n const normalizedDateValue = `${normalizedValue}-01-01`;\n const parsedValue = dayjs(normalizedDateValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedDateValue\n ? parsedValue\n : null;\n }\n\n if (valueFormatter === VALUE_MONTH_FORMATTER) {\n const normalizedDateValue = `${normalizedValue}-01`;\n const parsedValue = dayjs(normalizedDateValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedDateValue\n ? parsedValue\n : null;\n }\n\n const parsedValue = dayjs(normalizedValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedValue\n ? parsedValue\n : null;\n};\n\ninterface OwnProps {\n className?: string;\n label?: string;\n variant?: TextFieldProps['variant'];\n sx?: TextFieldProps['sx'];\n value?: DatePickerValue;\n useAmPm?: boolean;\n disabledClearButton?: boolean;\n disabledFutureDates?: boolean;\n showMonthPicker?: boolean;\n fullWidth?: boolean;\n onChange?: (value?: DatePickerValue) => void;\n textFieldProps?: Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange'>;\n}\n\ntype OwpDatePickerProps = OwnProps & DatePickerProps;\n\n/**\n * OwpDatePicker 컴포넌트\n * @param className CSS 클래스명\n * @param label 입력 라벨\n * @param variant variant 값\n * @param sx sx 값\n * @param value 현재 값\n * @param useAmPm 오전/오후 포맷 사용 여부\n * @param onChange onChange 핸들러\n */\nconst OwpDatePicker = ({\n className,\n label,\n variant = 'standard',\n sx,\n value,\n useAmPm,\n onChange,\n fullWidth,\n showYearPicker,\n showMonthPicker,\n showTimeSelect,\n showTimeSelectOnly,\n showTimeInput,\n textFieldProps,\n disabledClearButton,\n disabledFutureDates,\n popperClassName: popperClassNameProp,\n popperContainer: popperContainerProp,\n ...datePickerProps\n}: OwpDatePickerProps) => {\n const {\n selectsMultiple,\n selectsRange,\n selected,\n startDate,\n endDate,\n calendarClassName: calendarClassNameProp,\n calendarContainer: calendarContainerProp,\n open: openProp,\n openToDate: openToDateProp,\n onCalendarOpen,\n onCalendarClose,\n onClickOutside,\n onInputClick,\n preventOpenOnFocus,\n renderCustomHeader: renderCustomHeaderProp,\n shouldCloseOnSelect: shouldCloseOnSelectProp,\n allowSameDay: allowSameDayProp,\n ...resolvedDatePickerProps\n } = datePickerProps;\n void [selectsMultiple, selectsRange, selected, startDate, endDate];\n const { t, i18n } = useOwpTranslation();\n const [popperPlacement, setPopperPlacement] =\n useState<NonNullable<DatePickerProps['popperPlacement']>>('bottom-start');\n const [isCalendarOpen, setIsCalendarOpen] = useState(false);\n const [inputDraftValue, setInputDraftValue] = useState('');\n const [hasPickerInputCommitError, setHasPickerInputCommitError] = useState(false);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const externalInputRef = useRef<HTMLInputElement | null>(null);\n const pickerInputRef = useRef<HTMLInputElement | null>(null);\n const datePickerRef = useRef<ReactDatePicker | null>(null);\n const suppressOpenUntilRef = useRef(0);\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const datePickerLocale = languageId === 'kr' ? 'ko' : 'en';\n\n const valueFormatter = useMemo(() => {\n if (showYearPicker) {\n return VALUE_YEAR_FORMATTER;\n }\n\n if (showMonthPicker) {\n return VALUE_MONTH_FORMATTER;\n }\n\n if (showTimeSelectOnly) {\n return VALUE_TIME_FORMATTER;\n }\n\n if (showTimeInput || showTimeSelect) {\n return `${VALUE_DATE_FORMATTER} ${VALUE_TIME_FORMATTER}`;\n }\n return VALUE_DATE_FORMATTER;\n }, [showYearPicker, showMonthPicker, showTimeInput, showTimeSelect, showTimeSelectOnly]);\n\n const selectedValue = useMemo(() => {\n if (!value) return null;\n\n if (showTimeSelectOnly && typeof value === 'string') {\n const [hoursText = '', minutesText = ''] = value.split(':');\n const hours = Number(hoursText);\n const minutes = Number(minutesText);\n\n if (Number.isNaN(hours) || Number.isNaN(minutes)) {\n return null;\n }\n\n const selectedDate = new Date();\n selectedDate.setHours(hours, minutes, 0, 0);\n\n return selectedDate;\n }\n\n return new Date(value);\n }, [showTimeSelectOnly, value]);\n\n const selectedInputValue = useMemo(() => {\n if (!value || typeof value !== 'string') {\n return value ? dayjs(value).format(valueFormatter) : '';\n }\n\n const parsedValue = parseDatePickerInput(value, valueFormatter);\n\n return parsedValue?.isValid() ? parsedValue.format(valueFormatter) : value;\n }, [value, valueFormatter]);\n const allowPickerInput = !showTimeSelectOnly && !showTimeInput && !showTimeSelect;\n const shouldClosePickerOnSelect = shouldCloseOnSelectProp !== false;\n const reactDatePickerShouldCloseOnSelect =\n allowPickerInput && showYearPicker ? false : shouldCloseOnSelectProp;\n const {\n calendarDisplayDate,\n calendarHeaderPickerView,\n calendarHeaderView,\n closeCalendarHeaderPicker,\n isCalendarHeaderViewOpen,\n resetCalendarDisplayDate,\n selectCalendarDisplayDate,\n toggleCalendarHeaderPicker,\n } = useOwpDatePickerCalendarHeaderState({\n showMonthPicker,\n showYearPicker,\n });\n const isCalendarHeaderDropdownDisabled = Boolean(showYearPicker);\n const selectedPickerValue = useMemo(() => {\n if (!allowPickerInput || !inputDraftValue) {\n return selectedValue;\n }\n\n const parsedInputDraftValue = parseDatePickerInput(inputDraftValue, valueFormatter);\n\n return parsedInputDraftValue?.isValid() ? parsedInputDraftValue.toDate() : selectedValue;\n }, [allowPickerInput, inputDraftValue, selectedValue, valueFormatter]);\n\n /** MUI-like DatePicker calendar header */\n const renderOwpCalendarHeader = (headerProps: ReactDatePickerCustomHeaderProps) => {\n return (\n <OwpDatePickerCalendarHeader\n {...headerProps}\n disableDropdown={isCalendarHeaderDropdownDisabled}\n pickerView={calendarHeaderPickerView}\n selectedDate={selectedPickerValue}\n showMonthPicker={showMonthPicker}\n showYearPicker={showYearPicker}\n view={isCalendarHeaderDropdownDisabled ? null : calendarHeaderView}\n onCloseView={closeCalendarHeaderPicker}\n onSelectViewDate={selectCalendarDisplayDate}\n onToggleView={toggleCalendarHeaderPicker}\n />\n );\n };\n\n const isOpenSuppressed = () => Date.now() < suppressOpenUntilRef.current;\n\n const openPicker = () => {\n if (isOpenSuppressed()) {\n return;\n }\n\n if (allowPickerInput) {\n setIsCalendarOpen(true);\n setInputDraftValue(selectedInputValue);\n setHasPickerInputCommitError(false);\n }\n };\n\n const closePicker = (skipSetBlur?: boolean) => {\n if (allowPickerInput) {\n setIsCalendarOpen(false);\n }\n\n closeCalendarHeaderPicker();\n datePickerRef.current?.setOpen(false, skipSetBlur);\n };\n\n const focusAdjacentElement = (isBackward?: boolean) => {\n const rootElement = rootRef.current;\n\n if (!rootElement) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n getAdjacentFocusableElement(rootElement, isBackward)?.focus();\n });\n };\n\n const focusExternalInput = () => {\n window.requestAnimationFrame(() => {\n externalInputRef.current?.focus();\n });\n };\n\n const handleSelect = (dateValue?: Date | null) => {\n const nextValue = dateValue ? dayjs(dateValue).format(valueFormatter) : undefined;\n\n setInputDraftValue(nextValue ?? '');\n setHasPickerInputCommitError(false);\n onChange?.(nextValue);\n\n if (allowPickerInput) {\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n\n if (showYearPicker && shouldClosePickerOnSelect) {\n closePicker(true);\n }\n\n focusExternalInput();\n }\n };\n\n const commitInputDraftValue = (showError?: boolean) => {\n if (!inputDraftValue) {\n setHasPickerInputCommitError(false);\n onChange?.('');\n\n return true;\n }\n\n const parsedInput = parseDatePickerInput(inputDraftValue, valueFormatter);\n\n if (!parsedInput?.isValid()) {\n if (showError && inputDraftValue) {\n setHasPickerInputCommitError(true);\n }\n\n return false;\n }\n\n const nextValue = parsedInput.format(valueFormatter);\n setInputDraftValue(nextValue);\n setHasPickerInputCommitError(false);\n onChange?.(nextValue);\n\n return true;\n };\n\n const handleCalendarOpen = () => {\n if (isOpenSuppressed()) {\n datePickerRef.current?.setOpen(false, true);\n return;\n }\n\n setIsCalendarOpen(true);\n resetCalendarDisplayDate(selectedPickerValue ?? openToDateProp ?? null);\n setInputDraftValue(selectedInputValue);\n setHasPickerInputCommitError(false);\n onCalendarOpen?.();\n };\n\n const handleCalendarClose = () => {\n setIsCalendarOpen(false);\n resetCalendarDisplayDate();\n setHasPickerInputCommitError(false);\n closeCalendarHeaderPicker();\n onCalendarClose?.();\n };\n\n const handleInputClick = () => {\n openPicker();\n onInputClick?.();\n };\n\n const handleExternalInputFocus = (event: OwpDatePickerTextFieldFocusEvent) => {\n textFieldProps?.onFocus?.(event);\n\n if (event.defaultPrevented || !allowPickerInput) {\n return;\n }\n\n openPicker();\n };\n\n const handleExternalInputKeyDown = (event: OwpDatePickerTextFieldKeyDownEvent) => {\n textFieldProps?.onKeyDown?.(event);\n\n if (event.defaultPrevented || !isDatePickerOpenKey(event)) {\n return;\n }\n\n openPicker();\n };\n\n const handleClickOutside: NonNullable<DatePickerProps['onClickOutside']> = (event) => {\n commitInputDraftValue();\n closePicker();\n onClickOutside?.(event);\n };\n\n const handlePickerInputChange = (event: OwpTextMaskFieldChangeEvent) => {\n const nextInputValue = event.target.value;\n const parsedInput = parseDatePickerInput(nextInputValue, valueFormatter);\n\n setInputDraftValue(nextInputValue);\n setHasPickerInputCommitError(false);\n\n if (!parsedInput?.isValid()) {\n return;\n }\n\n const nextDate = parsedInput.toDate();\n resetCalendarDisplayDate(nextDate);\n datePickerRef.current?.setPreSelection(nextDate);\n };\n\n const handlePickerInputKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setInputDraftValue(selectedInputValue);\n setHasPickerInputCommitError(false);\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n closePicker(true);\n focusExternalInput();\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== 'Tab') {\n return;\n }\n\n event.preventDefault();\n\n if (!commitInputDraftValue(true)) {\n return;\n }\n\n if (event.key === 'Tab') {\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n closePicker(true);\n focusAdjacentElement(event.shiftKey);\n return;\n }\n\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n closePicker(true);\n focusExternalInput();\n };\n\n const handlePickerInputClear = () => {\n setInputDraftValue('');\n setHasPickerInputCommitError(false);\n onChange?.('');\n };\n\n /** 외부 입력 clear 처리 */\n const handleExternalInputClear = () => {\n suppressOpenUntilRef.current = Date.now() + PICKER_REOPEN_SUPPRESSION_DURATION;\n setInputDraftValue('');\n setHasPickerInputCommitError(false);\n resetCalendarDisplayDate();\n closePicker(true);\n onChange?.('');\n };\n\n const handleInputAreaClick = () => {\n if (!showTimeSelectOnly) {\n return;\n }\n\n setPopperPlacement('bottom-start');\n };\n\n const handleIconClick = () => {\n if (!showTimeSelectOnly) {\n return;\n }\n\n setPopperPlacement('bottom-end');\n };\n\n useEffect(() => {\n if (!allowPickerInput || !isCalendarOpen) {\n return undefined;\n }\n\n const focusPickerInput = () => {\n pickerInputRef.current?.focus();\n };\n const animationFrameId = window.requestAnimationFrame(() => {\n focusPickerInput();\n });\n const focusTimerId = window.setTimeout(() => {\n focusPickerInput();\n });\n const transitionFocusTimerId = window.setTimeout(() => {\n focusPickerInput();\n }, PICKER_TRANSITION_DURATION);\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n window.clearTimeout(focusTimerId);\n window.clearTimeout(transitionFocusTimerId);\n };\n }, [allowPickerInput, isCalendarOpen]);\n\n const PopperContainer = useMemo(() => {\n const ContainerComponent = popperContainerProp ?? CalendarContainer;\n\n /** DatePicker animated popper container */\n return ({ children }: { children?: ReactNode }) => (\n <AnimatedCalendarContainer container={ContainerComponent}>{children}</AnimatedCalendarContainer>\n );\n }, [popperContainerProp]);\n\n const DatePickerCalendarContainer = ({\n children,\n className: calendarContainerClassName,\n ...calendarContainerProps\n }: DatePickerCalendarContainerProps) => {\n if (!allowPickerInput) {\n const ContainerComponent = calendarContainerProp ?? ReactDatePickerCalendarContainer;\n\n return (\n <ContainerComponent className={calendarContainerClassName} {...calendarContainerProps}>\n {children}\n </ContainerComponent>\n );\n }\n\n delete calendarContainerProps.showTime;\n delete calendarContainerProps.showTimeSelectOnly;\n\n return (\n <Paper elevation={8} sx={getOwpDatePickerEditorPaperSx()}>\n <OwpTextMaskField\n autoFocus\n inputRef={pickerInputRef}\n fullWidth\n size=\"small\"\n variant=\"outlined\"\n value={inputDraftValue}\n error={hasPickerInputCommitError}\n helperText={hasPickerInputCommitError ? t(PICKER_INVALID_INPUT_MESSAGE_KEY) : undefined}\n mask={getPickerInputMask(valueFormatter)}\n placeholder={valueFormatter}\n onChange={handlePickerInputChange}\n onKeyDown={handlePickerInputKeyDown}\n inputProps={{\n inputMode: 'numeric',\n 'aria-label': valueFormatter,\n }}\n endAdornment={\n <InputAdornment\n position=\"end\"\n sx={{\n marginLeft: 0,\n }}\n >\n <IconButton\n size=\"small\"\n tabIndex={-1}\n aria-label={t('Button.초기화')}\n disabled={!inputDraftValue}\n onClick={handlePickerInputClear}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n sx={{\n margin: 0,\n padding: 0.25,\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n }\n sx={getOwpPickerEditorInputSx('100%')}\n />\n <div\n className={calendarContainerClassName}\n {...calendarContainerProps}\n style={{\n ...calendarContainerProps.style,\n border: 0,\n display: 'block',\n lineHeight: 'normal',\n position: 'relative',\n }}\n >\n {children}\n </div>\n </Paper>\n );\n };\n\n return (\n <div ref={rootRef} className={clsx(fullWidth && 'w-full')}>\n <ReactDatePicker\n ref={datePickerRef}\n locale={datePickerLocale}\n calendarContainer={DatePickerCalendarContainer}\n calendarClassName={getOwpDatePickerCalendarClassName({\n className: calendarClassNameProp,\n isHeaderViewOpen: !isCalendarHeaderDropdownDisabled && isCalendarHeaderViewOpen,\n showMonthPicker,\n showYearPicker,\n })}\n popperPlacement={showTimeSelectOnly ? popperPlacement : 'bottom-start'}\n popperContainer={PopperContainer}\n popperClassName={clsx('owp-animated-datepicker-popper', popperClassNameProp)}\n className={clsx(fullWidth && 'w-full')}\n wrapperClassName={clsx(fullWidth && 'w-full', datePickerProps?.wrapperClassName)}\n maxDate={disabledFutureDates ? new Date() : undefined}\n showYearPicker={showYearPicker}\n showMonthYearPicker={showMonthPicker}\n showTimeSelect={showTimeSelect}\n showTimeSelectOnly={showTimeSelectOnly}\n showTimeInput={showTimeInput}\n showPopperArrow={false}\n shouldCloseOnSelect={reactDatePickerShouldCloseOnSelect}\n open={allowPickerInput ? isCalendarOpen : openProp}\n preventOpenOnFocus={allowPickerInput ? true : preventOpenOnFocus}\n openToDate={calendarDisplayDate ?? openToDateProp}\n selected={selectedPickerValue}\n allowSameDay={allowPickerInput || allowSameDayProp}\n onChange={handleSelect}\n onCalendarOpen={handleCalendarOpen}\n onCalendarClose={handleCalendarClose}\n onClickOutside={handleClickOutside}\n onInputClick={handleInputClick}\n renderCustomHeader={renderCustomHeaderProp ?? renderOwpCalendarHeader}\n dateFormat={showTimeSelectOnly ? (useAmPm ? 'aa hh:mm' : VALUE_TIME_FORMATTER) : 'Pp'}\n timeFormat={showTimeSelectOnly ? (useAmPm ? 'aa hh:mm' : VALUE_TIME_FORMATTER) : undefined}\n customInput={\n <DatePickerInput\n className={clsx(\n showYearPicker && 'w-[140px]',\n showMonthPicker && 'w-[160px]',\n !showYearPicker && !showMonthPicker && 'w-[172px]',\n (showTimeInput || showTimeSelect) && 'w-[200px]',\n showTimeSelectOnly && !useAmPm && 'w-[140px]',\n showTimeSelectOnly && useAmPm && 'w-[170px]',\n className,\n )}\n label={label}\n variant={variant}\n sx={sx}\n {...textFieldProps}\n inputElementRef={externalInputRef}\n onInputFocus={handleExternalInputFocus}\n onInputKeyDown={handleExternalInputKeyDown}\n reset={handleExternalInputClear}\n fullWidth={fullWidth}\n disabledClearButton={disabledClearButton}\n valueFormatter={valueFormatter}\n showTimeSelect={showTimeSelect}\n showTimeSelectOnly={showTimeSelectOnly}\n onInputAreaClick={handleInputAreaClick}\n onIconClick={handleIconClick}\n />\n }\n timeCaption={showTimeSelectOnly ? `${t('Common.시간')}: ` : undefined}\n timeInputLabel={`${t('Common.시간')}: `}\n {...resolvedDatePickerProps}\n />\n </div>\n );\n};\n\nexport { OwpDatePicker };\n"],"names":["registerLocale","ko","enUS","setDefaultLocale","isDatePickerOpenKey","__name","event","parseDatePickerInput","value","valueFormatter","normalizedValue","VALUE_YEAR_FORMATTER","normalizedDateValue","parsedValue","dayjs","VALUE_DATE_FORMATTER","VALUE_MONTH_FORMATTER","OwpDatePicker","className","label","variant","sx","useAmPm","onChange","fullWidth","showYearPicker","showMonthPicker","showTimeSelect","showTimeSelectOnly","showTimeInput","textFieldProps","disabledClearButton","disabledFutureDates","popperClassNameProp","popperContainerProp","datePickerProps","selectsMultiple","selectsRange","selected","startDate","endDate","calendarClassNameProp","calendarContainerProp","openProp","openToDateProp","onCalendarOpen","onCalendarClose","onClickOutside","onInputClick","preventOpenOnFocus","renderCustomHeaderProp","shouldCloseOnSelectProp","allowSameDayProp","resolvedDatePickerProps","t","i18n","useOwpTranslation","popperPlacement","setPopperPlacement","useState","isCalendarOpen","setIsCalendarOpen","inputDraftValue","setInputDraftValue","hasPickerInputCommitError","setHasPickerInputCommitError","rootRef","useRef","externalInputRef","pickerInputRef","datePickerRef","suppressOpenUntilRef","datePickerLocale","useMemo","VALUE_TIME_FORMATTER","selectedValue","hoursText","minutesText","hours","minutes","selectedDate","selectedInputValue","allowPickerInput","shouldClosePickerOnSelect","reactDatePickerShouldCloseOnSelect","calendarDisplayDate","calendarHeaderPickerView","calendarHeaderView","closeCalendarHeaderPicker","isCalendarHeaderViewOpen","resetCalendarDisplayDate","selectCalendarDisplayDate","toggleCalendarHeaderPicker","useOwpDatePickerCalendarHeaderState","isCalendarHeaderDropdownDisabled","selectedPickerValue","parsedInputDraftValue","renderOwpCalendarHeader","headerProps","jsx","OwpDatePickerCalendarHeader","isOpenSuppressed","openPicker","closePicker","skipSetBlur","_a","focusAdjacentElement","isBackward","rootElement","getAdjacentFocusableElement","focusExternalInput","handleSelect","dateValue","nextValue","PICKER_REOPEN_SUPPRESSION_DURATION","commitInputDraftValue","showError","parsedInput","handleCalendarOpen","handleCalendarClose","handleInputClick","handleExternalInputFocus","handleExternalInputKeyDown","handleClickOutside","handlePickerInputChange","nextInputValue","nextDate","handlePickerInputKeyDown","handlePickerInputClear","handleExternalInputClear","handleInputAreaClick","handleIconClick","useEffect","focusPickerInput","animationFrameId","focusTimerId","transitionFocusTimerId","PICKER_TRANSITION_DURATION","PopperContainer","ContainerComponent","CalendarContainer","children","AnimatedCalendarContainer","DatePickerCalendarContainer","calendarContainerClassName","calendarContainerProps","Paper","getOwpDatePickerEditorPaperSx","OwpTextMaskField","PICKER_INVALID_INPUT_MESSAGE_KEY","getPickerInputMask","InputAdornment","IconButton","ClearIcon","getOwpPickerEditorInputSx","ReactDatePickerCalendarContainer","clsx","ReactDatePicker","getOwpDatePickerCalendarClassName","DatePickerInput"],"mappings":"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"}
@@ -1,17 +1,18 @@
1
- var j = Object.defineProperty;
2
- var u = (t, o) => j(t, "name", { value: o, configurable: !0 });
3
- import { jsx as k } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
- import { useGetCustomScrollbarsEnabled as B } from "../../hooks/useOwpSettings.js";
5
- import { styled as M } from "@mui/material/styles";
6
- import U from "../../_virtual/mobile-detect.js";
7
- import X from "../../node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js";
8
- /* empty css */
9
- import { forwardRef as Y, useRef as f, useState as D, useCallback as p, useEffect as a } from "react";
10
- import { useLocation as H } from "react-router-dom";
11
- const N = M("div")(() => ({
1
+ var q = Object.defineProperty;
2
+ var h = (p, e) => q(p, "name", { value: e, configurable: !0 });
3
+ import { jsx as F } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
+ import { useGetCustomScrollbarsEnabled as I } from "../../hooks/useOwpSettings.js";
5
+ import { styled as J } from "@mui/material/styles";
6
+ import K from "../../_virtual/mobile-detect.js";
7
+ import Q from "../../node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js";
8
+ import { forwardRef as V, useRef as a, useState as W, useMemo as Z, useCallback as d, useEffect as i } from "react";
9
+ import { useLocation as _ } from "react-router-dom";
10
+ const $ = J("div")(() => ({
12
11
  overscrollBehavior: "contain",
13
12
  minHeight: "100%"
14
- })), P = new U(window.navigator.userAgent), y = P.mobile(), g = Object.freeze({
13
+ })), oo = new K(window.navigator.userAgent), O = oo.mobile(), T = Object.freeze({
14
+ wheelPropagation: !0
15
+ }), x = {
15
16
  "ps-scroll-y": "onScrollY",
16
17
  "ps-scroll-x": "onScrollX",
17
18
  "ps-scroll-up": "onScrollUp",
@@ -22,59 +23,85 @@ const N = M("div")(() => ({
22
23
  "ps-y-reach-end": "onYReachEnd",
23
24
  "ps-x-reach-start": "onXReachStart",
24
25
  "ps-x-reach-end": "onXReachEnd"
25
- }), V = Y((t, o) => {
26
+ }, io = V((p, e) => {
26
27
  const {
27
- className: T = "",
28
- children: h,
29
- id: x = "",
30
- scrollToTopOnChildChange: m = !0,
31
- scrollToTopOnRouteChange: d = !1,
32
- enable: S = !0,
33
- option: b = {
34
- wheelPropagation: !0
35
- }
36
- } = t, r = f(null), n = f(null), i = f(/* @__PURE__ */ new Map()), [C, v] = D({}), c = B(), O = H(), { pathname: L } = O, E = p(() => {
37
- Object.keys(g).forEach((e) => {
38
- const s = t[g[e]];
39
- if (s) {
40
- const R = /* @__PURE__ */ u(() => s(r.current), "handler");
41
- i.current.set(e, R), r.current && r.current.addEventListener(e, R, !1);
42
- }
28
+ className: P = "",
29
+ children: m,
30
+ id: Y = "",
31
+ scrollToTopOnChildChange: S = !0,
32
+ scrollToTopOnRouteChange: R = !1,
33
+ enable: t = !0,
34
+ option: n = T,
35
+ onScrollY: C,
36
+ onScrollX: L,
37
+ onScrollUp: k,
38
+ onScrollDown: B,
39
+ onScrollLeft: M,
40
+ onScrollRight: N,
41
+ onYReachStart: U,
42
+ onYReachEnd: j,
43
+ onXReachStart: D,
44
+ onXReachEnd: H
45
+ } = p, r = a(null), c = a(null), u = a(/* @__PURE__ */ new Map()), w = a({}), [z, v] = W({}), l = I(), A = _(), { pathname: G } = A, b = Z(() => {
46
+ const o = {
47
+ wheelPropagation: n.wheelPropagation ?? T.wheelPropagation
48
+ };
49
+ return n.suppressScrollX !== void 0 && (o.suppressScrollX = n.suppressScrollX), o;
50
+ }, [n.suppressScrollX, n.wheelPropagation]);
51
+ w.current = {
52
+ onScrollY: C,
53
+ onScrollX: L,
54
+ onScrollUp: k,
55
+ onScrollDown: B,
56
+ onScrollLeft: M,
57
+ onScrollRight: N,
58
+ onYReachStart: U,
59
+ onYReachEnd: j,
60
+ onXReachStart: D,
61
+ onXReachEnd: H
62
+ };
63
+ const E = d(() => {
64
+ Object.keys(x).forEach((o) => {
65
+ const f = x[o], y = /* @__PURE__ */ h(() => {
66
+ const X = w.current[f];
67
+ X && r.current && X(r.current);
68
+ }, "handler");
69
+ u.current.set(o, y), r.current && r.current.addEventListener(o, y, !1);
43
70
  });
44
- }, [t]), w = p(() => {
45
- i.current.forEach((e, s) => {
46
- r.current && r.current.removeEventListener(s, e, !1);
47
- }), i.current.clear();
71
+ }, []), g = d(() => {
72
+ u.current.forEach((o, f) => {
73
+ r.current && r.current.removeEventListener(f, o, !1);
74
+ }), u.current.clear();
48
75
  }, []);
49
- a(() => (c && r.current && !y && (n.current = new X(r.current, b), E()), () => {
50
- n.current && (n.current.destroy(), n.current = null, w());
51
- }), [c, E, b, w]);
52
- const l = p(() => {
76
+ i(() => (l && t && r.current && !O && (c.current = new Q(r.current, b), E()), () => {
77
+ c.current && (c.current.destroy(), c.current = null, g());
78
+ }), [l, t, E, b, g]);
79
+ const s = d(() => {
53
80
  r.current && (r.current.scrollTop = 0);
54
81
  }, []);
55
- return a(() => {
56
- m && l();
57
- }, [l, h, m]), a(() => {
58
- d && l();
59
- }, [L, l, d]), a(() => {
60
- v(c && S && !y ? {
82
+ return i(() => {
83
+ S && s();
84
+ }, [s, m, S]), i(() => {
85
+ R && s();
86
+ }, [G, s, R]), i(() => {
87
+ v(l && t && !O ? {
61
88
  position: "relative",
62
89
  overflow: "hidden!important"
63
90
  } : {});
64
- }, [c, S]), /* @__PURE__ */ k(
65
- N,
91
+ }, [l, t]), /* @__PURE__ */ F(
92
+ $,
66
93
  {
67
- id: x,
68
- className: T,
69
- style: C,
70
- ref: /* @__PURE__ */ u((e) => {
71
- r.current = e, typeof o == "function" ? o(e) : o && (o.current = e);
94
+ id: Y,
95
+ className: P,
96
+ style: z,
97
+ ref: /* @__PURE__ */ h((o) => {
98
+ r.current = o, typeof e == "function" ? e(o) : e && (e.current = o);
72
99
  }, "ref"),
73
- children: h
100
+ children: m
74
101
  }
75
102
  );
76
103
  });
77
104
  export {
78
- V as OwpScrollbars
105
+ io as OwpScrollbars
79
106
  };
80
107
  //# sourceMappingURL=OwpScrollbars.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OwpScrollbars.js","sources":["../../../src/components/OwpScrollbars/OwpScrollbars.tsx"],"sourcesContent":["import { useGetCustomScrollbarsEnabled } from '@/hooks/useOwpSettings';\nimport { styled } from '@mui/material/styles';\nimport MobileDetect from 'mobile-detect';\nimport PerfectScrollbar from 'perfect-scrollbar';\nimport 'perfect-scrollbar/css/perfect-scrollbar.css';\nimport { forwardRef, ReactNode, useCallback, useEffect, useRef, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nconst Root = styled('div')(() => ({\n overscrollBehavior: 'contain',\n minHeight: '100%',\n}));\n\nconst md = new MobileDetect(window.navigator.userAgent);\nconst isMobile = md.mobile();\n\nconst handlerNameByEvent = Object.freeze({\n 'ps-scroll-y': 'onScrollY',\n 'ps-scroll-x': 'onScrollX',\n 'ps-scroll-up': 'onScrollUp',\n 'ps-scroll-down': 'onScrollDown',\n 'ps-scroll-left': 'onScrollLeft',\n 'ps-scroll-right': 'onScrollRight',\n 'ps-y-reach-start': 'onYReachStart',\n 'ps-y-reach-end': 'onYReachEnd',\n 'ps-x-reach-start': 'onXReachStart',\n 'ps-x-reach-end': 'onXReachEnd',\n});\n\ntype OwpScrollbarsProps = {\n id?: string;\n className?: string;\n children: ReactNode;\n enable?: boolean;\n scrollToTopOnChildChange?: boolean;\n scrollToTopOnRouteChange?: boolean;\n option?: {\n wheelPropagation?: boolean;\n suppressScrollX?: boolean;\n };\n};\n\n/**\n * OwpScrollbars 컴포넌트\n * @param props 컴포넌트 props\n * @param ref forwardRef 참조\n */\nconst OwpScrollbars = forwardRef<HTMLDivElement, OwpScrollbarsProps>((props, ref) => {\n const {\n className = '',\n children,\n id = '',\n scrollToTopOnChildChange = true,\n scrollToTopOnRouteChange = false,\n enable = true,\n option = {\n wheelPropagation: true,\n },\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const psRef = useRef<PerfectScrollbar | null>(null);\n const handlerByEvent = useRef<Map<string, EventListener>>(new Map());\n const [style, setStyle] = useState({});\n const customScrollbars = useGetCustomScrollbarsEnabled();\n const location = useLocation();\n const { pathname } = location;\n\n const hookUpEvents = useCallback(() => {\n Object.keys(handlerNameByEvent).forEach((key) => {\n const callback = props[handlerNameByEvent[key] as keyof OwpScrollbarsProps] as (\n T: HTMLDivElement,\n ) => void;\n\n if (callback) {\n const handler: EventListener = () => callback(containerRef.current);\n handlerByEvent.current.set(key, handler);\n\n if (containerRef.current) {\n containerRef.current.addEventListener(key, handler, false);\n }\n }\n });\n }, [props]);\n\n const unHookUpEvents = useCallback(() => {\n handlerByEvent.current.forEach((value, key) => {\n if (containerRef.current) {\n containerRef.current.removeEventListener(key, value, false);\n }\n });\n handlerByEvent.current.clear();\n }, []);\n\n useEffect(() => {\n if (customScrollbars && containerRef.current && !isMobile) {\n psRef.current = new PerfectScrollbar(containerRef.current, option);\n hookUpEvents();\n }\n\n return () => {\n if (psRef.current) {\n psRef.current.destroy();\n psRef.current = null;\n unHookUpEvents();\n }\n };\n }, [customScrollbars, hookUpEvents, option, unHookUpEvents]);\n\n const scrollToTop = useCallback(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = 0;\n }\n }, []);\n\n useEffect(() => {\n if (scrollToTopOnChildChange) {\n scrollToTop();\n }\n }, [scrollToTop, children, scrollToTopOnChildChange]);\n\n useEffect(() => {\n if (scrollToTopOnRouteChange) {\n scrollToTop();\n }\n }, [pathname, scrollToTop, scrollToTopOnRouteChange]);\n\n useEffect(() => {\n if (customScrollbars && enable && !isMobile) {\n setStyle({\n position: 'relative',\n overflow: 'hidden!important',\n });\n } else {\n setStyle({});\n }\n }, [customScrollbars, enable]);\n\n return (\n <Root\n id={id}\n className={className}\n style={style}\n ref={(el) => {\n containerRef.current = el;\n\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n >\n {children}\n </Root>\n );\n});\n\nexport { OwpScrollbars };\n"],"names":["Root","styled","md","MobileDetect","isMobile","handlerNameByEvent","OwpScrollbars","forwardRef","props","ref","className","children","id","scrollToTopOnChildChange","scrollToTopOnRouteChange","enable","option","containerRef","useRef","psRef","handlerByEvent","style","setStyle","useState","customScrollbars","useGetCustomScrollbarsEnabled","location","useLocation","pathname","hookUpEvents","useCallback","key","callback","handler","__name","unHookUpEvents","value","useEffect","PerfectScrollbar","scrollToTop","jsx","el"],"mappings":"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"}
1
+ {"version":3,"file":"OwpScrollbars.js","sources":["../../../src/components/OwpScrollbars/OwpScrollbars.tsx"],"sourcesContent":["import { useGetCustomScrollbarsEnabled } from '@/hooks/useOwpSettings';\nimport { styled } from '@mui/material/styles';\nimport MobileDetect from 'mobile-detect';\nimport PerfectScrollbar from 'perfect-scrollbar';\nimport { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nconst Root = styled('div')(() => ({\n overscrollBehavior: 'contain',\n minHeight: '100%',\n}));\n\nconst md = new MobileDetect(window.navigator.userAgent);\nconst isMobile = md.mobile();\n\ntype OwpScrollbarOption = {\n wheelPropagation?: boolean;\n suppressScrollX?: boolean;\n};\n\nconst defaultOption: Readonly<OwpScrollbarOption> = Object.freeze({\n wheelPropagation: true,\n});\n\nconst handlerNameByEvent = {\n 'ps-scroll-y': 'onScrollY',\n 'ps-scroll-x': 'onScrollX',\n 'ps-scroll-up': 'onScrollUp',\n 'ps-scroll-down': 'onScrollDown',\n 'ps-scroll-left': 'onScrollLeft',\n 'ps-scroll-right': 'onScrollRight',\n 'ps-y-reach-start': 'onYReachStart',\n 'ps-y-reach-end': 'onYReachEnd',\n 'ps-x-reach-start': 'onXReachStart',\n 'ps-x-reach-end': 'onXReachEnd',\n} as const;\n\ntype OwpScrollbarEventName = keyof typeof handlerNameByEvent;\ntype OwpScrollbarHandlerName = (typeof handlerNameByEvent)[OwpScrollbarEventName];\ntype OwpScrollbarEventCallback = (container: HTMLDivElement) => void;\ntype OwpScrollbarEventProps = Partial<Record<OwpScrollbarHandlerName, OwpScrollbarEventCallback>>;\n\ntype OwpScrollbarsProps = OwpScrollbarEventProps & {\n id?: string;\n className?: string;\n children: ReactNode;\n enable?: boolean;\n scrollToTopOnChildChange?: boolean;\n scrollToTopOnRouteChange?: boolean;\n option?: OwpScrollbarOption;\n};\n\n/**\n * OwpScrollbars 컴포넌트\n * @param props 컴포넌트 props\n * @param ref forwardRef 참조\n */\nconst OwpScrollbars = forwardRef<HTMLDivElement, OwpScrollbarsProps>((props, ref) => {\n const {\n className = '',\n children,\n id = '',\n scrollToTopOnChildChange = true,\n scrollToTopOnRouteChange = false,\n enable = true,\n option = defaultOption,\n onScrollY,\n onScrollX,\n onScrollUp,\n onScrollDown,\n onScrollLeft,\n onScrollRight,\n onYReachStart,\n onYReachEnd,\n onXReachStart,\n onXReachEnd,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const psRef = useRef<PerfectScrollbar | null>(null);\n const handlerByEvent = useRef<Map<string, EventListener>>(new Map());\n const callbackByNameRef = useRef<OwpScrollbarEventProps>({});\n const [style, setStyle] = useState({});\n const customScrollbars = useGetCustomScrollbarsEnabled();\n const location = useLocation();\n const { pathname } = location;\n const resolvedOption = useMemo(() => {\n const nextOption: NonNullable<OwpScrollbarsProps['option']> = {\n wheelPropagation: option.wheelPropagation ?? defaultOption.wheelPropagation,\n };\n\n if (option.suppressScrollX !== undefined) {\n nextOption.suppressScrollX = option.suppressScrollX;\n }\n\n return nextOption;\n }, [option.suppressScrollX, option.wheelPropagation]);\n\n callbackByNameRef.current = {\n onScrollY,\n onScrollX,\n onScrollUp,\n onScrollDown,\n onScrollLeft,\n onScrollRight,\n onYReachStart,\n onYReachEnd,\n onXReachStart,\n onXReachEnd,\n };\n\n const hookUpEvents = useCallback(() => {\n Object.keys(handlerNameByEvent).forEach((key) => {\n const handlerName = handlerNameByEvent[key as OwpScrollbarEventName];\n const handler: EventListener = () => {\n const callback = callbackByNameRef.current[handlerName];\n\n if (callback && containerRef.current) {\n callback(containerRef.current);\n }\n };\n handlerByEvent.current.set(key, handler);\n\n if (containerRef.current) {\n containerRef.current.addEventListener(key, handler, false);\n }\n });\n }, []);\n\n const unHookUpEvents = useCallback(() => {\n handlerByEvent.current.forEach((value, key) => {\n if (containerRef.current) {\n containerRef.current.removeEventListener(key, value, false);\n }\n });\n handlerByEvent.current.clear();\n }, []);\n\n useEffect(() => {\n if (customScrollbars && enable && containerRef.current && !isMobile) {\n psRef.current = new PerfectScrollbar(containerRef.current, resolvedOption);\n hookUpEvents();\n }\n\n return () => {\n if (psRef.current) {\n psRef.current.destroy();\n psRef.current = null;\n unHookUpEvents();\n }\n };\n }, [customScrollbars, enable, hookUpEvents, resolvedOption, unHookUpEvents]);\n\n const scrollToTop = useCallback(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = 0;\n }\n }, []);\n\n useEffect(() => {\n if (scrollToTopOnChildChange) {\n scrollToTop();\n }\n }, [scrollToTop, children, scrollToTopOnChildChange]);\n\n useEffect(() => {\n if (scrollToTopOnRouteChange) {\n scrollToTop();\n }\n }, [pathname, scrollToTop, scrollToTopOnRouteChange]);\n\n useEffect(() => {\n if (customScrollbars && enable && !isMobile) {\n setStyle({\n position: 'relative',\n overflow: 'hidden!important',\n });\n } else {\n setStyle({});\n }\n }, [customScrollbars, enable]);\n\n return (\n <Root\n id={id}\n className={className}\n style={style}\n ref={(el) => {\n containerRef.current = el;\n\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n >\n {children}\n </Root>\n );\n});\n\nexport { OwpScrollbars };\n"],"names":["Root","styled","md","MobileDetect","isMobile","defaultOption","handlerNameByEvent","OwpScrollbars","forwardRef","props","ref","className","children","id","scrollToTopOnChildChange","scrollToTopOnRouteChange","enable","option","onScrollY","onScrollX","onScrollUp","onScrollDown","onScrollLeft","onScrollRight","onYReachStart","onYReachEnd","onXReachStart","onXReachEnd","containerRef","useRef","psRef","handlerByEvent","callbackByNameRef","style","setStyle","useState","customScrollbars","useGetCustomScrollbarsEnabled","location","useLocation","pathname","resolvedOption","useMemo","nextOption","hookUpEvents","useCallback","key","handlerName","handler","__name","callback","unHookUpEvents","value","useEffect","PerfectScrollbar","scrollToTop","jsx","el"],"mappings":"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"}