@owp/core 2.5.34 → 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 (108) hide show
  1. package/dist/_virtual/index3.js +2 -2
  2. package/dist/_virtual/index4.js +2 -2
  3. package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js +68 -62
  4. package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js.map +1 -1
  5. package/dist/components/OwpDialog/OwpAlertDialog.js +19 -18
  6. package/dist/components/OwpDialog/OwpAlertDialog.js.map +1 -1
  7. package/dist/components/OwpDialog/OwpDialog.js +34 -31
  8. package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
  9. package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js +18 -0
  10. package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js.map +1 -0
  11. package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js +25 -15
  12. package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js.map +1 -1
  13. package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
  14. package/dist/components/OwpNumberField/OwpNumberField.js +45 -24
  15. package/dist/components/OwpNumberField/OwpNumberField.js.map +1 -1
  16. package/dist/components/OwpScrollbars/OwpScrollbars.js +79 -52
  17. package/dist/components/OwpScrollbars/OwpScrollbars.js.map +1 -1
  18. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +157 -157
  19. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
  20. package/dist/components/OwpTable/OwpDataTable.js +377 -342
  21. package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
  22. package/dist/components/OwpTable/OwpTable.js +20 -19
  23. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  24. package/dist/components/OwpTable/internal/OwpTableBase.js +81 -78
  25. package/dist/components/OwpTable/internal/OwpTableBase.js.map +1 -1
  26. package/dist/components/OwpTable/internal/treeGridTableStyle.js +88 -31
  27. package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
  28. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +304 -262
  29. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  30. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +282 -277
  31. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  32. package/dist/configs/layoutConfig.js +0 -6
  33. package/dist/configs/layoutConfig.js.map +1 -1
  34. package/dist/constants/treeGrid.js +59 -46
  35. package/dist/constants/treeGrid.js.map +1 -1
  36. package/dist/constants.js +18 -18
  37. package/dist/constants.js.map +1 -1
  38. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +15 -15
  39. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
  40. package/dist/hooks/internal/useNavbar.js +4 -4
  41. package/dist/hooks/useConfirm.js +1 -1
  42. package/dist/hooks/useConfirm.js.map +1 -1
  43. package/dist/hooks/useOwpDialogs.js +19 -0
  44. package/dist/hooks/useOwpDialogs.js.map +1 -0
  45. package/dist/hooks.js +34 -32
  46. package/dist/hooks.js.map +1 -1
  47. package/dist/index.js +69 -71
  48. package/dist/index.js.map +1 -1
  49. package/dist/layout/Layout.js +23 -27
  50. package/dist/layout/Layout.js.map +1 -1
  51. package/dist/layout/components/layouts/FooterLayout.js.map +1 -1
  52. package/dist/layout/components/menus/PasswordChangeMenu.js +25 -25
  53. package/dist/layout/components/menus/PasswordChangeMenu.js.map +1 -1
  54. package/dist/layout/components/toggles/NavigationSearchToggle.js +1 -1
  55. package/dist/layout/components/toggles/NavigationSearchToggle.js.map +1 -1
  56. package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
  57. package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
  58. package/dist/layout/components/toggles/ThemePreviewToggle.js +14 -14
  59. package/dist/layout/components/toggles/ThemePreviewToggle.js.map +1 -1
  60. package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +1 -1
  61. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/index.js +1 -1
  62. package/dist/owp-app.css +1 -1
  63. package/dist/types/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.d.ts +5 -3
  64. package/dist/types/components/OwpDialog/OwpAlertDialog.d.ts +1 -1
  65. package/dist/types/components/OwpDialog/internal/useDialogOpenFocusCleanup.d.ts +5 -0
  66. package/dist/types/components/OwpErrorBoundary/OwpErrorBoundary.d.ts +8 -14
  67. package/dist/types/components/OwpNumberField/OwpNumberField.d.ts +18 -4
  68. package/dist/types/components/OwpScrollbars/OwpScrollbars.d.ts +28 -14
  69. package/dist/types/components/OwpTable/internal/OwpTableBase.d.ts +3 -1
  70. package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +61 -2
  71. package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +2 -1
  72. package/dist/types/configs/layoutConfig.d.ts +0 -6
  73. package/dist/types/constants/index.d.ts +0 -1
  74. package/dist/types/constants/treeGrid.d.ts +9 -0
  75. package/dist/types/features/themePreview/dialogs/ThemePreviewDialog.d.ts +1 -1
  76. package/dist/types/hooks/index.d.ts +1 -0
  77. package/dist/types/hooks/useOwpDialogs.d.ts +5 -0
  78. package/dist/types/hooks/useOwpSettings.d.ts +0 -6
  79. package/dist/types/index.d.ts +0 -1
  80. package/dist/types/store/atoms/owpSettingsAtoms.d.ts +0 -6
  81. package/dist/types/types/OwpDialogTypes.d.ts +1 -0
  82. package/dist/types/types/OwpRouteTypes.d.ts +25 -0
  83. package/dist/types/types/index.d.ts +2 -0
  84. package/dist/types/utils/index.d.ts +0 -1
  85. package/dist/types/utils/internal/blurActiveElement.d.ts +4 -0
  86. package/dist/utils/internal/blurActiveElement.js +12 -0
  87. package/dist/utils/internal/blurActiveElement.js.map +1 -0
  88. package/dist/utils/{navigationUtils.js → internal/navigationUtils.js} +3 -3
  89. package/dist/utils/internal/navigationUtils.js.map +1 -0
  90. package/dist/utils.js +23 -25
  91. package/dist/utils.js.map +1 -1
  92. package/package.json +1 -1
  93. package/dist/components/OwpEventEmitter/OwpEventEmitter.js +0 -51
  94. package/dist/components/OwpEventEmitter/OwpEventEmitter.js.map +0 -1
  95. package/dist/layout/components/layouts/LeftSideLayout.js +0 -13
  96. package/dist/layout/components/layouts/LeftSideLayout.js.map +0 -1
  97. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js +0 -66
  98. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js.map +0 -1
  99. package/dist/node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/css/perfect-scrollbar.css +0 -1
  100. package/dist/types/components/OwpEventEmitter/OwpEventEmitter.d.ts +0 -27
  101. package/dist/types/components/OwpEventEmitter/index.d.ts +0 -1
  102. package/dist/types/layout/components/layouts/LeftSideLayout.d.ts +0 -6
  103. package/dist/types/utils/common/OwpUtils.d.ts +0 -119
  104. package/dist/types/utils/common/index.d.ts +0 -1
  105. package/dist/utils/common/OwpUtils.js +0 -196
  106. package/dist/utils/common/OwpUtils.js.map +0 -1
  107. package/dist/utils/navigationUtils.js.map +0 -1
  108. /package/dist/types/utils/{navigationUtils.d.ts → internal/navigationUtils.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordChangeMenu.js","sources":["../../../../src/layout/components/menus/PasswordChangeMenu.tsx"],"sourcesContent":["import { OwpDialog as Dialog } from '@/components/OwpDialog';\nimport { OwpSvgIcon as SvgIcon } from '@/components/OwpSvgIcon';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useStorage } from '@/hooks/useStorage';\nimport Visibility from '@mui/icons-material/Visibility';\nimport VisibilityOff from '@mui/icons-material/VisibilityOff';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport MenuItem from '@mui/material/MenuItem';\nimport TextField from '@mui/material/TextField';\nimport { useMutation } from '@tanstack/react-query';\nimport { DialogProps, useDialogs } from '@toolpad/core/useDialogs';\nimport { clamp } from 'es-toolkit';\nimport { toString } from 'es-toolkit/compat';\nimport { useMemo, useState } from 'react';\nimport { Controller, useForm } from 'react-hook-form';\n\nconst SUCCESS = 'success';\nconst FAIL = 'fail';\nconst PASSWORD_ALLOWED_SPECIAL_CHARS = `!@#$%^&*()_-+=[]{}:;'\",.<>/?\\`~|\\\\`;\n\n/**\n * 정규식 문자 클래스 이스케이프\n * @param value 원본 문자열\n */\nconst escapeRegExpCharacterClass = (value: string) => value.replace(/[[\\]\\\\^-]/g, '\\\\$&');\n\nconst ESCAPED_PASSWORD_SPECIAL_CHARS = escapeRegExpCharacterClass(PASSWORD_ALLOWED_SPECIAL_CHARS);\nconst PASSWORD_SPECIAL_CHAR_PATTERN = new RegExp(`[${ESCAPED_PASSWORD_SPECIAL_CHARS}]`);\nconst DISALLOWED_PASSWORD_CHAR_PATTERN = new RegExp(\n `[^A-Za-z0-9${ESCAPED_PASSWORD_SPECIAL_CHARS}]`,\n 'g',\n);\n\ntype FormValues = { password: string; confirm: string };\ntype PasswordChangeMenuProps = { onAction?: () => void };\n\n/**\n * 비밀번호 허용문자 정규화\n * @param value 입력 문자열\n */\nconst sanitizePasswordValue = (value: string) => value.replace(DISALLOWED_PASSWORD_CHAR_PATTERN, '');\n\n/**\n * Password change dialog content.\n */\nfunction PasswordChangeContent() {\n const { t } = useOwpTranslation();\n\n const STRENGTH = {\n Weak: t('Pages.ChangePassword.label.약함'),\n Medium: t('Pages.ChangePassword.label.보통'),\n Strong: t('Pages.ChangePassword.label.강력'),\n } as const;\n\n const { control, handleSubmit, watch, reset } = useForm<FormValues>({\n defaultValues: { password: '', confirm: '' },\n });\n\n const [showPwd, setShowPwd] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n const [done, setDone] = useState<typeof SUCCESS | typeof FAIL | null>(null);\n\n const currentUser = useGetCurrentUser();\n const { getEnv } = useStorage();\n\n const env = useMemo(() => {\n try {\n return getEnv();\n } catch (error) {\n console.error('🚀 ~ getEnv ~ error:', error);\n return {};\n }\n }, [getEnv]);\n\n const pwd = watch('password');\n const confirm = watch('confirm');\n\n const rules = useMemo(() => {\n const len = pwd.length >= 8;\n const hasLetter = /[A-Za-z]/.test(pwd);\n const hasNum = /\\d/.test(pwd);\n const hasSpecial = PASSWORD_SPECIAL_CHAR_PATTERN.test(pwd);\n const match = pwd === confirm && pwd.length > 0;\n const valid = len && hasLetter && hasNum && hasSpecial;\n const score = [len, hasLetter, hasNum, hasSpecial].filter(Boolean).length;\n const strength = score <= 2 ? 'Weak' : score === 3 ? 'Medium' : 'Strong';\n return { len, hasLetter, hasNum, hasSpecial, match, valid, score, strength };\n }, [pwd, confirm]);\n\n const pct = clamp((rules.score / 4) * 100, 0, 100);\n const colors = { Weak: 'bg-red-500', Medium: 'bg-yellow-500', Strong: 'bg-green-500' };\n\n const passwordChangeMutation = useMutation({\n mutationFn: ({ password }: Pick<FormValues, 'password'>) =>\n updateUserPassword({\n apiBaseUrl: env?.apiBaseUrl,\n password,\n userSeq: currentUser?.USERSEQ,\n }),\n onSuccess: (resultCode) => {\n setDone(resultCode);\n\n if (resultCode === SUCCESS) {\n reset();\n }\n },\n });\n\n const submit = async ({ password }: FormValues) => {\n if (!rules.valid || !rules.match) {\n return;\n }\n\n setDone(null);\n await passwordChangeMutation.mutateAsync({ password });\n };\n\n return (\n <form onSubmit={handleSubmit(submit)} className=\"w-full max-w-lg space-y-20\">\n <div className=\"space-y-4\">\n <Controller\n name=\"password\"\n control={control}\n render={({ field }) => (\n <TextField\n {...field}\n autoFocus\n label={t('Pages.ChangePassword.label.새 비밀번호')}\n variant=\"outlined\"\n fullWidth\n type={showPwd ? 'text' : 'password'}\n slotProps={{\n inputLabel: {\n sx: {\n backgroundColor: 'background.paper',\n px: 0.5,\n lineHeight: 1.2,\n zIndex: 1,\n },\n },\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton onClick={() => setShowPwd((v) => !v)}>\n {showPwd ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n onChange={(e) => {\n field.onChange(sanitizePasswordValue(e.target.value));\n\n if (done !== null) {\n setDone(null);\n }\n }}\n helperText={t('Message.8자 이상, 영문·숫자·특수문자 포함')}\n />\n )}\n />\n {!!pwd && (\n <div className=\"space-y-4\">\n <div className=\"h-2 w-full bg-gray-200 rounded\">\n <div\n className={`h-3 rounded transition-all ${colors[rules.strength]}`}\n style={{ width: `${pct}%` }}\n />\n </div>\n <div className=\"flex justify-end text-sm font-medium text-gray-700\">\n <span className={`ml-1 ${colors[rules.strength].replace('bg-', 'text-')}`}>\n {STRENGTH[rules.strength]}\n </span>\n </div>\n </div>\n )}\n </div>\n <Controller\n name=\"confirm\"\n control={control}\n render={({ field }) => (\n <TextField\n {...field}\n label={t('Pages.ChangePassword.label.비밀번호 확인')}\n variant=\"outlined\"\n fullWidth\n type={showConfirm ? 'text' : 'password'}\n slotProps={{\n inputLabel: {\n sx: {\n backgroundColor: 'background.paper',\n px: 0.5,\n lineHeight: 1.2,\n zIndex: 1,\n },\n },\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton onClick={() => setShowConfirm((v) => !v)}>\n {showConfirm ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n onChange={(e) => {\n field.onChange(sanitizePasswordValue(e.target.value));\n\n if (done !== null) {\n setDone(null);\n }\n }}\n error={!!field.value && !rules.match}\n helperText={\n !field.value\n ? ''\n : !rules.match\n ? t('Message.비밀번호가 일치하지 않습니다.')\n : t('Message.일치합니다.')\n }\n />\n )}\n />\n\n <div className=\"grid grid-cols-2 gap-2 ml-12 text-md\">\n <Rule ok={rules.len} text={t('Message.8자 이상')} />\n <Rule ok={rules.hasLetter} text={t('Message.영문 포함')} />\n <Rule ok={rules.hasNum} text={t('Message.숫자 포함')} />\n <Rule ok={rules.hasSpecial} text={t('Message.특수문자 포함')} />\n <Rule ok={rules.match} text={t('Message.비밀번호 일치')} />\n </div>\n\n <Button\n fullWidth\n type=\"submit\"\n variant=\"contained\"\n color=\"secondary\"\n loading={passwordChangeMutation.isPending}\n disabled={!rules.valid || !rules.match}\n sx={{ letterSpacing: '0.06em' }}\n >\n {t('Button.변경')}\n </Button>\n\n {done === SUCCESS && (\n <Alert severity=\"success\">\n {t('Message.비밀번호가 변경되었습니다.')}\n </Alert>\n )}\n {done === FAIL && (\n <Alert severity=\"error\">\n {t('Message.변경에 실패했습니다. 다시 시도해주세요.')}\n </Alert>\n )}\n </form>\n );\n}\n\nfunction PasswordChangeDialog({ open, onClose }: DialogProps) {\n const { t } = useOwpTranslation();\n\n return (\n <Dialog\n title={t('Title.패스워드 변경')}\n canConfirm={false}\n cancelText={t('Button.닫기')}\n open={open}\n onClose={() => onClose()}\n maxWidth=\"xs\"\n >\n <PasswordChangeContent />\n </Dialog>\n );\n}\n\n/**\n * Password change menu item.\n */\nfunction PasswordChangeMenu(props: PasswordChangeMenuProps) {\n const { onAction } = props;\n const { t } = useOwpTranslation();\n const dialogs = useDialogs();\n\n return (\n <MenuItem\n onClick={async () => {\n onAction?.();\n dialogs.open(PasswordChangeDialog);\n }}\n >\n <ListItemIcon className=\"min-w-36\">\n <SvgIcon>heroicons-outline:pencil-square</SvgIcon>\n </ListItemIcon>\n <ListItemText\n primary={t('Button.패스워드 변경')}\n sx={{ '& .MuiListItemText-primary': { letterSpacing: '0.02em' } }}\n />\n </MenuItem>\n );\n}\n\nconst Rule = ({ ok, text }: { ok: boolean; text: string }) => (\n <div className=\"flex items-center gap-4\">\n <span className={`w-6 h-6 rounded-full ${ok ? 'bg-green-500' : 'bg-gray-300'}`} />\n <span className={ok ? 'text-gray-800' : 'text-gray-500'}>{text}</span>\n </div>\n);\n\nasync function updateUserPassword({\n password,\n userSeq,\n apiBaseUrl,\n}: {\n password?: string;\n apiBaseUrl?: string;\n userSeq?: number;\n}): Promise<typeof SUCCESS | typeof FAIL> {\n if (!apiBaseUrl || !password || userSeq == null) {\n return FAIL;\n }\n\n try {\n const res = await fetch(`${apiBaseUrl}/updateIpxUser_USERPASSWORD`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n 'IPX_USER.USERPASSWORD': password,\n 'IPX_USER.USERSEQ': toString(userSeq),\n }),\n });\n\n if (!res.ok) {\n return FAIL;\n }\n const result = await res.json();\n\n if (result?.resultCode === 'STATUS_1' && result?.resultCount === 1) {\n return SUCCESS;\n }\n } catch (error) {\n console.error(error);\n }\n\n return FAIL;\n}\n\nexport default PasswordChangeMenu;\n"],"names":["SUCCESS","FAIL","PASSWORD_ALLOWED_SPECIAL_CHARS","escapeRegExpCharacterClass","__name","value","ESCAPED_PASSWORD_SPECIAL_CHARS","PASSWORD_SPECIAL_CHAR_PATTERN","DISALLOWED_PASSWORD_CHAR_PATTERN","sanitizePasswordValue","PasswordChangeContent","t","useOwpTranslation","STRENGTH","control","handleSubmit","watch","reset","useForm","showPwd","setShowPwd","useState","showConfirm","setShowConfirm","done","setDone","currentUser","useGetCurrentUser","getEnv","useStorage","env","useMemo","error","pwd","confirm","rules","len","hasLetter","hasNum","hasSpecial","match","valid","score","strength","pct","clamp","colors","passwordChangeMutation","useMutation","password","updateUserPassword","resultCode","jsxs","jsx","Controller","field","TextField","InputAdornment","IconButton","v","VisibilityOff","Visibility","e","Rule","Button","Alert","PasswordChangeDialog","open","onClose","Dialog","PasswordChangeMenu","props","onAction","dialogs","useDialogs","MenuItem","ListItemIcon","SvgIcon","ListItemText","ok","text","userSeq","apiBaseUrl","res","toString","result"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAsBA,MAAMA,IAAU,WACVC,IAAO,QACPC,KAAiC,sCAMjCC,KAA6B,gBAAAC,EAAA,CAACC,MAAkBA,EAAM,QAAQ,cAAc,MAAM,GAArD,+BAE7BC,IAAiCH,GAA2BD,EAA8B,GAC1FK,KAAgC,IAAI,OAAO,IAAID,CAA8B,GAAG,GAChFE,KAAmC,IAAI;AAAA,EAC3C,cAAcF,CAA8B;AAAA,EAC5C;AACF,GASMG,IAAwB,gBAAAL,EAAA,CAACC,MAAkBA,EAAM,QAAQG,IAAkC,EAAE,GAArE;AAK9B,SAASE,KAAwB;AAC/B,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GAERC,IAAW;AAAA,IACf,MAAMF,EAAE,+BAA+B;AAAA,IACvC,QAAQA,EAAE,+BAA+B;AAAA,IACzC,QAAQA,EAAE,+BAA+B;AAAA,EAAA,GAGrC,EAAE,SAAAG,GAAS,cAAAC,GAAc,OAAAC,GAAO,OAAAC,EAAA,IAAUC,GAAoB;AAAA,IAClE,eAAe,EAAE,UAAU,IAAI,SAAS,GAAA;AAAA,EAAG,CAC5C,GAEK,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtC,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAK,GAC9C,CAACG,GAAMC,CAAO,IAAIJ,EAA8C,IAAI,GAEpEK,IAAcC,EAAA,GACd,EAAE,QAAAC,EAAA,IAAWC,EAAA,GAEbC,IAAMC,EAAQ,MAAM;AACxB,QAAI;AACF,aAAOH,EAAA;AAAA,IACT,SAASI,GAAO;AACd,qBAAQ,MAAM,wBAAwBA,CAAK,GACpC,CAAA;AAAA,IACT;AAAA,EACF,GAAG,CAACJ,CAAM,CAAC,GAELK,IAAMjB,EAAM,UAAU,GACtBkB,IAAUlB,EAAM,SAAS,GAEzBmB,IAAQJ,EAAQ,MAAM;AAC1B,UAAMK,IAAMH,EAAI,UAAU,GACpBI,IAAY,WAAW,KAAKJ,CAAG,GAC/BK,IAAS,KAAK,KAAKL,CAAG,GACtBM,IAAahC,GAA8B,KAAK0B,CAAG,GACnDO,IAAQP,MAAQC,KAAWD,EAAI,SAAS,GACxCQ,IAAQL,KAAOC,KAAaC,KAAUC,GACtCG,IAAQ,CAACN,GAAKC,GAAWC,GAAQC,CAAU,EAAE,OAAO,OAAO,EAAE,QAC7DI,IAAWD,KAAS,IAAI,SAASA,MAAU,IAAI,WAAW;AAChE,WAAO,EAAE,KAAAN,GAAK,WAAAC,GAAW,QAAAC,GAAQ,YAAAC,GAAY,OAAAC,GAAO,OAAAC,GAAO,OAAAC,GAAO,UAAAC,EAAA;AAAA,EACpE,GAAG,CAACV,GAAKC,CAAO,CAAC,GAEXU,IAAMC,GAAOV,EAAM,QAAQ,IAAK,KAAK,GAAG,GAAG,GAC3CW,IAAS,EAAE,MAAM,cAAc,QAAQ,iBAAiB,QAAQ,eAAA,GAEhEC,IAAyBC,GAAY;AAAA,IACzC,YAAY,gBAAA5C,EAAA,CAAC,EAAE,UAAA6C,EAAA,MACbC,GAAmB;AAAA,MACjB,YAAYpB,KAAA,gBAAAA,EAAK;AAAA,MACjB,UAAAmB;AAAA,MACA,SAASvB,KAAA,gBAAAA,EAAa;AAAA,IAAA,CACvB,GALS;AAAA,IAMZ,WAAW,gBAAAtB,EAAA,CAAC+C,MAAe;AACzB,MAAA1B,EAAQ0B,CAAU,GAEdA,MAAenD,KACjBiB,EAAA;AAAA,IAEJ,GANW;AAAA,EAMX,CACD;AAWD,2BACG,QAAA,EAAK,UAAUF,EAVH,gBAAAX,EAAA,OAAO,EAAE,UAAA6C,QAA2B;AACjD,IAAI,CAACd,EAAM,SAAS,CAACA,EAAM,UAI3BV,EAAQ,IAAI,GACZ,MAAMsB,EAAuB,YAAY,EAAE,UAAAE,GAAU;AAAA,EACvD,GAPe,SAUsB,GAAG,WAAU,8BAC9C,UAAA;AAAA,IAAA,gBAAAG,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAAxC;AAAA,UACA,QAAQ,gBAAAV,EAAA,CAAC,EAAE,OAAAmD,EAAA,MACT,gBAAAF;AAAA,YAACG;AAAA,YAAA;AAAA,cACE,GAAGD;AAAA,cACJ,WAAS;AAAA,cACT,OAAO5C,EAAE,mCAAmC;AAAA,cAC5C,SAAQ;AAAA,cACR,WAAS;AAAA,cACT,MAAMQ,IAAU,SAAS;AAAA,cACzB,WAAW;AAAA,gBACT,YAAY;AAAA,kBACV,IAAI;AAAA,oBACF,iBAAiB;AAAA,oBACjB,IAAI;AAAA,oBACJ,YAAY;AAAA,oBACZ,QAAQ;AAAA,kBAAA;AAAA,gBACV;AAAA,gBAEF,OAAO;AAAA,kBACL,gCACGsC,GAAA,EAAe,UAAS,OACvB,UAAA,gBAAAJ,EAACK,GAAA,EAAW,SAAS,gBAAAtD,EAAA,MAAMgB,EAAW,CAACuC,MAAM,CAACA,CAAC,GAA1B,YAClB,UAAAxC,IAAU,gBAAAkC,EAACO,KAAc,IAAK,gBAAAP,EAACQ,GAAA,CAAA,CAAW,EAAA,CAC7C,EAAA,CACF;AAAA,gBAAA;AAAA,cAEJ;AAAA,cAEF,UAAU,gBAAAzD,EAAA,CAAC0D,MAAM;AACf,gBAAAP,EAAM,SAAS9C,EAAsBqD,EAAE,OAAO,KAAK,CAAC,GAEhDtC,MAAS,QACXC,EAAQ,IAAI;AAAA,cAEhB,GANU;AAAA,cAOV,YAAYd,EAAE,8BAA8B;AAAA,YAAA;AAAA,UAAA,GAlCxC;AAAA,QAmCN;AAAA,MAAA;AAAA,MAGH,CAAC,CAACsB,KACD,gBAAAmB,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,8BAA8BP,EAAOX,EAAM,QAAQ,CAAC;AAAA,YAC/D,OAAO,EAAE,OAAO,GAAGS,CAAG,IAAA;AAAA,UAAI;AAAA,QAAA,GAE9B;AAAA,QACA,gBAAAS,EAAC,SAAI,WAAU,sDACb,4BAAC,QAAA,EAAK,WAAW,QAAQP,EAAOX,EAAM,QAAQ,EAAE,QAAQ,OAAO,OAAO,CAAC,IACpE,UAAAtB,EAASsB,EAAM,QAAQ,EAAA,CAC1B,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GAEJ;AAAA,IACA,gBAAAkB;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAAxC;AAAA,QACA,QAAQ,gBAAAV,EAAA,CAAC,EAAE,OAAAmD,EAAA,MACT,gBAAAF;AAAA,UAACG;AAAA,UAAA;AAAA,YACE,GAAGD;AAAA,YACJ,OAAO5C,EAAE,oCAAoC;AAAA,YAC7C,SAAQ;AAAA,YACR,WAAS;AAAA,YACT,MAAMW,IAAc,SAAS;AAAA,YAC7B,WAAW;AAAA,cACT,YAAY;AAAA,gBACV,IAAI;AAAA,kBACF,iBAAiB;AAAA,kBACjB,IAAI;AAAA,kBACJ,YAAY;AAAA,kBACZ,QAAQ;AAAA,gBAAA;AAAA,cACV;AAAA,cAEF,OAAO;AAAA,gBACL,gCACGmC,GAAA,EAAe,UAAS,OACvB,UAAA,gBAAAJ,EAACK,GAAA,EAAW,SAAS,gBAAAtD,EAAA,MAAMmB,EAAe,CAACoC,MAAM,CAACA,CAAC,GAA9B,YAClB,UAAArC,IAAc,gBAAA+B,EAACO,KAAc,IAAK,gBAAAP,EAACQ,GAAA,CAAA,CAAW,EAAA,CACjD,EAAA,CACF;AAAA,cAAA;AAAA,YAEJ;AAAA,YAEF,UAAU,gBAAAzD,EAAA,CAAC0D,MAAM;AACf,cAAAP,EAAM,SAAS9C,EAAsBqD,EAAE,OAAO,KAAK,CAAC,GAEhDtC,MAAS,QACXC,EAAQ,IAAI;AAAA,YAEhB,GANU;AAAA,YAOV,OAAO,CAAC,CAAC8B,EAAM,SAAS,CAACpB,EAAM;AAAA,YAC/B,YACGoB,EAAM,QAEFpB,EAAM,QAELxB,EAAE,gBAAgB,IADlBA,EAAE,0BAA0B,IAF9B;AAAA,UAGoB;AAAA,QAAA,GAvCtB;AAAA,MAyCN;AAAA,IAAA;AAAA,IAIJ,gBAAAyC,EAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,MAAA,gBAAAC,EAACU,KAAK,IAAI5B,EAAM,KAAK,MAAMxB,EAAE,eAAe,GAAG;AAAA,MAC/C,gBAAA0C,EAACU,KAAK,IAAI5B,EAAM,WAAW,MAAMxB,EAAE,eAAe,GAAG;AAAA,MACrD,gBAAA0C,EAACU,KAAK,IAAI5B,EAAM,QAAQ,MAAMxB,EAAE,eAAe,GAAG;AAAA,MAClD,gBAAA0C,EAACU,KAAK,IAAI5B,EAAM,YAAY,MAAMxB,EAAE,iBAAiB,GAAG;AAAA,MACxD,gBAAA0C,EAACU,KAAK,IAAI5B,EAAM,OAAO,MAAMxB,EAAE,iBAAiB,EAAA,CAAG;AAAA,IAAA,GACrD;AAAA,IAEA,gBAAA0C;AAAA,MAACW;AAAA,MAAA;AAAA,QACC,WAAS;AAAA,QACT,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,SAASjB,EAAuB;AAAA,QAChC,UAAU,CAACZ,EAAM,SAAS,CAACA,EAAM;AAAA,QACjC,IAAI,EAAE,eAAe,SAAA;AAAA,QAEpB,YAAE,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAGfX,MAASxB,KACR,gBAAAqD,EAACY,GAAA,EAAM,UAAS,WACb,UAAAtD,EAAE,wBAAwB,GAC7B;AAAA,IAEDa,MAASvB,KACR,gBAAAoD,EAACY,GAAA,EAAM,UAAS,SACb,UAAAtD,EAAE,gCAAgC,EAAA,CACrC;AAAA,EAAA,GAEJ;AAEJ;AApNSP,EAAAM,IAAA;AAsNT,SAASwD,GAAqB,EAAE,MAAAC,GAAM,SAAAC,KAAwB;AAC5D,QAAM,EAAE,GAAAzD,EAAA,IAAMC,EAAA;AAEd,SACE,gBAAAyC;AAAA,IAACgB;AAAAA,IAAA;AAAA,MACC,OAAO1D,EAAE,eAAe;AAAA,MACxB,YAAY;AAAA,MACZ,YAAYA,EAAE,WAAW;AAAA,MACzB,MAAAwD;AAAA,MACA,SAAS,gBAAA/D,EAAA,MAAMgE,EAAA,GAAN;AAAA,MACT,UAAS;AAAA,MAET,4BAAC1D,IAAA,CAAA,CAAsB;AAAA,IAAA;AAAA,EAAA;AAG7B;AAfSN,EAAA8D,IAAA;AAoBT,SAASI,GAAmBC,GAAgC;AAC1D,QAAM,EAAE,UAAAC,MAAaD,GACf,EAAE,GAAA5D,EAAA,IAAMC,EAAA,GACR6D,IAAUC,GAAA;AAEhB,SACE,gBAAAtB;AAAA,IAACuB;AAAA,IAAA;AAAA,MACC,SAAS,gBAAAvE,EAAA,YAAY;AACnB,QAAAoE,KAAA,QAAAA,KACAC,EAAQ,KAAKP,EAAoB;AAAA,MACnC,GAHS;AAAA,MAKT,UAAA;AAAA,QAAA,gBAAAb,EAACuB,KAAa,WAAU,YACtB,UAAA,gBAAAvB,EAACwB,IAAA,EAAQ,6CAA+B,EAAA,CAC1C;AAAA,QACA,gBAAAxB;AAAA,UAACyB;AAAA,UAAA;AAAA,YACC,SAASnE,EAAE,gBAAgB;AAAA,YAC3B,IAAI,EAAE,8BAA8B,EAAE,eAAe,WAAS;AAAA,UAAE;AAAA,QAAA;AAAA,MAClE;AAAA,IAAA;AAAA,EAAA;AAGN;AArBSP,EAAAkE,IAAA;AAuBT,MAAMP,IAAO,gBAAA3D,EAAA,CAAC,EAAE,IAAA2E,GAAI,MAAAC,QAClB,gBAAA5B,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,EAAA,gBAAAC,EAAC,UAAK,WAAW,wBAAwB0B,IAAK,iBAAiB,aAAa,IAAI;AAAA,oBAC/E,QAAA,EAAK,WAAWA,IAAK,kBAAkB,iBAAkB,UAAAC,EAAA,CAAK;AAAA,GACjE,GAJW;AAOb,eAAe9B,GAAmB;AAAA,EAChC,UAAAD;AAAA,EACA,SAAAgC;AAAA,EACA,YAAAC;AACF,GAI0C;AACxC,MAAI,CAACA,KAAc,CAACjC,KAAYgC,KAAW;AACzC,WAAOhF;AAGT,MAAI;AACF,UAAMkF,IAAM,MAAM,MAAM,GAAGD,CAAU,+BAA+B;AAAA,MAClE,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,MAC3B,MAAM,KAAK,UAAU;AAAA,QACnB,yBAAyBjC;AAAA,QACzB,oBAAoBmC,GAASH,CAAO;AAAA,MAAA,CACrC;AAAA,IAAA,CACF;AAED,QAAI,CAACE,EAAI;AACP,aAAOlF;AAET,UAAMoF,IAAS,MAAMF,EAAI,KAAA;AAEzB,SAAIE,KAAA,gBAAAA,EAAQ,gBAAe,eAAcA,KAAA,gBAAAA,EAAQ,iBAAgB;AAC/D,aAAOrF;AAAA,EAEX,SAASgC,GAAO;AACd,YAAQ,MAAMA,CAAK;AAAA,EACrB;AAEA,SAAO/B;AACT;AApCeG,EAAA8C,IAAA;"}
1
+ {"version":3,"file":"PasswordChangeMenu.js","sources":["../../../../src/layout/components/menus/PasswordChangeMenu.tsx"],"sourcesContent":["import { OwpDialog as Dialog } from '@/components/OwpDialog';\nimport { OwpSvgIcon as SvgIcon } from '@/components/OwpSvgIcon';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { useOwpDialogs } from '@/hooks/useOwpDialogs';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useStorage } from '@/hooks/useStorage';\nimport type { DialogProps } from '@/types/OwpDialogTypes';\nimport Visibility from '@mui/icons-material/Visibility';\nimport VisibilityOff from '@mui/icons-material/VisibilityOff';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport MenuItem from '@mui/material/MenuItem';\nimport TextField from '@mui/material/TextField';\nimport { useMutation } from '@tanstack/react-query';\nimport { clamp } from 'es-toolkit';\nimport { toString } from 'es-toolkit/compat';\nimport { useMemo, useState } from 'react';\nimport { Controller, useForm } from 'react-hook-form';\n\nconst SUCCESS = 'success';\nconst FAIL = 'fail';\nconst PASSWORD_ALLOWED_SPECIAL_CHARS = `!@#$%^&*()_-+=[]{}:;'\",.<>/?\\`~|\\\\`;\n\n/**\n * 정규식 문자 클래스 이스케이프\n * @param value 원본 문자열\n */\nconst escapeRegExpCharacterClass = (value: string) => value.replace(/[[\\]\\\\^-]/g, '\\\\$&');\n\nconst ESCAPED_PASSWORD_SPECIAL_CHARS = escapeRegExpCharacterClass(PASSWORD_ALLOWED_SPECIAL_CHARS);\nconst PASSWORD_SPECIAL_CHAR_PATTERN = new RegExp(`[${ESCAPED_PASSWORD_SPECIAL_CHARS}]`);\nconst DISALLOWED_PASSWORD_CHAR_PATTERN = new RegExp(\n `[^A-Za-z0-9${ESCAPED_PASSWORD_SPECIAL_CHARS}]`,\n 'g',\n);\n\ntype FormValues = { password: string; confirm: string };\ntype PasswordChangeMenuProps = { onAction?: () => void };\n\n/**\n * 비밀번호 허용문자 정규화\n * @param value 입력 문자열\n */\nconst sanitizePasswordValue = (value: string) => value.replace(DISALLOWED_PASSWORD_CHAR_PATTERN, '');\n\n/**\n * Password change dialog content.\n */\nfunction PasswordChangeContent() {\n const { t } = useOwpTranslation();\n\n const STRENGTH = {\n Weak: t('Pages.ChangePassword.label.약함'),\n Medium: t('Pages.ChangePassword.label.보통'),\n Strong: t('Pages.ChangePassword.label.강력'),\n } as const;\n\n const { control, handleSubmit, watch, reset } = useForm<FormValues>({\n defaultValues: { password: '', confirm: '' },\n });\n\n const [showPwd, setShowPwd] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n const [done, setDone] = useState<typeof SUCCESS | typeof FAIL | null>(null);\n\n const currentUser = useGetCurrentUser();\n const { getEnv } = useStorage();\n\n const env = useMemo(() => {\n try {\n return getEnv();\n } catch (error) {\n console.error('🚀 ~ getEnv ~ error:', error);\n return {};\n }\n }, [getEnv]);\n\n const pwd = watch('password');\n const confirm = watch('confirm');\n\n const rules = useMemo(() => {\n const len = pwd.length >= 8;\n const hasLetter = /[A-Za-z]/.test(pwd);\n const hasNum = /\\d/.test(pwd);\n const hasSpecial = PASSWORD_SPECIAL_CHAR_PATTERN.test(pwd);\n const match = pwd === confirm && pwd.length > 0;\n const valid = len && hasLetter && hasNum && hasSpecial;\n const score = [len, hasLetter, hasNum, hasSpecial].filter(Boolean).length;\n const strength = score <= 2 ? 'Weak' : score === 3 ? 'Medium' : 'Strong';\n return { len, hasLetter, hasNum, hasSpecial, match, valid, score, strength };\n }, [pwd, confirm]);\n\n const pct = clamp((rules.score / 4) * 100, 0, 100);\n const colors = { Weak: 'bg-red-500', Medium: 'bg-yellow-500', Strong: 'bg-green-500' };\n\n const passwordChangeMutation = useMutation({\n mutationFn: ({ password }: Pick<FormValues, 'password'>) =>\n updateUserPassword({\n apiBaseUrl: env?.apiBaseUrl,\n password,\n userSeq: currentUser?.USERSEQ,\n }),\n onSuccess: (resultCode) => {\n setDone(resultCode);\n\n if (resultCode === SUCCESS) {\n reset();\n }\n },\n });\n\n const submit = async ({ password }: FormValues) => {\n if (!rules.valid || !rules.match) {\n return;\n }\n\n setDone(null);\n await passwordChangeMutation.mutateAsync({ password });\n };\n\n return (\n <form onSubmit={handleSubmit(submit)} className=\"w-full max-w-lg space-y-20\">\n <div className=\"space-y-4\">\n <Controller\n name=\"password\"\n control={control}\n render={({ field }) => (\n <TextField\n {...field}\n autoFocus\n label={t('Pages.ChangePassword.label.새 비밀번호')}\n variant=\"outlined\"\n fullWidth\n type={showPwd ? 'text' : 'password'}\n slotProps={{\n inputLabel: {\n sx: {\n backgroundColor: 'background.paper',\n px: 0.5,\n lineHeight: 1.2,\n zIndex: 1,\n },\n },\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton onClick={() => setShowPwd((v) => !v)}>\n {showPwd ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n onChange={(e) => {\n field.onChange(sanitizePasswordValue(e.target.value));\n\n if (done !== null) {\n setDone(null);\n }\n }}\n helperText={t('Message.8자 이상, 영문·숫자·특수문자 포함')}\n />\n )}\n />\n {!!pwd && (\n <div className=\"space-y-4\">\n <div className=\"h-2 w-full bg-gray-200 rounded\">\n <div\n className={`h-3 rounded transition-all ${colors[rules.strength]}`}\n style={{ width: `${pct}%` }}\n />\n </div>\n <div className=\"flex justify-end text-sm font-medium text-gray-700\">\n <span className={`ml-1 ${colors[rules.strength].replace('bg-', 'text-')}`}>\n {STRENGTH[rules.strength]}\n </span>\n </div>\n </div>\n )}\n </div>\n <Controller\n name=\"confirm\"\n control={control}\n render={({ field }) => (\n <TextField\n {...field}\n label={t('Pages.ChangePassword.label.비밀번호 확인')}\n variant=\"outlined\"\n fullWidth\n type={showConfirm ? 'text' : 'password'}\n slotProps={{\n inputLabel: {\n sx: {\n backgroundColor: 'background.paper',\n px: 0.5,\n lineHeight: 1.2,\n zIndex: 1,\n },\n },\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton onClick={() => setShowConfirm((v) => !v)}>\n {showConfirm ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n onChange={(e) => {\n field.onChange(sanitizePasswordValue(e.target.value));\n\n if (done !== null) {\n setDone(null);\n }\n }}\n error={!!field.value && !rules.match}\n helperText={\n !field.value\n ? ''\n : !rules.match\n ? t('Message.비밀번호가 일치하지 않습니다.')\n : t('Message.일치합니다.')\n }\n />\n )}\n />\n\n <div className=\"grid grid-cols-2 gap-2 ml-12 text-md\">\n <Rule ok={rules.len} text={t('Message.8자 이상')} />\n <Rule ok={rules.hasLetter} text={t('Message.영문 포함')} />\n <Rule ok={rules.hasNum} text={t('Message.숫자 포함')} />\n <Rule ok={rules.hasSpecial} text={t('Message.특수문자 포함')} />\n <Rule ok={rules.match} text={t('Message.비밀번호 일치')} />\n </div>\n\n <Button\n fullWidth\n type=\"submit\"\n variant=\"contained\"\n color=\"secondary\"\n loading={passwordChangeMutation.isPending}\n disabled={!rules.valid || !rules.match}\n sx={{ letterSpacing: '0.06em' }}\n >\n {t('Button.변경')}\n </Button>\n\n {done === SUCCESS && (\n <Alert severity=\"success\">\n {t('Message.비밀번호가 변경되었습니다.')}\n </Alert>\n )}\n {done === FAIL && (\n <Alert severity=\"error\">\n {t('Message.변경에 실패했습니다. 다시 시도해주세요.')}\n </Alert>\n )}\n </form>\n );\n}\n\nfunction PasswordChangeDialog({ open, onClose }: DialogProps) {\n const { t } = useOwpTranslation();\n\n return (\n <Dialog\n title={t('Title.패스워드 변경')}\n canConfirm={false}\n cancelText={t('Button.닫기')}\n open={open}\n onClose={() => onClose()}\n maxWidth=\"xs\"\n >\n <PasswordChangeContent />\n </Dialog>\n );\n}\n\n/**\n * Password change menu item.\n */\nfunction PasswordChangeMenu(props: PasswordChangeMenuProps) {\n const { onAction } = props;\n const { t } = useOwpTranslation();\n const dialogs = useOwpDialogs();\n\n return (\n <MenuItem\n onClick={async () => {\n onAction?.();\n dialogs.open(PasswordChangeDialog);\n }}\n >\n <ListItemIcon className=\"min-w-36\">\n <SvgIcon>heroicons-outline:pencil-square</SvgIcon>\n </ListItemIcon>\n <ListItemText\n primary={t('Button.패스워드 변경')}\n sx={{ '& .MuiListItemText-primary': { letterSpacing: '0.02em' } }}\n />\n </MenuItem>\n );\n}\n\nconst Rule = ({ ok, text }: { ok: boolean; text: string }) => (\n <div className=\"flex items-center gap-4\">\n <span className={`w-6 h-6 rounded-full ${ok ? 'bg-green-500' : 'bg-gray-300'}`} />\n <span className={ok ? 'text-gray-800' : 'text-gray-500'}>{text}</span>\n </div>\n);\n\nasync function updateUserPassword({\n password,\n userSeq,\n apiBaseUrl,\n}: {\n password?: string;\n apiBaseUrl?: string;\n userSeq?: number;\n}): Promise<typeof SUCCESS | typeof FAIL> {\n if (!apiBaseUrl || !password || userSeq == null) {\n return FAIL;\n }\n\n try {\n const res = await fetch(`${apiBaseUrl}/updateIpxUser_USERPASSWORD`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n 'IPX_USER.USERPASSWORD': password,\n 'IPX_USER.USERSEQ': toString(userSeq),\n }),\n });\n\n if (!res.ok) {\n return FAIL;\n }\n const result = await res.json();\n\n if (result?.resultCode === 'STATUS_1' && result?.resultCount === 1) {\n return SUCCESS;\n }\n } catch (error) {\n console.error(error);\n }\n\n return FAIL;\n}\n\nexport default PasswordChangeMenu;\n"],"names":["SUCCESS","FAIL","PASSWORD_ALLOWED_SPECIAL_CHARS","escapeRegExpCharacterClass","__name","value","ESCAPED_PASSWORD_SPECIAL_CHARS","PASSWORD_SPECIAL_CHAR_PATTERN","DISALLOWED_PASSWORD_CHAR_PATTERN","sanitizePasswordValue","PasswordChangeContent","t","useOwpTranslation","STRENGTH","control","handleSubmit","watch","reset","useForm","showPwd","setShowPwd","useState","showConfirm","setShowConfirm","done","setDone","currentUser","useGetCurrentUser","getEnv","useStorage","env","useMemo","error","pwd","confirm","rules","len","hasLetter","hasNum","hasSpecial","match","valid","score","strength","pct","clamp","colors","passwordChangeMutation","useMutation","password","updateUserPassword","resultCode","jsxs","jsx","Controller","field","TextField","InputAdornment","IconButton","v","VisibilityOff","Visibility","e","Rule","Button","Alert","PasswordChangeDialog","open","onClose","Dialog","PasswordChangeMenu","props","onAction","dialogs","useOwpDialogs","MenuItem","ListItemIcon","SvgIcon","ListItemText","ok","text","userSeq","apiBaseUrl","res","toString","result"],"mappings":"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"}
@@ -3,7 +3,7 @@ var r = (e, o) => G(e, "name", { value: o, configurable: !0 });
3
3
  import { jsx as t, jsxs as f, Fragment as H } 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
4
  import { useGetNavigationList as K } from "../../../hooks/useNavigation.js";
5
5
  import { useOwpTranslation as _ } from "../../../hooks/useOwpTranslation.js";
6
- import { OwpNavigationHelper as J } from "../../../utils/navigationUtils.js";
6
+ import { OwpNavigationHelper as J } from "../../../utils/internal/navigationUtils.js";
7
7
  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/UnfoldLess.js";
8
8
  import { Stack as X } from "@mui/material";
9
9
  import Y from "@mui/material/ClickAwayListener";
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationSearchToggle.js","sources":["../../../../src/layout/components/toggles/NavigationSearchToggle.tsx"],"sourcesContent":["import { OwpSvgIcon } from '@/components/OwpSvgIcon';\nimport { useGetNavigationList } from '@/hooks/useNavigation';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport type { OwpFlatNavItemType as FlatNavItemType } from '@/types/OwpNavigationTypes';\nimport { OwpNavigationHelper as NavigationHelper } from '@/utils/navigationUtils';\nimport UnfoldLessIcon from '@mui/icons-material/UnfoldLess';\nimport { Stack } from '@mui/material';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport { grey } from '@mui/material/colors';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport MenuItem from '@mui/material/MenuItem';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport { styled } from '@mui/material/styles';\nimport TextField from '@mui/material/TextField';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport match from 'autosuggest-highlight/match';\nimport parse from 'autosuggest-highlight/parse';\nimport clsx from 'clsx';\nimport { trim } from 'es-toolkit/compat';\nimport { type FormEvent, type ReactNode, useEffect, useMemo, useReducer, useRef } from 'react';\nimport Autosuggest, {\n ChangeEvent,\n RenderInputComponentProps,\n RenderSuggestionParams,\n} from 'react-autosuggest';\nimport { useNavigate } from 'react-router-dom';\nimport { toolbarToggleSx } from './toggleStyles';\n\nconst Root = styled('div')(({ theme }) => ({\n '& .OwpSearch-container': {\n position: 'relative',\n },\n '& .OwpSearch-suggestionsContainerOpen': {\n position: 'absolute',\n zIndex: 1,\n marginTop: theme.spacing(),\n left: 0,\n right: 0,\n },\n '& .OwpSearch-suggestion': {\n display: 'block',\n },\n '& .OwpSearch-suggestionsList': {\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n },\n '& .OwpSearch-input': {\n transition: theme.transitions.create(['background-color'], {\n easing: theme.transitions.easing.easeInOut,\n duration: theme.transitions.duration.short,\n }),\n '&:focus': {\n backgroundColor: theme.palette.background.paper,\n },\n },\n}));\n\ntype RenderInputComponentType = {\n variant?: 'basic' | 'standard';\n inputRef?: (node: HTMLInputElement) => void;\n ref?: (node: HTMLInputElement) => void;\n key?: string;\n};\n\nfunction renderInputComponent(props: RenderInputComponentProps) {\n const { variant, ref, inputRef = () => {}, key, ...other } = props as RenderInputComponentType;\n return (\n <div className=\"relative w-full\" key={key}>\n {variant === 'basic' ? (\n \n <>\n <TextField\n fullWidth\n autoComplete=\"off\"\n variant=\"outlined\"\n {...other}\n slotProps={{\n input: {\n name: 'auto-complete-search',\n role: 'search',\n inputRef: (node: HTMLInputElement) => {\n ref?.(node);\n inputRef(node);\n },\n classes: {\n input: 'OwpSearch-input py-0 px-16 h-36 md:h-36 ltr:pr-36 rtl:pl-36',\n notchedOutline: 'rounded-lg',\n },\n },\n }}\n />\n <OwpSvgIcon\n className=\"pointer-events-none absolute top-0 h-36 w-36 p-8 ltr:right-0 rtl:left-0\"\n color=\"action\"\n size={20}\n >\n heroicons-outline:magnifying-glass\n </OwpSvgIcon>\n </>\n ) : (\n \n <TextField\n fullWidth\n variant=\"standard\"\n {...other}\n slotProps={{\n input: {\n disableUnderline: true,\n inputRef: (node: HTMLInputElement) => {\n ref?.(node);\n inputRef(node);\n },\n classes: {\n input: 'OwpSearch-input py-0 px-16 h-36',\n },\n },\n }}\n />\n )}\n </div>\n );\n}\n\nfunction renderSuggestion(\n suggestion: FlatNavItemType,\n { query, isHighlighted }: RenderSuggestionParams,\n) {\n const matches = match(suggestion?.title ?? '', query);\n const parts = parse(suggestion?.title ?? '', matches);\n\n return (\n <MenuItem selected={Boolean(isHighlighted)} component=\"div\">\n <ListItemIcon className=\"min-w-36\">\n {suggestion.icon ? (\n <OwpSvgIcon>{suggestion.icon}</OwpSvgIcon>\n ) : (\n <span className=\"w-24 text-center text-2xl font-semibold uppercase\">\n {suggestion?.title?.[0]}\n </span>\n )}\n </ListItemIcon>\n <ListItemText\n primary={parts?.map((part: { text: string; highlight?: boolean }, index: number) =>\n part.highlight ? (\n <span key={index} style={{ fontWeight: 600 }}>\n {part.text}\n </span>\n ) : (\n <strong key={index} style={{ fontWeight: 300 }}>\n {part.text}\n </strong>\n ),\n )}\n />\n </MenuItem>\n );\n}\n\nfunction getSuggestions(value: string, data: FlatNavItemType[]): FlatNavItemType[] {\n const inputValue = trim(value).toLowerCase();\n const inputLength = inputValue.length;\n let count = 0;\n\n if (inputLength === 0) {\n return [];\n }\n\n return data.filter((suggestion) => {\n const keep =\n count < 10 &&\n suggestion?.title &&\n match(suggestion?.title ?? '', inputValue, { requireMatchAll: true })?.length > 0;\n\n if (keep) {\n count += 1;\n }\n\n return keep;\n });\n}\n\nfunction getSuggestionValue(suggestion: FlatNavItemType) {\n return suggestion.title;\n}\n\ntype StateType = {\n searchText: string;\n navigation: FlatNavItemType[];\n suggestions: FlatNavItemType[];\n noSuggestions: boolean;\n opened: boolean;\n};\n\nconst initialState: StateType = {\n searchText: '',\n navigation: [],\n suggestions: [],\n noSuggestions: false,\n opened: false,\n};\n\ntype ActionType =\n | { type: 'setSearchText'; value: string }\n | { type: 'setNavigation'; data: FlatNavItemType[] }\n | { type: 'updateSuggestions'; value: string }\n | { type: 'clearSuggestions' }\n | { type: 'open' }\n | { type: 'close' };\n\nfunction reducer(state: StateType, action: ActionType): StateType {\n switch (action.type) {\n case 'open': {\n return {\n ...state,\n opened: true,\n };\n }\n case 'close': {\n return {\n ...state,\n opened: false,\n searchText: '',\n };\n }\n case 'setSearchText': {\n return {\n ...state,\n searchText: action.value,\n };\n }\n case 'setNavigation': {\n return {\n ...state,\n navigation: action.data,\n };\n }\n case 'updateSuggestions': {\n const suggestions = getSuggestions(action.value, state.navigation);\n const isInputBlank = typeof action.value === 'string' && action.value.trim() === '';\n const noSuggestions = !isInputBlank && suggestions.length === 0;\n\n return {\n ...state,\n suggestions,\n noSuggestions,\n };\n }\n case 'clearSuggestions': {\n return {\n ...state,\n suggestions: [],\n noSuggestions: false,\n };\n }\n default: {\n throw new Error();\n }\n }\n}\n\n/**\n * Props for navigation search toggle.\n */\ntype NavigationSearchToggleProps = {\n className?: string;\n variant?: 'basic' | 'full';\n trigger?: ReactNode;\n placeholder?: string;\n noResults?: string;\n};\n\n/**\n * Navigation search toggle.\n */\nfunction NavigationSearchToggle(props: NavigationSearchToggleProps) {\n const navigation = useGetNavigationList();\n const {\n className,\n variant = 'full',\n trigger = (\n <IconButton sx={toolbarToggleSx}>\n <OwpSvgIcon size={20}>heroicons-outline:magnifying-glass</OwpSvgIcon>\n </IconButton>\n ),\n } = props;\n const { t } = useOwpTranslation();\n const flatNavigation = useMemo(\n () => NavigationHelper.getFlatNavigation(navigation) as FlatNavItemType[],\n [navigation],\n );\n const placeholder = props?.placeholder ?? t('Common.검색');\n const noResults = props.noResults ?? t('Message.검색된 결과가 없습니다...');\n\n const [state, dispatch] = useReducer(reducer, initialState);\n const navigate = useNavigate();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const suggestionsNode = useRef<HTMLDivElement>(null);\n const popperNode = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n dispatch({\n type: 'setNavigation',\n data: flatNavigation,\n });\n }, [flatNavigation]);\n\n function showSearch() {\n dispatch({ type: 'open' });\n document.addEventListener('keydown', escFunction, false);\n }\n\n function hideSearch() {\n dispatch({ type: 'close' });\n document.removeEventListener('keydown', escFunction, false);\n }\n\n function escFunction(event: KeyboardEvent) {\n if (event.key === 'Esc' || event.key === 'Escape') {\n hideSearch();\n }\n }\n\n function handleSuggestionsFetchRequested({ value }: { value: string }) {\n dispatch({\n type: 'updateSuggestions',\n value,\n });\n }\n\n function handleSuggestionSelected(\n event: FormEvent<unknown>,\n { suggestion }: { suggestion: FlatNavItemType },\n ) {\n event.preventDefault();\n event.stopPropagation();\n\n if (!suggestion.url) {\n return;\n }\n\n navigate(suggestion.url);\n hideSearch();\n }\n\n function handleSuggestionsClearRequested() {\n dispatch({\n type: 'clearSuggestions',\n });\n }\n\n function handleChange(_event: FormEvent<HTMLElement>, { newValue }: ChangeEvent) {\n dispatch({\n type: 'setSearchText',\n value: newValue,\n });\n }\n\n function handleClickAway(event: MouseEvent | TouchEvent) {\n if (\n state.opened &&\n (!suggestionsNode.current ||\n !(event.target instanceof Node && suggestionsNode.current.contains(event.target)))\n ) {\n hideSearch();\n }\n }\n\n switch (variant) {\n case 'basic': {\n return (\n <div className={clsx('flex w-full items-center', className)} ref={popperNode}>\n <Autosuggest\n renderInputComponent={renderInputComponent}\n highlightFirstSuggestion\n suggestions={state.suggestions}\n onSuggestionsFetchRequested={handleSuggestionsFetchRequested}\n onSuggestionsClearRequested={handleSuggestionsClearRequested}\n onSuggestionSelected={handleSuggestionSelected}\n getSuggestionValue={getSuggestionValue}\n renderSuggestion={renderSuggestion}\n inputProps={{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n inputRef: (node) => (inputRef.current = node),\n variant,\n placeholder,\n role: 'search',\n value: state.searchText,\n onChange: handleChange,\n onFocus: showSearch,\n InputLabelProps: {\n shrink: true,\n },\n autoFocus: false,\n }}\n theme={{\n container: 'flex flex-1 w-full',\n suggestionsList: 'OwpSearch-suggestionsList',\n suggestion: 'OwpSearch-suggestion',\n }}\n renderSuggestionsContainer={(options) => {\n const { containerProps } = options;\n const { key, ...restContainerProps } = containerProps;\n\n return (\n <Popper\n anchorEl={popperNode.current}\n open={Boolean(options.children) || state.noSuggestions}\n className=\"z-9999\"\n >\n <div ref={suggestionsNode}>\n <Paper\n key={key}\n {...restContainerProps}\n style={{\n width: popperNode.current ? popperNode.current.clientWidth : '',\n }}\n className=\"overflow-hidden rounded-lg shadow-lg\"\n >\n {options.children}\n {state.noSuggestions && (\n <Typography className=\"px-16 py-12\">{noResults}</Typography>\n )}\n </Paper>\n </div>\n </Popper>\n );\n }}\n />\n </div>\n );\n }\n case 'full': {\n return (\n <Root className={clsx('flex', className)}>\n <Tooltip title={t('Title.메뉴 검색')} placement=\"bottom\">\n <div\n onClick={showSearch}\n onKeyDown={showSearch}\n role=\"button\"\n tabIndex={0}\n >\n {trigger}\n </div>\n </Tooltip>\n\n {state.opened && (\n <ClickAwayListener onClickAway={handleClickAway}>\n <Paper className=\"absolute inset-x-0 top-0 z-9999 h-full shadow-0\" square>\n <div className=\"flex h-full w-full items-center\" ref={popperNode}>\n <Autosuggest\n renderInputComponent={renderInputComponent}\n highlightFirstSuggestion\n suggestions={state.suggestions}\n onSuggestionsFetchRequested={handleSuggestionsFetchRequested}\n onSuggestionsClearRequested={handleSuggestionsClearRequested}\n onSuggestionSelected={handleSuggestionSelected}\n getSuggestionValue={getSuggestionValue}\n renderSuggestion={renderSuggestion}\n inputProps={{\n placeholder,\n value: state.searchText,\n onChange: handleChange,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n inputRef: (node) => (inputRef.current = node),\n InputLabelProps: {\n shrink: true,\n },\n autoFocus: true,\n }}\n theme={{\n container: 'flex flex-1 w-full',\n suggestionsList: 'OwpSearch-suggestionsList',\n suggestion: 'OwpSearch-suggestion',\n }}\n renderSuggestionsContainer={(options) => {\n const { containerProps } = options;\n const { key, ...restContainerProps } = containerProps;\n\n return (\n <Popper\n anchorEl={popperNode.current}\n open={Boolean(options.children) || state.noSuggestions}\n className=\"z-9999\"\n >\n <div ref={suggestionsNode}>\n <Paper\n square\n key={key}\n {...restContainerProps}\n className=\"shadow-lg\"\n style={{\n width: popperNode.current ? popperNode.current.clientWidth : 'auto',\n }}\n >\n {options.children}\n {state.noSuggestions && (\n <Typography className=\"px-16 py-12\">{noResults}</Typography>\n )}\n </Paper>\n </div>\n </Popper>\n );\n }}\n />\n <Stack className=\"mx-12\" direction=\"row\" spacing={1}>\n <IconButton\n size=\"large\"\n sx={{ color: grey[600] }}\n onClick={() => {\n dispatch({\n type: 'setSearchText',\n value: '',\n });\n inputRef.current?.focus();\n }}\n >\n <OwpSvgIcon>heroicons-outline:x-mark</OwpSvgIcon>\n </IconButton>\n <IconButton sx={{ color: grey[600] }} size=\"large\" onClick={hideSearch}>\n <UnfoldLessIcon />\n </IconButton>\n </Stack>\n </div>\n </Paper>\n </ClickAwayListener>\n )}\n </Root>\n );\n }\n default: {\n return null;\n }\n }\n}\n\n/**\n * Memoized navigation search toggle.\n */\nexport default NavigationSearchToggle;\n"],"names":["Root","styled","theme","renderInputComponent","props","variant","ref","inputRef","__name","key","other","jsxs","Fragment","jsx","TextField","node","OwpSvgIcon","renderSuggestion","suggestion","query","isHighlighted","matches","match","parts","parse","MenuItem","ListItemIcon","ListItemText","part","index","getSuggestions","value","data","inputValue","trim","inputLength","count","keep","_a","getSuggestionValue","initialState","reducer","state","action","suggestions","noSuggestions","NavigationSearchToggle","navigation","useGetNavigationList","className","trigger","IconButton","toolbarToggleSx","t","useOwpTranslation","flatNavigation","useMemo","NavigationHelper","placeholder","noResults","dispatch","useReducer","navigate","useNavigate","useRef","suggestionsNode","popperNode","useEffect","showSearch","escFunction","hideSearch","event","handleSuggestionsFetchRequested","handleSuggestionSelected","handleSuggestionsClearRequested","handleChange","_event","newValue","handleClickAway","clsx","Autosuggest","options","containerProps","restContainerProps","Popper","Paper","Typography","Tooltip","ClickAwayListener","Stack","grey","UnfoldLessIcon"],"mappings":"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"}
1
+ {"version":3,"file":"NavigationSearchToggle.js","sources":["../../../../src/layout/components/toggles/NavigationSearchToggle.tsx"],"sourcesContent":["import { OwpSvgIcon } from '@/components/OwpSvgIcon';\nimport { useGetNavigationList } from '@/hooks/useNavigation';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport type { OwpFlatNavItemType as FlatNavItemType } from '@/types/OwpNavigationTypes';\nimport { OwpNavigationHelper as NavigationHelper } from '@/utils/internal/navigationUtils';\nimport UnfoldLessIcon from '@mui/icons-material/UnfoldLess';\nimport { Stack } from '@mui/material';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport { grey } from '@mui/material/colors';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport MenuItem from '@mui/material/MenuItem';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport { styled } from '@mui/material/styles';\nimport TextField from '@mui/material/TextField';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport match from 'autosuggest-highlight/match';\nimport parse from 'autosuggest-highlight/parse';\nimport clsx from 'clsx';\nimport { trim } from 'es-toolkit/compat';\nimport { type FormEvent, type ReactNode, useEffect, useMemo, useReducer, useRef } from 'react';\nimport Autosuggest, {\n ChangeEvent,\n RenderInputComponentProps,\n RenderSuggestionParams,\n} from 'react-autosuggest';\nimport { useNavigate } from 'react-router-dom';\nimport { toolbarToggleSx } from './toggleStyles';\n\nconst Root = styled('div')(({ theme }) => ({\n '& .OwpSearch-container': {\n position: 'relative',\n },\n '& .OwpSearch-suggestionsContainerOpen': {\n position: 'absolute',\n zIndex: 1,\n marginTop: theme.spacing(),\n left: 0,\n right: 0,\n },\n '& .OwpSearch-suggestion': {\n display: 'block',\n },\n '& .OwpSearch-suggestionsList': {\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n },\n '& .OwpSearch-input': {\n transition: theme.transitions.create(['background-color'], {\n easing: theme.transitions.easing.easeInOut,\n duration: theme.transitions.duration.short,\n }),\n '&:focus': {\n backgroundColor: theme.palette.background.paper,\n },\n },\n}));\n\ntype RenderInputComponentType = {\n variant?: 'basic' | 'standard';\n inputRef?: (node: HTMLInputElement) => void;\n ref?: (node: HTMLInputElement) => void;\n key?: string;\n};\n\nfunction renderInputComponent(props: RenderInputComponentProps) {\n const { variant, ref, inputRef = () => {}, key, ...other } = props as RenderInputComponentType;\n return (\n <div className=\"relative w-full\" key={key}>\n {variant === 'basic' ? (\n \n <>\n <TextField\n fullWidth\n autoComplete=\"off\"\n variant=\"outlined\"\n {...other}\n slotProps={{\n input: {\n name: 'auto-complete-search',\n role: 'search',\n inputRef: (node: HTMLInputElement) => {\n ref?.(node);\n inputRef(node);\n },\n classes: {\n input: 'OwpSearch-input py-0 px-16 h-36 md:h-36 ltr:pr-36 rtl:pl-36',\n notchedOutline: 'rounded-lg',\n },\n },\n }}\n />\n <OwpSvgIcon\n className=\"pointer-events-none absolute top-0 h-36 w-36 p-8 ltr:right-0 rtl:left-0\"\n color=\"action\"\n size={20}\n >\n heroicons-outline:magnifying-glass\n </OwpSvgIcon>\n </>\n ) : (\n \n <TextField\n fullWidth\n variant=\"standard\"\n {...other}\n slotProps={{\n input: {\n disableUnderline: true,\n inputRef: (node: HTMLInputElement) => {\n ref?.(node);\n inputRef(node);\n },\n classes: {\n input: 'OwpSearch-input py-0 px-16 h-36',\n },\n },\n }}\n />\n )}\n </div>\n );\n}\n\nfunction renderSuggestion(\n suggestion: FlatNavItemType,\n { query, isHighlighted }: RenderSuggestionParams,\n) {\n const matches = match(suggestion?.title ?? '', query);\n const parts = parse(suggestion?.title ?? '', matches);\n\n return (\n <MenuItem selected={Boolean(isHighlighted)} component=\"div\">\n <ListItemIcon className=\"min-w-36\">\n {suggestion.icon ? (\n <OwpSvgIcon>{suggestion.icon}</OwpSvgIcon>\n ) : (\n <span className=\"w-24 text-center text-2xl font-semibold uppercase\">\n {suggestion?.title?.[0]}\n </span>\n )}\n </ListItemIcon>\n <ListItemText\n primary={parts?.map((part: { text: string; highlight?: boolean }, index: number) =>\n part.highlight ? (\n <span key={index} style={{ fontWeight: 600 }}>\n {part.text}\n </span>\n ) : (\n <strong key={index} style={{ fontWeight: 300 }}>\n {part.text}\n </strong>\n ),\n )}\n />\n </MenuItem>\n );\n}\n\nfunction getSuggestions(value: string, data: FlatNavItemType[]): FlatNavItemType[] {\n const inputValue = trim(value).toLowerCase();\n const inputLength = inputValue.length;\n let count = 0;\n\n if (inputLength === 0) {\n return [];\n }\n\n return data.filter((suggestion) => {\n const keep =\n count < 10 &&\n suggestion?.title &&\n match(suggestion?.title ?? '', inputValue, { requireMatchAll: true })?.length > 0;\n\n if (keep) {\n count += 1;\n }\n\n return keep;\n });\n}\n\nfunction getSuggestionValue(suggestion: FlatNavItemType) {\n return suggestion.title;\n}\n\ntype StateType = {\n searchText: string;\n navigation: FlatNavItemType[];\n suggestions: FlatNavItemType[];\n noSuggestions: boolean;\n opened: boolean;\n};\n\nconst initialState: StateType = {\n searchText: '',\n navigation: [],\n suggestions: [],\n noSuggestions: false,\n opened: false,\n};\n\ntype ActionType =\n | { type: 'setSearchText'; value: string }\n | { type: 'setNavigation'; data: FlatNavItemType[] }\n | { type: 'updateSuggestions'; value: string }\n | { type: 'clearSuggestions' }\n | { type: 'open' }\n | { type: 'close' };\n\nfunction reducer(state: StateType, action: ActionType): StateType {\n switch (action.type) {\n case 'open': {\n return {\n ...state,\n opened: true,\n };\n }\n case 'close': {\n return {\n ...state,\n opened: false,\n searchText: '',\n };\n }\n case 'setSearchText': {\n return {\n ...state,\n searchText: action.value,\n };\n }\n case 'setNavigation': {\n return {\n ...state,\n navigation: action.data,\n };\n }\n case 'updateSuggestions': {\n const suggestions = getSuggestions(action.value, state.navigation);\n const isInputBlank = typeof action.value === 'string' && action.value.trim() === '';\n const noSuggestions = !isInputBlank && suggestions.length === 0;\n\n return {\n ...state,\n suggestions,\n noSuggestions,\n };\n }\n case 'clearSuggestions': {\n return {\n ...state,\n suggestions: [],\n noSuggestions: false,\n };\n }\n default: {\n throw new Error();\n }\n }\n}\n\n/**\n * Props for navigation search toggle.\n */\ntype NavigationSearchToggleProps = {\n className?: string;\n variant?: 'basic' | 'full';\n trigger?: ReactNode;\n placeholder?: string;\n noResults?: string;\n};\n\n/**\n * Navigation search toggle.\n */\nfunction NavigationSearchToggle(props: NavigationSearchToggleProps) {\n const navigation = useGetNavigationList();\n const {\n className,\n variant = 'full',\n trigger = (\n <IconButton sx={toolbarToggleSx}>\n <OwpSvgIcon size={20}>heroicons-outline:magnifying-glass</OwpSvgIcon>\n </IconButton>\n ),\n } = props;\n const { t } = useOwpTranslation();\n const flatNavigation = useMemo(\n () => NavigationHelper.getFlatNavigation(navigation) as FlatNavItemType[],\n [navigation],\n );\n const placeholder = props?.placeholder ?? t('Common.검색');\n const noResults = props.noResults ?? t('Message.검색된 결과가 없습니다...');\n\n const [state, dispatch] = useReducer(reducer, initialState);\n const navigate = useNavigate();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const suggestionsNode = useRef<HTMLDivElement>(null);\n const popperNode = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n dispatch({\n type: 'setNavigation',\n data: flatNavigation,\n });\n }, [flatNavigation]);\n\n function showSearch() {\n dispatch({ type: 'open' });\n document.addEventListener('keydown', escFunction, false);\n }\n\n function hideSearch() {\n dispatch({ type: 'close' });\n document.removeEventListener('keydown', escFunction, false);\n }\n\n function escFunction(event: KeyboardEvent) {\n if (event.key === 'Esc' || event.key === 'Escape') {\n hideSearch();\n }\n }\n\n function handleSuggestionsFetchRequested({ value }: { value: string }) {\n dispatch({\n type: 'updateSuggestions',\n value,\n });\n }\n\n function handleSuggestionSelected(\n event: FormEvent<unknown>,\n { suggestion }: { suggestion: FlatNavItemType },\n ) {\n event.preventDefault();\n event.stopPropagation();\n\n if (!suggestion.url) {\n return;\n }\n\n navigate(suggestion.url);\n hideSearch();\n }\n\n function handleSuggestionsClearRequested() {\n dispatch({\n type: 'clearSuggestions',\n });\n }\n\n function handleChange(_event: FormEvent<HTMLElement>, { newValue }: ChangeEvent) {\n dispatch({\n type: 'setSearchText',\n value: newValue,\n });\n }\n\n function handleClickAway(event: MouseEvent | TouchEvent) {\n if (\n state.opened &&\n (!suggestionsNode.current ||\n !(event.target instanceof Node && suggestionsNode.current.contains(event.target)))\n ) {\n hideSearch();\n }\n }\n\n switch (variant) {\n case 'basic': {\n return (\n <div className={clsx('flex w-full items-center', className)} ref={popperNode}>\n <Autosuggest\n renderInputComponent={renderInputComponent}\n highlightFirstSuggestion\n suggestions={state.suggestions}\n onSuggestionsFetchRequested={handleSuggestionsFetchRequested}\n onSuggestionsClearRequested={handleSuggestionsClearRequested}\n onSuggestionSelected={handleSuggestionSelected}\n getSuggestionValue={getSuggestionValue}\n renderSuggestion={renderSuggestion}\n inputProps={{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n inputRef: (node) => (inputRef.current = node),\n variant,\n placeholder,\n role: 'search',\n value: state.searchText,\n onChange: handleChange,\n onFocus: showSearch,\n InputLabelProps: {\n shrink: true,\n },\n autoFocus: false,\n }}\n theme={{\n container: 'flex flex-1 w-full',\n suggestionsList: 'OwpSearch-suggestionsList',\n suggestion: 'OwpSearch-suggestion',\n }}\n renderSuggestionsContainer={(options) => {\n const { containerProps } = options;\n const { key, ...restContainerProps } = containerProps;\n\n return (\n <Popper\n anchorEl={popperNode.current}\n open={Boolean(options.children) || state.noSuggestions}\n className=\"z-9999\"\n >\n <div ref={suggestionsNode}>\n <Paper\n key={key}\n {...restContainerProps}\n style={{\n width: popperNode.current ? popperNode.current.clientWidth : '',\n }}\n className=\"overflow-hidden rounded-lg shadow-lg\"\n >\n {options.children}\n {state.noSuggestions && (\n <Typography className=\"px-16 py-12\">{noResults}</Typography>\n )}\n </Paper>\n </div>\n </Popper>\n );\n }}\n />\n </div>\n );\n }\n case 'full': {\n return (\n <Root className={clsx('flex', className)}>\n <Tooltip title={t('Title.메뉴 검색')} placement=\"bottom\">\n <div\n onClick={showSearch}\n onKeyDown={showSearch}\n role=\"button\"\n tabIndex={0}\n >\n {trigger}\n </div>\n </Tooltip>\n\n {state.opened && (\n <ClickAwayListener onClickAway={handleClickAway}>\n <Paper className=\"absolute inset-x-0 top-0 z-9999 h-full shadow-0\" square>\n <div className=\"flex h-full w-full items-center\" ref={popperNode}>\n <Autosuggest\n renderInputComponent={renderInputComponent}\n highlightFirstSuggestion\n suggestions={state.suggestions}\n onSuggestionsFetchRequested={handleSuggestionsFetchRequested}\n onSuggestionsClearRequested={handleSuggestionsClearRequested}\n onSuggestionSelected={handleSuggestionSelected}\n getSuggestionValue={getSuggestionValue}\n renderSuggestion={renderSuggestion}\n inputProps={{\n placeholder,\n value: state.searchText,\n onChange: handleChange,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n inputRef: (node) => (inputRef.current = node),\n InputLabelProps: {\n shrink: true,\n },\n autoFocus: true,\n }}\n theme={{\n container: 'flex flex-1 w-full',\n suggestionsList: 'OwpSearch-suggestionsList',\n suggestion: 'OwpSearch-suggestion',\n }}\n renderSuggestionsContainer={(options) => {\n const { containerProps } = options;\n const { key, ...restContainerProps } = containerProps;\n\n return (\n <Popper\n anchorEl={popperNode.current}\n open={Boolean(options.children) || state.noSuggestions}\n className=\"z-9999\"\n >\n <div ref={suggestionsNode}>\n <Paper\n square\n key={key}\n {...restContainerProps}\n className=\"shadow-lg\"\n style={{\n width: popperNode.current ? popperNode.current.clientWidth : 'auto',\n }}\n >\n {options.children}\n {state.noSuggestions && (\n <Typography className=\"px-16 py-12\">{noResults}</Typography>\n )}\n </Paper>\n </div>\n </Popper>\n );\n }}\n />\n <Stack className=\"mx-12\" direction=\"row\" spacing={1}>\n <IconButton\n size=\"large\"\n sx={{ color: grey[600] }}\n onClick={() => {\n dispatch({\n type: 'setSearchText',\n value: '',\n });\n inputRef.current?.focus();\n }}\n >\n <OwpSvgIcon>heroicons-outline:x-mark</OwpSvgIcon>\n </IconButton>\n <IconButton sx={{ color: grey[600] }} size=\"large\" onClick={hideSearch}>\n <UnfoldLessIcon />\n </IconButton>\n </Stack>\n </div>\n </Paper>\n </ClickAwayListener>\n )}\n </Root>\n );\n }\n default: {\n return null;\n }\n }\n}\n\n/**\n * Memoized navigation search toggle.\n */\nexport default NavigationSearchToggle;\n"],"names":["Root","styled","theme","renderInputComponent","props","variant","ref","inputRef","__name","key","other","jsxs","Fragment","jsx","TextField","node","OwpSvgIcon","renderSuggestion","suggestion","query","isHighlighted","matches","match","parts","parse","MenuItem","ListItemIcon","ListItemText","part","index","getSuggestions","value","data","inputValue","trim","inputLength","count","keep","_a","getSuggestionValue","initialState","reducer","state","action","suggestions","noSuggestions","NavigationSearchToggle","navigation","useGetNavigationList","className","trigger","IconButton","toolbarToggleSx","t","useOwpTranslation","flatNavigation","useMemo","NavigationHelper","placeholder","noResults","dispatch","useReducer","navigate","useNavigate","useRef","suggestionsNode","popperNode","useEffect","showSearch","escFunction","hideSearch","event","handleSuggestionsFetchRequested","handleSuggestionSelected","handleSuggestionsClearRequested","handleChange","_event","newValue","handleClickAway","clsx","Autosuggest","options","containerProps","restContainerProps","Popper","Paper","Typography","Tooltip","ClickAwayListener","Stack","grey","UnfoldLessIcon"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { jsxs as p, jsx as t } from "../../../node_modules/.pnpm/@emotion_react@
4
4
  import { useGetNavigationList as D } from "../../../hooks/useNavigation.js";
5
5
  import { useOwpTranslation as G } from "../../../hooks/useOwpTranslation.js";
6
6
  import { useSetShortcuts as A, useGetShortcuts as F } from "../../../hooks/internal/useShortcuts.js";
7
- import { OwpNavigationHelper as H } from "../../../utils/navigationUtils.js";
7
+ import { OwpNavigationHelper as H } from "../../../utils/internal/navigationUtils.js";
8
8
  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";
9
9
  import M from "@mui/material/Box";
10
10
  import { amber as L, grey as k } from "@mui/material/colors";
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationShortcutsToggle.js","sources":["../../../../src/layout/components/toggles/NavigationShortcutsToggle.tsx"],"sourcesContent":["import { OwpSvgIcon } from '@/components/OwpSvgIcon';\nimport { useGetNavigationList } from '@/hooks/useNavigation';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetShortcuts, useSetShortcuts } from '@/hooks/internal/useShortcuts';\nimport type { OwpFlatNavItemType as FlatNavItemType } from '@/types/OwpNavigationTypes';\nimport { OwpNavigationHelper as NavigationHelper } from '@/utils/navigationUtils';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport Box from '@mui/material/Box';\nimport { amber, grey } from '@mui/material/colors';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Input from '@mui/material/Input';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport clsx from 'clsx';\nimport { find, xor } from 'es-toolkit/compat';\nimport { type ChangeEvent, type MouseEvent, useMemo, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { toolbarToggleSx } from './toggleStyles';\n\ntype NavigationShortcutsToggleProps = {\n className?: string;\n variant?: 'horizontal' | 'vertical';\n};\n\n/**\n * Navigation shortcuts toggle.\n */\nfunction NavigationShortcutsToggle(props: NavigationShortcutsToggleProps) {\n const { variant = 'horizontal', className = '' } = props;\n\n const searchInputRef = useRef<HTMLInputElement>(null);\n const [addMenu, setAddMenu] = useState<HTMLElement | null>(null);\n const [searchText, setSearchText] = useState('');\n const navigation = useGetNavigationList();\n const setShortcuts = useSetShortcuts();\n const userShortcuts = useGetShortcuts();\n const { t } = useOwpTranslation();\n\n const flatNavigation = useMemo(\n () => NavigationHelper.getFlatNavigation(navigation) as FlatNavItemType[],\n [navigation],\n );\n\n const shortcutItems = useMemo(\n () =>\n userShortcuts\n .map((id) => find(flatNavigation, { id }))\n .filter((item): item is FlatNavItemType => Boolean(item)),\n [flatNavigation, userShortcuts],\n );\n\n const searchResults = useMemo(() => {\n if (!searchText || !flatNavigation) {\n return [];\n }\n\n const normalizedSearchText = searchText.toLowerCase();\n\n return flatNavigation.filter((item) =>\n item?.title?.toLowerCase()?.includes(normalizedSearchText),\n );\n }, [flatNavigation, searchText]);\n\n function addMenuClick(event: MouseEvent<HTMLElement>) {\n setAddMenu(event.currentTarget);\n }\n\n function addMenuClose() {\n setAddMenu(null);\n }\n\n function search(ev: ChangeEvent<HTMLInputElement>) {\n setSearchText(ev.target.value);\n }\n\n function toggleInShortcuts(id: string) {\n let nextShortcuts = [...userShortcuts];\n\n nextShortcuts = xor(nextShortcuts, [id]);\n\n setShortcuts(nextShortcuts);\n }\n\n return (\n <Box\n className={clsx(\n 'flex flex-shrink overflow-hidden',\n variant === 'vertical' ? 'flex-col' : '',\n className,\n )}\n >\n <Box\n className={clsx(\n 'flex flex-1 items-center',\n variant === 'vertical' ? 'flex-col' : 'max-h-36',\n )}\n >\n <Tooltip\n title={t('Title.즐겨찾기 등록/삭제')}\n placement={variant === 'horizontal' ? 'bottom' : 'left'}\n >\n <IconButton\n sx={toolbarToggleSx}\n aria-haspopup=\"true\"\n onClick={addMenuClick}\n >\n <OwpSvgIcon size={20} sx={{ color: amber[600] }}>\n heroicons-solid:star\n </OwpSvgIcon>\n </IconButton>\n </Tooltip>\n </Box>\n\n <Menu\n id=\"add-menu\"\n anchorEl={addMenu}\n open={Boolean(addMenu)}\n onClose={addMenuClose}\n classes={{\n paper: 'min-w-256',\n }}\n TransitionProps={{\n onEntered: () => {\n searchInputRef?.current?.focus();\n },\n onExited: () => {\n setSearchText('');\n },\n }}\n >\n <div className=\"flex justify-between items-center p-16 pt-8\">\n <Input\n inputRef={searchInputRef}\n value={searchText}\n onChange={search}\n placeholder={t('Common.검색')}\n fullWidth\n inputProps={{\n 'aria-label': 'Search',\n }}\n disableUnderline\n />\n <IconButton\n sx={{ color: grey[500] }}\n onClick={() => {\n setSearchText('');\n searchInputRef?.current?.focus();\n }}\n >\n <ClearIcon />\n </IconButton>\n </div>\n\n {(searchText?.length > 0 || shortcutItems?.length > 0) && (\n <Divider sx={{ backgroundColor: grey[500] }} />\n )}\n\n {searchText.length > 0 &&\n searchResults.map((_item) => (\n <ShortcutMenuItem\n shortcuts={userShortcuts}\n key={_item.id}\n item={_item}\n onToggle={() => toggleInShortcuts(_item.id)}\n />\n ))}\n\n {searchText.length !== 0 && searchResults.length === 0 && (\n <Typography color=\"text.secondary\" className=\"p-16 pb-8\">\n {t('Message.검색된 결과가 없습니다...')}\n </Typography>\n )}\n\n {searchText.length === 0 &&\n shortcutItems.map((_item) => (\n <ShortcutMenuItem\n shortcuts={userShortcuts}\n key={_item.id}\n item={_item}\n onToggle={() => toggleInShortcuts(_item.id)}\n />\n ))}\n </Menu>\n </Box>\n );\n}\n\nfunction ShortcutMenuItem(props: {\n shortcuts?: string[];\n item: FlatNavItemType;\n onToggle: () => void;\n}) {\n const { item, onToggle, shortcuts = [] } = props;\n\n if (!item || !item.id) {\n return null;\n }\n\n return (\n <Link to={item.url || ''} role=\"button\">\n <MenuItem key={item.id}>\n <ListItemIcon className=\"min-w-36\">\n {item.icon ? (\n <OwpSvgIcon>{item.icon}</OwpSvgIcon>\n ) : (\n <span className=\"text-center text-2xl font-semibold uppercase\">{item.title[0]}</span>\n )}\n </ListItemIcon>\n <ListItemText primary={item.title} />\n <IconButton\n onClick={(ev) => {\n ev.preventDefault();\n ev.stopPropagation();\n onToggle();\n }}\n size=\"large\"\n >\n <OwpSvgIcon size={20} sx={{ color: amber[600] }}>\n {shortcuts.includes(item.id) ? 'heroicons-solid:star' : 'heroicons-outline:star'}\n </OwpSvgIcon>\n </IconButton>\n </MenuItem>\n </Link>\n );\n}\n\n/**\n * Memoized navigation shortcuts toggle.\n */\nexport default NavigationShortcutsToggle;\n"],"names":["NavigationShortcutsToggle","props","variant","className","searchInputRef","useRef","addMenu","setAddMenu","useState","searchText","setSearchText","navigation","useGetNavigationList","setShortcuts","useSetShortcuts","userShortcuts","useGetShortcuts","t","useOwpTranslation","flatNavigation","useMemo","NavigationHelper","shortcutItems","id","find","item","searchResults","normalizedSearchText","_b","_a","addMenuClick","event","__name","addMenuClose","search","ev","toggleInShortcuts","nextShortcuts","xor","jsxs","Box","clsx","jsx","Tooltip","IconButton","toolbarToggleSx","OwpSvgIcon","amber","Menu","Input","grey","ClearIcon","Divider","_item","ShortcutMenuItem","Typography","onToggle","shortcuts","Link","MenuItem","ListItemIcon","ListItemText"],"mappings":"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"}
1
+ {"version":3,"file":"NavigationShortcutsToggle.js","sources":["../../../../src/layout/components/toggles/NavigationShortcutsToggle.tsx"],"sourcesContent":["import { OwpSvgIcon } from '@/components/OwpSvgIcon';\nimport { useGetNavigationList } from '@/hooks/useNavigation';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetShortcuts, useSetShortcuts } from '@/hooks/internal/useShortcuts';\nimport type { OwpFlatNavItemType as FlatNavItemType } from '@/types/OwpNavigationTypes';\nimport { OwpNavigationHelper as NavigationHelper } from '@/utils/internal/navigationUtils';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport Box from '@mui/material/Box';\nimport { amber, grey } from '@mui/material/colors';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Input from '@mui/material/Input';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport clsx from 'clsx';\nimport { find, xor } from 'es-toolkit/compat';\nimport { type ChangeEvent, type MouseEvent, useMemo, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { toolbarToggleSx } from './toggleStyles';\n\ntype NavigationShortcutsToggleProps = {\n className?: string;\n variant?: 'horizontal' | 'vertical';\n};\n\n/**\n * Navigation shortcuts toggle.\n */\nfunction NavigationShortcutsToggle(props: NavigationShortcutsToggleProps) {\n const { variant = 'horizontal', className = '' } = props;\n\n const searchInputRef = useRef<HTMLInputElement>(null);\n const [addMenu, setAddMenu] = useState<HTMLElement | null>(null);\n const [searchText, setSearchText] = useState('');\n const navigation = useGetNavigationList();\n const setShortcuts = useSetShortcuts();\n const userShortcuts = useGetShortcuts();\n const { t } = useOwpTranslation();\n\n const flatNavigation = useMemo(\n () => NavigationHelper.getFlatNavigation(navigation) as FlatNavItemType[],\n [navigation],\n );\n\n const shortcutItems = useMemo(\n () =>\n userShortcuts\n .map((id) => find(flatNavigation, { id }))\n .filter((item): item is FlatNavItemType => Boolean(item)),\n [flatNavigation, userShortcuts],\n );\n\n const searchResults = useMemo(() => {\n if (!searchText || !flatNavigation) {\n return [];\n }\n\n const normalizedSearchText = searchText.toLowerCase();\n\n return flatNavigation.filter((item) =>\n item?.title?.toLowerCase()?.includes(normalizedSearchText),\n );\n }, [flatNavigation, searchText]);\n\n function addMenuClick(event: MouseEvent<HTMLElement>) {\n setAddMenu(event.currentTarget);\n }\n\n function addMenuClose() {\n setAddMenu(null);\n }\n\n function search(ev: ChangeEvent<HTMLInputElement>) {\n setSearchText(ev.target.value);\n }\n\n function toggleInShortcuts(id: string) {\n let nextShortcuts = [...userShortcuts];\n\n nextShortcuts = xor(nextShortcuts, [id]);\n\n setShortcuts(nextShortcuts);\n }\n\n return (\n <Box\n className={clsx(\n 'flex flex-shrink overflow-hidden',\n variant === 'vertical' ? 'flex-col' : '',\n className,\n )}\n >\n <Box\n className={clsx(\n 'flex flex-1 items-center',\n variant === 'vertical' ? 'flex-col' : 'max-h-36',\n )}\n >\n <Tooltip\n title={t('Title.즐겨찾기 등록/삭제')}\n placement={variant === 'horizontal' ? 'bottom' : 'left'}\n >\n <IconButton\n sx={toolbarToggleSx}\n aria-haspopup=\"true\"\n onClick={addMenuClick}\n >\n <OwpSvgIcon size={20} sx={{ color: amber[600] }}>\n heroicons-solid:star\n </OwpSvgIcon>\n </IconButton>\n </Tooltip>\n </Box>\n\n <Menu\n id=\"add-menu\"\n anchorEl={addMenu}\n open={Boolean(addMenu)}\n onClose={addMenuClose}\n classes={{\n paper: 'min-w-256',\n }}\n TransitionProps={{\n onEntered: () => {\n searchInputRef?.current?.focus();\n },\n onExited: () => {\n setSearchText('');\n },\n }}\n >\n <div className=\"flex justify-between items-center p-16 pt-8\">\n <Input\n inputRef={searchInputRef}\n value={searchText}\n onChange={search}\n placeholder={t('Common.검색')}\n fullWidth\n inputProps={{\n 'aria-label': 'Search',\n }}\n disableUnderline\n />\n <IconButton\n sx={{ color: grey[500] }}\n onClick={() => {\n setSearchText('');\n searchInputRef?.current?.focus();\n }}\n >\n <ClearIcon />\n </IconButton>\n </div>\n\n {(searchText?.length > 0 || shortcutItems?.length > 0) && (\n <Divider sx={{ backgroundColor: grey[500] }} />\n )}\n\n {searchText.length > 0 &&\n searchResults.map((_item) => (\n <ShortcutMenuItem\n shortcuts={userShortcuts}\n key={_item.id}\n item={_item}\n onToggle={() => toggleInShortcuts(_item.id)}\n />\n ))}\n\n {searchText.length !== 0 && searchResults.length === 0 && (\n <Typography color=\"text.secondary\" className=\"p-16 pb-8\">\n {t('Message.검색된 결과가 없습니다...')}\n </Typography>\n )}\n\n {searchText.length === 0 &&\n shortcutItems.map((_item) => (\n <ShortcutMenuItem\n shortcuts={userShortcuts}\n key={_item.id}\n item={_item}\n onToggle={() => toggleInShortcuts(_item.id)}\n />\n ))}\n </Menu>\n </Box>\n );\n}\n\nfunction ShortcutMenuItem(props: {\n shortcuts?: string[];\n item: FlatNavItemType;\n onToggle: () => void;\n}) {\n const { item, onToggle, shortcuts = [] } = props;\n\n if (!item || !item.id) {\n return null;\n }\n\n return (\n <Link to={item.url || ''} role=\"button\">\n <MenuItem key={item.id}>\n <ListItemIcon className=\"min-w-36\">\n {item.icon ? (\n <OwpSvgIcon>{item.icon}</OwpSvgIcon>\n ) : (\n <span className=\"text-center text-2xl font-semibold uppercase\">{item.title[0]}</span>\n )}\n </ListItemIcon>\n <ListItemText primary={item.title} />\n <IconButton\n onClick={(ev) => {\n ev.preventDefault();\n ev.stopPropagation();\n onToggle();\n }}\n size=\"large\"\n >\n <OwpSvgIcon size={20} sx={{ color: amber[600] }}>\n {shortcuts.includes(item.id) ? 'heroicons-solid:star' : 'heroicons-outline:star'}\n </OwpSvgIcon>\n </IconButton>\n </MenuItem>\n </Link>\n );\n}\n\n/**\n * Memoized navigation shortcuts toggle.\n */\nexport default NavigationShortcutsToggle;\n"],"names":["NavigationShortcutsToggle","props","variant","className","searchInputRef","useRef","addMenu","setAddMenu","useState","searchText","setSearchText","navigation","useGetNavigationList","setShortcuts","useSetShortcuts","userShortcuts","useGetShortcuts","t","useOwpTranslation","flatNavigation","useMemo","NavigationHelper","shortcutItems","id","find","item","searchResults","normalizedSearchText","_b","_a","addMenuClick","event","__name","addMenuClose","search","ev","toggleInShortcuts","nextShortcuts","xor","jsxs","Box","clsx","jsx","Tooltip","IconButton","toolbarToggleSx","OwpSvgIcon","amber","Menu","Input","grey","ClearIcon","Divider","_item","ShortcutMenuItem","Typography","onToggle","shortcuts","Link","MenuItem","ListItemIcon","ListItemText"],"mappings":"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"}
@@ -2,21 +2,21 @@ var d = Object.defineProperty;
2
2
  var l = (n, a) => d(n, "name", { value: a, configurable: !0 });
3
3
  import { jsx as s } 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
4
  import { useOwpAppContext as p } from "../../../contexts/OwpAppProvider.js";
5
- import { preloadOnIdle as h } from "../../../utils/preloadOnIdle.js";
6
- import w 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/PaletteOutlined.js";
7
- import P from "@mui/material/IconButton";
8
- import g from "@mui/material/Tooltip";
9
- import { clsx as T } from "../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
10
- import { useDialogs as v } from "@toolpad/core/useDialogs";
5
+ import { useOwpDialogs as h } from "../../../hooks/useOwpDialogs.js";
6
+ import { preloadOnIdle as w } from "../../../utils/preloadOnIdle.js";
7
+ import P 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/PaletteOutlined.js";
8
+ import g from "@mui/material/IconButton";
9
+ import T from "@mui/material/Tooltip";
10
+ import { clsx as v } from "../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
11
11
  import { useRef as D, useCallback as b, useEffect as x } from "react";
12
- import { toolbarToggleSx as E } from "./toggleStyles.js";
12
+ import { toolbarToggleSx as O } from "./toggleStyles.js";
13
13
  function z(n) {
14
- const { className: a = "" } = n, u = v(), { env: e } = p(), t = D(null), m = (e == null ? void 0 : e.isThemePreviewEnabled) === !0, o = e == null ? void 0 : e.themePreviewDialogLoader, i = b(() => o ? (t.current || (t.current = o().catch((r) => {
14
+ const { className: a = "" } = n, u = h(), { env: e } = p(), t = D(null), m = (e == null ? void 0 : e.isThemePreviewEnabled) === !0, o = e == null ? void 0 : e.themePreviewDialogLoader, i = b(() => o ? (t.current || (t.current = o().catch((r) => {
15
15
  throw t.current = null, r;
16
16
  })), t.current) : Promise.resolve(null), [o]);
17
17
  if (x(() => {
18
18
  if (!(!m || !o))
19
- return h(() => i());
19
+ return w(() => i());
20
20
  }, [m, i, o]), !m || !o)
21
21
  return null;
22
22
  const f = /* @__PURE__ */ l(async () => {
@@ -31,16 +31,16 @@ function z(n) {
31
31
  }, "handleOpenThemePreviewDialog"), c = /* @__PURE__ */ l(() => {
32
32
  i();
33
33
  }, "handlePreloadThemePreviewDialog");
34
- return /* @__PURE__ */ s(g, { title: "Theme Preview", placement: "bottom", children: /* @__PURE__ */ s(
35
- P,
34
+ return /* @__PURE__ */ s(T, { title: "Theme Preview", placement: "bottom", children: /* @__PURE__ */ s(
35
+ g,
36
36
  {
37
- sx: E,
37
+ sx: O,
38
38
  onClick: f,
39
39
  onMouseEnter: c,
40
40
  onFocus: c,
41
- className: T(a),
41
+ className: v(a),
42
42
  "aria-label": "Theme Preview",
43
- children: /* @__PURE__ */ s(w, { fontSize: "small" })
43
+ children: /* @__PURE__ */ s(P, { fontSize: "small" })
44
44
  }
45
45
  ) });
46
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ThemePreviewToggle.js","sources":["../../../../src/layout/components/toggles/ThemePreviewToggle.tsx"],"sourcesContent":["import { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { preloadOnIdle } from '@/utils/preloadOnIdle';\nimport PaletteOutlinedIcon from '@mui/icons-material/PaletteOutlined';\nimport IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport clsx from 'clsx';\nimport { type DialogComponent, useDialogs } from '@toolpad/core/useDialogs';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { toolbarToggleSx } from './toggleStyles';\n\ntype ThemePreviewDialogModule = {\n ThemePreviewDialog: DialogComponent<unknown, unknown>;\n};\n\ntype ThemePreviewDialogLoader = () => Promise<ThemePreviewDialogModule>;\n\ntype ThemePreviewToggleProps = {\n className?: string;\n};\n\nfunction ThemePreviewToggle(props: ThemePreviewToggleProps) {\n const { className = '' } = props;\n const dialogs = useDialogs();\n const { env } = useOwpAppContext();\n const dialogModulePromiseRef = useRef<Promise<ThemePreviewDialogModule> | null>(null);\n const isThemePreviewEnabled = env?.isThemePreviewEnabled === true;\n const themePreviewDialogLoader = env?.themePreviewDialogLoader as\n | ThemePreviewDialogLoader\n | undefined;\n\n const loadThemePreviewDialog = useCallback(() => {\n if (!themePreviewDialogLoader) {\n return Promise.resolve(null);\n }\n\n if (!dialogModulePromiseRef.current) {\n dialogModulePromiseRef.current = themePreviewDialogLoader().catch((error) => {\n dialogModulePromiseRef.current = null;\n throw error;\n });\n }\n\n return dialogModulePromiseRef.current;\n }, [themePreviewDialogLoader]);\n\n useEffect(() => {\n if (!isThemePreviewEnabled || !themePreviewDialogLoader) {\n return;\n }\n\n return preloadOnIdle(() => loadThemePreviewDialog());\n }, [isThemePreviewEnabled, loadThemePreviewDialog, themePreviewDialogLoader]);\n\n if (!isThemePreviewEnabled || !themePreviewDialogLoader) {\n return null;\n }\n\n const handleOpenThemePreviewDialog = async () => {\n try {\n const dialogModule = await loadThemePreviewDialog();\n\n if (!dialogModule) {\n return;\n }\n\n await dialogs.open(dialogModule.ThemePreviewDialog, {});\n } catch (error) {\n console.error(error);\n }\n };\n\n const handlePreloadThemePreviewDialog = () => {\n void loadThemePreviewDialog();\n };\n\n return (\n <Tooltip title=\"Theme Preview\" placement=\"bottom\">\n <IconButton\n sx={toolbarToggleSx}\n onClick={handleOpenThemePreviewDialog}\n onMouseEnter={handlePreloadThemePreviewDialog}\n onFocus={handlePreloadThemePreviewDialog}\n className={clsx(className)}\n aria-label=\"Theme Preview\"\n >\n <PaletteOutlinedIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n );\n}\n\nexport default ThemePreviewToggle;\n"],"names":["ThemePreviewToggle","props","className","dialogs","useDialogs","env","useOwpAppContext","dialogModulePromiseRef","useRef","isThemePreviewEnabled","themePreviewDialogLoader","loadThemePreviewDialog","useCallback","error","useEffect","preloadOnIdle","handleOpenThemePreviewDialog","__name","dialogModule","handlePreloadThemePreviewDialog","jsx","Tooltip","IconButton","toolbarToggleSx","clsx","PaletteOutlinedIcon"],"mappings":";;;;;;;;;;;;AAoBA,SAASA,EAAmBC,GAAgC;AAC1D,QAAM,EAAE,WAAAC,IAAY,GAAA,IAAOD,GACrBE,IAAUC,EAAA,GACV,EAAE,KAAAC,EAAA,IAAQC,EAAA,GACVC,IAAyBC,EAAiD,IAAI,GAC9EC,KAAwBJ,KAAA,gBAAAA,EAAK,2BAA0B,IACvDK,IAA2BL,KAAA,gBAAAA,EAAK,0BAIhCM,IAAyBC,EAAY,MACpCF,KAIAH,EAAuB,YAC1BA,EAAuB,UAAUG,EAAA,EAA2B,MAAM,CAACG,MAAU;AAC3E,UAAAN,EAAuB,UAAU,MAC3BM;AAAA,EACR,CAAC,IAGIN,EAAuB,WAVrB,QAAQ,QAAQ,IAAI,GAW5B,CAACG,CAAwB,CAAC;AAU7B,MARAI,EAAU,MAAM;AACd,QAAI,GAACL,KAAyB,CAACC;AAI/B,aAAOK,EAAc,MAAMJ,GAAwB;AAAA,EACrD,GAAG,CAACF,GAAuBE,GAAwBD,CAAwB,CAAC,GAExE,CAACD,KAAyB,CAACC;AAC7B,WAAO;AAGT,QAAMM,IAA+B,gBAAAC,EAAA,YAAY;AAC/C,QAAI;AACF,YAAMC,IAAe,MAAMP,EAAA;AAE3B,UAAI,CAACO;AACH;AAGF,YAAMf,EAAQ,KAAKe,EAAa,oBAAoB,CAAA,CAAE;AAAA,IACxD,SAASL,GAAO;AACd,cAAQ,MAAMA,CAAK;AAAA,IACrB;AAAA,EACF,GAZqC,iCAc/BM,IAAkC,gBAAAF,EAAA,MAAM;AAC5C,IAAKN,EAAA;AAAA,EACP,GAFwC;AAIxC,SACE,gBAAAS,EAACC,GAAA,EAAQ,OAAM,iBAAgB,WAAU,UACvC,UAAA,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,IAAIC;AAAA,MACJ,SAASP;AAAA,MACT,cAAcG;AAAA,MACd,SAASA;AAAA,MACT,WAAWK,EAAKtB,CAAS;AAAA,MACzB,cAAW;AAAA,MAEX,UAAA,gBAAAkB,EAACK,GAAA,EAAoB,UAAS,QAAA,CAAQ;AAAA,IAAA;AAAA,EAAA,GAE1C;AAEJ;AArESR,EAAAjB,GAAA;"}
1
+ {"version":3,"file":"ThemePreviewToggle.js","sources":["../../../../src/layout/components/toggles/ThemePreviewToggle.tsx"],"sourcesContent":["import { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useOwpDialogs } from '@/hooks/useOwpDialogs';\nimport { type DialogComponent } from '@/types/OwpDialogTypes';\nimport { preloadOnIdle } from '@/utils/preloadOnIdle';\nimport PaletteOutlinedIcon from '@mui/icons-material/PaletteOutlined';\nimport IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport clsx from 'clsx';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { toolbarToggleSx } from './toggleStyles';\n\ntype ThemePreviewDialogModule = {\n ThemePreviewDialog: DialogComponent<unknown, unknown>;\n};\n\ntype ThemePreviewDialogLoader = () => Promise<ThemePreviewDialogModule>;\n\ntype ThemePreviewToggleProps = {\n className?: string;\n};\n\nfunction ThemePreviewToggle(props: ThemePreviewToggleProps) {\n const { className = '' } = props;\n const dialogs = useOwpDialogs();\n const { env } = useOwpAppContext();\n const dialogModulePromiseRef = useRef<Promise<ThemePreviewDialogModule> | null>(null);\n const isThemePreviewEnabled = env?.isThemePreviewEnabled === true;\n const themePreviewDialogLoader = env?.themePreviewDialogLoader as\n | ThemePreviewDialogLoader\n | undefined;\n\n const loadThemePreviewDialog = useCallback(() => {\n if (!themePreviewDialogLoader) {\n return Promise.resolve(null);\n }\n\n if (!dialogModulePromiseRef.current) {\n dialogModulePromiseRef.current = themePreviewDialogLoader().catch((error) => {\n dialogModulePromiseRef.current = null;\n throw error;\n });\n }\n\n return dialogModulePromiseRef.current;\n }, [themePreviewDialogLoader]);\n\n useEffect(() => {\n if (!isThemePreviewEnabled || !themePreviewDialogLoader) {\n return;\n }\n\n return preloadOnIdle(() => loadThemePreviewDialog());\n }, [isThemePreviewEnabled, loadThemePreviewDialog, themePreviewDialogLoader]);\n\n if (!isThemePreviewEnabled || !themePreviewDialogLoader) {\n return null;\n }\n\n const handleOpenThemePreviewDialog = async () => {\n try {\n const dialogModule = await loadThemePreviewDialog();\n\n if (!dialogModule) {\n return;\n }\n\n await dialogs.open(dialogModule.ThemePreviewDialog, {});\n } catch (error) {\n console.error(error);\n }\n };\n\n const handlePreloadThemePreviewDialog = () => {\n void loadThemePreviewDialog();\n };\n\n return (\n <Tooltip title=\"Theme Preview\" placement=\"bottom\">\n <IconButton\n sx={toolbarToggleSx}\n onClick={handleOpenThemePreviewDialog}\n onMouseEnter={handlePreloadThemePreviewDialog}\n onFocus={handlePreloadThemePreviewDialog}\n className={clsx(className)}\n aria-label=\"Theme Preview\"\n >\n <PaletteOutlinedIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n );\n}\n\nexport default ThemePreviewToggle;\n"],"names":["ThemePreviewToggle","props","className","dialogs","useOwpDialogs","env","useOwpAppContext","dialogModulePromiseRef","useRef","isThemePreviewEnabled","themePreviewDialogLoader","loadThemePreviewDialog","useCallback","error","useEffect","preloadOnIdle","handleOpenThemePreviewDialog","__name","dialogModule","handlePreloadThemePreviewDialog","jsx","Tooltip","IconButton","toolbarToggleSx","clsx","PaletteOutlinedIcon"],"mappings":";;;;;;;;;;;;AAqBA,SAASA,EAAmBC,GAAgC;AAC1D,QAAM,EAAE,WAAAC,IAAY,GAAA,IAAOD,GACrBE,IAAUC,EAAA,GACV,EAAE,KAAAC,EAAA,IAAQC,EAAA,GACVC,IAAyBC,EAAiD,IAAI,GAC9EC,KAAwBJ,KAAA,gBAAAA,EAAK,2BAA0B,IACvDK,IAA2BL,KAAA,gBAAAA,EAAK,0BAIhCM,IAAyBC,EAAY,MACpCF,KAIAH,EAAuB,YAC1BA,EAAuB,UAAUG,EAAA,EAA2B,MAAM,CAACG,MAAU;AAC3E,UAAAN,EAAuB,UAAU,MAC3BM;AAAA,EACR,CAAC,IAGIN,EAAuB,WAVrB,QAAQ,QAAQ,IAAI,GAW5B,CAACG,CAAwB,CAAC;AAU7B,MARAI,EAAU,MAAM;AACd,QAAI,GAACL,KAAyB,CAACC;AAI/B,aAAOK,EAAc,MAAMJ,GAAwB;AAAA,EACrD,GAAG,CAACF,GAAuBE,GAAwBD,CAAwB,CAAC,GAExE,CAACD,KAAyB,CAACC;AAC7B,WAAO;AAGT,QAAMM,IAA+B,gBAAAC,EAAA,YAAY;AAC/C,QAAI;AACF,YAAMC,IAAe,MAAMP,EAAA;AAE3B,UAAI,CAACO;AACH;AAGF,YAAMf,EAAQ,KAAKe,EAAa,oBAAoB,CAAA,CAAE;AAAA,IACxD,SAASL,GAAO;AACd,cAAQ,MAAMA,CAAK;AAAA,IACrB;AAAA,EACF,GAZqC,iCAc/BM,IAAkC,gBAAAF,EAAA,MAAM;AAC5C,IAAKN,EAAA;AAAA,EACP,GAFwC;AAIxC,SACE,gBAAAS,EAACC,GAAA,EAAQ,OAAM,iBAAgB,WAAU,UACvC,UAAA,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,IAAIC;AAAA,MACJ,SAASP;AAAA,MACT,cAAcG;AAAA,MACd,SAASA;AAAA,MACT,WAAWK,EAAKtB,CAAS;AAAA,MACzB,cAAW;AAAA,MAEX,UAAA,gBAAAkB,EAACK,GAAA,EAAoB,UAAS,QAAA,CAAQ;AAAA,IAAA;AAAA,EAAA,GAE1C;AAEJ;AArESR,EAAAjB,GAAA;"}
@@ -1,6 +1,6 @@
1
1
  var Q = Object.defineProperty;
2
2
  var w = (k, D) => Q(k, "name", { value: D, configurable: !0 });
3
- import { __module as I } from "../../../../../_virtual/index4.js";
3
+ import { __module as I } from "../../../../../_virtual/index3.js";
4
4
  var F;
5
5
  function W() {
6
6
  return F ? I.exports : (F = 1, (function(k, D) {
@@ -1,6 +1,6 @@
1
1
  var O = Object.defineProperty;
2
2
  var C = (i, r) => O(i, "name", { value: r, configurable: !0 });
3
- import { __exports as o } from "../../../../../../../_virtual/index3.js";
3
+ import { __exports as o } from "../../../../../../../_virtual/index4.js";
4
4
  import { __require as c } from "./CODE39/index.js";
5
5
  import { __require as D } from "./CODE128/index.js";
6
6
  import { __require as d } from "./EAN_UPC/index.js";