@owp/core 2.5.34 → 2.5.36

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 (88) 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/OwpTreeGrid/internal/treeGridTheme.js +298 -248
  21. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  22. package/dist/configs/layoutConfig.js +0 -6
  23. package/dist/configs/layoutConfig.js.map +1 -1
  24. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +15 -15
  25. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
  26. package/dist/hooks/internal/useNavbar.js +4 -4
  27. package/dist/hooks/useConfirm.js +1 -1
  28. package/dist/hooks/useConfirm.js.map +1 -1
  29. package/dist/hooks/useOwpDialogs.js +19 -0
  30. package/dist/hooks/useOwpDialogs.js.map +1 -0
  31. package/dist/hooks.js +34 -32
  32. package/dist/hooks.js.map +1 -1
  33. package/dist/index.js +69 -71
  34. package/dist/index.js.map +1 -1
  35. package/dist/layout/Layout.js +23 -27
  36. package/dist/layout/Layout.js.map +1 -1
  37. package/dist/layout/components/layouts/FooterLayout.js.map +1 -1
  38. package/dist/layout/components/menus/PasswordChangeMenu.js +25 -25
  39. package/dist/layout/components/menus/PasswordChangeMenu.js.map +1 -1
  40. package/dist/layout/components/toggles/NavigationSearchToggle.js +1 -1
  41. package/dist/layout/components/toggles/NavigationSearchToggle.js.map +1 -1
  42. package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
  43. package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
  44. package/dist/layout/components/toggles/ThemePreviewToggle.js +14 -14
  45. package/dist/layout/components/toggles/ThemePreviewToggle.js.map +1 -1
  46. package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +1 -1
  47. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/index.js +1 -1
  48. package/dist/types/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.d.ts +5 -3
  49. package/dist/types/components/OwpDialog/OwpAlertDialog.d.ts +1 -1
  50. package/dist/types/components/OwpDialog/internal/useDialogOpenFocusCleanup.d.ts +5 -0
  51. package/dist/types/components/OwpErrorBoundary/OwpErrorBoundary.d.ts +8 -14
  52. package/dist/types/components/OwpNumberField/OwpNumberField.d.ts +18 -4
  53. package/dist/types/components/OwpScrollbars/OwpScrollbars.d.ts +28 -14
  54. package/dist/types/configs/layoutConfig.d.ts +0 -6
  55. package/dist/types/features/themePreview/dialogs/ThemePreviewDialog.d.ts +1 -1
  56. package/dist/types/hooks/index.d.ts +1 -0
  57. package/dist/types/hooks/useOwpDialogs.d.ts +5 -0
  58. package/dist/types/hooks/useOwpSettings.d.ts +0 -6
  59. package/dist/types/index.d.ts +0 -1
  60. package/dist/types/store/atoms/owpSettingsAtoms.d.ts +0 -6
  61. package/dist/types/types/OwpDialogTypes.d.ts +1 -0
  62. package/dist/types/types/OwpRouteTypes.d.ts +25 -0
  63. package/dist/types/types/index.d.ts +2 -0
  64. package/dist/types/utils/index.d.ts +0 -1
  65. package/dist/types/utils/internal/blurActiveElement.d.ts +4 -0
  66. package/dist/utils/internal/blurActiveElement.js +12 -0
  67. package/dist/utils/internal/blurActiveElement.js.map +1 -0
  68. package/dist/utils/{navigationUtils.js → internal/navigationUtils.js} +3 -3
  69. package/dist/utils/internal/navigationUtils.js.map +1 -0
  70. package/dist/utils.js +23 -25
  71. package/dist/utils.js.map +1 -1
  72. package/package.json +1 -1
  73. package/dist/components/OwpEventEmitter/OwpEventEmitter.js +0 -51
  74. package/dist/components/OwpEventEmitter/OwpEventEmitter.js.map +0 -1
  75. package/dist/layout/components/layouts/LeftSideLayout.js +0 -13
  76. package/dist/layout/components/layouts/LeftSideLayout.js.map +0 -1
  77. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js +0 -66
  78. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js.map +0 -1
  79. package/dist/node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/css/perfect-scrollbar.css +0 -1
  80. package/dist/types/components/OwpEventEmitter/OwpEventEmitter.d.ts +0 -27
  81. package/dist/types/components/OwpEventEmitter/index.d.ts +0 -1
  82. package/dist/types/layout/components/layouts/LeftSideLayout.d.ts +0 -6
  83. package/dist/types/utils/common/OwpUtils.d.ts +0 -119
  84. package/dist/types/utils/common/index.d.ts +0 -1
  85. package/dist/utils/common/OwpUtils.js +0 -196
  86. package/dist/utils/common/OwpUtils.js.map +0 -1
  87. package/dist/utils/navigationUtils.js.map +0 -1
  88. /package/dist/types/utils/{navigationUtils.d.ts → internal/navigationUtils.d.ts} +0 -0
@@ -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";
@@ -1,7 +1,9 @@
1
+ type OwpAutoLogoutDialogProps = {
2
+ timeout?: number;
3
+ };
1
4
  /**
2
5
  * OwpAutoLogoutDialog 컴포넌트
3
6
  * @param timeout 자동 로그아웃 시간(ms)
4
7
  */
5
- export declare function OwpAutoLogoutDialog({ timeout }: {
6
- timeout?: number;
7
- }): import("react/jsx-runtime").JSX.Element;
8
+ export declare function OwpAutoLogoutDialog({ timeout }: OwpAutoLogoutDialogProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -1,5 +1,5 @@
1
+ import type { DialogProps } from '@/types/OwpDialogTypes';
1
2
  import type { ButtonProps } from '@mui/material';
2
- import type { DialogProps } from '@toolpad/core/useDialogs';
3
3
  import type { ReactNode } from 'react';
4
4
  export type OwpAlertDialogSeverity = 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';
5
5
  export interface OwpAlertDialogPayload {
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Dialog open 전 focus 정리 상태
3
+ * @param open 요청 open 여부
4
+ */
5
+ export declare const useDialogOpenFocusCleanup: (open?: boolean) => boolean;
@@ -1,16 +1,10 @@
1
- import { Component, ErrorInfo, ReactNode } from 'react';
2
- interface OwpErrorBoundaryProps {
1
+ import { type ReactNode } from 'react';
2
+ type OwpErrorBoundaryProps = {
3
3
  children?: ReactNode;
4
- }
5
- interface OwpErrorBoundaryState {
6
- hasError: boolean;
7
- error: Error | null;
8
- errorInfo: ErrorInfo | null;
9
- }
10
- export declare class OwpErrorBoundary extends Component<OwpErrorBoundaryProps, OwpErrorBoundaryState> {
11
- constructor(props: OwpErrorBoundaryProps);
12
- static getDerivedStateFromError(error: Error): OwpErrorBoundaryState;
13
- componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
14
- render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode>> | import("react/jsx-runtime").JSX.Element;
15
- }
4
+ };
5
+ /**
6
+ * OWP 에러 경계
7
+ * @param children 하위 콘텐츠
8
+ */
9
+ export declare function OwpErrorBoundary({ children }: OwpErrorBoundaryProps): import("react/jsx-runtime").JSX.Element;
16
10
  export {};
@@ -1,12 +1,26 @@
1
1
  import { TextFieldProps } from '@mui/material';
2
- import { ComponentProps } from 'react';
3
- import { NumericFormat } from 'react-number-format';
4
2
  /**
5
3
  * OwpNumberField 컴포넌트
6
4
  * @param className CSS 클래스명
7
5
  * @param inputAlign inputAlign 값
6
+ * @param ref input 참조
8
7
  */
9
- declare const OwpNumberField: ({ className, inputAlign, ...props }: ComponentProps<typeof NumericFormat<TextFieldProps & {
8
+ declare const OwpNumberField: import("react").ForwardRefExoticComponent<import("react-number-format/types/types").InternalNumberFormatBase & {
9
+ thousandSeparator?: boolean | string;
10
+ decimalSeparator?: string;
11
+ allowedDecimalSeparators?: Array<string>;
12
+ thousandsGroupStyle?: "thousand" | "lakh" | "wan" | "none";
13
+ decimalScale?: number;
14
+ fixedDecimalScale?: boolean;
15
+ allowNegative?: boolean;
16
+ allowLeadingZeros?: boolean;
17
+ suffix?: string;
18
+ prefix?: string;
19
+ } & Omit<import("react-number-format").InputAttributes, "style" | "error" | "disabled" | "color" | "className" | "classes" | "children" | "sx" | "variant" | "content" | "translate" | "margin" | "label" | "slot" | "select" | "title" | "ref" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "hidden" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "component" | "fullWidth" | "focused" | "slots" | "slotProps" | "size" | "name" | "type" | "value" | "inputProps" | "inputRef" | "required" | "multiline" | "hiddenLabel" | "autoComplete" | "placeholder" | "rows" | "maxRows" | "minRows" | "InputProps" | "FormHelperTextProps" | "helperText" | "InputLabelProps" | "SelectProps" | "inputAlign"> & Omit<TextFieldProps & {
10
20
  inputAlign?: "left" | "center" | "right";
11
- }>>) => import("react/jsx-runtime").JSX.Element;
21
+ }, "ref" | "defaultValue" | "prefix" | "inputMode" | "onFocus" | "onBlur" | "onChange" | "onKeyDown" | "onMouseUp" | "type" | "value" | "suffix" | "allowNegative" | "onValueChange" | "displayType" | "renderText" | "getInputRef" | "valueIsNumericString" | "isAllowed" | "thousandSeparator" | "decimalSeparator" | "allowedDecimalSeparators" | "thousandsGroupStyle" | "decimalScale" | "fixedDecimalScale" | "allowLeadingZeros"> & {
22
+ customInput?: import("react").ComponentType<TextFieldProps & {
23
+ inputAlign?: "left" | "center" | "right";
24
+ }>;
25
+ } & import("react").RefAttributes<HTMLInputElement>>;
12
26
  export { OwpNumberField };
@@ -1,21 +1,35 @@
1
- import 'perfect-scrollbar/css/perfect-scrollbar.css';
2
- import { ReactNode } from 'react';
3
- type OwpScrollbarsProps = {
4
- id?: string;
5
- className?: string;
6
- children: ReactNode;
7
- enable?: boolean;
8
- scrollToTopOnChildChange?: boolean;
9
- scrollToTopOnRouteChange?: boolean;
10
- option?: {
11
- wheelPropagation?: boolean;
12
- suppressScrollX?: boolean;
13
- };
1
+ import type { ReactNode } from 'react';
2
+ type OwpScrollbarOption = {
3
+ wheelPropagation?: boolean;
4
+ suppressScrollX?: boolean;
5
+ };
6
+ declare const handlerNameByEvent: {
7
+ readonly 'ps-scroll-y': "onScrollY";
8
+ readonly 'ps-scroll-x': "onScrollX";
9
+ readonly 'ps-scroll-up': "onScrollUp";
10
+ readonly 'ps-scroll-down': "onScrollDown";
11
+ readonly 'ps-scroll-left': "onScrollLeft";
12
+ readonly 'ps-scroll-right': "onScrollRight";
13
+ readonly 'ps-y-reach-start': "onYReachStart";
14
+ readonly 'ps-y-reach-end': "onYReachEnd";
15
+ readonly 'ps-x-reach-start': "onXReachStart";
16
+ readonly 'ps-x-reach-end': "onXReachEnd";
14
17
  };
18
+ type OwpScrollbarEventName = keyof typeof handlerNameByEvent;
19
+ type OwpScrollbarHandlerName = (typeof handlerNameByEvent)[OwpScrollbarEventName];
20
+ type OwpScrollbarEventCallback = (container: HTMLDivElement) => void;
15
21
  /**
16
22
  * OwpScrollbars 컴포넌트
17
23
  * @param props 컴포넌트 props
18
24
  * @param ref forwardRef 참조
19
25
  */
20
- declare const OwpScrollbars: import("react").ForwardRefExoticComponent<OwpScrollbarsProps & import("react").RefAttributes<HTMLDivElement>>;
26
+ declare const OwpScrollbars: import("react").ForwardRefExoticComponent<Partial<Record<OwpScrollbarHandlerName, OwpScrollbarEventCallback>> & {
27
+ id?: string;
28
+ className?: string;
29
+ children: ReactNode;
30
+ enable?: boolean;
31
+ scrollToTopOnChildChange?: boolean;
32
+ scrollToTopOnRouteChange?: boolean;
33
+ option?: OwpScrollbarOption;
34
+ } & import("react").RefAttributes<HTMLDivElement>>;
21
35
  export { OwpScrollbars };
@@ -21,12 +21,6 @@ declare const LayoutConfig: {
21
21
  display: boolean;
22
22
  style: string;
23
23
  };
24
- leftSidePanel: {
25
- display: boolean;
26
- };
27
- rightSidePanel: {
28
- display: boolean;
29
- };
30
24
  };
31
25
  form: {
32
26
  mode: {
@@ -1,3 +1,3 @@
1
- import { type DialogComponent } from '@toolpad/core/useDialogs';
1
+ import { type DialogComponent } from '@/types/OwpDialogTypes';
2
2
  import type { ThemePreviewDialogPayload } from '../types';
3
3
  export declare const ThemePreviewDialog: DialogComponent<ThemePreviewDialogPayload, undefined>;
@@ -9,6 +9,7 @@ export * from './useFormDataUploadMutation';
9
9
  export * from './useInitApp';
10
10
  export * from './useNavigation';
11
11
  export * from './useOwpSettings';
12
+ export * from './useOwpDialogs';
12
13
  export * from './useOwpTranslation';
13
14
  export * from './usePageLockLoading';
14
15
  export * from './useStorage';
@@ -0,0 +1,5 @@
1
+ import type { DialogHook } from '@/types/OwpDialogTypes';
2
+ /**
3
+ * Dialog open 전 focus 정리 hook
4
+ */
5
+ export declare const useOwpDialogs: () => DialogHook;
@@ -34,12 +34,6 @@ export declare const useGetCurrentLayoutConfig: () => {
34
34
  display?: boolean;
35
35
  style?: string;
36
36
  };
37
- leftSidePanel?: {
38
- display?: boolean;
39
- };
40
- rightSidePanel?: {
41
- display?: boolean;
42
- };
43
37
  };
44
38
  /**
45
39
  * Main theme 조회 훅
@@ -10,7 +10,6 @@ export * from './components/OwpCommonCode';
10
10
  export * from './components/OwpExportExcelButton/OwpExportExcelButton';
11
11
  export { OwpErrorBoundary } from './components/OwpErrorBoundary';
12
12
  export * from './components/OwpErrorStatusPage';
13
- export { OwpEventEmitter } from './components/OwpEventEmitter';
14
13
  export * from './components/OwpFieldHelperText';
15
14
  export * from './components/OwpFilePickerButton/OwpFilePickerButton';
16
15
  export * from './components/OwpLayout';
@@ -46,12 +46,6 @@ export declare const currentLayoutConfigAtom: import("jotai").Atom<{
46
46
  display?: boolean;
47
47
  style?: string;
48
48
  };
49
- leftSidePanel?: {
50
- display?: boolean;
51
- };
52
- rightSidePanel?: {
53
- display?: boolean;
54
- };
55
49
  }>;
56
50
  export declare const customScrollbarsEnabledAtom: import("jotai").Atom<boolean>;
57
51
  export declare const directionAtom: import("jotai").Atom<"rtl" | "ltr">;
@@ -0,0 +1 @@
1
+ export type { AlertDialogPayload, AlertDialogProps, AlertOptions, CloseDialog, ConfirmDialogPayload, ConfirmDialogProps, ConfirmOptions, DialogComponent, DialogHook, DialogProviderProps, DialogProps, OpenAlertDialog, OpenConfirmDialog, OpenDialog, OpenDialogOptions, OpenPromptDialog, PromptDialogPayload, PromptDialogProps, PromptOptions, } from '@toolpad/core/useDialogs';
@@ -0,0 +1,25 @@
1
+ import type { OwpSettingsConfigType } from '@/types/OwpSettingsTypes';
2
+ import type { DeepPartial } from 'react-hook-form';
3
+ import type { RouteObject } from 'react-router-dom';
4
+ import type { PartialDeep } from 'type-fest';
5
+ /**
6
+ * React Router route item with OWP auth and settings metadata.
7
+ */
8
+ export type OwpRouteItemType = RouteObject & {
9
+ auth?: string[] | [] | null;
10
+ settings?: DeepPartial<OwpSettingsConfigType>;
11
+ children?: OwpRouteItemType[];
12
+ };
13
+ /**
14
+ * OWP route item list.
15
+ */
16
+ export type OwpRoutesType = OwpRouteItemType[];
17
+ /**
18
+ * Route config object consumed by OWP app routing setup.
19
+ */
20
+ export type OwpRouteConfigType = {
21
+ routes: OwpRoutesType;
22
+ settings?: PartialDeep<OwpSettingsConfigType>;
23
+ auth?: string[] | [];
24
+ path?: string;
25
+ };
@@ -1,6 +1,8 @@
1
1
  import './OwpMuiThemeTypes';
2
+ export type { AlertDialogPayload, AlertDialogProps, AlertOptions, CloseDialog, ConfirmDialogPayload, ConfirmDialogProps, ConfirmOptions, DialogComponent, DialogHook, DialogProviderProps, DialogProps, OpenAlertDialog, OpenConfirmDialog, OpenDialog, OpenDialogOptions, OpenPromptDialog, PromptDialogPayload, PromptDialogProps, PromptOptions, } from './OwpDialogTypes';
2
3
  export type { OwpGridBodyThemeConfigType, OwpGridCellThemeConfigType, OwpGridChangedThemeConfigType, OwpGridEditableThemeConfigType, OwpGridHeaderThemeConfigType, OwpGridRowThemeConfigType, OwpGridStateThemeConfigType, OwpGridThemeConfigType, } from './OwpGridThemeTypes';
3
4
  export type { OwpTableCellThemeConfigType, OwpTableHeaderThemeConfigType, OwpTableThemeConfigType, OwpTableVariantThemeConfigType, } from './OwpTableThemeTypes';
4
5
  export type { OwpSnackbarThemeConfigType, OwpSnackbarVariantThemeConfigType, OwpSnackbarVariantType, OwpThemeType, OwpThemesType, OwpSettingsConfigType, } from './OwpSettingsTypes';
5
6
  export type { OwpFlatNavItemType, OwpNavBadgeType, OwpNavPermission, OwpNavItemType, OwpPermissionFlag, } from './OwpNavigationTypes';
7
+ export type { OwpRouteConfigType, OwpRouteItemType, OwpRoutesType } from './OwpRouteTypes';
6
8
  export type { AnyFormFieldType, ThemeFormConfigTypes } from './ThemeFormConfigTypes';
@@ -1,6 +1,5 @@
1
1
  export * from './barcodeUtil';
2
2
  export * from './commonCodeUtils';
3
- export * from './common';
4
3
  export * from './createDateRangeSearchParams';
5
4
  export * from './createFormDataBody';
6
5
  export * from './createJsonBody';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 현재 focus 요소 blur 처리
3
+ */
4
+ export declare const blurActiveElement: () => void;
@@ -0,0 +1,12 @@
1
+ var d = Object.defineProperty;
2
+ var t = (e, n) => d(e, "name", { value: n, configurable: !0 });
3
+ const u = /* @__PURE__ */ t(() => {
4
+ if (typeof window > "u" || typeof document > "u")
5
+ return;
6
+ const { activeElement: e, body: n, documentElement: o } = document;
7
+ e === n || e === o || !(e instanceof window.HTMLElement) || e.blur();
8
+ }, "blurActiveElement");
9
+ export {
10
+ u as blurActiveElement
11
+ };
12
+ //# sourceMappingURL=blurActiveElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blurActiveElement.js","sources":["../../../src/utils/internal/blurActiveElement.ts"],"sourcesContent":["/**\n * 현재 focus 요소 blur 처리\n */\nexport const blurActiveElement = () => {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const { activeElement, body, documentElement } = document;\n\n if (\n activeElement === body ||\n activeElement === documentElement ||\n !(activeElement instanceof window.HTMLElement)\n ) {\n return;\n }\n\n activeElement.blur();\n};\n"],"names":["blurActiveElement","__name","activeElement","body","documentElement"],"mappings":";;AAGO,MAAMA,IAAoB,gBAAAC,EAAA,MAAM;AACrC,MAAI,OAAO,SAAW,OAAe,OAAO,WAAa;AACvD;AAGF,QAAM,EAAE,eAAAC,GAAe,MAAAC,GAAM,iBAAAC,EAAA,IAAoB;AAEjD,EACEF,MAAkBC,KAClBD,MAAkBE,KAClB,EAAEF,aAAyB,OAAO,gBAKpCA,EAAc,KAAA;AAChB,GAhBiC;"}
@@ -1,8 +1,8 @@
1
1
  var f = Object.defineProperty;
2
2
  var h = (c, i) => f(c, "name", { value: i, configurable: !0 });
3
- import { merge as p } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/merge.js";
4
- import { defaults as o } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/defaults.js";
5
- import { uniqueId as m } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/util/uniqueId.js";
3
+ import { merge as p } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/merge.js";
4
+ import { defaults as o } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/defaults.js";
5
+ import { uniqueId as m } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/util/uniqueId.js";
6
6
  function N(c) {
7
7
  return o(c || {}, {
8
8
  id: m(),
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigationUtils.js","sources":["../../../src/utils/internal/navigationUtils.ts"],"sourcesContent":["import type {\n OwpFlatNavItemType,\n OwpNavItemType,\n OwpNavPermission,\n} from '@/types/OwpNavigationTypes';\nimport { merge } from 'es-toolkit/compat';\nimport { defaults, uniqueId } from 'es-toolkit/compat';\nimport type { Pathname } from 'history';\nimport type { PartialDeep } from 'type-fest';\n\ntype OwpNavItemModelInput = PartialDeep<Omit<OwpNavItemType, 'permission'>> & {\n permission?: OwpNavPermission;\n};\n\n/**\n * Navigation item model factory\n */\nexport function OwpNavItemModel(data?: OwpNavItemModelInput): OwpNavItemType {\n return defaults(data || {}, {\n id: uniqueId(),\n title: '',\n translate: '',\n auth: null,\n subtitle: '',\n icon: '',\n iconClass: '',\n url: '',\n target: '',\n type: 'item',\n sx: {},\n disabled: false,\n active: false,\n exact: false,\n end: false,\n badge: null,\n children: [],\n });\n}\n\n/**\n * Navigation child URL matcher\n */\nexport function isUrlInChildren(parent: OwpNavItemType, url: Pathname) {\n if (!parent.children) {\n return false;\n }\n\n for (let i = 0; i < parent.children.length; i += 1) {\n const child = parent.children[i];\n\n if (child.children && isUrlInChildren(child, url)) {\n return true;\n }\n\n if (child.url && (child.url === url || url.includes(child.url))) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Navigation structure helper\n */\nexport class OwpNavigationHelper {\n static selectById(nav: OwpNavItemType[], id: string): OwpNavItemType | undefined {\n for (let i = 0; i < nav.length; i += 1) {\n const item = nav[i];\n\n if (item.id === id) {\n return item;\n }\n\n if (item.children) {\n const childItem = this.selectById(item.children, id);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return undefined;\n }\n\n static appendNavItem(\n nav: OwpNavItemType[],\n item: OwpNavItemType,\n parentId: string | null = null,\n ): OwpNavItemType[] {\n if (!parentId) {\n return [...nav, item];\n }\n\n return nav.map((node) => {\n if (node.id === parentId) {\n const newNode = { ...node };\n newNode.children = [...(node.children || []), item];\n return newNode;\n }\n\n if (node.children) {\n return { ...node, children: this.appendNavItem(node.children, item, parentId) };\n }\n\n return { ...node };\n });\n }\n\n static prependNavItem(\n nav: OwpNavItemType[],\n item: OwpNavItemType,\n parentId: string | null = null,\n ): OwpNavItemType[] {\n if (!parentId) {\n return [item, ...nav];\n }\n\n return nav.map((node) => {\n if (node.id === parentId) {\n const newNode = { ...node };\n newNode.children = [item, ...(node.children || [])];\n return newNode;\n }\n\n if (node.children) {\n return { ...node, children: this.prependNavItem(node.children, item, parentId) };\n }\n\n return { ...node };\n });\n }\n\n static filterNavigationByPermission(\n nav: OwpNavItemType[],\n // @ts-expect-error legacy user role contract\n userRole: User['role'],\n ): OwpNavItemType[] {\n return nav.reduce((acc: OwpNavItemType[], item) => {\n const children = item.children\n ? this.filterNavigationByPermission(item.children, userRole)\n : [];\n\n if (this.hasPermission(item.auth, userRole) || children.length) {\n const newItem = { ...item };\n newItem.children = children.length ? children : undefined;\n acc.push(newItem);\n }\n\n return acc;\n }, []);\n }\n\n /**\n * Navigation item removal\n */\n static removeNavItem(nav: OwpNavItemType[], id: string): OwpNavItemType[] {\n return nav.reduce((acc, node) => {\n if (node.id !== id) {\n if (node.children) {\n acc.push({\n ...node,\n children: this.removeNavItem(node.children, id),\n });\n } else {\n acc.push(node);\n }\n }\n\n return acc;\n }, [] as OwpNavItemType[]);\n }\n\n /**\n * Navigation item update\n */\n static updateNavItem(\n nav: OwpNavItemType[],\n id: string,\n item: PartialDeep<OwpNavItemType>,\n ): OwpNavItemType[] {\n return nav.map((node) => {\n if (node.id === id) {\n return merge({}, node, item);\n }\n\n if (node.children) {\n return {\n ...node,\n children: this.updateNavItem(node.children, id, item),\n };\n }\n\n return node;\n });\n }\n\n /**\n * Flat navigation list extraction\n */\n static getFlatNavigation(navigationItems: OwpNavItemType[] = [], flatNavigation = []) {\n for (let i = 0; i < navigationItems.length; i += 1) {\n const navItem = navigationItems[i];\n\n if (navItem.type === 'item') {\n flatNavigation.push(OwpNavItemModel(navItem));\n }\n\n if ((navItem.type === 'collapse' || navItem.type === 'group') && navItem.children) {\n this.getFlatNavigation(navItem.children, flatNavigation);\n }\n }\n\n return flatNavigation as OwpNavItemType[] | [];\n }\n\n // @ts-expect-error legacy user role contract\n static hasPermission(authArr: string[] | string | undefined, userRole: User['role']): boolean {\n if (authArr === null || authArr === undefined) {\n return true;\n }\n\n if (authArr.length === 0) {\n return !userRole || userRole.length === 0;\n }\n\n if (userRole && Array.isArray(authArr) && Array.isArray(userRole)) {\n return authArr.some((role) => userRole.indexOf(role) >= 0);\n }\n\n return authArr.includes(userRole as string);\n }\n\n static flattenNavigation(\n navigation: OwpNavItemType[],\n parentOrder: string = '',\n ): OwpFlatNavItemType[] {\n return navigation.flatMap((item, index) => {\n const order = parentOrder ? `${parentOrder}.${index + 1}` : `${index + 1}`;\n let flattened: OwpFlatNavItemType[] = [\n { ...item, order, children: item.children?.map((child) => child.id) },\n ];\n\n if (item.children) {\n flattened = flattened.concat(this.flattenNavigation(item.children, order));\n }\n\n return flattened;\n });\n }\n\n static unflattenNavigation(navigation: OwpFlatNavItemType[]): OwpNavItemType[] {\n const itemMap: { [id: string]: OwpNavItemType } = {};\n\n navigation.forEach((item) => {\n itemMap[item.id] = { ...item, children: [] };\n });\n\n const rootItems: OwpNavItemType[] = [];\n\n navigation.forEach((item) => {\n if (item.order.includes('.')) {\n const parentOrder = item.order.substring(0, item.order.lastIndexOf('.'));\n const parent = navigation.find((navItem) => navItem.order === parentOrder);\n\n if (parent) {\n itemMap[parent.id].children!.push(itemMap[item.id]);\n }\n } else {\n rootItems.push(itemMap[item.id]);\n }\n });\n\n return rootItems.map((item) => ({ ...item }));\n }\n}\n"],"names":["OwpNavItemModel","data","defaults","uniqueId","__name","_OwpNavigationHelper","nav","id","i","item","childItem","parentId","node","newNode","userRole","acc","children","newItem","merge","navigationItems","flatNavigation","navItem","authArr","role","navigation","parentOrder","index","order","flattened","_a","child","itemMap","rootItems","parent","OwpNavigationHelper"],"mappings":"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"}