@owp/core 2.5.17 → 2.5.19

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 (89) hide show
  1. package/dist/_virtual/index10.js +2 -2
  2. package/dist/_virtual/index12.js +2 -2
  3. package/dist/_virtual/index13.js +2 -2
  4. package/dist/_virtual/index14.js +2 -2
  5. package/dist/_virtual/index16.js +4 -4
  6. package/dist/_virtual/index17.js +4 -4
  7. package/dist/_virtual/index18.js +4 -4
  8. package/dist/_virtual/index19.js +4 -4
  9. package/dist/components/OwpPageContent/OwpPageContent.js +14 -12
  10. package/dist/components/OwpPageContent/OwpPageContent.js.map +1 -1
  11. package/dist/components/OwpPageTitle/OwpPageTitle.js +37 -35
  12. package/dist/components/OwpPageTitle/OwpPageTitle.js.map +1 -1
  13. package/dist/components/OwpPicker/OwpDatePicker.js +339 -102
  14. package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
  15. package/dist/components/OwpPicker/OwpDateRangePicker.js +87 -82
  16. package/dist/components/OwpPicker/OwpDateRangePicker.js.map +1 -1
  17. package/dist/components/OwpPicker/OwpTimePicker.js +494 -220
  18. package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
  19. package/dist/components/OwpPicker/constants/index.js +6 -5
  20. package/dist/components/OwpPicker/constants/index.js.map +1 -1
  21. package/dist/components/OwpPicker/internal/DatePickerInput.js +71 -47
  22. package/dist/components/OwpPicker/internal/DatePickerInput.js.map +1 -1
  23. package/dist/components/OwpSection/OwpSection.js +84 -62
  24. package/dist/components/OwpSection/OwpSection.js.map +1 -1
  25. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +42 -40
  26. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
  27. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +273 -224
  28. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  29. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +476 -105
  30. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
  31. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +317 -245
  32. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
  33. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +315 -151
  34. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  35. package/dist/constants/gridTheme.js +9 -7
  36. package/dist/constants/gridTheme.js.map +1 -1
  37. package/dist/constants/treeGrid.js +37 -35
  38. package/dist/constants/treeGrid.js.map +1 -1
  39. package/dist/constants.js +25 -23
  40. package/dist/features/themePreview/configs/grid.js +3 -1
  41. package/dist/features/themePreview/configs/grid.js.map +1 -1
  42. package/dist/features/themePreview/utils/themePreviewDefinitions.js +10 -0
  43. package/dist/features/themePreview/utils/themePreviewDefinitions.js.map +1 -1
  44. package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
  45. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
  46. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
  47. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
  48. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
  49. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
  50. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
  51. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
  52. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
  53. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
  54. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
  55. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
  56. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
  57. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
  58. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
  59. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
  60. 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
  61. package/dist/owp-app.css +1 -1
  62. package/dist/types/components/OwpPageContent/OwpPageContent.d.ts +3 -1
  63. package/dist/types/components/OwpPageTitle/OwpPageTitle.d.ts +3 -1
  64. package/dist/types/components/OwpPicker/OwpTimePicker.d.ts +3 -1
  65. package/dist/types/components/OwpPicker/constants/index.d.ts +1 -0
  66. package/dist/types/components/OwpPicker/internal/DatePickerInput.d.ts +7 -0
  67. package/dist/types/components/OwpSection/OwpSection.d.ts +3 -1
  68. package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +6 -6
  69. package/dist/types/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.d.ts +3 -0
  70. package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +33 -7
  71. package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +1 -1
  72. package/dist/types/constants/gridTheme.d.ts +4 -0
  73. package/dist/types/constants/treeGrid.d.ts +3 -1
  74. package/dist/types/features/themePreview/configs/grid.d.ts +2 -0
  75. package/dist/types/features/themePreview/configs/settings.d.ts +2 -0
  76. package/dist/types/types/OwpGridThemeTypes.d.ts +2 -0
  77. package/dist/types/utils/index.d.ts +0 -1
  78. package/dist/types/utils/treeGridUtil.d.ts +42 -3
  79. package/dist/utils/treeGridUtil.js +220 -119
  80. package/dist/utils/treeGridUtil.js.map +1 -1
  81. package/dist/utils.js +90 -86
  82. package/dist/utils.js.map +1 -1
  83. package/package.json +1 -1
  84. package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js +0 -84
  85. package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js.map +0 -1
  86. package/dist/types/components/OwpTreeGrid/internal/treeGridColumnEditRules.d.ts +0 -60
  87. package/dist/types/utils/normalizeTimeToHourMinute.d.ts +0 -11
  88. package/dist/utils/normalizeTimeToHourMinute.js +0 -34
  89. package/dist/utils/normalizeTimeToHourMinute.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"OwpTimePicker.js","sources":["../../../src/components/OwpPicker/OwpTimePicker.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { ensureDayjsBrowserSetup } from '@/utils/dayjsBrowser';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n IconButton,\n InputAdornment,\n type InputAdornmentProps,\n TextFieldProps,\n} from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { LocalizationProvider, TimePicker, type TimePickerProps } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport clsx from 'clsx';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { VALUE_TIME_FORMATTER } from './constants';\n\nensureDayjsBrowserSetup();\n\nconst EMPTY_TIME_SECTION = '––';\n\nconst SELECTED_TIME_ITEM_SX = {\n '&:hover': {\n backgroundColor: 'var(--owp-datepicker-hover-bg, rgba(3, 155, 229, 0.14))',\n },\n '&.Mui-selected': {\n backgroundColor: 'var(--owp-datepicker-selected-bg, #039be5)',\n color: 'var(--owp-datepicker-selected-color, #fff)',\n '&:focus-visible, &:hover': {\n backgroundColor: 'var(--owp-datepicker-selected-hover-bg, #039be5)',\n },\n },\n};\n\nconst TIME_PICKER_TEXT_FIELD_SX = {\n '& .MuiInputBase-root': {\n alignItems: 'center',\n },\n '& .MuiInputAdornment-positionEnd': {\n marginBottom: 0,\n marginLeft: 0,\n gap: 0,\n },\n '& .MuiInputAdornment-positionEnd > :not(style) + :not(style)': {\n marginLeft: 0,\n },\n '& .MuiInputAdornment-positionEnd .MuiIconButton-root': {\n margin: 0,\n padding: 0,\n },\n '& .clearButton': {\n opacity: 1,\n visibility: 'visible',\n },\n '@media (pointer: fine)': {\n '& .clearButton': {\n opacity: 1,\n visibility: 'visible',\n },\n },\n};\n\nconst TIME_PICKER_PAPER_SX = {\n border: 0,\n borderRadius: 1,\n boxShadow: 8,\n backgroundImage: 'none',\n backgroundColor: 'background.paper',\n overflow: 'hidden',\n '& .MuiPickersLayout-contentWrapper': {\n border: 0,\n },\n '& .MuiPickersLayout-actionBar': {\n borderTop: '1px solid',\n borderColor: '#e0e0e0',\n },\n '& .MuiMultiSectionDigitalClock-root, & .MuiDigitalClock-root': {\n border: 0,\n },\n '& .MuiMultiSectionDigitalClockSection-root': {\n border: 0,\n },\n '& .MuiMultiSectionDigitalClockSection-root:last-of-type': {\n overflowY: 'hidden',\n scrollbarWidth: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n width: 0,\n },\n '@media (pointer: fine)': {\n '&:hover': {\n overflowY: 'hidden',\n },\n },\n '@media (pointer: none), (pointer: coarse)': {\n overflowY: 'hidden',\n },\n },\n};\n\nexport type OwpTimePickerValue = string | Date | Dayjs;\ntype OwpTimePickerTextFieldClickEvent = Parameters<NonNullable<TextFieldProps['onClick']>>[0];\ntype OwpTimePickerTextFieldKeyDownEvent = Parameters<NonNullable<TextFieldProps['onKeyDown']>>[0];\n\nconst isValueEditingKey = (event: OwpTimePickerTextFieldKeyDownEvent) => {\n if (event.ctrlKey || event.altKey || event.metaKey) {\n return false;\n }\n\n return event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete';\n};\n\ninterface OwnProps {\n label?: string;\n variant?: TextFieldProps['variant'];\n sx?: TextFieldProps['sx'];\n value?: OwpTimePickerValue;\n format?: string;\n useAmPm?: boolean;\n placeholder?: string;\n disabledClearButton?: boolean;\n fullWidth?: boolean;\n onChange?: (value?: string) => void;\n textFieldProps?: Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange'>;\n}\n\ntype OwpTimePickerProps = OwnProps &\n Omit<\n TimePickerProps<false>,\n | 'value'\n | 'onChange'\n | 'label'\n | 'format'\n | 'ampm'\n | 'slotProps'\n | 'enableAccessibleFieldDOMStructure'\n >;\n\n/**\n * OwpTimePicker 컴포넌트\n * @param label 입력 라벨\n * @param variant variant 값\n * @param sx sx 값\n * @param value 현재 값, clear 버튼 동작 대상 값\n * @param format 시간 포맷\n * @param useAmPm 오전/오후 포맷 사용 여부\n * @param disabledClearButton clear 버튼 비활성화 여부\n * @param fullWidth 전체 너비 사용 여부\n * @param onChange onChange 핸들러, clear 버튼 활성화 조건\n * @param textFieldProps TextField props\n */\nconst OwpTimePicker = ({\n label,\n variant = 'standard',\n sx,\n value,\n format = VALUE_TIME_FORMATTER,\n useAmPm,\n placeholder,\n disabledClearButton,\n fullWidth,\n onChange,\n textFieldProps,\n localeText,\n open: openProp,\n onOpen,\n onClose,\n slots,\n ...timePickerProps\n}: OwpTimePickerProps) => {\n const normalizedValueFormat = VALUE_TIME_FORMATTER;\n const useMeridiem = useAmPm ?? /a/i.test(format);\n const displayFormat = useMeridiem ? 'A hh:mm' : normalizedValueFormat;\n const resolvedCloseOnSelect = timePickerProps.closeOnSelect ?? false;\n const resolvedTimeSteps = {\n minutes: 1,\n ...timePickerProps.timeSteps,\n };\n const [internalOpen, setInternalOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const popperRef = useRef<HTMLDivElement | null>(null);\n const skipNextOpenRef = useRef(false);\n const { t, i18n } = useOwpTranslation();\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const adapterLocale = languageId === 'kr' ? 'ko' : 'en';\n const resolvedLocaleText = {\n okButtonLabel: t('Button.확인'),\n clearButtonLabel: t('Button.초기화'),\n fieldHoursPlaceholder: () => EMPTY_TIME_SECTION,\n fieldMinutesPlaceholder: () => EMPTY_TIME_SECTION,\n fieldMeridiemPlaceholder: () => EMPTY_TIME_SECTION,\n ...localeText,\n };\n const resolvedPlaceholder = placeholder ?? (useMeridiem ? '–– ––:––' : '––:––');\n const resolvedTextFieldSx = [TIME_PICKER_TEXT_FIELD_SX, sx, textFieldProps?.sx].filter(\n Boolean,\n ) as SxProps<Theme>;\n const isClearDisabled = Boolean(\n disabledClearButton || timePickerProps.disabled || timePickerProps.readOnly,\n );\n const canClear = Boolean(onChange) && !disabledClearButton;\n const isControlledOpen = openProp !== undefined;\n const isOpen = isControlledOpen ? openProp : internalOpen;\n\n const selectedValue = useMemo(() => {\n if (!value) {\n return null;\n }\n\n if (dayjs.isDayjs(value)) {\n return value;\n }\n\n if (typeof value === 'string') {\n const parsedValue = dayjs(value, normalizedValueFormat, true);\n return parsedValue.isValid() ? parsedValue : null;\n }\n\n const parsedValue = dayjs(value);\n return parsedValue.isValid() ? parsedValue : null;\n }, [normalizedValueFormat, value]);\n\n const handleChange = (nextValue: Dayjs | null) => {\n onChange?.(nextValue?.isValid() ? nextValue.format(normalizedValueFormat) : undefined);\n };\n\n const handleOpen = useCallback(() => {\n if (skipNextOpenRef.current) {\n skipNextOpenRef.current = false;\n return;\n }\n\n if (!isControlledOpen) {\n setInternalOpen(true);\n }\n\n onOpen?.();\n }, [isControlledOpen, onOpen]);\n\n const handleClose = useCallback(() => {\n if (!isControlledOpen) {\n setInternalOpen(false);\n }\n\n onClose?.();\n }, [isControlledOpen, onClose]);\n\n const handleClear = () => {\n onChange?.('');\n };\n\n const handleTextFieldClick = useCallback(\n (event: OwpTimePickerTextFieldClickEvent) => {\n textFieldProps?.onClick?.(event);\n\n if (event.defaultPrevented || timePickerProps.disabled || timePickerProps.readOnly) {\n return;\n }\n\n if (isOpen) {\n skipNextOpenRef.current = true;\n handleClose();\n queueMicrotask(() => {\n skipNextOpenRef.current = false;\n });\n return;\n }\n\n handleOpen();\n },\n [handleClose, handleOpen, isOpen, textFieldProps, timePickerProps.disabled, timePickerProps.readOnly],\n );\n\n const handleTextFieldKeyDown = useCallback(\n (event: OwpTimePickerTextFieldKeyDownEvent) => {\n textFieldProps?.onKeyDown?.(event);\n\n if (event.defaultPrevented || !isOpen || !isValueEditingKey(event)) {\n return;\n }\n\n handleClose();\n },\n [handleClose, isOpen, textFieldProps],\n );\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n const handleDocumentMouseDown = (event: MouseEvent) => {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.current?.contains(target) || popperRef.current?.contains(target)) {\n return;\n }\n\n handleClose();\n };\n\n document.addEventListener('mousedown', handleDocumentMouseDown, true);\n\n return () => {\n document.removeEventListener('mousedown', handleDocumentMouseDown, true);\n };\n }, [handleClose, isOpen]);\n\n const TimePickerInputAdornment = ({ position, children, ...restProps }: InputAdornmentProps) => (\n <InputAdornment position={position} {...restProps}>\n {position === 'end' && canClear && (\n <IconButton\n className=\"clearButton\"\n size=\"small\"\n aria-label={resolvedLocaleText.clearButtonLabel}\n disabled={isClearDisabled}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n handleClear();\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n {children}\n </InputAdornment>\n );\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={adapterLocale}>\n <div ref={rootRef}>\n <TimePicker\n {...timePickerProps}\n enableAccessibleFieldDOMStructure={false}\n ampm={useMeridiem}\n open={isOpen}\n closeOnSelect={resolvedCloseOnSelect}\n timeSteps={resolvedTimeSteps}\n label={label}\n value={selectedValue}\n format={displayFormat}\n localeText={resolvedLocaleText}\n onChange={handleChange}\n onOpen={handleOpen}\n onClose={handleClose}\n slots={{\n ...slots,\n inputAdornment: TimePickerInputAdornment,\n }}\n slotProps={{\n popper: {\n placement: 'bottom-end',\n ref: (instance) => {\n popperRef.current = instance;\n },\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 7],\n },\n },\n ],\n },\n desktopPaper: {\n sx: TIME_PICKER_PAPER_SX,\n },\n mobilePaper: {\n sx: TIME_PICKER_PAPER_SX,\n },\n actionBar: {\n actions: ['accept'],\n sx: {\n backgroundColor: '#f6f3f4',\n minHeight: 44,\n padding: '4px 8px',\n '& .MuiButton-root': {\n minHeight: 28,\n minWidth: 48,\n padding: '4px 8px',\n fontSize: '1.3rem',\n lineHeight: 1.2,\n },\n },\n },\n openPickerButton: {\n size: 'small',\n onClick: (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!isOpen) {\n handleOpen();\n }\n },\n sx: {\n margin: 0,\n padding: 0,\n },\n },\n openPickerIcon: {\n fontSize: 'small',\n },\n inputAdornment: {\n sx: {\n marginBottom: 0,\n marginLeft: 0,\n gap: 0,\n },\n },\n digitalClockItem: {\n sx: SELECTED_TIME_ITEM_SX,\n },\n digitalClockSectionItem: {\n sx: SELECTED_TIME_ITEM_SX,\n },\n textField: {\n variant,\n fullWidth,\n ...textFieldProps,\n className: clsx(\n !fullWidth && (useMeridiem ? 'w-[160px]' : 'w-[140px]'),\n textFieldProps?.className,\n ),\n onClick: handleTextFieldClick,\n onKeyDown: handleTextFieldKeyDown,\n placeholder: resolvedPlaceholder,\n sx: resolvedTextFieldSx,\n },\n }}\n />\n </div>\n </LocalizationProvider>\n );\n};\n\nexport { OwpTimePicker };\n"],"names":["ensureDayjsBrowserSetup","EMPTY_TIME_SECTION","SELECTED_TIME_ITEM_SX","TIME_PICKER_TEXT_FIELD_SX","TIME_PICKER_PAPER_SX","isValueEditingKey","__name","event","OwpTimePicker","label","variant","sx","value","format","VALUE_TIME_FORMATTER","useAmPm","placeholder","disabledClearButton","fullWidth","onChange","textFieldProps","localeText","openProp","onOpen","onClose","slots","timePickerProps","normalizedValueFormat","useMeridiem","displayFormat","resolvedCloseOnSelect","resolvedTimeSteps","internalOpen","setInternalOpen","useState","rootRef","useRef","popperRef","skipNextOpenRef","t","i18n","useOwpTranslation","adapterLocale","resolvedLocaleText","resolvedPlaceholder","resolvedTextFieldSx","isClearDisabled","canClear","isControlledOpen","isOpen","selectedValue","useMemo","dayjs","parsedValue","handleChange","nextValue","handleOpen","useCallback","handleClose","handleClear","handleTextFieldClick","_a","handleTextFieldKeyDown","useEffect","handleDocumentMouseDown","target","_b","jsx","LocalizationProvider","AdapterDayjs","TimePicker","position","children","restProps","jsxs","InputAdornment","IconButton","ClearIcon","instance","clsx"],"mappings":"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"}
1
+ {"version":3,"file":"OwpTimePicker.js","sources":["../../../src/components/OwpPicker/OwpTimePicker.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { ensureDayjsBrowserSetup } from '@/utils/dayjsBrowser';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n IconButton,\n InputAdornment,\n type InputAdornmentProps,\n Paper,\n Popper,\n TextField,\n TextFieldProps,\n} from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport {\n LocalizationProvider,\n MultiSectionDigitalClock,\n TimePicker,\n type TimePickerProps,\n} from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport clsx from 'clsx';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport {\n type ChangeEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { PICKER_INVALID_INPUT_MESSAGE_KEY, VALUE_TIME_FORMATTER } from './constants';\n\nensureDayjsBrowserSetup();\n\nconst EMPTY_TIME_SECTION = '––';\nconst VALUE_TIME_SECOND_FORMATTER = 'HH:mm:ss';\nconst TIME_PICKER_EDITOR_SECTION_WIDTH = 64;\nconst TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH = 56;\n\nconst SELECTED_TIME_ITEM_SX = {\n '&:hover': {\n backgroundColor: 'var(--owp-datepicker-hover-bg, rgba(3, 155, 229, 0.14))',\n },\n '&.Mui-selected': {\n backgroundColor: 'var(--owp-datepicker-selected-bg, #039be5)',\n color: 'var(--owp-datepicker-selected-color, #fff)',\n '&:focus-visible, &:hover': {\n backgroundColor: 'var(--owp-datepicker-selected-hover-bg, #039be5)',\n },\n },\n};\n\nconst TIME_PICKER_TEXT_FIELD_SX = {\n '& .MuiInputBase-root': {\n alignItems: 'center',\n },\n '& .MuiInputAdornment-positionEnd': {\n marginBottom: 0,\n marginLeft: 0,\n gap: 0,\n },\n '& .MuiInputAdornment-positionEnd > :not(style) + :not(style)': {\n marginLeft: 0,\n },\n '& .MuiInputAdornment-positionEnd .MuiIconButton-root': {\n margin: 0,\n padding: 0,\n },\n '& .clearButton': {\n opacity: 1,\n visibility: 'visible',\n },\n '@media (pointer: fine)': {\n '& .clearButton': {\n opacity: 1,\n visibility: 'visible',\n },\n },\n};\n\nexport type OwpTimePickerValue = string | Date | Dayjs;\ntype OwpTimePickerTextFieldClickEvent = Parameters<NonNullable<TextFieldProps['onClick']>>[0];\ntype OwpTimePickerTextFieldFocusEvent = Parameters<NonNullable<TextFieldProps['onFocus']>>[0];\ntype OwpTimePickerTextFieldKeyDownEvent = Parameters<NonNullable<TextFieldProps['onKeyDown']>>[0];\ntype OwpTimePickerTextFieldMouseDownEvent = Parameters<\n NonNullable<TextFieldProps['onMouseDown']>\n>[0];\n\nconst isValueEditingKey = (event: OwpTimePickerTextFieldKeyDownEvent) => {\n if (event.ctrlKey || event.altKey || event.metaKey) {\n return false;\n }\n\n return event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete';\n};\n\nconst isTimePickerOpenKey = (event: OwpTimePickerTextFieldKeyDownEvent) => {\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 event.key.length === 1 || event.key.startsWith('Arrow');\n};\n\n/** TimePicker 입력 문자열 마스크 */\nconst formatTimePickerInput = (value: string, hasSeconds: boolean) => {\n const digitLimit = hasSeconds ? 6 : 4;\n const digits = value.replace(/\\D/g, '').slice(0, digitLimit);\n\n return [digits.slice(0, 2), digits.slice(2, 4), digits.slice(4, 6)].filter(Boolean).join(':');\n};\n\n/** TimePicker 입력 값 파싱 */\nconst parseTimePickerInput = (value: string, hasSeconds: boolean) => {\n const normalizedValue = value.trim();\n const timePattern = hasSeconds ? '(\\\\d{2}):(\\\\d{2}):(\\\\d{2})' : '(\\\\d{2}):(\\\\d{2})';\n const match = normalizedValue.match(new RegExp(`^${timePattern}$`));\n\n if (!match) {\n return null;\n }\n\n const hour = Number(match[1]);\n const minute = Number(match[2]);\n const second = hasSeconds ? Number(match[3]) : 0;\n\n if (minute > 59 || second > 59) {\n return null;\n }\n\n if (hour > 24 || (hour === 24 && (minute > 0 || second > 0))) {\n return null;\n }\n\n const valueText = [hour, minute, ...(hasSeconds ? [second] : [])]\n .map((part) => String(part).padStart(2, '0'))\n .join(':');\n\n return {\n dateValue:\n hour === 24\n ? dayjs('00:00:00', VALUE_TIME_SECOND_FORMATTER, true).add(1, 'day')\n : dayjs(valueText, hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER, true),\n valueText,\n };\n};\n\n/** TimePicker 상단 입력 표시 값 */\nconst formatTimePickerDisplayInput = (value: Dayjs, hasSeconds: boolean) =>\n value.format(hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER);\n\n/** focus 가능 요소 여부 */\nconst isFocusableElement = (element: Element): element is HTMLElement => {\n if (!(element instanceof HTMLElement)) {\n return false;\n }\n\n if (element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true') {\n return false;\n }\n\n if (element.tabIndex < 0 || !element.getClientRects().length) {\n return false;\n }\n\n return true;\n};\n\n/** 루트 기준 인접 focus 요소 */\nconst getAdjacentFocusableElement = (rootElement: HTMLElement, isBackward?: boolean) => {\n const focusableElements = Array.from(\n document.querySelectorAll(\n 'a[href],button,input,select,textarea,[tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter(\n (element): element is HTMLElement =>\n isFocusableElement(element) && !rootElement.contains(element),\n );\n\n if (isBackward) {\n return focusableElements\n .reverse()\n .find((element) =>\n Boolean(rootElement.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_PRECEDING),\n );\n }\n\n return focusableElements.find((element) =>\n Boolean(rootElement.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_FOLLOWING),\n );\n};\n\n/** input ref 값 할당 */\nconst assignInputRef = (\n inputRef: Ref<HTMLInputElement> | undefined,\n value: HTMLInputElement | null,\n) => {\n if (!inputRef) {\n return;\n }\n\n if (typeof inputRef === 'function') {\n inputRef(value);\n return;\n }\n\n (inputRef as { current: HTMLInputElement | null }).current = value;\n};\n\ninterface OwnProps {\n label?: string;\n variant?: TextFieldProps['variant'];\n sx?: TextFieldProps['sx'];\n value?: OwpTimePickerValue;\n format?: string;\n useAmPm?: boolean;\n placeholder?: string;\n disabledClearButton?: boolean;\n fullWidth?: boolean;\n onChange?: (value?: string) => void;\n slotProps?: TimePickerProps<false>['slotProps'];\n textFieldProps?: Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange'>;\n}\n\ntype OwpTimePickerProps = OwnProps &\n Omit<\n TimePickerProps<false>,\n | 'value'\n | 'onChange'\n | 'label'\n | 'format'\n | 'ampm'\n | 'slotProps'\n | 'enableAccessibleFieldDOMStructure'\n >;\n\n/**\n * OwpTimePicker 컴포넌트\n * @param label 입력 라벨\n * @param variant variant 값\n * @param sx sx 값\n * @param value 현재 값, clear 버튼 동작 대상 값\n * @param format 시간 포맷\n * @param useAmPm 오전/오후 포맷 사용 여부\n * @param disabledClearButton clear 버튼 비활성화 여부\n * @param fullWidth 전체 너비 사용 여부\n * @param onChange onChange 핸들러, clear 버튼 활성화 조건\n * @param slotProps TimePicker slot props\n * @param textFieldProps TextField props\n */\nconst OwpTimePicker = ({\n label,\n variant = 'standard',\n sx,\n value,\n format = VALUE_TIME_FORMATTER,\n useAmPm,\n placeholder,\n disabledClearButton,\n fullWidth,\n onChange,\n textFieldProps,\n localeText,\n open: openProp,\n onOpen,\n onClose,\n slots,\n slotProps,\n ...timePickerProps\n}: OwpTimePickerProps) => {\n const hasSeconds = /s/i.test(format);\n const normalizedValueFormat = hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER;\n const useMeridiem = useAmPm ?? /a/i.test(format);\n const displayFormat = useMeridiem\n ? hasSeconds\n ? 'A hh:mm:ss'\n : 'A hh:mm'\n : normalizedValueFormat;\n const resolvedCloseOnSelect = timePickerProps.closeOnSelect ?? false;\n const resolvedTimeSteps = {\n minutes: 1,\n seconds: 1,\n ...timePickerProps.timeSteps,\n };\n const timePickerViews = useMemo(\n () =>\n hasSeconds ? (['hours', 'minutes', 'seconds'] as const) : (['hours', 'minutes'] as const),\n [hasSeconds],\n );\n const closeTimePickerSectionIndex = timePickerViews.length - 1;\n const timePickerEditorWidth =\n TIME_PICKER_EDITOR_SECTION_WIDTH * (timePickerViews.length + (useMeridiem ? 1 : 0));\n const [internalOpen, setInternalOpen] = useState(false);\n const [inputDraftValue, setInputDraftValue] = useState('');\n const [hasPickerInputCommitError, setHasPickerInputCommitError] = useState(false);\n const [pickerDraftValue, setPickerDraftValue] = useState<Dayjs | null>(null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const popperRef = useRef<HTMLDivElement | null>(null);\n const externalInputRef = useRef<HTMLInputElement | null>(null);\n const pickerInputRef = useRef<HTMLInputElement | null>(null);\n const isTextFieldMouseDownRef = useRef(false);\n const skipNextOpenRef = useRef(false);\n const suppressOpenUntilRef = useRef(0);\n const skipNextTextFieldClickRef = useRef(false);\n const { t, i18n } = useOwpTranslation();\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const adapterLocale = languageId === 'kr' ? 'ko' : 'en';\n const resolvedLocaleText = {\n okButtonLabel: t('Button.확인'),\n clearButtonLabel: t('Button.초기화'),\n fieldHoursPlaceholder: () => EMPTY_TIME_SECTION,\n fieldMinutesPlaceholder: () => EMPTY_TIME_SECTION,\n fieldMeridiemPlaceholder: () => EMPTY_TIME_SECTION,\n ...localeText,\n };\n const resolvedPlaceholder = placeholder ?? (useMeridiem ? '–– ––:––' : '––:––');\n const resolvedTextFieldSx = [TIME_PICKER_TEXT_FIELD_SX, sx, textFieldProps?.sx].filter(\n Boolean,\n ) as SxProps<Theme>;\n const isClearDisabled = Boolean(\n disabledClearButton || timePickerProps.disabled || timePickerProps.readOnly,\n );\n const canClear = Boolean(onChange) && !disabledClearButton;\n const isControlledOpen = openProp !== undefined;\n const isOpen = isControlledOpen ? openProp : internalOpen;\n const setPickerInputDraftValue = useCallback((nextValue: string) => {\n setInputDraftValue(nextValue);\n setHasPickerInputCommitError(false);\n }, []);\n\n const selectedValue = useMemo(() => {\n if (!value) {\n return null;\n }\n\n if (dayjs.isDayjs(value)) {\n return value;\n }\n\n if (typeof value === 'string') {\n const parsedInputValue = parseTimePickerInput(value, hasSeconds);\n\n if (parsedInputValue?.dateValue.isValid()) {\n return parsedInputValue.dateValue;\n }\n\n const parsedValue = dayjs(value, normalizedValueFormat, true);\n return parsedValue.isValid() ? parsedValue : null;\n }\n\n const parsedValue = dayjs(value);\n return parsedValue.isValid() ? parsedValue : null;\n }, [hasSeconds, normalizedValueFormat, value]);\n\n const selectedInputValue = useMemo(() => {\n if (!value) {\n return '';\n }\n\n if (typeof value === 'string') {\n const parsedValue = dayjs(value, normalizedValueFormat, true);\n\n if (parsedValue.isValid()) {\n return formatTimePickerDisplayInput(parsedValue, hasSeconds);\n }\n\n return value;\n }\n\n const parsedValue = dayjs(value);\n return parsedValue.isValid() ? formatTimePickerDisplayInput(parsedValue, hasSeconds) : '';\n }, [hasSeconds, normalizedValueFormat, value]);\n\n const handleChange = (nextValue: Dayjs | null) => {\n const nextValueText = nextValue?.isValid()\n ? nextValue.format(normalizedValueFormat)\n : undefined;\n setPickerInputDraftValue(\n nextValue?.isValid() ? formatTimePickerDisplayInput(nextValue, hasSeconds) : '',\n );\n onChange?.(nextValueText);\n };\n\n const commitInputDraftValue = useCallback(\n (showError?: boolean) => {\n if (!inputDraftValue) {\n setPickerInputDraftValue('');\n onChange?.('');\n\n return true;\n }\n\n const parsedInput = parseTimePickerInput(inputDraftValue, hasSeconds);\n\n if (!parsedInput?.dateValue.isValid()) {\n if (showError && inputDraftValue) {\n setHasPickerInputCommitError(true);\n }\n\n return false;\n }\n\n setPickerInputDraftValue(parsedInput.valueText);\n onChange?.(parsedInput.valueText);\n\n return true;\n },\n [hasSeconds, inputDraftValue, onChange, setPickerInputDraftValue],\n );\n\n const handleOpen = useCallback(() => {\n if (skipNextOpenRef.current || Date.now() < suppressOpenUntilRef.current) {\n skipNextOpenRef.current = false;\n return;\n }\n\n if (!isControlledOpen) {\n setInternalOpen(true);\n }\n\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n onOpen?.();\n }, [isControlledOpen, onOpen, selectedInputValue, selectedValue, setPickerInputDraftValue]);\n\n const closePicker = useCallback(() => {\n if (!isControlledOpen) {\n setInternalOpen(false);\n }\n\n onClose?.();\n }, [isControlledOpen, onClose]);\n\n const handleClose = useCallback(() => {\n commitInputDraftValue();\n closePicker();\n }, [closePicker, commitInputDraftValue]);\n\n const handleClickAwayClose = useCallback(() => {\n suppressOpenUntilRef.current = Date.now() + 200;\n handleClose();\n }, [handleClose]);\n\n const closePickerWithoutReopen = useCallback(() => {\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n }, [closePicker]);\n\n const focusAdjacentElement = useCallback((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 = useCallback(() => {\n window.requestAnimationFrame(() => {\n externalInputRef.current?.focus();\n });\n }, []);\n\n const handleTextFieldInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n externalInputRef.current = input;\n assignInputRef(textFieldProps?.inputRef as Ref<HTMLInputElement> | undefined, input);\n },\n [textFieldProps?.inputRef],\n );\n\n const handleClear = () => {\n onChange?.('');\n setPickerInputDraftValue('');\n };\n\n const handlePickerInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const nextInputValue = formatTimePickerInput(event.target.value, hasSeconds);\n const parsedInput = parseTimePickerInput(nextInputValue, hasSeconds);\n\n setPickerInputDraftValue(nextInputValue);\n\n if (parsedInput?.dateValue.isValid()) {\n setPickerDraftValue(parsedInput.dateValue);\n }\n },\n [hasSeconds, setPickerInputDraftValue],\n );\n\n const stopPickerInputKeyboardEvent = useCallback(\n (event: ReactKeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n },\n [],\n );\n\n const handlePickerInputKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLInputElement>) => {\n stopPickerInputKeyboardEvent(event);\n\n if (event.key === 'Escape') {\n event.preventDefault();\n suppressOpenUntilRef.current = Date.now() + 200;\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n closePicker();\n focusExternalInput();\n return;\n }\n\n if (event.key === 'Tab') {\n event.preventDefault();\n\n if (!commitInputDraftValue(true)) {\n return;\n }\n\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n focusAdjacentElement(event.shiftKey);\n return;\n }\n\n if (event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n if (commitInputDraftValue(true)) {\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n focusExternalInput();\n }\n },\n [\n closePicker,\n commitInputDraftValue,\n focusAdjacentElement,\n focusExternalInput,\n selectedInputValue,\n selectedValue,\n setPickerInputDraftValue,\n stopPickerInputKeyboardEvent,\n ],\n );\n\n const handlePickerInputClear = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n onChange?.('');\n setPickerInputDraftValue('');\n setPickerDraftValue(null);\n pickerInputRef.current?.focus();\n },\n [onChange, setPickerInputDraftValue],\n );\n\n const handlePickerClockChange = useCallback(\n (nextValue: Dayjs | null, selectedView?: string) => {\n if (!nextValue?.isValid()) {\n return;\n }\n\n const nextValueText = nextValue.format(normalizedValueFormat);\n\n setPickerDraftValue(nextValue);\n setPickerInputDraftValue(nextValueText);\n\n if (selectedView !== timePickerViews[closeTimePickerSectionIndex]) {\n return;\n }\n\n suppressOpenUntilRef.current = Date.now() + 200;\n onChange?.(nextValueText);\n closePickerWithoutReopen();\n focusExternalInput();\n },\n [\n closeTimePickerSectionIndex,\n closePickerWithoutReopen,\n focusExternalInput,\n normalizedValueFormat,\n onChange,\n setPickerInputDraftValue,\n timePickerViews,\n ],\n );\n\n const handleTextFieldMouseDown = useCallback(\n (event: OwpTimePickerTextFieldMouseDownEvent) => {\n textFieldProps?.onMouseDown?.(event);\n isTextFieldMouseDownRef.current = true;\n },\n [textFieldProps],\n );\n\n const handleTextFieldFocus = useCallback(\n (event: OwpTimePickerTextFieldFocusEvent) => {\n textFieldProps?.onFocus?.(event);\n\n if (\n event.defaultPrevented ||\n timePickerProps.disabled ||\n timePickerProps.readOnly ||\n isOpen\n ) {\n return;\n }\n\n skipNextTextFieldClickRef.current = isTextFieldMouseDownRef.current;\n handleOpen();\n },\n [handleOpen, isOpen, textFieldProps, timePickerProps.disabled, timePickerProps.readOnly],\n );\n\n const handleTextFieldClick = useCallback(\n (event: OwpTimePickerTextFieldClickEvent) => {\n textFieldProps?.onClick?.(event);\n\n if (event.defaultPrevented || timePickerProps.disabled || timePickerProps.readOnly) {\n return;\n }\n\n if (skipNextTextFieldClickRef.current) {\n skipNextTextFieldClickRef.current = false;\n isTextFieldMouseDownRef.current = false;\n return;\n }\n\n isTextFieldMouseDownRef.current = false;\n\n if (isOpen) {\n skipNextOpenRef.current = true;\n handleClose();\n queueMicrotask(() => {\n skipNextOpenRef.current = false;\n });\n return;\n }\n\n handleOpen();\n },\n [\n handleClose,\n handleOpen,\n isOpen,\n textFieldProps,\n timePickerProps.disabled,\n timePickerProps.readOnly,\n ],\n );\n\n const handleTextFieldKeyDown = useCallback(\n (event: OwpTimePickerTextFieldKeyDownEvent) => {\n textFieldProps?.onKeyDown?.(event);\n\n if (event.defaultPrevented || timePickerProps.disabled || timePickerProps.readOnly) {\n return;\n }\n\n if (!isOpen && isTimePickerOpenKey(event)) {\n event.preventDefault();\n handleOpen();\n return;\n }\n\n if (!isOpen || !isValueEditingKey(event)) {\n return;\n }\n\n handleClose();\n },\n [\n handleClose,\n handleOpen,\n isOpen,\n textFieldProps,\n timePickerProps.disabled,\n timePickerProps.readOnly,\n ],\n );\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n }, [isOpen, selectedInputValue, selectedValue, setPickerInputDraftValue]);\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n pickerInputRef.current?.focus();\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n const handleDocumentMouseDown = (event: MouseEvent) => {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.current?.contains(target) || popperRef.current?.contains(target)) {\n return;\n }\n\n handleClickAwayClose();\n };\n\n document.addEventListener('mousedown', handleDocumentMouseDown, true);\n\n return () => {\n document.removeEventListener('mousedown', handleDocumentMouseDown, true);\n };\n }, [handleClickAwayClose, isOpen]);\n\n const TimePickerInputAdornment = ({ position, children, ...restProps }: InputAdornmentProps) => (\n <InputAdornment position={position} {...restProps}>\n {position === 'end' && canClear && (\n <IconButton\n className=\"clearButton\"\n size=\"small\"\n tabIndex={-1}\n aria-label={resolvedLocaleText.clearButtonLabel}\n disabled={isClearDisabled}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n handleClear();\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n {children}\n </InputAdornment>\n );\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={adapterLocale}>\n <div ref={rootRef}>\n <TimePicker\n {...timePickerProps}\n enableAccessibleFieldDOMStructure={false}\n ampm={useMeridiem}\n open={false}\n closeOnSelect={resolvedCloseOnSelect}\n timeSteps={resolvedTimeSteps}\n label={label}\n value={selectedValue}\n views={timePickerViews}\n format={displayFormat}\n localeText={resolvedLocaleText}\n onChange={handleChange}\n onOpen={handleOpen}\n onClose={handleClose}\n slots={{\n ...slots,\n inputAdornment: TimePickerInputAdornment,\n }}\n slotProps={{\n ...slotProps,\n openPickerButton: {\n ...(typeof slotProps?.openPickerButton === 'function'\n ? undefined\n : slotProps?.openPickerButton),\n size: 'small',\n tabIndex: -1,\n onClick: (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!isOpen) {\n handleOpen();\n }\n },\n sx: {\n margin: 0,\n padding: 0,\n },\n },\n openPickerIcon: {\n ...(typeof slotProps?.openPickerIcon === 'function'\n ? undefined\n : slotProps?.openPickerIcon),\n fontSize: 'small',\n },\n inputAdornment: {\n ...(typeof slotProps?.inputAdornment === 'function'\n ? undefined\n : slotProps?.inputAdornment),\n sx: {\n marginBottom: 0,\n marginLeft: 0,\n gap: 0,\n ...(typeof slotProps?.inputAdornment === 'function'\n ? undefined\n : slotProps?.inputAdornment?.sx),\n },\n },\n textField: {\n variant,\n fullWidth,\n ...textFieldProps,\n className: clsx(\n !fullWidth && (useMeridiem ? 'w-[160px]' : 'w-[140px]'),\n textFieldProps?.className,\n ),\n onMouseDown: handleTextFieldMouseDown,\n onFocus: handleTextFieldFocus,\n onClick: handleTextFieldClick,\n onKeyDown: handleTextFieldKeyDown,\n inputRef: handleTextFieldInputRef,\n placeholder: resolvedPlaceholder,\n sx: resolvedTextFieldSx,\n },\n }}\n />\n <Popper\n open={isOpen}\n anchorEl={rootRef.current}\n placement=\"bottom-end\"\n ref={popperRef}\n modifiers={[\n {\n name: 'offset',\n options: {\n offset: [0, 7],\n },\n },\n ]}\n sx={{ zIndex: (theme) => theme.zIndex.modal }}\n >\n <Paper\n elevation={8}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n }}\n onKeyUp={(event) => {\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n sx={{\n borderRadius: 1,\n lineHeight: 0,\n overflow: 'hidden',\n width: timePickerEditorWidth,\n }}\n >\n <TextField\n autoFocus\n inputRef={pickerInputRef}\n fullWidth\n size=\"small\"\n value={inputDraftValue}\n error={hasPickerInputCommitError}\n helperText={\n hasPickerInputCommitError ? t(PICKER_INVALID_INPUT_MESSAGE_KEY) : undefined\n }\n placeholder={normalizedValueFormat}\n onChange={handlePickerInputChange}\n onKeyDown={handlePickerInputKeyDown}\n slotProps={{\n htmlInput: {\n inputMode: 'numeric',\n 'aria-label': normalizedValueFormat,\n },\n input: {\n sx: {\n paddingRight: 0.5,\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={resolvedLocaleText.clearButtonLabel}\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 },\n }}\n sx={{\n boxSizing: 'border-box',\n width: timePickerEditorWidth,\n px: 1,\n py: 1,\n '& .MuiOutlinedInput-root': {\n borderRadius: 0.75,\n fontSize: 13,\n },\n }}\n />\n <MultiSectionDigitalClock\n ampm={useMeridiem}\n value={pickerDraftValue}\n views={timePickerViews}\n onChange={(nextValue, _selectionState, selectedView) =>\n handlePickerClockChange(nextValue, selectedView)\n }\n timeSteps={resolvedTimeSteps}\n slotProps={{\n digitalClockSectionItem: {\n sx: SELECTED_TIME_ITEM_SX,\n },\n }}\n sx={{\n border: 0,\n width: timePickerEditorWidth,\n '& .MuiMultiSectionDigitalClockSection-root': {\n border: 0,\n boxSizing: 'border-box',\n width: TIME_PICKER_EDITOR_SECTION_WIDTH,\n flex: `0 0 ${TIME_PICKER_EDITOR_SECTION_WIDTH}px`,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n },\n '& .MuiMultiSectionDigitalClockSection-item': {\n alignSelf: 'stretch',\n boxSizing: 'border-box',\n width: TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n minWidth: TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n justifyContent: 'center',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n }}\n />\n </Paper>\n </Popper>\n </div>\n </LocalizationProvider>\n );\n};\n\nexport { OwpTimePicker };\n"],"names":["ensureDayjsBrowserSetup","EMPTY_TIME_SECTION","VALUE_TIME_SECOND_FORMATTER","TIME_PICKER_EDITOR_SECTION_WIDTH","TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH","SELECTED_TIME_ITEM_SX","TIME_PICKER_TEXT_FIELD_SX","isValueEditingKey","__name","event","isTimePickerOpenKey","formatTimePickerInput","value","hasSeconds","digitLimit","digits","parseTimePickerInput","normalizedValue","timePattern","match","hour","minute","second","valueText","part","dayjs","VALUE_TIME_FORMATTER","formatTimePickerDisplayInput","isFocusableElement","element","getAdjacentFocusableElement","rootElement","isBackward","focusableElements","assignInputRef","inputRef","OwpTimePicker","label","variant","sx","format","useAmPm","placeholder","disabledClearButton","fullWidth","onChange","textFieldProps","localeText","openProp","onOpen","onClose","slots","slotProps","timePickerProps","normalizedValueFormat","useMeridiem","displayFormat","resolvedCloseOnSelect","resolvedTimeSteps","timePickerViews","useMemo","closeTimePickerSectionIndex","timePickerEditorWidth","internalOpen","setInternalOpen","useState","inputDraftValue","setInputDraftValue","hasPickerInputCommitError","setHasPickerInputCommitError","pickerDraftValue","setPickerDraftValue","rootRef","useRef","popperRef","externalInputRef","pickerInputRef","isTextFieldMouseDownRef","skipNextOpenRef","suppressOpenUntilRef","skipNextTextFieldClickRef","t","i18n","useOwpTranslation","adapterLocale","resolvedLocaleText","resolvedPlaceholder","resolvedTextFieldSx","isClearDisabled","canClear","isControlledOpen","isOpen","setPickerInputDraftValue","useCallback","nextValue","selectedValue","parsedInputValue","parsedValue","selectedInputValue","handleChange","nextValueText","commitInputDraftValue","showError","parsedInput","handleOpen","closePicker","handleClose","handleClickAwayClose","closePickerWithoutReopen","focusAdjacentElement","_a","focusExternalInput","handleTextFieldInputRef","input","handleClear","handlePickerInputChange","nextInputValue","stopPickerInputKeyboardEvent","handlePickerInputKeyDown","handlePickerInputClear","handlePickerClockChange","selectedView","handleTextFieldMouseDown","handleTextFieldFocus","handleTextFieldClick","handleTextFieldKeyDown","useEffect","animationFrameId","handleDocumentMouseDown","target","_b","jsx","LocalizationProvider","AdapterDayjs","jsxs","TimePicker","position","children","restProps","InputAdornment","IconButton","ClearIcon","clsx","Popper","theme","Paper","TextField","PICKER_INVALID_INPUT_MESSAGE_KEY","MultiSectionDigitalClock","_selectionState"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- const Y = "YYYY", E = "YYYY-MM", T = "YYYY-MM-DD", A = "HH:mm";
1
+ const E = "YYYY", Y = "YYYY-MM", A = "YYYY-MM-DD", M = "HH:mm", T = "Message.올바른 형식으로 입력해주세요.";
2
2
  export {
3
- T as VALUE_DATE_FORMATTER,
4
- E as VALUE_MONTH_FORMATTER,
5
- A as VALUE_TIME_FORMATTER,
6
- Y as VALUE_YEAR_FORMATTER
3
+ T as PICKER_INVALID_INPUT_MESSAGE_KEY,
4
+ A as VALUE_DATE_FORMATTER,
5
+ Y as VALUE_MONTH_FORMATTER,
6
+ M as VALUE_TIME_FORMATTER,
7
+ E as VALUE_YEAR_FORMATTER
7
8
  };
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/OwpPicker/constants/index.ts"],"sourcesContent":["export const VALUE_YEAR_FORMATTER = 'YYYY';\nexport const VALUE_MONTH_FORMATTER = 'YYYY-MM';\nexport const VALUE_DATE_FORMATTER = 'YYYY-MM-DD';\nexport const VALUE_TIME_FORMATTER = 'HH:mm';\n"],"names":["VALUE_YEAR_FORMATTER","VALUE_MONTH_FORMATTER","VALUE_DATE_FORMATTER","VALUE_TIME_FORMATTER"],"mappings":"AAAO,MAAMA,IAAuB,QACvBC,IAAwB,WACxBC,IAAuB,cACvBC,IAAuB;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/OwpPicker/constants/index.ts"],"sourcesContent":["export const VALUE_YEAR_FORMATTER = 'YYYY';\nexport const VALUE_MONTH_FORMATTER = 'YYYY-MM';\nexport const VALUE_DATE_FORMATTER = 'YYYY-MM-DD';\nexport const VALUE_TIME_FORMATTER = 'HH:mm';\nexport const PICKER_INVALID_INPUT_MESSAGE_KEY = 'Message.올바른 형식으로 입력해주세요.';\n"],"names":["VALUE_YEAR_FORMATTER","VALUE_MONTH_FORMATTER","VALUE_DATE_FORMATTER","VALUE_TIME_FORMATTER","PICKER_INVALID_INPUT_MESSAGE_KEY"],"mappings":"AAAO,MAAMA,IAAuB,QACvBC,IAAwB,WACxBC,IAAuB,cACvBC,IAAuB,SACvBC,IAAmC;"}
@@ -1,68 +1,92 @@
1
- var M = Object.defineProperty;
2
- var s = (r, i) => M(r, "name", { value: i, configurable: !0 });
3
- import { jsx as m, jsxs as N } 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 R from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/AccessTime.js";
5
- import b from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/CalendarMonth.js";
6
- import B from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/Clear.js";
7
- import { IconButton as l, InputAdornment as D, TextField as S } from "@mui/material";
8
- import e from "dayjs";
9
- import { forwardRef as T } from "react";
10
- const J = T(
1
+ var H = Object.defineProperty;
2
+ var a = (t, m) => H(t, "name", { value: m, configurable: !0 });
3
+ import { jsx as s, jsxs as J } 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 L from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/AccessTime.js";
5
+ import Q from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/CalendarMonth.js";
6
+ import U from "../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/Clear.js";
7
+ import { IconButton as b, InputAdornment as W, TextField as X } from "@mui/material";
8
+ import z from "dayjs";
9
+ import { forwardRef as Y } from "react";
10
+ const P = /* @__PURE__ */ a((t, m) => {
11
+ if (t) {
12
+ if (typeof t == "function") {
13
+ t(m);
14
+ return;
15
+ }
16
+ t.current = m;
17
+ }
18
+ }, "assignInputRef"), D = Y(
11
19
  ({
12
- value: r,
13
- valueFormatter: i,
14
- useRange: z,
15
- showTimeSelect: P,
16
- showTimeSelectOnly: a,
17
- disabledClearButton: h,
18
- reset: p,
19
- onInputAreaClick: d,
20
- onIconClick: f,
21
- onClick: o,
22
- ...n
23
- }, j) => {
24
- var g;
25
- const x = P || a, c = /* @__PURE__ */ s((t) => {
26
- d == null || d(), o == null || o(t);
27
- }, "handleInputClick"), y = /* @__PURE__ */ s((t) => {
28
- t.stopPropagation(), f == null || f(), o == null || o(t);
20
+ value: t,
21
+ valueFormatter: m,
22
+ useRange: M,
23
+ showTimeSelect: N,
24
+ showTimeSelectOnly: d,
25
+ disabledClearButton: c,
26
+ reset: f,
27
+ onInputAreaClick: p,
28
+ onIconClick: e,
29
+ inputElementRef: B,
30
+ onClick: i,
31
+ onFocus: g,
32
+ onKeyDown: l,
33
+ onInputFocus: o,
34
+ onInputKeyDown: h,
35
+ inputRef: R,
36
+ ...x
37
+ }, S) => {
38
+ var j;
39
+ const T = N || d, V = /* @__PURE__ */ a((r) => {
40
+ p == null || p(), i == null || i(r);
41
+ }, "handleInputClick"), q = /* @__PURE__ */ a((r) => {
42
+ o == null || o(r), g == null || g(r);
43
+ }, "handleInputFocus"), E = /* @__PURE__ */ a((r) => {
44
+ h == null || h(r), l == null || l(r);
45
+ }, "handleInputKeyDown"), G = /* @__PURE__ */ a((r) => {
46
+ r.stopPropagation(), e == null || e(), i == null || i(r);
29
47
  }, "handleIconClick");
30
- return /* @__PURE__ */ m(
31
- S,
48
+ return /* @__PURE__ */ s(
49
+ X,
32
50
  {
33
- inputRef: j,
34
51
  variant: "standard",
35
- ...n,
36
- onClick: c,
37
- value: r ? z ? typeof r == "string" ? r.split(" - ").map((t) => e(t).isValid() ? e(t).format(i) : "").join(" ~ ") : "" : a && typeof r == "string" ? r : e(r).format(i) : "",
52
+ ...x,
53
+ inputRef: /* @__PURE__ */ a((r) => {
54
+ P(S, r), P(B, r), P(R, r);
55
+ }, "inputRef"),
56
+ onClick: V,
57
+ onFocus: q,
58
+ onKeyDown: E,
59
+ value: t ? M ? typeof t == "string" ? t.split(" - ").map((r) => z(r).isValid() ? z(r).format(m) : "").join(" ~ ") : "" : d && typeof t == "string" ? t : z(t).format(m) : "",
38
60
  slotProps: {
39
- ...n.slotProps,
61
+ ...x.slotProps,
40
62
  input: {
41
63
  readOnly: !0,
42
- endAdornment: /* @__PURE__ */ N(D, { position: "end", children: [
43
- !h && /* @__PURE__ */ m(
44
- l,
64
+ endAdornment: /* @__PURE__ */ J(W, { position: "end", children: [
65
+ !c && /* @__PURE__ */ s(
66
+ b,
45
67
  {
46
68
  className: "m-0 p-0",
47
69
  size: "small",
48
- onClick: /* @__PURE__ */ s((t) => {
49
- t.stopPropagation(), p == null || p();
70
+ tabIndex: -1,
71
+ onClick: /* @__PURE__ */ a((r) => {
72
+ r.stopPropagation(), f == null || f();
50
73
  }, "onClick"),
51
- children: /* @__PURE__ */ m(B, { fontSize: "small" })
74
+ children: /* @__PURE__ */ s(U, { fontSize: "small" })
52
75
  }
53
76
  ),
54
- /* @__PURE__ */ m(
55
- l,
77
+ /* @__PURE__ */ s(
78
+ b,
56
79
  {
57
80
  className: "m-0 p-0",
58
81
  size: "small",
59
- "aria-label": x ? "time-picker-trigger" : "date-picker-trigger",
60
- onClick: y,
61
- children: a ? /* @__PURE__ */ m(R, { fontSize: "small" }) : /* @__PURE__ */ m(b, { fontSize: "small" })
82
+ tabIndex: -1,
83
+ "aria-label": T ? "time-picker-trigger" : "date-picker-trigger",
84
+ onClick: G,
85
+ children: d ? /* @__PURE__ */ s(L, { fontSize: "small" }) : /* @__PURE__ */ s(Q, { fontSize: "small" })
62
86
  }
63
87
  )
64
88
  ] }),
65
- ...(g = n.slotProps) == null ? void 0 : g.input
89
+ ...(j = x.slotProps) == null ? void 0 : j.input
66
90
  }
67
91
  }
68
92
  }
@@ -70,6 +94,6 @@ const J = T(
70
94
  }
71
95
  );
72
96
  export {
73
- J as DatePickerInput
97
+ D as DatePickerInput
74
98
  };
75
99
  //# sourceMappingURL=DatePickerInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerInput.js","sources":["../../../../src/components/OwpPicker/internal/DatePickerInput.tsx"],"sourcesContent":["import AccessTimeIcon from '@mui/icons-material/AccessTime';\nimport CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport { IconButton, InputAdornment, TextField, TextFieldProps } from '@mui/material';\nimport dayjs from 'dayjs';\nimport { type MouseEventHandler, forwardRef } from 'react';\n\ntype DatePickerValue = string | Date;\ntype TextFieldClickEvent = Parameters<NonNullable<TextFieldProps['onClick']>>[0];\n\ninterface OwnProps {\n valueFormatter?: string;\n value?: DatePickerValue;\n useRange?: boolean;\n showTimeSelect?: boolean;\n showTimeSelectOnly?: boolean;\n disabledClearButton?: boolean;\n reset?: () => void;\n onInputAreaClick?: VoidFunction;\n onIconClick?: VoidFunction;\n}\n\n/**\n * DatePickerInput 컴포넌트\n * @param value 현재 값\n * @param valueFormatter valueFormatter 값\n * @param useRange useRange 값\n * @param showTimeSelect showTimeSelect 값\n * @param showTimeSelectOnly showTimeSelectOnly 값\n * @param disabledClearButton disabledClearButton 값\n * @param reset reset 값\n * @param onInputAreaClick 입력 영역 클릭 핸들러\n * @param onIconClick 아이콘 클릭 핸들러\n * @param ref forwardRef 참조\n */\nexport const DatePickerInput = forwardRef(\n (\n {\n value,\n valueFormatter,\n useRange,\n showTimeSelect,\n showTimeSelectOnly,\n disabledClearButton,\n reset,\n onInputAreaClick,\n onIconClick,\n onClick,\n ...restProps\n }: TextFieldProps & OwnProps,\n ref,\n ) => {\n const isTimePickerMode = showTimeSelect || showTimeSelectOnly;\n\n const handleInputClick: MouseEventHandler<HTMLDivElement> = (event) => {\n onInputAreaClick?.();\n onClick?.(event);\n };\n\n const handleIconClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n event.stopPropagation();\n onIconClick?.();\n onClick?.(event as unknown as TextFieldClickEvent);\n };\n\n return (\n <TextField\n inputRef={ref}\n variant=\"standard\"\n {...restProps}\n onClick={handleInputClick}\n value={\n value\n ? useRange\n ? typeof value === 'string'\n ? value\n .split(' - ')\n .map((v: string) => (dayjs(v).isValid() ? dayjs(v).format(valueFormatter) : ''))\n .join(' ~ ')\n : ''\n : showTimeSelectOnly && typeof value === 'string'\n ? value\n : dayjs(value).format(valueFormatter)\n : ''\n }\n slotProps={{\n ...restProps.slotProps,\n input: {\n readOnly: true,\n endAdornment: (\n <InputAdornment position=\"end\">\n {!disabledClearButton && (\n <IconButton\n className=\"m-0 p-0\"\n size=\"small\"\n onClick={(evt) => {\n evt.stopPropagation();\n reset?.();\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n <IconButton\n className=\"m-0 p-0\"\n size=\"small\"\n aria-label={isTimePickerMode ? 'time-picker-trigger' : 'date-picker-trigger'}\n onClick={handleIconClick}\n >\n {showTimeSelectOnly ? (\n <AccessTimeIcon fontSize=\"small\" />\n ) : (\n <CalendarMonthIcon fontSize=\"small\" />\n )}\n </IconButton>\n </InputAdornment>\n ),\n ...restProps.slotProps?.input,\n },\n }}\n />\n );\n },\n);\n"],"names":["DatePickerInput","forwardRef","value","valueFormatter","useRange","showTimeSelect","showTimeSelectOnly","disabledClearButton","reset","onInputAreaClick","onIconClick","onClick","restProps","ref","isTimePickerMode","handleInputClick","__name","event","handleIconClick","jsx","TextField","v","dayjs","jsxs","InputAdornment","IconButton","evt","ClearIcon","AccessTimeIcon","CalendarMonthIcon","_a"],"mappings":";;;;;;;;;AAmCO,MAAMA,IAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,OAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,OAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;;AACH,UAAMC,IAAmBT,KAAkBC,GAErCS,IAAsD,gBAAAC,EAAA,CAACC,MAAU;AACrE,MAAAR,KAAA,QAAAA,KACAE,KAAA,QAAAA,EAAUM;AAAA,IACZ,GAH4D,qBAKtDC,IAAwD,gBAAAF,EAAA,CAACC,MAAU;AACvE,MAAAA,EAAM,gBAAA,GACNP,KAAA,QAAAA,KACAC,KAAA,QAAAA,EAAUM;AAAA,IACZ,GAJ8D;AAM9D,WACE,gBAAAE;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,UAAUP;AAAA,QACV,SAAQ;AAAA,QACP,GAAGD;AAAA,QACJ,SAASG;AAAA,QACT,OACEb,IACIE,IACE,OAAOF,KAAU,WACfA,EACG,MAAM,KAAK,EACX,IAAI,CAACmB,MAAeC,EAAMD,CAAC,EAAE,QAAA,IAAYC,EAAMD,CAAC,EAAE,OAAOlB,CAAc,IAAI,EAAG,EAC9E,KAAK,KAAK,IACb,KACFG,KAAsB,OAAOJ,KAAU,WACrCA,IACAoB,EAAMpB,CAAK,EAAE,OAAOC,CAAc,IACtC;AAAA,QAEN,WAAW;AAAA,UACT,GAAGS,EAAU;AAAA,UACb,OAAO;AAAA,YACL,UAAU;AAAA,YACV,cACE,gBAAAW,EAACC,GAAA,EAAe,UAAS,OACtB,UAAA;AAAA,cAAA,CAACjB,KACA,gBAAAY;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,SAAS,gBAAAT,EAAA,CAACU,MAAQ;AAChB,oBAAAA,EAAI,gBAAA,GACJlB,KAAA,QAAAA;AAAA,kBACF,GAHS;AAAA,kBAKT,UAAA,gBAAAW,EAACQ,GAAA,EAAU,UAAS,QAAA,CAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGhC,gBAAAR;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,cAAYX,IAAmB,wBAAwB;AAAA,kBACvD,SAASI;AAAA,kBAER,UAAAZ,sBACEsB,GAAA,EAAe,UAAS,SAAQ,IAEjC,gBAAAT,EAACU,GAAA,EAAkB,UAAS,QAAA,CAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YAExC,GACF;AAAA,YAEF,IAAGC,IAAAlB,EAAU,cAAV,gBAAAkB,EAAqB;AAAA,UAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IAAA;AAAA,EAGN;AACF;"}
1
+ {"version":3,"file":"DatePickerInput.js","sources":["../../../../src/components/OwpPicker/internal/DatePickerInput.tsx"],"sourcesContent":["import AccessTimeIcon from '@mui/icons-material/AccessTime';\nimport CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport { IconButton, InputAdornment, TextField, TextFieldProps } from '@mui/material';\nimport dayjs from 'dayjs';\nimport { type MouseEventHandler, type Ref, forwardRef } from 'react';\n\ntype DatePickerValue = string | Date;\ntype TextFieldClickEvent = Parameters<NonNullable<TextFieldProps['onClick']>>[0];\ntype TextFieldFocusEventHandler = NonNullable<TextFieldProps['onFocus']>;\ntype TextFieldKeyDownEventHandler = NonNullable<TextFieldProps['onKeyDown']>;\n\ninterface OwnProps {\n valueFormatter?: string;\n value?: DatePickerValue;\n useRange?: boolean;\n showTimeSelect?: boolean;\n showTimeSelectOnly?: boolean;\n disabledClearButton?: boolean;\n reset?: () => void;\n onInputAreaClick?: VoidFunction;\n onIconClick?: VoidFunction;\n inputElementRef?: Ref<HTMLInputElement>;\n onInputFocus?: TextFieldFocusEventHandler;\n onInputKeyDown?: TextFieldKeyDownEventHandler;\n}\n\n/** input ref 값 할당 */\nconst assignInputRef = (\n inputRef: Ref<HTMLInputElement> | undefined,\n value: HTMLInputElement | null,\n) => {\n if (!inputRef) {\n return;\n }\n\n if (typeof inputRef === 'function') {\n inputRef(value);\n return;\n }\n\n (inputRef as { current: HTMLInputElement | null }).current = value;\n};\n\n/**\n * DatePickerInput 컴포넌트\n * @param value 현재 값\n * @param valueFormatter valueFormatter 값\n * @param useRange useRange 값\n * @param showTimeSelect showTimeSelect 값\n * @param showTimeSelectOnly showTimeSelectOnly 값\n * @param disabledClearButton disabledClearButton 값\n * @param reset reset 값\n * @param onInputAreaClick 입력 영역 클릭 핸들러\n * @param onIconClick 아이콘 클릭 핸들러\n * @param ref forwardRef 참조\n */\nexport const DatePickerInput = forwardRef(\n (\n {\n value,\n valueFormatter,\n useRange,\n showTimeSelect,\n showTimeSelectOnly,\n disabledClearButton,\n reset,\n onInputAreaClick,\n onIconClick,\n inputElementRef,\n onClick,\n onFocus,\n onKeyDown,\n onInputFocus,\n onInputKeyDown,\n inputRef: inputRefProp,\n ...restProps\n }: TextFieldProps & OwnProps,\n ref,\n ) => {\n const isTimePickerMode = showTimeSelect || showTimeSelectOnly;\n\n const handleInputClick: MouseEventHandler<HTMLDivElement> = (event) => {\n onInputAreaClick?.();\n onClick?.(event);\n };\n\n const handleInputFocus: TextFieldFocusEventHandler = (event) => {\n onInputFocus?.(event);\n onFocus?.(event);\n };\n\n const handleInputKeyDown: TextFieldKeyDownEventHandler = (event) => {\n onInputKeyDown?.(event);\n onKeyDown?.(event);\n };\n\n const handleIconClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n event.stopPropagation();\n onIconClick?.();\n onClick?.(event as unknown as TextFieldClickEvent);\n };\n\n return (\n <TextField\n variant=\"standard\"\n {...restProps}\n inputRef={(input) => {\n assignInputRef(ref as Ref<HTMLInputElement>, input);\n assignInputRef(inputElementRef, input);\n assignInputRef(inputRefProp, input);\n }}\n onClick={handleInputClick}\n onFocus={handleInputFocus}\n onKeyDown={handleInputKeyDown}\n value={\n value\n ? useRange\n ? typeof value === 'string'\n ? value\n .split(' - ')\n .map((v: string) => (dayjs(v).isValid() ? dayjs(v).format(valueFormatter) : ''))\n .join(' ~ ')\n : ''\n : showTimeSelectOnly && typeof value === 'string'\n ? value\n : dayjs(value).format(valueFormatter)\n : ''\n }\n slotProps={{\n ...restProps.slotProps,\n input: {\n readOnly: true,\n endAdornment: (\n <InputAdornment position=\"end\">\n {!disabledClearButton && (\n <IconButton\n className=\"m-0 p-0\"\n size=\"small\"\n tabIndex={-1}\n onClick={(evt) => {\n evt.stopPropagation();\n reset?.();\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n <IconButton\n className=\"m-0 p-0\"\n size=\"small\"\n tabIndex={-1}\n aria-label={isTimePickerMode ? 'time-picker-trigger' : 'date-picker-trigger'}\n onClick={handleIconClick}\n >\n {showTimeSelectOnly ? (\n <AccessTimeIcon fontSize=\"small\" />\n ) : (\n <CalendarMonthIcon fontSize=\"small\" />\n )}\n </IconButton>\n </InputAdornment>\n ),\n ...restProps.slotProps?.input,\n },\n }}\n />\n );\n },\n);\n"],"names":["assignInputRef","__name","inputRef","value","DatePickerInput","forwardRef","valueFormatter","useRange","showTimeSelect","showTimeSelectOnly","disabledClearButton","reset","onInputAreaClick","onIconClick","inputElementRef","onClick","onFocus","onKeyDown","onInputFocus","onInputKeyDown","inputRefProp","restProps","ref","isTimePickerMode","handleInputClick","event","handleInputFocus","handleInputKeyDown","handleIconClick","jsx","TextField","input","v","dayjs","jsxs","InputAdornment","IconButton","evt","ClearIcon","AccessTimeIcon","CalendarMonthIcon","_a"],"mappings":"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"}
@@ -1,116 +1,138 @@
1
- var j = Object.defineProperty;
2
- var w = (r, l) => j(r, "name", { value: l, configurable: !0 });
3
- import { jsxs as n, jsx as e } 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 O from "../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/Fitbit.js";
5
- import { Divider as R } from "@mui/material";
6
- import { useHeaderWrapState as k } from "../../hooks/useHeaderWrapState.js";
7
- import { clsx as m } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
8
- import { OwpPageTitle as B } from "../OwpPageTitle/OwpPageTitle.js";
9
- const z = /* @__PURE__ */ w(({
10
- className: r,
11
- title: l,
12
- disableTitleIcon: o,
13
- headerProps: s,
1
+ var R = Object.defineProperty;
2
+ var t = (m, s) => R(m, "name", { value: s, configurable: !0 });
3
+ import { jsxs as f, jsx as e } 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 k from "../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/Fitbit.js";
5
+ import { CircularProgress as B, Divider as b } from "@mui/material";
6
+ import { useHeaderWrapState as H } from "../../hooks/useHeaderWrapState.js";
7
+ import { clsx as i } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
8
+ import { OwpPageTitle as W } from "../OwpPageTitle/OwpPageTitle.js";
9
+ const h = /* @__PURE__ */ t((m) => {
10
+ switch (m) {
11
+ case "inherit":
12
+ return "1em";
13
+ case "small":
14
+ return "1.25rem";
15
+ case "large":
16
+ return "2.1875rem";
17
+ case "medium":
18
+ return "1.5rem";
19
+ default:
20
+ return 24;
21
+ }
22
+ }, "getTitleIconSize"), q = /* @__PURE__ */ t(({
23
+ className: m,
24
+ title: s,
25
+ disableTitleIcon: u,
26
+ headerProps: l,
14
27
  usePageTitle: x,
15
- actions: f,
28
+ actions: c,
16
29
  leftSlot: a,
17
- centerSlot: i,
18
- children: t,
19
- iconSize: d
30
+ centerSlot: r,
31
+ children: N,
32
+ iconSize: d,
33
+ loading: o
20
34
  }) => {
21
- const u = l != null && l !== "", p = !!(a || i), { containerRef: N, titleRef: h, slotsRef: v, actionsRef: y, isWrapped: c } = k([
22
- l,
35
+ const w = s != null && s !== "", p = !!(a || r), { containerRef: v, titleRef: y, slotsRef: g, actionsRef: j, isWrapped: n } = H([
36
+ s,
23
37
  a,
24
- i,
25
- f,
26
- o,
27
- d
28
- ]), g = !!(u || f || a || i);
29
- return /* @__PURE__ */ n("div", { className: m("OwpSection-root flex h-full w-full flex-col", r), children: [
30
- g && (x ? /* @__PURE__ */ n("div", { className: "OwpSection-header", children: [
31
- /* @__PURE__ */ e("div", { ...s, className: m("w-full", s == null ? void 0 : s.className), children: /* @__PURE__ */ e(
32
- B,
38
+ r,
39
+ c,
40
+ u,
41
+ d,
42
+ o
43
+ ]), O = !!(w || c || a || r);
44
+ return /* @__PURE__ */ f("div", { className: i("OwpSection-root flex h-full w-full flex-col", m), children: [
45
+ O && (x ? /* @__PURE__ */ f("div", { className: "OwpSection-header", children: [
46
+ /* @__PURE__ */ e("div", { ...l, className: i("w-full", l == null ? void 0 : l.className), children: /* @__PURE__ */ e(
47
+ W,
33
48
  {
34
- title: l,
49
+ title: s,
35
50
  leftSlot: a,
36
- centerSlot: i,
37
- actions: f
51
+ centerSlot: r,
52
+ actions: c,
53
+ loading: o
38
54
  }
39
55
  ) }),
40
- /* @__PURE__ */ e(R, { className: "my-12" })
41
- ] }) : /* @__PURE__ */ e("div", { className: "OwpSection-header mb-12 min-h-36 w-full", children: /* @__PURE__ */ n(
56
+ /* @__PURE__ */ e(b, { className: "my-12" })
57
+ ] }) : /* @__PURE__ */ e("div", { className: "OwpSection-header mb-12 min-h-36 w-full", children: /* @__PURE__ */ f(
42
58
  "div",
43
59
  {
44
- ref: N,
45
- ...s,
46
- className: m(
60
+ ref: v,
61
+ ...l,
62
+ className: i(
47
63
  "min-h-36 w-full",
48
- c ? "flex flex-col gap-8" : "grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-x-8 gap-y-8",
49
- s == null ? void 0 : s.className
64
+ n ? "flex flex-col gap-8" : "grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-x-8 gap-y-8",
65
+ l == null ? void 0 : l.className
50
66
  ),
51
67
  children: [
52
- l && /* @__PURE__ */ n(
68
+ s && /* @__PURE__ */ f(
53
69
  "div",
54
70
  {
55
- ref: h,
56
- className: m(
71
+ ref: y,
72
+ className: i(
57
73
  "flex shrink-0 items-center gap-8 whitespace-nowrap",
58
- c ? "order-1 self-start" : "col-start-1"
74
+ n ? "order-1 self-start" : "col-start-1"
59
75
  ),
60
76
  children: [
61
- !o && /* @__PURE__ */ e(
62
- O,
77
+ !u && (o ? /* @__PURE__ */ e(
78
+ B,
63
79
  {
64
80
  className: "shrink-0",
65
- fontSize: d,
66
- sx: { fontSize: d ? void 0 : 24, color: "secondary.main" }
81
+ size: h(d),
82
+ sx: { color: "secondary.main" }
67
83
  }
68
- ),
69
- /* @__PURE__ */ e("h6", { className: "shrink-0 whitespace-nowrap text-2xl font-medium", children: l })
84
+ ) : /* @__PURE__ */ e(
85
+ k,
86
+ {
87
+ className: "shrink-0",
88
+ sx: { fontSize: h(d), color: "secondary.main" }
89
+ }
90
+ )),
91
+ /* @__PURE__ */ e("h6", { className: "shrink-0 whitespace-nowrap text-2xl font-medium", children: s })
70
92
  ]
71
93
  }
72
94
  ),
73
95
  p && /* @__PURE__ */ e(
74
96
  "div",
75
97
  {
76
- ref: v,
77
- className: m(
98
+ ref: g,
99
+ className: i(
78
100
  "flex max-w-full",
79
- c ? "order-2 self-end justify-end" : "col-start-2 justify-self-center"
101
+ n ? "order-2 self-end justify-end" : "col-start-2 justify-self-center"
80
102
  ),
81
- children: /* @__PURE__ */ n(
103
+ children: /* @__PURE__ */ f(
82
104
  "div",
83
105
  {
84
- className: m(
106
+ className: i(
85
107
  "flex max-w-full items-center gap-8",
86
- c ? "flex-wrap justify-end" : "flex-nowrap justify-center"
108
+ n ? "flex-wrap justify-end" : "flex-nowrap justify-center"
87
109
  ),
88
110
  children: [
89
111
  a && /* @__PURE__ */ e("div", { className: "max-w-full", children: a }),
90
- i && /* @__PURE__ */ e("div", { className: "max-w-full", children: i })
112
+ r && /* @__PURE__ */ e("div", { className: "max-w-full", children: r })
91
113
  ]
92
114
  }
93
115
  )
94
116
  }
95
117
  ),
96
- f && /* @__PURE__ */ e(
118
+ c && /* @__PURE__ */ e(
97
119
  "div",
98
120
  {
99
- ref: y,
100
- className: m(
121
+ ref: j,
122
+ className: i(
101
123
  "flex max-w-full justify-end",
102
- c ? "order-3 self-end" : "col-start-3 justify-self-end"
124
+ n ? "order-3 self-end" : "col-start-3 justify-self-end"
103
125
  ),
104
- children: /* @__PURE__ */ e("div", { className: "flex max-w-full flex-wrap items-center gap-8", children: f })
126
+ children: /* @__PURE__ */ e("div", { className: "flex max-w-full flex-wrap items-center gap-8", children: c })
105
127
  }
106
128
  )
107
129
  ]
108
130
  }
109
131
  ) })),
110
- /* @__PURE__ */ e("div", { className: "OwpSection-body flex min-h-0 flex-1 flex-col", children: t })
132
+ /* @__PURE__ */ e("div", { className: "OwpSection-body flex min-h-0 flex-1 flex-col", children: N })
111
133
  ] });
112
134
  }, "OwpSection");
113
135
  export {
114
- z as OwpSection
136
+ q as OwpSection
115
137
  };
116
138
  //# sourceMappingURL=OwpSection.js.map