@owp/core 1.30.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/colors/chart.d.ts +3 -0
- package/colors/chart.js +1 -0
- package/contexts.d.ts +3 -0
- package/contexts.js +1 -0
- package/dist/{Close-DnXyQZKh.js → Close-C91nHTKM.js} +280 -282
- package/dist/Close-C91nHTKM.js.map +1 -0
- package/dist/{OwpStoreProvider-Bx5p7ooQ.js → OwpStoreProvider-BPa_lWCz.js} +3 -3
- package/dist/OwpStoreProvider-BPa_lWCz.js.map +1 -0
- package/dist/OwpUtils-DV2LSByd.js +411 -0
- package/dist/OwpUtils-DV2LSByd.js.map +1 -0
- package/dist/colorMap-DP-DCZbV.js +82 -0
- package/dist/colorMap-DP-DCZbV.js.map +1 -0
- package/dist/colors/chart.js +6 -0
- package/dist/colors/chart.js.map +1 -0
- package/dist/colors.js +4 -1
- package/dist/colors.js.map +1 -1
- package/dist/commonCodeUtils-DNfSjP6S.js +42 -0
- package/dist/commonCodeUtils-DNfSjP6S.js.map +1 -0
- package/dist/contexts.js +104 -0
- package/dist/contexts.js.map +1 -0
- package/dist/{owpDark-DAY0F6Ph.js → dark-DAY0F6Ph.js} +1 -1
- package/dist/dark-DAY0F6Ph.js.map +1 -0
- package/dist/emotion-react-jsx-runtime.browser.esm-BMvSswBW.js +1496 -0
- package/dist/emotion-react-jsx-runtime.browser.esm-BMvSswBW.js.map +1 -0
- package/dist/hooks.js +119 -73
- package/dist/hooks.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +44321 -96
- package/dist/index.js.map +1 -1
- package/dist/isString-Codtu20I.js +55 -0
- package/dist/isString-Codtu20I.js.map +1 -0
- package/dist/isTypedArray-CCnDZ5HJ.js +609 -0
- package/dist/isTypedArray-CCnDZ5HJ.js.map +1 -0
- package/dist/language-DaxFvPOq.js +35 -0
- package/dist/language-DaxFvPOq.js.map +1 -0
- package/dist/lazyLoadedSlices-C18y0AEB.js +2773 -0
- package/dist/lazyLoadedSlices-C18y0AEB.js.map +1 -0
- package/dist/owp-app.css +1 -1
- package/dist/store.js +2 -2
- package/dist/{toUpper-i_I6Tyuv.js → toUpper-Dmh8Htx_.js} +2 -2
- package/dist/{toUpper-i_I6Tyuv.js.map → toUpper-Dmh8Htx_.js.map} +1 -1
- package/dist/{treeGridUtil-WTM_djsN.js → treeGridUtil-DAfaAk6C.js} +19 -19
- package/dist/{treeGridUtil-WTM_djsN.js.map → treeGridUtil-DAfaAk6C.js.map} +1 -1
- package/dist/types/colors/chart/colorMap.d.ts +8 -0
- package/dist/types/colors/chart/index.d.ts +1 -0
- package/dist/types/colors/index.d.ts +2 -2
- package/dist/types/colors/palettes/index.d.ts +2 -0
- package/dist/types/components/OwpErrorBoundary/OwpErrorBoundary.d.ts +1 -1
- package/dist/types/components/OwpFileUploadButton/OwpFileUploadButton.d.ts +2 -2
- package/dist/types/components/OwpHidden/OwpHidden.d.ts +19 -0
- package/dist/types/components/OwpHidden/index.d.ts +2 -0
- package/dist/types/components/OwpLayout/OwpLayout.d.ts +2 -2
- package/dist/types/components/OwpPageCarded/OwpPageCarded.d.ts +2 -2
- package/dist/types/components/OwpPageCarded/OwpPageCardedSidebar.d.ts +1 -1
- package/dist/types/components/OwpPicker/DatePickerInput.d.ts +1 -1
- package/dist/types/components/OwpStyleProvider/OwpStyleProvider.d.ts +5 -5
- package/dist/types/components/OwpTable/OwpTable.d.ts +1 -3
- package/dist/types/components/OwpTabs/OwpTab.d.ts +2 -4
- package/dist/types/components/OwpTabs/OwpTabs.d.ts +2 -4
- package/dist/types/{default-settings/OwpDefaultSettings.d.ts → configs/defaultConfig.d.ts} +1 -1
- package/dist/types/{components/layouts/layout2/Layout2Config.d.ts → configs/layoutConfig.d.ts} +12 -15
- package/dist/types/{context → contexts}/OwpAppProvider.d.ts +10 -3
- package/dist/types/hooks/index.d.ts +4 -2
- package/dist/types/{store/hooks.d.ts → hooks/useAppStore.d.ts} +1 -1
- package/dist/types/hooks/useCurrentLanguage.d.ts +1 -5
- package/dist/types/hooks/useInitApp.d.ts +8 -0
- package/dist/types/hooks/useInitCommonCodes.d.ts +4 -0
- package/dist/types/hooks/useLogoSrc.d.ts +8 -0
- package/dist/types/hooks/useNavigation.d.ts +3 -18
- package/dist/types/hooks/useOwpTranslation.d.ts +0 -2
- package/dist/types/hooks/useThemeMediaQuery.d.ts +1 -1
- package/dist/types/index.d.ts +3 -29
- package/dist/types/{components/layouts/layout3/Layout3.d.ts → layout/Layout.d.ts} +4 -4
- package/dist/types/layout/components/layouts/FooterLayout.d.ts +9 -0
- package/dist/types/layout/components/layouts/LeftSideLayout.d.ts +6 -0
- package/dist/types/layout/components/layouts/NavbarToggleFabLayout.d.ts +8 -0
- package/dist/types/layout/components/layouts/NavbarWrapperLayout.d.ts +5 -0
- package/dist/types/layout/components/menus/LogoutMenu.d.ts +8 -0
- package/dist/types/layout/components/menus/PasswordChangeMenu.d.ts +8 -0
- package/dist/types/{components/layouts/shared-components → layout/components/menus}/UserMenu.d.ts +1 -1
- package/dist/types/{components/layouts/shared-components → layout/components}/navbar/NavbarPinToggleButton.d.ts +1 -1
- package/dist/types/layout/components/navbar/NavbarToggleButton.d.ts +11 -0
- package/dist/types/layout/components/navbar/style/NavbarStyle.d.ts +5 -0
- package/dist/types/layout/components/navbar/style/NavbarStyleContent.d.ts +9 -0
- package/dist/types/layout/components/navigation/NavBadge.d.ts +17 -0
- package/dist/types/layout/components/navigation/NavItem.d.ts +14 -0
- package/dist/types/layout/components/navigation/Navigation.d.ts +3 -0
- package/dist/types/layout/components/navigation/NavigationMenu.d.ts +23 -0
- package/dist/types/layout/components/navigation/vertical/NavVerticalLayout.d.ts +9 -0
- package/dist/types/layout/components/navigation/vertical/types/NavVerticalCollapse.d.ts +6 -0
- package/dist/types/layout/components/navigation/vertical/types/NavVerticalGroup.d.ts +6 -0
- package/dist/types/layout/components/navigation/vertical/types/NavVerticalItem.d.ts +6 -0
- package/dist/types/layout/components/navigation/vertical/types/NavVerticalLink.d.ts +7 -0
- package/dist/types/layout/components/toggles/FullScreenToggle.d.ts +8 -0
- package/dist/types/layout/components/toggles/LanguageSwitcherToggle.d.ts +9 -0
- package/dist/types/layout/components/toggles/NavigationSearchToggle.d.ts +16 -0
- package/dist/types/layout/components/toggles/NavigationShortcutsToggle.d.ts +9 -0
- package/dist/types/layout/components/toggles/toggleStyles.d.ts +10 -0
- package/dist/types/{components/layouts/layout3/components/FooterLayout3.d.ts → layout/components/toolbar/ToolbarLayout.d.ts} +4 -4
- package/dist/types/{components/layouts → layout}/themeLayoutConfigs.d.ts +2 -4
- package/dist/types/store/index.d.ts +1 -1
- package/dist/types/store/lazyLoadedSlices.d.ts +2 -2
- package/dist/types/{components/layouts/shared-components/navigation/store → store}/navigationSlice.d.ts +10 -10
- package/dist/types/store/owpSettingsSlice.d.ts +18 -1356
- package/dist/types/{components/OwpNavigation/types/OwpNavItemType.d.ts → types/OwpNavigationTypes.d.ts} +14 -4
- package/dist/types/types/OwpSettingsTypes.d.ts +2 -2
- package/dist/types/types/index.d.ts +3 -0
- package/dist/types/utils/getEstimatedTextCellWidth.d.ts +12 -0
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/language.d.ts +8 -0
- package/dist/types/{components/OwpNavigation/utils/OwpNavigationHelper.d.ts → utils/navigationUtils.d.ts} +17 -5
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/{usePageLockLoading-BUI_3PlR.js → usePageLockLoading-BGODEt_k.js} +5 -5
- package/dist/usePageLockLoading-BGODEt_k.js.map +1 -0
- package/dist/useShortcuts-BjtlXprQ.js +236 -0
- package/dist/useShortcuts-BjtlXprQ.js.map +1 -0
- package/dist/useTreeGridExcelExport-BE6h1hsO.js +120 -0
- package/dist/useTreeGridExcelExport-BE6h1hsO.js.map +1 -0
- package/dist/utils.js +6911 -6671
- package/dist/utils.js.map +1 -1
- package/owp-app.css +1 -0
- package/package.json +51 -47
- package/types.d.ts +3 -0
- package/types.js +1 -0
- package/context.d.ts +0 -3
- package/context.js +0 -1
- package/dist/Close-DnXyQZKh.js.map +0 -1
- package/dist/OwpStoreProvider-Bx5p7ooQ.js.map +0 -1
- package/dist/OwpUtils-C81bM1Gz.js +0 -611
- package/dist/OwpUtils-C81bM1Gz.js.map +0 -1
- package/dist/QuickPanel-CO7Tyc8C.js +0 -104
- package/dist/QuickPanel-CO7Tyc8C.js.map +0 -1
- package/dist/context.js +0 -101
- package/dist/context.js.map +0 -1
- package/dist/emotion-react-jsx-runtime.browser.esm-Cb9H5d3i.js +0 -1751
- package/dist/emotion-react-jsx-runtime.browser.esm-Cb9H5d3i.js.map +0 -1
- package/dist/index-KlA5Es4t.js +0 -46971
- package/dist/index-KlA5Es4t.js.map +0 -1
- package/dist/isTypedArray-DPyC49cI.js +0 -411
- package/dist/isTypedArray-DPyC49cI.js.map +0 -1
- package/dist/lazyLoadedSlices-DC7yg4GT.js +0 -2832
- package/dist/lazyLoadedSlices-DC7yg4GT.js.map +0 -1
- package/dist/owpDark-DAY0F6Ph.js.map +0 -1
- package/dist/types/components/OwpCommonDialog/OwpCommonDialog.d.ts +0 -1
- package/dist/types/components/OwpCommonDialog/index.d.ts +0 -1
- package/dist/types/components/OwpNavigation/OwpNavBadge.d.ts +0 -17
- package/dist/types/components/OwpNavigation/OwpNavItem.d.ts +0 -14
- package/dist/types/components/OwpNavigation/OwpNavigation.d.ts +0 -23
- package/dist/types/components/OwpNavigation/horizontal/OwpNavHorizontalLayout1.d.ts +0 -7
- package/dist/types/components/OwpNavigation/horizontal/types/OwpNavHorizontalCollapse.d.ts +0 -15
- package/dist/types/components/OwpNavigation/horizontal/types/OwpNavHorizontalGroup.d.ts +0 -13
- package/dist/types/components/OwpNavigation/horizontal/types/OwpNavHorizontalItem.d.ts +0 -11
- package/dist/types/components/OwpNavigation/horizontal/types/OwpNavHorizontalLink.d.ts +0 -8
- package/dist/types/components/OwpNavigation/index.d.ts +0 -1
- package/dist/types/components/OwpNavigation/isUrlInChildren.d.ts +0 -7
- package/dist/types/components/OwpNavigation/models/OwpNavItemModel.d.ts +0 -8
- package/dist/types/components/OwpNavigation/types/OwpNavBadgeType.d.ts +0 -9
- package/dist/types/components/OwpNavigation/utils/components.d.ts +0 -4
- package/dist/types/components/OwpNavigation/utils/registerComponent.d.ts +0 -4
- package/dist/types/components/OwpNavigation/vertical/OwpNavVerticalLayout1.d.ts +0 -9
- package/dist/types/components/OwpNavigation/vertical/OwpNavVerticalLayout2.d.ts +0 -7
- package/dist/types/components/OwpNavigation/vertical/types/OwpNavVerticalCollapse.d.ts +0 -7
- package/dist/types/components/OwpNavigation/vertical/types/OwpNavVerticalGroup.d.ts +0 -7
- package/dist/types/components/OwpNavigation/vertical/types/OwpNavVerticalItem.d.ts +0 -7
- package/dist/types/components/OwpNavigation/vertical/types/OwpNavVerticalLink.d.ts +0 -8
- package/dist/types/components/OwpNavigation/vertical/types/OwpNavVerticalTab.d.ts +0 -11
- package/dist/types/components/OwpSearch/OwpSearch.d.ts +0 -23
- package/dist/types/components/OwpSearch/index.d.ts +0 -1
- package/dist/types/components/OwpShortcuts/OwpShortcuts.d.ts +0 -19
- package/dist/types/components/OwpShortcuts/index.d.ts +0 -1
- package/dist/types/components/OwpSidePanel/OwpSidePanel.d.ts +0 -18
- package/dist/types/components/OwpSidePanel/index.d.ts +0 -1
- package/dist/types/components/OwpTheme/OwpTheme.d.ts +0 -18
- package/dist/types/components/OwpTheme/index.d.ts +0 -1
- package/dist/types/components/OwpThemeSelector/OwpThemeSelector.d.ts +0 -16
- package/dist/types/components/OwpThemeSelector/SchemePreview.d.ts +0 -14
- package/dist/types/components/OwpThemeSelector/ThemePreview.d.ts +0 -17
- package/dist/types/components/OwpThemeSelector/index.d.ts +0 -1
- package/dist/types/components/layouts/layout1/Layout1.d.ts +0 -10
- package/dist/types/components/layouts/layout1/Layout1Config.d.ts +0 -114
- package/dist/types/components/layouts/layout1/components/FooterLayout1.d.ts +0 -9
- package/dist/types/components/layouts/layout1/components/LeftSideLayout1.d.ts +0 -6
- package/dist/types/components/layouts/layout1/components/NavbarToggleFabLayout1.d.ts +0 -8
- package/dist/types/components/layouts/layout1/components/NavbarWrapperLayout1.d.ts +0 -5
- package/dist/types/components/layouts/layout1/components/ToolbarLayout1.d.ts +0 -9
- package/dist/types/components/layouts/layout1/components/navbar/style-1/NavbarStyle1.d.ts +0 -5
- package/dist/types/components/layouts/layout1/components/navbar/style-1/NavbarStyle1Content.d.ts +0 -9
- package/dist/types/components/layouts/layout1/components/navbar/style-2/NavbarStyle2.d.ts +0 -5
- package/dist/types/components/layouts/layout1/components/navbar/style-2/NavbarStyle2Content.d.ts +0 -9
- package/dist/types/components/layouts/layout1/components/navbar/style-3/NavbarStyle3.d.ts +0 -9
- package/dist/types/components/layouts/layout1/components/navbar/style-3/NavbarStyle3Content.d.ts +0 -10
- package/dist/types/components/layouts/layout2/Layout2.d.ts +0 -10
- package/dist/types/components/layouts/layout2/components/FooterLayout2.d.ts +0 -9
- package/dist/types/components/layouts/layout2/components/LeftSideLayout2.d.ts +0 -6
- package/dist/types/components/layouts/layout2/components/NavbarLayout2.d.ts +0 -9
- package/dist/types/components/layouts/layout2/components/NavbarMobileLayout2.d.ts +0 -9
- package/dist/types/components/layouts/layout2/components/NavbarToggleFabLayout2.d.ts +0 -8
- package/dist/types/components/layouts/layout2/components/NavbarWrapperLayout2.d.ts +0 -5
- package/dist/types/components/layouts/layout2/components/RightSideLayout2.d.ts +0 -6
- package/dist/types/components/layouts/layout2/components/ToolbarLayout2.d.ts +0 -9
- package/dist/types/components/layouts/layout3/Layout3Config.d.ts +0 -110
- package/dist/types/components/layouts/layout3/components/LeftSideLayout3.d.ts +0 -6
- package/dist/types/components/layouts/layout3/components/NavbarLayout3.d.ts +0 -9
- package/dist/types/components/layouts/layout3/components/NavbarMobileLayout3.d.ts +0 -9
- package/dist/types/components/layouts/layout3/components/NavbarWrapperLayout3.d.ts +0 -5
- package/dist/types/components/layouts/layout3/components/RightSideLayout3.d.ts +0 -6
- package/dist/types/components/layouts/layout3/components/ToolbarLayout3.d.ts +0 -9
- package/dist/types/components/layouts/shared-components/FullScreenToggle.d.ts +0 -8
- package/dist/types/components/layouts/shared-components/LanguageSwitcher.d.ts +0 -7
- package/dist/types/components/layouts/shared-components/PasswordChangeForm.d.ts +0 -2
- package/dist/types/components/layouts/shared-components/navbar/NavbarToggleButton.d.ts +0 -7
- package/dist/types/components/layouts/shared-components/navigation/Navigation.d.ts +0 -3
- package/dist/types/components/layouts/shared-components/navigation/NavigationSearch.d.ts +0 -6
- package/dist/types/components/layouts/shared-components/navigation/NavigationShortcuts.d.ts +0 -6
- package/dist/types/components/layouts/shared-components/quickPanel/QuickPanel.d.ts +0 -5
- package/dist/types/components/layouts/shared-components/quickPanel/QuickPanelToggleButton.d.ts +0 -9
- package/dist/types/components/layouts/shared-components/quickPanel/quickPanelSlice.d.ts +0 -14
- package/dist/types/hooks/useCurrentLogoSrc.d.ts +0 -8
- package/dist/types/hooks/useTreeGridCommonCodeEnum.d.ts +0 -8
- package/dist/usePageLockLoading-BUI_3PlR.js.map +0 -1
- package/dist/useShortcuts-CCf98L8m.js +0 -241
- package/dist/useShortcuts-CCf98L8m.js.map +0 -1
- package/dist/useStorage-CuUmH4fD.js +0 -50
- package/dist/useStorage-CuUmH4fD.js.map +0 -1
- package/dist/useTreeGridExcelExport-N2nOKmkz.js +0 -138
- package/dist/useTreeGridExcelExport-N2nOKmkz.js.map +0 -1
- /package/dist/types/colors/{owpDark.d.ts → palettes/dark.d.ts} +0 -0
- /package/dist/types/colors/{skyBlue.d.ts → palettes/skyBlue.d.ts} +0 -0
- /package/dist/types/{context → contexts}/OwpCoreProvider.d.ts +0 -0
- /package/dist/types/{context → contexts}/OwpStoreProvider.d.ts +0 -0
- /package/dist/types/{context → contexts}/OwpUiProvider.d.ts +0 -0
- /package/dist/types/{context → contexts}/index.d.ts +0 -0
- /package/dist/types/{components/layouts/shared-components → layout/components/logo}/Logo.d.ts +0 -0
- /package/dist/types/{components/layouts/shared-components → layout/components}/navbar/NavbarToggleFab.d.ts +0 -0
- /package/dist/types/{components/layouts/shared-components → layout/components/toggles}/LogoutToggle.d.ts +0 -0
- /package/dist/types/{components/layouts → layout}/themeLayouts.d.ts +0 -0
- /package/dist/types/{components/layouts/shared-components/navbar → store}/navbarSlice.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeGridUtil-WTM_djsN.js","sources":["../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/array/difference.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/array/without.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArray.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/string/words.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/string/lowerCase.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/unset.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/without.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/util/toString.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/omit.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/_internal/normalizeForCase.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/string/lowerCase.mjs","../src/components/OwpTreeGrid/utils.ts","../src/utils/excelUtil.ts","../src/utils/treeGridExportExcelUtil.ts","../src/utils/treeGridUtil.ts"],"sourcesContent":["function difference(firstArr, secondArr) {\n const secondSet = new Set(secondArr);\n return firstArr.filter(item => !secondSet.has(item));\n}\n\nexport { difference };\n","import { difference } from './difference.mjs';\n\nfunction without(array, ...values) {\n return difference(array, values);\n}\n\nexport { without };\n","function isArray(value) {\n return Array.isArray(value);\n}\n\nexport { isArray };\n","const CASE_SPLIT_PATTERN = /\\p{Lu}?\\p{Ll}+|[0-9]+|\\p{Lu}+(?!\\p{Ll})|\\p{Emoji_Presentation}|\\p{Extended_Pictographic}|\\p{L}+/gu;\nfunction words(str) {\n return Array.from(str.match(CASE_SPLIT_PATTERN) ?? []);\n}\n\nexport { CASE_SPLIT_PATTERN, words };\n","import { words } from './words.mjs';\n\nfunction lowerCase(str) {\n const words$1 = words(str);\n return words$1.map(word => word.toLowerCase()).join(' ');\n}\n\nexport { lowerCase };\n","import { isArrayLike } from './isArrayLike.mjs';\nimport { isObjectLike } from './isObjectLike.mjs';\n\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport { isArrayLikeObject };\n","import { get } from './get.mjs';\nimport { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';\nimport { isDeepKey } from '../_internal/isDeepKey.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction unset(obj, path) {\n if (obj == null) {\n return true;\n }\n switch (typeof path) {\n case 'symbol':\n case 'number':\n case 'object': {\n if (Array.isArray(path)) {\n return unsetWithPath(obj, path);\n }\n if (typeof path === 'number') {\n path = toKey(path);\n }\n else if (typeof path === 'object') {\n if (Object.is(path?.valueOf(), -0)) {\n path = '-0';\n }\n else {\n path = String(path);\n }\n }\n if (isUnsafeProperty(path)) {\n return false;\n }\n if (obj?.[path] === undefined) {\n return true;\n }\n try {\n delete obj[path];\n return true;\n }\n catch {\n return false;\n }\n }\n case 'string': {\n if (obj?.[path] === undefined && isDeepKey(path)) {\n return unsetWithPath(obj, toPath(path));\n }\n if (isUnsafeProperty(path)) {\n return false;\n }\n try {\n delete obj[path];\n return true;\n }\n catch {\n return false;\n }\n }\n }\n}\nfunction unsetWithPath(obj, path) {\n const parent = get(obj, path.slice(0, -1), obj);\n const lastKey = path[path.length - 1];\n if (parent?.[lastKey] === undefined) {\n return true;\n }\n if (isUnsafeProperty(lastKey)) {\n return false;\n }\n try {\n delete parent[lastKey];\n return true;\n }\n catch {\n return false;\n }\n}\n\nexport { unset };\n","import { without as without$1 } from '../../array/without.mjs';\nimport { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';\n\nfunction without(array, ...values) {\n if (!isArrayLikeObject(array)) {\n return [];\n }\n return without$1(Array.from(array), ...values);\n}\n\nexport { without };\n","function toString(value) {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(toString).join(',');\n }\n const result = String(value);\n if (result === '0' && Object.is(Number(value), -0)) {\n return '-0';\n }\n return result;\n}\n\nexport { toString };\n","function isPrototype(value) {\n const constructor = value?.constructor;\n const prototype = typeof constructor === 'function' ? constructor.prototype : Object.prototype;\n return value === prototype;\n}\n\nexport { isPrototype };\n","import { unset } from './unset.mjs';\nimport { cloneDeep } from '../../object/cloneDeep.mjs';\n\nfunction omit(obj, ...keysArr) {\n if (obj == null) {\n return {};\n }\n const result = cloneDeep(obj);\n for (let i = 0; i < keysArr.length; i++) {\n let keys = keysArr[i];\n switch (typeof keys) {\n case 'object': {\n if (!Array.isArray(keys)) {\n keys = Array.from(keys);\n }\n for (let j = 0; j < keys.length; j++) {\n const key = keys[j];\n unset(result, key);\n }\n break;\n }\n case 'string':\n case 'symbol':\n case 'number': {\n unset(result, keys);\n break;\n }\n }\n }\n return result;\n}\n\nexport { omit };\n","import { isArguments } from './isArguments.mjs';\nimport { isArrayLike } from './isArrayLike.mjs';\nimport { isTypedArray } from './isTypedArray.mjs';\nimport { isPrototype } from '../_internal/isPrototype.mjs';\n\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value)) {\n if (typeof value.splice !== 'function' &&\n typeof value !== 'string' &&\n (typeof Buffer === 'undefined' || !Buffer.isBuffer(value)) &&\n !isTypedArray(value) &&\n !isArguments(value)) {\n return false;\n }\n return value.length === 0;\n }\n if (typeof value === 'object') {\n if (value instanceof Map || value instanceof Set) {\n return value.size === 0;\n }\n const keys = Object.keys(value);\n if (isPrototype(value)) {\n return keys.filter(x => x !== 'constructor').length === 0;\n }\n return keys.length === 0;\n }\n return true;\n}\n\nexport { isEmpty };\n","import { toString } from '../util/toString.mjs';\n\nfunction normalizeForCase(str) {\n if (typeof str !== 'string') {\n str = toString(str);\n }\n return str.replace(/['\\u2019]/g, '');\n}\n\nexport { normalizeForCase };\n","import { lowerCase as lowerCase$1 } from '../../string/lowerCase.mjs';\nimport { normalizeForCase } from '../_internal/normalizeForCase.mjs';\n\nfunction lowerCase(str) {\n return lowerCase$1(normalizeForCase(str));\n}\n\nexport { lowerCase };\n","import { isPlainObject } from 'es-toolkit/compat';\nimport { type OwpTreeGridLayoutConfig } from './OwpTreeGrid';\n\ntype TreeGridHeaderLayoutConfig = NonNullable<OwpTreeGridLayoutConfig['Header']>;\ntype TreeGridSectionConfig = Record<string, unknown>;\ntype TreeGridLayoutNode = TreeGridSectionConfig & { nextSibling?: TreeGridLayoutNode };\n\nexport const TREE_GRID_HEADER_SECTION = 'Header';\nexport const TREE_GRID_TOOLBAR_SECTION = 'Toolbar';\nexport const TREE_GRID_FOOT_SECTION = 'Foot';\nexport const TREE_GRID_NEXT_SIBLING_KEY = 'nextSibling';\nexport const TREE_GRID_LAYOUT_SECTION_KEYS = [\n TREE_GRID_HEADER_SECTION,\n TREE_GRID_TOOLBAR_SECTION,\n TREE_GRID_FOOT_SECTION,\n] as const;\n\nexport const HEADER = TREE_GRID_HEADER_SECTION;\nexport const TOOLBAR = TREE_GRID_TOOLBAR_SECTION;\nexport const FOOTER = TREE_GRID_FOOT_SECTION;\nexport const NEXT_SIBLING = TREE_GRID_NEXT_SIBLING_KEY;\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nlet treeGridXmlParser: DOMParser | undefined;\n\nconst assignTreeGridSectionFields = (\n targetSection: TRow,\n sectionConfig: TreeGridSectionConfig,\n) => {\n const mutableTargetSection = targetSection as unknown as TreeGridSectionConfig;\n\n for (const fieldName in sectionConfig) {\n if (!hasOwnProperty.call(sectionConfig, fieldName) || fieldName === TREE_GRID_NEXT_SIBLING_KEY) {\n continue;\n }\n\n const fieldValue = sectionConfig[fieldName];\n\n if (fieldValue === undefined) {\n continue;\n }\n\n mutableTargetSection[fieldName] = fieldValue;\n }\n};\n\n/**\n * applyTreeGridSubHeaderLayoutText 적용 함수\n * @param grid TreeGrid 인스턴스\n * @param headerLayout headerLayout 값\n */\nexport const applyTreeGridSubHeaderLayoutText = (\n grid: TTGrid,\n headerLayout?: TreeGridHeaderLayoutConfig,\n) => {\n if (!headerLayout || !grid?.Header) {\n return;\n }\n\n let currentHeaderLayout = headerLayout[TREE_GRID_NEXT_SIBLING_KEY] as TreeGridLayoutNode | undefined;\n let currentGridHeader = grid.Header.nextSibling;\n\n while (currentHeaderLayout && currentGridHeader) {\n assignTreeGridSectionFields(currentGridHeader, currentHeaderLayout);\n currentHeaderLayout = currentHeaderLayout.nextSibling;\n currentGridHeader = currentGridHeader.nextSibling;\n }\n};\n\nexport const applySubHeaderLayoutTextToGrid = applyTreeGridSubHeaderLayoutText;\nexport const changeSubHeaderLayoutTextByGrid = applyTreeGridSubHeaderLayoutText;\n\n/**\n * parseTreeGridXmlToJson 파싱 함수\n * @param xmlString XML 문자열\n */\nexport const parseTreeGridXmlToJson = (xmlString?: string) => {\n try {\n if (!xmlString || typeof DOMParser !== 'function') {\n return undefined;\n }\n\n treeGridXmlParser ??= new DOMParser();\n\n const parsedXml = treeGridXmlParser.parseFromString(xmlString, 'text/xml');\n const childElements = parsedXml.documentElement?.children;\n\n if (!childElements?.length) {\n return undefined;\n }\n\n const parsedItems = new Array<TreeGridSectionConfig>(childElements.length);\n\n for (let nodeIndex = 0; nodeIndex < childElements.length; nodeIndex += 1) {\n const attributes = childElements[nodeIndex].attributes;\n const item: TreeGridSectionConfig = {};\n\n for (let attrIndex = 0; attrIndex < attributes.length; attrIndex += 1) {\n const attribute = attributes[attrIndex];\n item[attribute.name] = attribute.value;\n }\n\n parsedItems[nodeIndex] = item;\n }\n\n return parsedItems;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\nexport const convertXmlToJson = parseTreeGridXmlToJson;\n\n/**\n * applyTreeGridLayoutToGrid 적용 함수\n * @param grid TreeGrid 인스턴스\n * @param layoutConfig 레이아웃 설정\n * @param disableBodyReload disableBodyReload 값\n */\nexport const applyTreeGridLayoutToGrid = (\n grid: TTGrid | TGrid,\n layoutConfig?: OwpTreeGridLayoutConfig,\n disableBodyReload?: boolean,\n) => {\n if (!layoutConfig || !grid) {\n return;\n }\n\n // @ts-expect-error - TreeGrid header block metadata is not declared in bundled types\n const hasSubHeaderBlock = (grid?.Header?.Block ?? 0) > 0;\n const headerLayout = layoutConfig.Header;\n const footerRow = grid.Foot?.lastChild;\n\n if (hasSubHeaderBlock && headerLayout && isPlainObject(headerLayout)) {\n applyTreeGridSubHeaderLayoutText(grid, headerLayout);\n }\n\n for (const sectionKey of TREE_GRID_LAYOUT_SECTION_KEYS) {\n const sectionLayout = layoutConfig[sectionKey] as TreeGridSectionConfig | undefined;\n\n if (!sectionLayout || !isPlainObject(sectionLayout)) {\n continue;\n }\n\n if (sectionKey === TREE_GRID_FOOT_SECTION && footerRow) {\n assignTreeGridSectionFields(footerRow, sectionLayout);\n continue;\n }\n\n const sectionTarget = grid[sectionKey];\n\n if (!sectionTarget) {\n continue;\n }\n\n assignTreeGridSectionFields(sectionTarget, sectionLayout);\n }\n\n if (!disableBodyReload) {\n grid.ReloadBody();\n }\n};\n\nexport const updateLayoutByGrid = applyTreeGridLayoutToGrid;\nexport const applyTreeGridLayoutByGrid = applyTreeGridLayoutToGrid;\n","import {\n DEFAULT_CELL_ALIGNMENT,\n DEFAULT_HEADER_FILL,\n DEFAULT_HEADER_FONT,\n DEFAULT_THIN_BORDER,\n DEFAULT_VALUE_FONT,\n DEFAULT_WRAP_CELL_ALIGNMENT,\n} from '@/constants/excel';\nimport { isEmpty } from 'es-toolkit/compat';\nimport ExcelJS from 'exceljs';\n\nexport {\n DEFAULT_CELL_ALIGNMENT,\n DEFAULT_HEADER_FILL,\n DEFAULT_HEADER_FONT,\n DEFAULT_THIN_BORDER,\n DEFAULT_VALUE_FONT,\n DEFAULT_WRAP_CELL_ALIGNMENT,\n};\n\ntype ExcelCellValue = string | number | boolean | Date | ExcelJS.CellValue | null;\ntype ExcelCellFont = ExcelJS.Cell['font'];\ntype ExcelCellAlignment = ExcelJS.Cell['alignment'];\ntype ExcelCellFill = ExcelJS.Cell['fill'];\ntype ExcelCellOptions = {\n key: string;\n value?: ExcelCellValue;\n font?: ExcelCellFont;\n alignment?: ExcelCellAlignment;\n fill?: ExcelCellFill;\n isHeader?: boolean;\n};\ntype ExcelMergeCellOptions = Omit<ExcelCellOptions, 'key'> & {\n range: string;\n};\n\nconst EXCEL_FILE_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\nconst DEFAULT_EXPORT_FILE_NAME = 'sheet';\n\n/**\n * 워크시트 셀 조회\n * @param ws 엑셀 워크시트\n * @param key 셀 키\n */\nconst getWorksheetCell = (ws: ExcelJS.Worksheet, key: string) => ws.getCell(key);\n\n/**\n * 엑셀 파일 다운로드\n * @param blob 엑셀 Blob 데이터\n * @param title 다운로드 파일명\n */\nconst downloadExcelFile = (blob: Blob, title?: string) => {\n const fileName = title ?? DEFAULT_EXPORT_FILE_NAME;\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `${fileName.normalize('NFC')}.xlsx`;\n anchor.click();\n URL.revokeObjectURL(url);\n};\n\n/**\n * 엑셀 셀 폰트 생성\n * @param isHeader 헤더 셀 여부\n * @param font 폰트 옵션\n */\nconst createCellFont = (isHeader?: boolean, font?: ExcelCellFont): ExcelCellFont => {\n return {\n ...DEFAULT_HEADER_FONT,\n ...(!isHeader && DEFAULT_VALUE_FONT),\n ...font,\n };\n};\n\n/**\n * 엑셀 셀 정렬 생성\n * @param alignment 정렬 옵션\n */\nconst createCellAlignment = (alignment?: ExcelCellAlignment): ExcelCellAlignment => {\n return {\n ...DEFAULT_WRAP_CELL_ALIGNMENT,\n ...alignment,\n };\n};\n\n/**\n * 엑셀 셀 채우기 반영\n * @param cell 워크시트 셀\n * @param fill 채우기 옵션\n * @param isHeader 헤더 셀 여부\n */\nconst applyCellFillAndBorder = (cell: ExcelJS.Cell, fill?: ExcelCellFill, isHeader?: boolean) => {\n cell.border = DEFAULT_THIN_BORDER;\n\n if (isHeader) {\n cell.fill = DEFAULT_HEADER_FILL;\n return;\n }\n\n if (isEmpty(fill)) {\n return;\n }\n\n cell.fill = fill;\n};\n\n/**\n * 엑셀 컬럼 문자 인덱스 변환\n * @param letters 엑셀 컬럼 문자\n */\nexport const getIndexByLetters = (letters: string) =>\n letters.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);\n\n/**\n * 엑셀 컬럼 인덱스 문자 변환\n * @param index 엑셀 컬럼 인덱스\n */\nexport const getLettersByIndex = (index: number) => {\n const columnIndexName = String.fromCharCode(65 + ((index - 1) % 26));\n if (index > 26) {\n return String.fromCharCode(64 + (index - 1) / 26) + columnIndexName;\n }\n return columnIndexName;\n};\n\n/**\n * 엑셀 버퍼 파일 다운로드\n * @param buffer 엑셀 버퍼 데이터\n * @param title 다운로드 파일명\n */\nexport const exportExcelByBuffer = (buffer: ExcelJS.Buffer, title?: string) => {\n const blob = new Blob([buffer], {\n type: EXCEL_FILE_MIME_TYPE,\n });\n\n downloadExcelFile(blob, title);\n};\n\n/**\n * 엑셀 셀 값 및 스타일 반영\n * @param ws 엑셀 워크시트\n * @param key 셀 키\n * @param value 셀 값\n * @param font 폰트 옵션\n * @param alignment 정렬 옵션\n * @param fill 채우기 옵션\n * @param isHeader 헤더 셀 여부\n */\nexport const setCellValue = (\n ws: ExcelJS.Worksheet,\n { key, value, font, alignment, fill, isHeader }: ExcelCellOptions,\n) => {\n const cell = getWorksheetCell(ws, key);\n\n cell.value = value;\n cell.font = createCellFont(isHeader, font);\n cell.alignment = createCellAlignment(alignment);\n applyCellFillAndBorder(cell, fill, isHeader);\n};\n\n/**\n * 엑셀 병합 셀 값 및 스타일 반영\n * @param ws 엑셀 워크시트\n * @param range 병합 범위\n * @param value 셀 값\n * @param font 폰트 옵션\n * @param alignment 정렬 옵션\n * @param fill 채우기 옵션\n * @param isHeader 헤더 셀 여부\n */\nexport const setMergeCells = (\n ws: ExcelJS.Worksheet,\n { range, value, font, alignment, fill, isHeader }: ExcelMergeCellOptions,\n) => {\n const end = range.split(':')[1];\n\n ws.mergeCells(range);\n setCellValue(ws, {\n key: end as string,\n value,\n alignment,\n font,\n fill,\n isHeader,\n });\n};\n","import dayjs from 'dayjs';\nimport ExcelJS from 'exceljs';\nimport { enqueueSnackbar } from 'notistack';\nimport {\n DEFAULT_WRAP_CELL_ALIGNMENT as DEFAULT_ALIGNMENT,\n DEFAULT_HEADER_FILL as HEADER_FILL,\n DEFAULT_HEADER_FONT as HEADER_FONT,\n DEFAULT_THIN_BORDER as HEADER_BORDER,\n DEFAULT_VALUE_FONT as BODY_FONT,\n exportExcelByBuffer,\n} from './excelUtil';\n\ntype TreeGridCellValue = string | number | boolean | Date | null | undefined;\ntype TreeGridLike = TTGrid;\ntype TreeGridRowLike = TRow & Record<string, unknown>;\ntype TranslateFunction = (key: string, options?: Record<string, unknown>) => string;\n\nexport interface ExportTreeGridExcelOptions {\n useAppendCurrentDateTimeToExportName?: boolean;\n exportName?: string;\n t?: TranslateFunction;\n}\n\ninterface ExportCellEntry {\n colIndex: number;\n colSpan: number;\n rowSpan: number;\n value: TreeGridCellValue;\n}\n\ninterface SpanInfo {\n allColSpan: number;\n rowSpan: number;\n visibleColIndex: number | null;\n visibleColSpan: number;\n}\n\nconst ROW_BATCH_SIZE = 200;\nconst DAYJS_DATE_FORMAT_CACHE = new Map<string, string | null>();\nconst DEFAULT_EXPORT_ERROR_MESSAGE = '엑셀 다운로드 중 오류가 발생했습니다.';\nconst DEFAULT_GRID_MISSING_MESSAGE = 'TreeGrid 인스턴스가 없습니다.';\n\nconst isPrimitiveCellValue = (value: unknown): value is TreeGridCellValue =>\n value === null ||\n value === undefined ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value instanceof Date;\n\nconst yieldToMain = () =>\n new Promise<void>((resolve) => {\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => {\n resolve();\n });\n return;\n }\n\n setTimeout(resolve, 0);\n });\n\n/**\n * 번역 텍스트 반환\n * @param t 번역 함수\n * @param key 번역 키\n * @param defaultValue 기본 문구\n */\nconst translateText = (t: TranslateFunction | undefined, key: string, defaultValue: string) => {\n return t?.(key, { defaultValue }) ?? defaultValue;\n};\n\nconst getGridColNames = (grid: TreeGridLike) => (grid.ColNames as string[][] | undefined) ?? [];\n\nconst getGridCols = (grid: TreeGridLike) =>\n grid.Cols as unknown as Record<string, TCol | undefined>;\n\nconst getGridRows = (grid: TreeGridLike) => grid.Rows as unknown as Record<string, TreeGridRowLike>;\n\nconst getGridHeader = (grid: TreeGridLike) =>\n (grid.Header as TreeGridRowLike | null | undefined) ?? null;\n\nconst getGridHead = (grid: TreeGridLike) =>\n (grid.Head as TreeGridRowLike | null | undefined) ?? null;\n\nconst getGridExportName = (grid: TreeGridLike) =>\n (grid as TreeGridLike & { ExportName?: string }).ExportName;\n\nconst getRowFirstChild = (row: TreeGridRowLike | null | undefined) =>\n (row?.firstChild as TreeGridRowLike | null | undefined) ?? null;\n\nconst getRowNextSibling = (row: TreeGridRowLike | null | undefined) =>\n (row?.nextSibling as TreeGridRowLike | null | undefined) ?? null;\n\nconst getSafeExportName = (value?: string) => {\n const exportName = (value ?? 'sheet').trim();\n\n return exportName.replace(/[\\\\/:*?\"<>|]/g, '_') || 'sheet';\n};\n\nconst getSafeSheetName = (value?: string) => getSafeExportName(value).slice(0, 31) || 'sheet';\n\nconst toPositiveInt = (value: unknown) => {\n const parsedValue = Number(value);\n\n if (!Number.isFinite(parsedValue) || parsedValue < 1) {\n return 1;\n }\n\n return Math.floor(parsedValue);\n};\n\nconst isVisible = (value: unknown) => value !== 0 && value !== false && value !== '0';\n\nconst isButtonColumn = (column?: TCol) =>\n column?.Type === 'Button' ||\n `${(column as TCol & { Button?: unknown })?.Button ?? ''}` === 'Button';\n\nconst getColumnNames = (grid: TreeGridLike) => {\n const sectionColumnNames = getGridColNames(grid).flat();\n const orderedColumnNames =\n sectionColumnNames.length > 0\n ? sectionColumnNames\n : typeof grid.GetCols === 'function'\n ? grid.GetCols()\n : [];\n const uniqueColumnNames: string[] = [];\n const seenColumnNames = new Set<string>();\n\n for (const colName of orderedColumnNames) {\n if (!colName || seenColumnNames.has(colName)) {\n continue;\n }\n\n seenColumnNames.add(colName);\n uniqueColumnNames.push(colName);\n }\n\n return uniqueColumnNames;\n};\n\nconst getAllExportColumns = (grid: TreeGridLike) => {\n const columns = getGridCols(grid);\n\n return getColumnNames(grid).filter((colName) => {\n const column = columns[colName];\n\n if (!column || colName === 'Panel' || isButtonColumn(column)) {\n return false;\n }\n\n return column.CanExport !== 0;\n });\n};\n\nconst getVisibleExportColumns = (grid: TreeGridLike, allExportColumns: string[]) => {\n const columns = getGridCols(grid);\n\n return allExportColumns.filter((colName) => {\n const column = columns[colName];\n\n if (!column) {\n return false;\n }\n\n return isVisible(column.Visible);\n });\n};\n\nconst getHeaderRows = (grid: TreeGridLike) => {\n const headerRows: TreeGridRowLike[] = [];\n const seenRows = new Set<TreeGridRowLike>();\n\n const appendHeaderRow = (row: TreeGridRowLike | null) => {\n if (!row || seenRows.has(row)) {\n return;\n }\n\n if (row.Kind && row.Kind !== 'Header') {\n return;\n }\n\n seenRows.add(row);\n headerRows.push(row);\n };\n\n appendHeaderRow(getGridHeader(grid));\n\n let row = getRowFirstChild(getGridHead(grid));\n\n while (row) {\n appendHeaderRow(row);\n row = getRowNextSibling(row);\n }\n\n return headerRows;\n};\n\nconst getVisibleDataRows = (grid: TreeGridLike) => {\n if (typeof grid.GetShownRows === 'function') {\n const shownRows = grid.GetShownRows() as TreeGridRowLike[];\n\n if (Array.isArray(shownRows)) {\n const visibleRows: TreeGridRowLike[] = [];\n\n for (let index = 0; index < shownRows.length; index += 1) {\n const row = shownRows[index];\n\n if (!row || row.Kind !== 'Data' || !isVisible(row.Visible) || row.Fixed === 'Foot') {\n continue;\n }\n\n visibleRows.push(row);\n }\n\n return visibleRows;\n }\n }\n\n const visibleRows: TreeGridRowLike[] = [];\n const rows = getGridRows(grid);\n\n for (const rowKey in rows) {\n const row = rows[rowKey];\n\n if (!row || row.Kind !== 'Data' || !isVisible(row.Visible) || row.Fixed === 'Foot') {\n continue;\n }\n\n visibleRows.push(row);\n }\n\n return visibleRows;\n};\n\nconst createSpanResolver = (allExportColumns: string[], visibleExportColumns: string[]) => {\n const allColumnIndexMap = new Map(allExportColumns.map((colName, index) => [colName, index]));\n const visibleColumnIndexMap = new Map(\n visibleExportColumns.map((colName, index) => [colName, index]),\n );\n const visiblePrefixCounts = new Array(allExportColumns.length + 1).fill(0);\n const visibleIndexByAllIndex = new Array(allExportColumns.length).fill(-1);\n const nextVisibleAllIndexByAllIndex = new Array(allExportColumns.length).fill(-1);\n let nextVisibleAllIndex = -1;\n\n for (let allIndex = 0; allIndex < allExportColumns.length; allIndex += 1) {\n const colName = allExportColumns[allIndex];\n\n if (!colName) {\n continue;\n }\n\n const visibleIndex = visibleColumnIndexMap.get(colName) ?? -1;\n\n visibleIndexByAllIndex[allIndex] = visibleIndex;\n visiblePrefixCounts[allIndex + 1] = visiblePrefixCounts[allIndex] + (visibleIndex >= 0 ? 1 : 0);\n }\n\n for (let allIndex = allExportColumns.length - 1; allIndex >= 0; allIndex -= 1) {\n if (visibleIndexByAllIndex[allIndex] >= 0) {\n nextVisibleAllIndex = allIndex;\n }\n\n nextVisibleAllIndexByAllIndex[allIndex] = nextVisibleAllIndex;\n }\n\n return (colName: string, rawColSpan: unknown) => {\n const startIndex = allColumnIndexMap.get(colName);\n\n if (startIndex === undefined) {\n return {\n allColSpan: 1,\n visibleColIndex: null,\n visibleColSpan: 0,\n };\n }\n\n const allColSpan = toPositiveInt(rawColSpan);\n const endIndex = Math.min(allExportColumns.length - 1, startIndex + allColSpan - 1);\n const firstVisibleAllIndex = nextVisibleAllIndexByAllIndex[startIndex];\n const visibleColIndex =\n firstVisibleAllIndex >= 0 && firstVisibleAllIndex <= endIndex\n ? visibleIndexByAllIndex[firstVisibleAllIndex]\n : null;\n const visibleColSpan = visiblePrefixCounts[endIndex + 1] - visiblePrefixCounts[startIndex];\n\n return {\n allColSpan,\n visibleColIndex: visibleColIndex !== null && visibleColIndex >= 0 ? visibleColIndex : null,\n visibleColSpan,\n };\n };\n};\n\nconst getCellHorizontalAlignment = (column?: TCol) => {\n const align = `${column?.Align ?? ''}`.toLowerCase();\n\n if (align === 'left' || align === 'center' || align === 'right') {\n return align;\n }\n\n if (column?.Type === 'Int' || column?.Type === 'Float') {\n return 'right';\n }\n\n if (column?.Type === 'Date' || column?.Type === 'Enum') {\n return 'center';\n }\n\n return 'left';\n};\n\nconst getDayjsDateFormat = (column?: TCol) => {\n if (column?.Type !== 'Date') {\n return null;\n }\n\n const rawFormat = `${column.Format ?? ''}`.trim();\n\n if (!rawFormat) {\n return null;\n }\n\n const cachedFormat = DAYJS_DATE_FORMAT_CACHE.get(rawFormat);\n\n if (cachedFormat !== undefined) {\n return cachedFormat;\n }\n\n const minuteTwoPlaceholder = '__TREEGRID_MINUTE_TWO__';\n const minuteOnePlaceholder = '__TREEGRID_MINUTE_ONE__';\n const convertedFormat = rawFormat\n .replace(/yyyy/g, 'YYYY')\n .replace(/yy/g, 'YY')\n .replace(/tt/g, 'A')\n .replace(/hh/g, 'HH')\n .replace(/\\bh\\b/g, 'H')\n .replace(/(H{1,2}:)mm/g, `$1${minuteTwoPlaceholder}`)\n .replace(/(H{1,2}:)m/g, `$1${minuteOnePlaceholder}`)\n .replace(/mmmm/g, 'MMMM')\n .replace(/mmm/g, 'MMM')\n .replace(/mm/g, 'MM')\n .replace(/\\bm\\b/g, 'M')\n .replace(new RegExp(minuteTwoPlaceholder, 'g'), 'mm')\n .replace(new RegExp(minuteOnePlaceholder, 'g'), 'm')\n .replace(/dddd/g, 'dddd')\n .replace(/ddd/g, 'ddd')\n .replace(/dd/g, 'DD')\n .replace(/\\bd\\b/g, 'D');\n\n DAYJS_DATE_FORMAT_CACHE.set(rawFormat, convertedFormat);\n\n return convertedFormat;\n};\n\nconst formatDateValue = (value: unknown, column?: TCol) => {\n const dayjsFormat = getDayjsDateFormat(column);\n\n if (!dayjsFormat) {\n return null;\n }\n\n if (!isPrimitiveCellValue(value) || value === null || value === undefined || value === '') {\n return null;\n }\n\n if (typeof value === 'boolean') {\n return null;\n }\n\n const parsedDate = dayjs(value);\n\n if (!parsedDate.isValid()) {\n return null;\n }\n\n return parsedDate.format(dayjsFormat);\n};\n\nconst formatBoolValue = (value: unknown, column?: TCol) => {\n if (column?.Type !== 'Bool') {\n return null;\n }\n\n if (value === null || value === undefined || value === '') {\n return '';\n }\n\n if (\n value === true ||\n value === 1 ||\n value === '1' ||\n value === 'Y' ||\n value === 'y' ||\n value === 'true' ||\n value === 'TRUE'\n ) {\n return 'Y';\n }\n\n if (\n value === false ||\n value === 0 ||\n value === '0' ||\n value === 'N' ||\n value === 'n' ||\n value === 'false' ||\n value === 'FALSE'\n ) {\n return 'N';\n }\n\n return null;\n};\n\nconst getHeaderValue = (grid: TreeGridLike, headerRow: TreeGridRowLike | null, colName: string) => {\n const headerValue = headerRow?.[colName];\n\n if (headerValue !== undefined && headerValue !== null) {\n return String(headerValue);\n }\n\n if (typeof grid.GetCaption === 'function') {\n return grid.GetCaption(colName) ?? '';\n }\n\n return colName;\n};\n\nconst appendHtmlPostfix = (value: TreeGridCellValue, column?: TCol) => {\n const htmlPostfix = `${(column as TCol & { HtmlPostfix?: unknown })?.HtmlPostfix ?? ''}`;\n\n if (!htmlPostfix || value === null || value === undefined || value === '') {\n return value;\n }\n\n return `${value}${htmlPostfix}`;\n};\n\nconst getBodyValue = (grid: TreeGridLike, row: TreeGridRowLike, colName: string, column?: TCol) => {\n if (column?.Type === 'Enum' && typeof grid.GetString === 'function') {\n const displayValue = grid.GetString(row, colName);\n\n if (displayValue !== undefined && displayValue !== null) {\n return appendHtmlPostfix(displayValue, column);\n }\n }\n\n const rowValue = row[colName];\n const formattedBoolValue = formatBoolValue(rowValue, column);\n\n if (formattedBoolValue !== null) {\n return appendHtmlPostfix(formattedBoolValue, column);\n }\n\n const formattedRowValue = formatDateValue(rowValue, column);\n\n if (formattedRowValue !== null) {\n return appendHtmlPostfix(formattedRowValue, column);\n }\n\n if (isPrimitiveCellValue(rowValue)) {\n return appendHtmlPostfix(rowValue, column);\n }\n\n if (typeof grid.GetValue === 'function') {\n const rawValue = grid.GetValue(row, colName);\n const formattedRawBoolValue = formatBoolValue(rawValue, column);\n\n if (formattedRawBoolValue !== null) {\n return appendHtmlPostfix(formattedRawBoolValue, column);\n }\n\n const formattedRawValue = formatDateValue(rawValue, column);\n\n if (formattedRawValue !== null) {\n return appendHtmlPostfix(formattedRawValue, column);\n }\n\n if (isPrimitiveCellValue(rawValue)) {\n return appendHtmlPostfix(rawValue, column);\n }\n }\n\n if (typeof grid.GetString === 'function') {\n const displayValue = grid.GetString(row, colName);\n const formattedDisplayBoolValue = formatBoolValue(displayValue, column);\n\n if (formattedDisplayBoolValue !== null) {\n return appendHtmlPostfix(formattedDisplayBoolValue, column);\n }\n\n const formattedDisplayValue = formatDateValue(displayValue, column);\n\n if (formattedDisplayValue !== null) {\n return appendHtmlPostfix(formattedDisplayValue, column);\n }\n\n if (displayValue !== undefined && displayValue !== null) {\n return appendHtmlPostfix(displayValue, column);\n }\n }\n\n return '';\n};\n\nconst getCellSpanInfo = ({\n colName,\n resolveSpan,\n row,\n rowIndex,\n totalRows,\n}: {\n colName: string;\n resolveSpan: (colName: string, rawColSpan: unknown) => Omit<SpanInfo, 'rowSpan'>;\n row: TreeGridRowLike;\n rowIndex: number;\n totalRows: number;\n}): SpanInfo => {\n const rowSpan = Math.min(\n toPositiveInt(row[`${colName}RowSpan`]),\n Math.max(1, totalRows - rowIndex),\n );\n const { allColSpan, visibleColIndex, visibleColSpan } = resolveSpan(\n colName,\n row[`${colName}Span`],\n );\n\n return {\n allColSpan,\n rowSpan,\n visibleColIndex,\n visibleColSpan,\n };\n};\n\nconst isOccupied = (occupiedCells: Map<number, Set<number>>, rowIndex: number, colIndex: number) =>\n occupiedCells.get(rowIndex)?.has(colIndex);\n\nconst markOccupied = (\n occupiedCells: Map<number, Set<number>>,\n rowIndex: number,\n colIndex: number,\n rowSpan: number,\n colSpan: number,\n) => {\n for (let targetRowIndex = rowIndex; targetRowIndex < rowIndex + rowSpan; targetRowIndex += 1) {\n const occupiedRow = occupiedCells.get(targetRowIndex) ?? new Set<number>();\n\n for (let targetColIndex = colIndex; targetColIndex < colIndex + colSpan; targetColIndex += 1) {\n occupiedRow.add(targetColIndex);\n }\n\n occupiedCells.set(targetRowIndex, occupiedRow);\n }\n};\n\nconst createEntryRows = async ({\n allExportColumns,\n getValue,\n onVisibleEntry,\n resolveSpan,\n rows,\n}: {\n allExportColumns: string[];\n getValue: (row: TreeGridRowLike, colName: string) => TreeGridCellValue;\n onVisibleEntry?: (colIndex: number, value: TreeGridCellValue) => void;\n resolveSpan: (colName: string, rawColSpan: unknown) => Omit<SpanInfo, 'rowSpan'>;\n rows: TreeGridRowLike[];\n}) => {\n if (!allExportColumns.length) {\n return [];\n }\n\n const occupiedCells = new Map<number, Set<number>>();\n const entryRows: ExportCellEntry[][] = rows.map(() => []);\n\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {\n const row = rows[rowIndex];\n const currentEntryRow = entryRows[rowIndex];\n\n if (!row || !currentEntryRow) {\n continue;\n }\n\n for (let allColIndex = 0; allColIndex < allExportColumns.length; allColIndex += 1) {\n const colName = allExportColumns[allColIndex];\n\n if (!colName) {\n continue;\n }\n\n if (isOccupied(occupiedCells, rowIndex, allColIndex)) {\n continue;\n }\n\n const { allColSpan, rowSpan, visibleColIndex, visibleColSpan } = getCellSpanInfo({\n row,\n colName,\n rowIndex,\n totalRows: rows.length,\n resolveSpan,\n });\n\n markOccupied(occupiedCells, rowIndex, allColIndex, rowSpan, allColSpan);\n\n if (visibleColIndex === null || visibleColSpan < 1) {\n continue;\n }\n\n const value = getValue(row, colName);\n\n onVisibleEntry?.(visibleColIndex, value);\n currentEntryRow.push({\n colIndex: visibleColIndex,\n value,\n rowSpan,\n colSpan: visibleColSpan,\n });\n }\n\n if ((rowIndex + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n\n return entryRows;\n};\n\nconst createHeaderEntries = async ({\n allExportColumns,\n grid,\n headerRows,\n resolveSpan,\n visibleExportColumns,\n}: {\n allExportColumns: string[];\n grid: TreeGridLike;\n headerRows: TreeGridRowLike[];\n resolveSpan: (colName: string, rawColSpan: unknown) => Omit<SpanInfo, 'rowSpan'>;\n visibleExportColumns: string[];\n}) => {\n if (!visibleExportColumns.length) {\n return [];\n }\n\n if (!headerRows.length) {\n return [\n visibleExportColumns.map((colName, colIndex) => ({\n colName,\n colIndex,\n value: getHeaderValue(grid, null, colName),\n rowSpan: 1,\n colSpan: 1,\n })),\n ];\n }\n\n return createEntryRows({\n allExportColumns,\n getValue: (row, colName) => getHeaderValue(grid, row, colName),\n resolveSpan,\n rows: headerRows,\n });\n};\n\nconst createBodyEntries = async ({\n allExportColumns,\n columns,\n onVisibleEntry,\n grid,\n dataRows,\n resolveSpan,\n visibleExportColumns,\n}: {\n allExportColumns: string[];\n columns: Record<string, TCol | undefined>;\n dataRows: TreeGridRowLike[];\n grid: TreeGridLike;\n onVisibleEntry?: (colIndex: number, value: TreeGridCellValue) => void;\n resolveSpan: (colName: string, rawColSpan: unknown) => Omit<SpanInfo, 'rowSpan'>;\n visibleExportColumns: string[];\n}) => {\n if (!visibleExportColumns.length) {\n return [];\n }\n\n return createEntryRows({\n allExportColumns,\n getValue: (row, colName) => getBodyValue(grid, row, colName, columns[colName]),\n onVisibleEntry,\n resolveSpan,\n rows: dataRows,\n });\n};\n\nconst appendEntryRows = async (\n worksheet: ExcelJS.Worksheet,\n entryRows: ExportCellEntry[][],\n visibleColumnCount: number,\n) => {\n const startRowIndex = worksheet.rowCount + 1;\n const pendingRows: TreeGridCellValue[][] = [];\n\n for (let rowIndex = 0; rowIndex < entryRows.length; rowIndex += 1) {\n const entries = entryRows[rowIndex] ?? [];\n const rowValues = new Array<TreeGridCellValue>(visibleColumnCount).fill('');\n\n for (let entryIndex = 0; entryIndex < entries.length; entryIndex += 1) {\n const entry = entries[entryIndex];\n\n if (!entry) {\n continue;\n }\n\n rowValues[entry.colIndex] = entry.value ?? '';\n }\n\n pendingRows.push(rowValues);\n\n if (pendingRows.length === ROW_BATCH_SIZE) {\n worksheet.addRows(pendingRows);\n pendingRows.length = 0;\n await yieldToMain();\n } else if ((rowIndex + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n\n if (pendingRows.length) {\n worksheet.addRows(pendingRows);\n }\n\n return startRowIndex;\n};\n\nconst mergeEntryRows = async (\n worksheet: ExcelJS.Worksheet,\n entryRows: ExportCellEntry[][],\n startRowIndex: number,\n) => {\n for (let rowOffset = 0; rowOffset < entryRows.length; rowOffset += 1) {\n const entries = entryRows[rowOffset] ?? [];\n\n for (let entryIndex = 0; entryIndex < entries.length; entryIndex += 1) {\n const entry = entries[entryIndex];\n\n if (!entry) {\n continue;\n }\n\n if (entry.rowSpan === 1 && entry.colSpan === 1) {\n continue;\n }\n\n worksheet.mergeCells(\n startRowIndex + rowOffset,\n entry.colIndex + 1,\n startRowIndex + rowOffset + entry.rowSpan - 1,\n entry.colIndex + entry.colSpan,\n );\n }\n\n if ((rowOffset + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n};\n\nconst styleHeaderRows = async (\n worksheet: ExcelJS.Worksheet,\n startRowIndex: number,\n rowCount: number,\n visibleColumnCount: number,\n) => {\n for (let rowOffset = 0; rowOffset < rowCount; rowOffset += 1) {\n const row = worksheet.getRow(startRowIndex + rowOffset);\n\n row.font = HEADER_FONT;\n\n for (let colIndex = 1; colIndex <= visibleColumnCount; colIndex += 1) {\n const cell = row.getCell(colIndex);\n\n cell.fill = HEADER_FILL;\n cell.border = HEADER_BORDER;\n cell.alignment = {\n ...DEFAULT_ALIGNMENT,\n horizontal: 'center',\n };\n }\n\n if ((rowOffset + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n};\n\nconst styleBodyRows = async (\n worksheet: ExcelJS.Worksheet,\n startRowIndex: number,\n rowCount: number,\n visibleColumnCount: number,\n) => {\n for (let rowOffset = 0; rowOffset < rowCount; rowOffset += 1) {\n const row = worksheet.getRow(startRowIndex + rowOffset);\n\n row.font = BODY_FONT;\n\n for (let colIndex = 1; colIndex <= visibleColumnCount; colIndex += 1) {\n row.getCell(colIndex).border = HEADER_BORDER;\n }\n\n if ((rowOffset + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n};\n\nconst getPreferredColumnWidth = (column?: TCol) => {\n const layoutWidth = Number(column?.Width ?? column?.MinWidth);\n\n if (!Number.isFinite(layoutWidth) || layoutWidth <= 0) {\n return null;\n }\n\n return Math.min(Math.max(Math.round(layoutWidth / 8), 10), 50);\n};\n\nconst getAutoColumnWidth = (valueLength: number) => Math.min(Math.max(valueLength + 4, 10), 50);\n\nconst createColumnWidths = (\n grid: TreeGridLike,\n columns: Record<string, TCol | undefined>,\n visibleExportColumns: string[],\n) => {\n const widths = new Array<number>(visibleExportColumns.length).fill(10);\n const fixedWidthMap = new Array<boolean>(visibleExportColumns.length).fill(false);\n\n for (let index = 0; index < visibleExportColumns.length; index += 1) {\n const colName = visibleExportColumns[index];\n\n if (!colName) {\n continue;\n }\n\n const column = columns[colName];\n const preferredWidth = getPreferredColumnWidth(column);\n\n if (preferredWidth !== null) {\n widths[index] = preferredWidth;\n fixedWidthMap[index] = true;\n continue;\n }\n\n const caption =\n (typeof grid.GetCaption === 'function' ? grid.GetCaption(colName) : '') || colName;\n\n widths[index] = getAutoColumnWidth(`${caption}`.length);\n }\n\n return {\n widths,\n updateWidth: (colIndex: number, value: TreeGridCellValue) => {\n if (fixedWidthMap[colIndex]) {\n return;\n }\n\n const currentWidth = widths[colIndex];\n\n if (currentWidth === undefined) {\n return;\n }\n\n const nextWidth = getAutoColumnWidth(`${value ?? ''}`.length);\n\n if (nextWidth > currentWidth) {\n widths[colIndex] = nextWidth;\n }\n },\n };\n};\n\n/**\n * TreeGrid 엑셀 내보내기\n * @param grid TreeGrid 인스턴스\n * @param options 다운로드 옵션\n */\nexport const exportTreeGridExcel = async (\n grid: TreeGridLike | null | undefined,\n options?: ExportTreeGridExcelOptions | string,\n) => {\n try {\n const resolvedOptions = typeof options === 'string' ? { exportName: options } : options;\n const t = resolvedOptions?.t;\n\n if (!grid) {\n throw new Error(\n translateText(t, 'Message.TreeGrid 인스턴스가 없습니다.', DEFAULT_GRID_MISSING_MESSAGE),\n );\n }\n\n const columns = getGridCols(grid);\n const allExportColumns = getAllExportColumns(grid);\n const visibleExportColumns = getVisibleExportColumns(grid, allExportColumns);\n const { widths, updateWidth } = createColumnWidths(grid, columns, visibleExportColumns);\n\n const headerRows = getHeaderRows(grid);\n const dataRows = getVisibleDataRows(grid);\n const resolveSpan = createSpanResolver(allExportColumns, visibleExportColumns);\n const headerEntries = await createHeaderEntries({\n allExportColumns,\n grid,\n headerRows,\n resolveSpan,\n visibleExportColumns,\n });\n const bodyEntries = await createBodyEntries({\n allExportColumns,\n columns,\n dataRows,\n grid,\n onVisibleEntry: updateWidth,\n resolveSpan,\n visibleExportColumns,\n });\n const workbook = new ExcelJS.Workbook();\n const baseExportName =\n resolvedOptions?.exportName ?? getGridExportName(grid) ?? grid.id ?? 'sheet';\n const exportNameSuffix = resolvedOptions?.useAppendCurrentDateTimeToExportName\n ? `-${dayjs().format('YYYY-MM-DD-HH-mm-ss')}`\n : '';\n const resolvedExportName = getSafeExportName(`${baseExportName}${exportNameSuffix}`);\n const worksheet = workbook.addWorksheet(getSafeSheetName(resolvedExportName));\n const headerStartRowIndex = await appendEntryRows(\n worksheet,\n headerEntries,\n visibleExportColumns.length,\n );\n const bodyStartRowIndex = await appendEntryRows(\n worksheet,\n bodyEntries,\n visibleExportColumns.length,\n );\n\n for (let index = 0; index < visibleExportColumns.length; index += 1) {\n const colName = visibleExportColumns[index];\n\n if (!colName) {\n continue;\n }\n\n const column = columns[colName];\n const worksheetColumn = worksheet.getColumn(index + 1);\n\n worksheetColumn.width = widths[index];\n worksheetColumn.alignment = {\n ...DEFAULT_ALIGNMENT,\n horizontal: getCellHorizontalAlignment(column),\n };\n }\n\n await mergeEntryRows(worksheet, headerEntries, headerStartRowIndex);\n await mergeEntryRows(worksheet, bodyEntries, bodyStartRowIndex);\n await styleHeaderRows(\n worksheet,\n headerStartRowIndex,\n headerEntries.length,\n visibleExportColumns.length,\n );\n await styleBodyRows(\n worksheet,\n bodyStartRowIndex,\n bodyEntries.length,\n visibleExportColumns.length,\n );\n\n worksheet.views = [{ state: 'frozen', ySplit: headerEntries.length }];\n\n await yieldToMain();\n\n const buffer = await workbook.xlsx.writeBuffer({\n useSharedStrings: false,\n useStyles: true,\n });\n\n exportExcelByBuffer(buffer, resolvedExportName);\n } catch (error) {\n const resolvedOptions = typeof options === 'string' ? { exportName: options } : options;\n const t = resolvedOptions?.t;\n\n enqueueSnackbar(\n error instanceof Error\n ? error.message\n : translateText(\n t,\n 'Message.엑셀 다운로드 중 오류가 발생했습니다.',\n DEFAULT_EXPORT_ERROR_MESSAGE,\n ),\n {\n variant: 'error',\n },\n );\n }\n};\n\n/**\n * @deprecated `exportTreeGridExcel` 사용\n */\nexport const exportExcelByGrid = exportTreeGridExcel;\n","import {\n TREEGRID_CELL_HIGHLIGHT_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { parseTreeGridXmlToJson } from '@/components/OwpTreeGrid/utils';\nimport { isPlainObject } from 'es-toolkit';\nimport { get, isArray, isEmpty, lowerCase, omit, without } from 'es-toolkit/compat';\nimport { exportTreeGridExcel } from './treeGridExportExcelUtil';\n\nexport {\n TREEGRID_CELL_HIGHLIGHT_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n};\n\ntype TreeGridInsertPosition = 'above' | 'below' | 'top' | 'last';\n\ntype TreeGridAddRowOptions<T> = {\n canSelect?: boolean;\n insertPosition?: TreeGridInsertPosition;\n parent?: TRow & T;\n anchorRow?: TRow & T;\n initialValues?: T;\n};\n\ntype TreeGridColumnVisibilityOptions = {\n targetKey: string;\n canVisible: boolean;\n};\n\ntype TreeGridHighlightTargetOption = {\n row: TRow;\n col: string;\n};\n\ntype TreeGridChangeStatus = 'Added' | 'Changed';\ntype TreeGridChangedRow = Record<string, unknown>;\n\nconst TREEGRID_CHANGE_STATUSES: TreeGridChangeStatus[] = ['Added', 'Changed'];\nconst TREEGRID_DATA_KEY_PREFIXES = ['OWP', 'IPX'];\n\n/**\n * TreeGrid 데이터 행 목록 추출\n * @param grid TreeGrid 인스턴스\n */\nconst getDataRows = (grid: TGrid | undefined) => {\n return Object.values(grid?.Rows ?? {}).filter((item) => item.Kind === 'Data');\n};\n\n/**\n * 신규 행 추가 대상 계산\n * @param grid TreeGrid 인스턴스\n * @param options 행 추가 옵션\n */\nconst resolveRowInsertionTarget = <T>(grid: TGrid, options?: TreeGridAddRowOptions<T>) => {\n const insertPosition = options?.insertPosition ?? 'top';\n const parent = options?.parent;\n const anchorRow = options?.anchorRow;\n\n let resolvedParent = parent ?? (anchorRow ? anchorRow.parentNode : null) ?? grid.GetFirst();\n let next = null;\n\n switch (insertPosition) {\n case 'top':\n next = grid.GetFirst();\n break;\n\n case 'last':\n resolvedParent = grid.GetNext(grid.GetLast(), grid.RowCount > 0 ? grid.RowCount + 1 : 0);\n next = resolvedParent;\n break;\n\n case 'above':\n next = anchorRow ?? grid.GetFirst();\n break;\n\n case 'below':\n next = anchorRow?.nextSibling ?? grid.GetFirst();\n break;\n }\n\n return { resolvedParent, next };\n};\n\n/**\n * 신규 행 초기값 반영\n * @param row 생성된 TreeGrid 행\n * @param initialValues 신규 행 초기값\n */\nconst assignInitialRowValues = <T>(row: TRow, initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return;\n }\n\n Object.entries(initialValues as Record<string, unknown>).forEach(([rowKey, rowValue]) => {\n (row as unknown as Record<string, unknown>)[rowKey] = rowValue;\n });\n};\n\n/**\n * 변경 데이터 컬럼 키 여부 확인\n * @param key 컬럼 키\n */\nconst isTreeGridDataKey = (key: string) => {\n return TREEGRID_DATA_KEY_PREFIXES.some((prefix) => key.startsWith(prefix));\n};\n\n/**\n * 추가 행 데이터 정규화\n * @param row TreeGrid 변경 행 데이터\n */\nconst normalizeAddedRow = <T>(row: TreeGridChangedRow) => {\n return Object.fromEntries(\n without(Object.keys(row), 'id')\n .filter((key) => isTreeGridDataKey(key) && !isEmpty(row[key]))\n .map((key) => [key, row[key]]),\n ) as T;\n};\n\n/**\n * 변경 상태별 행 데이터 반환\n * @param rows TreeGrid 변경 행 목록\n * @param status 조회할 변경 상태\n */\nconst getChangedRowsByStatus = <T>(rows: TreeGridChangedRow[], status: TreeGridChangeStatus) => {\n return rows\n .filter((row) => get(row, status) === '1' && row.Deleted !== '1')\n .map((row) => (status === 'Changed' ? omit(row, ['id', 'Changed']) : normalizeAddedRow<T>(row)))\n .filter((row) => !isEmpty(row));\n};\n\n/**\n * TreeGrid 인스턴스 ID 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridById = (gridId: string) => {\n return Grids[gridId];\n};\n\n/**\n * TreeGrid 데이터 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridDataRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n return getDataRows(grid) as T;\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param gridId TreeGrid 인스턴스 ID\n * @param rows 새로 반영할 행 데이터\n */\nexport const reloadTreeGridBodyById = (gridId: string, rows: unknown) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n // @ts-expect-error - Data property not defined in type\n const currentData = grid.Data.Data;\n\n // @ts-expect-error - Data property not defined in type\n grid.Data.Data = {\n ...currentData,\n Data: { Body: [rows || []] },\n Url: '',\n };\n grid.ReloadBody();\n};\n\n/**\n * 행을 특정 위치에 추가\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.canSelect 행 선택 가능 여부\n * @param options.parent 부모 행\n * @param options.anchorRow above/below용 기준 행\n * @param options.insertPosition 행 삽입 위치\n * @param options.initialValues 신규 행 초기값\n */\nexport const addTreeGridRowById = <T>(\n gridId: string,\n options?: TreeGridAddRowOptions<T>,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const canSelect = options?.canSelect;\n const initialValues = options?.initialValues;\n const { resolvedParent, next } = resolveRowInsertionTarget(grid, options);\n\n const newRow = grid.AddRow(resolvedParent, next, 1);\n\n assignInitialRowValues(newRow, initialValues);\n\n newRow.CanEdit = 1;\n newRow.CanDelete = 1;\n newRow.CanSelect = canSelect ? 1 : 0;\n\n grid.Focus(newRow);\n grid.RefreshRow(newRow);\n};\n\n/**\n * TreeGrid 추가/수정 데이터 행 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridRowChangesById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const changesData = parseTreeGridXmlToJson(grid?.GetXmlData('changes,allcols,nogrid,noio'));\n\n if (!isArray(changesData)) {\n return { added: [], changed: [] };\n }\n\n return Object.fromEntries(\n TREEGRID_CHANGE_STATUSES.map((status) => [\n lowerCase(status),\n getChangedRowsByStatus<T>(changesData as TreeGridChangedRow[], status),\n ]),\n ) as { added: T[]; changed: T[] };\n};\n\n/**\n * TreeGrid 데이터 엑셀 내보내기\n * @param gridId TreeGrid 인스턴스 ID\n * @param title 다운로드 파일명\n */\nexport const exportTreeGridToExcelById = (gridId: string, title?: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n void exportTreeGridExcel(grid, { exportName: title ?? '' });\n};\n\n/**\n * TreeGrid 현재 선택 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridSelectedRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const selectedRows = grid?.GetSelRows();\n\n return (selectedRows as T) ?? [];\n};\n\n/**\n * TreeGrid 컬럼 표시 여부 변경\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.targetKey 표시 상태를 변경할 컬럼 키\n * @param options.canVisible 컬럼 표시 여부\n */\nexport const setTreeGridColumnVisibilityById = (\n gridId: string,\n options: TreeGridColumnVisibilityOptions,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid || !options?.targetKey) {\n return;\n }\n\n const targetKey = options?.targetKey;\n const canVisible = options?.canVisible;\n\n if (canVisible) {\n grid.ShowCol(targetKey);\n return;\n }\n grid.HideCol(targetKey);\n};\n\n/**\n * 특정 셀 강조 스타일 적용\n * @param gridId TreeGrid 인스턴스 ID\n * @param targetOption.row 강조할 대상 행\n * @param targetOption.col 강조할 대상 컬럼\n */\nexport const highlightTreeGridCellById = (\n gridId: string,\n targetOption: TreeGridHighlightTargetOption,\n) => {\n const grid = getTreeGridById(gridId);\n\n const row = targetOption?.row;\n const col = targetOption?.col;\n\n if (!grid || !row || !col) {\n return;\n }\n\n grid.SetValue(row, `${col}Class`, TREEGRID_CELL_HIGHLIGHT_CLASS);\n grid.SetValue(row, `${col}Color`, TREEGRID_CELL_HIGHLIGHT_COLOR);\n grid.RefreshCell(row, col);\n};\n\n/**\n * TreeGrid 현재 선택 상태 전체 해제\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridSelectionById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionDeselectAll(1, 0);\n};\n\n/**\n * 여러 TreeGrid 선택 상태 전체 해제\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridSelectionsByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridSelectionById);\n};\n\n/**\n * TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridChangesById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionUndoAll(1, 0);\n resetTreeGridSelectionById(gridId);\n};\n\n/**\n * 여러 TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridChangesByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridChangesById);\n};\n\n/**\n * TreeGrid Enum 컬럼 옵션 반영\n * @param gridId TreeGrid 인스턴스 ID\n * @param columnName Enum을 적용할 컬럼명\n * @param options Enum 옵션 목록\n * @param valueKey Enum 값으로 사용할 필드명\n * @param labelKeys Enum 라벨로 사용할 필드 우선순위 목록\n */\nexport const setTreeGridColumnEnumOptionsById = <T extends object>(\n gridId: string,\n columnName: string,\n options: T[] | undefined,\n valueKey: keyof T & string,\n labelKeys: Array<keyof T & string>,\n) => {\n if (!options?.length) {\n return;\n }\n\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const enumValues = options\n .map((item) => {\n const option = item as Record<string, unknown>;\n const labelValue = labelKeys\n .map((labelKey) => option[labelKey])\n .find((value) => value !== undefined && value !== null && value !== '');\n\n return `${labelValue ?? ''}`;\n })\n .join('|');\n const enumKeys = options\n .map((item) => `${(item as Record<string, unknown>)[valueKey] ?? ''}`)\n .join('|');\n\n grid.SetAttribute(null, columnName, 'Type', 'Enum', 0, 0);\n grid.SetAttribute(null, columnName, 'Enum', `|${enumValues}`, 0, 0);\n grid.SetAttribute(null, columnName, 'EnumKeys', `|${enumKeys}`, 1, 0);\n};\n\n/**\n * @deprecated `getTreeGridById` 사용\n */\nexport const getGridById = getTreeGridById;\n\n/**\n * @deprecated `getTreeGridDataRowsById` 사용\n */\nexport const getDataRowsById = getTreeGridDataRowsById;\n\n/**\n * @deprecated `reloadTreeGridBodyById` 사용\n */\nexport const reloadBodyById = reloadTreeGridBodyById;\n\n/**\n * @deprecated `addTreeGridRowById` 사용\n */\nexport const addRowById = addTreeGridRowById;\n\n/**\n * @deprecated `getTreeGridRowChangesById` 사용\n */\nexport const getChangedDataRowsById = getTreeGridRowChangesById;\n\n/**\n * @deprecated `exportTreeGridToExcelById` 사용\n */\nexport const exportExcelById = exportTreeGridToExcelById;\n\n/**\n * @deprecated `getTreeGridSelectedRowsById` 사용\n */\nexport const getSelectedRowsById = getTreeGridSelectedRowsById;\n\n/**\n * @deprecated `setTreeGridColumnVisibilityById` 사용\n */\nexport const changeVisibleCellByGridId = setTreeGridColumnVisibilityById;\n\n/**\n * @deprecated `highlightTreeGridCellById` 사용\n */\nexport const setHighlightTargetCellByGridId = highlightTreeGridCellById;\n\n/**\n * @deprecated `resetTreeGridSelectionById` 사용\n */\nexport const resetGridSelection = resetTreeGridSelectionById;\n\n/**\n * @deprecated `resetTreeGridSelectionsByIds` 사용\n */\nexport const resetGridsSelection = resetTreeGridSelectionsByIds;\n\n/**\n * @deprecated `resetTreeGridChangesById` 사용\n */\nexport const resetGridChanges = resetTreeGridChangesById;\n\n/**\n * @deprecated `resetTreeGridChangesByIds` 사용\n */\nexport const resetGridsChanges = resetTreeGridChangesByIds;\n\n/**\n * @deprecated `setTreeGridColumnEnumOptionsById` 사용\n */\nexport const setGridEnum = setTreeGridColumnEnumOptionsById;\n"],"names":["difference","firstArr","secondArr","secondSet","item","__name","without","array","values","isArray","value","CASE_SPLIT_PATTERN","words","str","lowerCase","word","isArrayLikeObject","isObjectLike","isArrayLike","unset","obj","path","unsetWithPath","toKey","isUnsafeProperty","isDeepKey","toPath","parent","get","lastKey","without$1","toString","result","isPrototype","constructor","prototype","omit","keysArr","cloneDeep","i","keys","j","key","isEmpty","isTypedArray","isArguments","x","normalizeForCase","lowerCase$1","TREE_GRID_HEADER_SECTION","TREE_GRID_TOOLBAR_SECTION","TREE_GRID_FOOT_SECTION","TREE_GRID_NEXT_SIBLING_KEY","TREE_GRID_LAYOUT_SECTION_KEYS","hasOwnProperty","treeGridXmlParser","assignTreeGridSectionFields","targetSection","sectionConfig","mutableTargetSection","fieldName","fieldValue","applyTreeGridSubHeaderLayoutText","grid","headerLayout","currentHeaderLayout","currentGridHeader","parseTreeGridXmlToJson","xmlString","childElements","_a","parsedItems","nodeIndex","attributes","attrIndex","attribute","error","applyTreeGridLayoutToGrid","layoutConfig","disableBodyReload","hasSubHeaderBlock","footerRow","_b","isPlainObject","sectionKey","sectionLayout","sectionTarget","EXCEL_FILE_MIME_TYPE","DEFAULT_EXPORT_FILE_NAME","getWorksheetCell","ws","downloadExcelFile","blob","title","fileName","url","anchor","createCellFont","isHeader","font","DEFAULT_HEADER_FONT","DEFAULT_VALUE_FONT","createCellAlignment","alignment","DEFAULT_WRAP_CELL_ALIGNMENT","applyCellFillAndBorder","cell","fill","DEFAULT_THIN_BORDER","DEFAULT_HEADER_FILL","getIndexByLetters","letters","r","a","getLettersByIndex","index","columnIndexName","exportExcelByBuffer","buffer","setCellValue","setMergeCells","range","end","ROW_BATCH_SIZE","DAYJS_DATE_FORMAT_CACHE","DEFAULT_EXPORT_ERROR_MESSAGE","DEFAULT_GRID_MISSING_MESSAGE","isPrimitiveCellValue","yieldToMain","resolve","translateText","t","defaultValue","getGridColNames","getGridCols","getGridRows","getGridHeader","getGridHead","getGridExportName","getRowFirstChild","row","getRowNextSibling","getSafeExportName","getSafeSheetName","toPositiveInt","parsedValue","isVisible","isButtonColumn","column","getColumnNames","sectionColumnNames","orderedColumnNames","uniqueColumnNames","seenColumnNames","colName","getAllExportColumns","columns","getVisibleExportColumns","allExportColumns","getHeaderRows","headerRows","seenRows","appendHeaderRow","getVisibleDataRows","shownRows","visibleRows","rows","rowKey","createSpanResolver","visibleExportColumns","allColumnIndexMap","visibleColumnIndexMap","visiblePrefixCounts","visibleIndexByAllIndex","nextVisibleAllIndexByAllIndex","nextVisibleAllIndex","allIndex","visibleIndex","rawColSpan","startIndex","allColSpan","endIndex","firstVisibleAllIndex","visibleColIndex","visibleColSpan","getCellHorizontalAlignment","align","getDayjsDateFormat","rawFormat","cachedFormat","minuteTwoPlaceholder","minuteOnePlaceholder","convertedFormat","formatDateValue","dayjsFormat","parsedDate","dayjs","formatBoolValue","getHeaderValue","headerRow","headerValue","appendHtmlPostfix","htmlPostfix","getBodyValue","displayValue","rowValue","formattedBoolValue","formattedRowValue","rawValue","formattedRawBoolValue","formattedRawValue","formattedDisplayBoolValue","formattedDisplayValue","getCellSpanInfo","resolveSpan","rowIndex","totalRows","rowSpan","isOccupied","occupiedCells","colIndex","markOccupied","colSpan","targetRowIndex","occupiedRow","targetColIndex","createEntryRows","getValue","onVisibleEntry","entryRows","currentEntryRow","allColIndex","createHeaderEntries","createBodyEntries","dataRows","appendEntryRows","worksheet","visibleColumnCount","startRowIndex","pendingRows","entries","rowValues","entryIndex","entry","mergeEntryRows","rowOffset","styleHeaderRows","rowCount","HEADER_FONT","HEADER_FILL","HEADER_BORDER","DEFAULT_ALIGNMENT","styleBodyRows","BODY_FONT","getPreferredColumnWidth","layoutWidth","getAutoColumnWidth","valueLength","createColumnWidths","widths","fixedWidthMap","preferredWidth","caption","currentWidth","nextWidth","exportTreeGridExcel","options","resolvedOptions","updateWidth","headerEntries","bodyEntries","workbook","ExcelJS","baseExportName","exportNameSuffix","resolvedExportName","headerStartRowIndex","bodyStartRowIndex","worksheetColumn","enqueueSnackbar","exportExcelByGrid","TREEGRID_CHANGE_STATUSES","TREEGRID_DATA_KEY_PREFIXES","getDataRows","resolveRowInsertionTarget","insertPosition","anchorRow","resolvedParent","next","assignInitialRowValues","initialValues","isTreeGridDataKey","prefix","normalizeAddedRow","getChangedRowsByStatus","status","getTreeGridById","gridId","getTreeGridDataRowsById","reloadTreeGridBodyById","currentData","addTreeGridRowById","canSelect","newRow","getTreeGridRowChangesById","changesData","exportTreeGridToExcelById","getTreeGridSelectedRowsById","setTreeGridColumnVisibilityById","targetKey","highlightTreeGridCellById","targetOption","col","TREEGRID_CELL_HIGHLIGHT_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","resetTreeGridSelectionById","resetTreeGridSelectionsByIds","gridIds","resetTreeGridChangesById","resetTreeGridChangesByIds","setTreeGridColumnEnumOptionsById","columnName","valueKey","labelKeys","enumValues","option","labelKey","enumKeys","getGridById","getDataRowsById","reloadBodyById","addRowById","getChangedDataRowsById","exportExcelById","getSelectedRowsById","changeVisibleCellByGridId","setHighlightTargetCellByGridId","resetGridSelection","resetGridsSelection","resetGridChanges","resetGridsChanges","setGridEnum"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]}
|
|
1
|
+
{"version":3,"file":"treeGridUtil-DAfaAk6C.js","sources":["../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/array/difference.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/array/without.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArray.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/string/words.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/string/lowerCase.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/unset.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/without.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/util/toString.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/omit.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/_internal/normalizeForCase.mjs","../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/string/lowerCase.mjs","../src/components/OwpTreeGrid/utils.ts","../src/utils/excelUtil.ts","../src/utils/treeGridExportExcelUtil.ts","../src/utils/treeGridUtil.ts"],"sourcesContent":["function difference(firstArr, secondArr) {\n const secondSet = new Set(secondArr);\n return firstArr.filter(item => !secondSet.has(item));\n}\n\nexport { difference };\n","import { difference } from './difference.mjs';\n\nfunction without(array, ...values) {\n return difference(array, values);\n}\n\nexport { without };\n","function isArray(value) {\n return Array.isArray(value);\n}\n\nexport { isArray };\n","const CASE_SPLIT_PATTERN = /\\p{Lu}?\\p{Ll}+|[0-9]+|\\p{Lu}+(?!\\p{Ll})|\\p{Emoji_Presentation}|\\p{Extended_Pictographic}|\\p{L}+/gu;\nfunction words(str) {\n return Array.from(str.match(CASE_SPLIT_PATTERN) ?? []);\n}\n\nexport { CASE_SPLIT_PATTERN, words };\n","import { words } from './words.mjs';\n\nfunction lowerCase(str) {\n const words$1 = words(str);\n return words$1.map(word => word.toLowerCase()).join(' ');\n}\n\nexport { lowerCase };\n","import { isArrayLike } from './isArrayLike.mjs';\nimport { isObjectLike } from './isObjectLike.mjs';\n\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport { isArrayLikeObject };\n","import { get } from './get.mjs';\nimport { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';\nimport { isDeepKey } from '../_internal/isDeepKey.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction unset(obj, path) {\n if (obj == null) {\n return true;\n }\n switch (typeof path) {\n case 'symbol':\n case 'number':\n case 'object': {\n if (Array.isArray(path)) {\n return unsetWithPath(obj, path);\n }\n if (typeof path === 'number') {\n path = toKey(path);\n }\n else if (typeof path === 'object') {\n if (Object.is(path?.valueOf(), -0)) {\n path = '-0';\n }\n else {\n path = String(path);\n }\n }\n if (isUnsafeProperty(path)) {\n return false;\n }\n if (obj?.[path] === undefined) {\n return true;\n }\n try {\n delete obj[path];\n return true;\n }\n catch {\n return false;\n }\n }\n case 'string': {\n if (obj?.[path] === undefined && isDeepKey(path)) {\n return unsetWithPath(obj, toPath(path));\n }\n if (isUnsafeProperty(path)) {\n return false;\n }\n try {\n delete obj[path];\n return true;\n }\n catch {\n return false;\n }\n }\n }\n}\nfunction unsetWithPath(obj, path) {\n const parent = get(obj, path.slice(0, -1), obj);\n const lastKey = path[path.length - 1];\n if (parent?.[lastKey] === undefined) {\n return true;\n }\n if (isUnsafeProperty(lastKey)) {\n return false;\n }\n try {\n delete parent[lastKey];\n return true;\n }\n catch {\n return false;\n }\n}\n\nexport { unset };\n","import { without as without$1 } from '../../array/without.mjs';\nimport { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';\n\nfunction without(array, ...values) {\n if (!isArrayLikeObject(array)) {\n return [];\n }\n return without$1(Array.from(array), ...values);\n}\n\nexport { without };\n","function toString(value) {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(toString).join(',');\n }\n const result = String(value);\n if (result === '0' && Object.is(Number(value), -0)) {\n return '-0';\n }\n return result;\n}\n\nexport { toString };\n","function isPrototype(value) {\n const constructor = value?.constructor;\n const prototype = typeof constructor === 'function' ? constructor.prototype : Object.prototype;\n return value === prototype;\n}\n\nexport { isPrototype };\n","import { unset } from './unset.mjs';\nimport { cloneDeep } from '../../object/cloneDeep.mjs';\n\nfunction omit(obj, ...keysArr) {\n if (obj == null) {\n return {};\n }\n const result = cloneDeep(obj);\n for (let i = 0; i < keysArr.length; i++) {\n let keys = keysArr[i];\n switch (typeof keys) {\n case 'object': {\n if (!Array.isArray(keys)) {\n keys = Array.from(keys);\n }\n for (let j = 0; j < keys.length; j++) {\n const key = keys[j];\n unset(result, key);\n }\n break;\n }\n case 'string':\n case 'symbol':\n case 'number': {\n unset(result, keys);\n break;\n }\n }\n }\n return result;\n}\n\nexport { omit };\n","import { isArguments } from './isArguments.mjs';\nimport { isArrayLike } from './isArrayLike.mjs';\nimport { isTypedArray } from './isTypedArray.mjs';\nimport { isPrototype } from '../_internal/isPrototype.mjs';\n\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value)) {\n if (typeof value.splice !== 'function' &&\n typeof value !== 'string' &&\n (typeof Buffer === 'undefined' || !Buffer.isBuffer(value)) &&\n !isTypedArray(value) &&\n !isArguments(value)) {\n return false;\n }\n return value.length === 0;\n }\n if (typeof value === 'object') {\n if (value instanceof Map || value instanceof Set) {\n return value.size === 0;\n }\n const keys = Object.keys(value);\n if (isPrototype(value)) {\n return keys.filter(x => x !== 'constructor').length === 0;\n }\n return keys.length === 0;\n }\n return true;\n}\n\nexport { isEmpty };\n","import { toString } from '../util/toString.mjs';\n\nfunction normalizeForCase(str) {\n if (typeof str !== 'string') {\n str = toString(str);\n }\n return str.replace(/['\\u2019]/g, '');\n}\n\nexport { normalizeForCase };\n","import { lowerCase as lowerCase$1 } from '../../string/lowerCase.mjs';\nimport { normalizeForCase } from '../_internal/normalizeForCase.mjs';\n\nfunction lowerCase(str) {\n return lowerCase$1(normalizeForCase(str));\n}\n\nexport { lowerCase };\n","import { isPlainObject } from 'es-toolkit/compat';\nimport { type OwpTreeGridLayoutConfig } from './OwpTreeGrid';\n\ntype TreeGridHeaderLayoutConfig = NonNullable<OwpTreeGridLayoutConfig['Header']>;\ntype TreeGridSectionConfig = Record<string, unknown>;\ntype TreeGridLayoutNode = TreeGridSectionConfig & { nextSibling?: TreeGridLayoutNode };\n\nexport const TREE_GRID_HEADER_SECTION = 'Header';\nexport const TREE_GRID_TOOLBAR_SECTION = 'Toolbar';\nexport const TREE_GRID_FOOT_SECTION = 'Foot';\nexport const TREE_GRID_NEXT_SIBLING_KEY = 'nextSibling';\nexport const TREE_GRID_LAYOUT_SECTION_KEYS = [\n TREE_GRID_HEADER_SECTION,\n TREE_GRID_TOOLBAR_SECTION,\n TREE_GRID_FOOT_SECTION,\n] as const;\n\nexport const HEADER = TREE_GRID_HEADER_SECTION;\nexport const TOOLBAR = TREE_GRID_TOOLBAR_SECTION;\nexport const FOOTER = TREE_GRID_FOOT_SECTION;\nexport const NEXT_SIBLING = TREE_GRID_NEXT_SIBLING_KEY;\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nlet treeGridXmlParser: DOMParser | undefined;\n\nconst assignTreeGridSectionFields = (\n targetSection: TRow,\n sectionConfig: TreeGridSectionConfig,\n) => {\n const mutableTargetSection = targetSection as unknown as TreeGridSectionConfig;\n\n for (const fieldName in sectionConfig) {\n if (!hasOwnProperty.call(sectionConfig, fieldName) || fieldName === TREE_GRID_NEXT_SIBLING_KEY) {\n continue;\n }\n\n const fieldValue = sectionConfig[fieldName];\n\n if (fieldValue === undefined) {\n continue;\n }\n\n mutableTargetSection[fieldName] = fieldValue;\n }\n};\n\n/**\n * applyTreeGridSubHeaderLayoutText 적용 함수\n * @param grid TreeGrid 인스턴스\n * @param headerLayout headerLayout 값\n */\nexport const applyTreeGridSubHeaderLayoutText = (\n grid: TTGrid,\n headerLayout?: TreeGridHeaderLayoutConfig,\n) => {\n if (!headerLayout || !grid?.Header) {\n return;\n }\n\n let currentHeaderLayout = headerLayout[TREE_GRID_NEXT_SIBLING_KEY] as TreeGridLayoutNode | undefined;\n let currentGridHeader = grid.Header.nextSibling;\n\n while (currentHeaderLayout && currentGridHeader) {\n assignTreeGridSectionFields(currentGridHeader, currentHeaderLayout);\n currentHeaderLayout = currentHeaderLayout.nextSibling;\n currentGridHeader = currentGridHeader.nextSibling;\n }\n};\n\nexport const applySubHeaderLayoutTextToGrid = applyTreeGridSubHeaderLayoutText;\nexport const changeSubHeaderLayoutTextByGrid = applyTreeGridSubHeaderLayoutText;\n\n/**\n * parseTreeGridXmlToJson 파싱 함수\n * @param xmlString XML 문자열\n */\nexport const parseTreeGridXmlToJson = (xmlString?: string) => {\n try {\n if (!xmlString || typeof DOMParser !== 'function') {\n return undefined;\n }\n\n treeGridXmlParser ??= new DOMParser();\n\n const parsedXml = treeGridXmlParser.parseFromString(xmlString, 'text/xml');\n const childElements = parsedXml.documentElement?.children;\n\n if (!childElements?.length) {\n return undefined;\n }\n\n const parsedItems = new Array<TreeGridSectionConfig>(childElements.length);\n\n for (let nodeIndex = 0; nodeIndex < childElements.length; nodeIndex += 1) {\n const attributes = childElements[nodeIndex].attributes;\n const item: TreeGridSectionConfig = {};\n\n for (let attrIndex = 0; attrIndex < attributes.length; attrIndex += 1) {\n const attribute = attributes[attrIndex];\n item[attribute.name] = attribute.value;\n }\n\n parsedItems[nodeIndex] = item;\n }\n\n return parsedItems;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\nexport const convertXmlToJson = parseTreeGridXmlToJson;\n\n/**\n * applyTreeGridLayoutToGrid 적용 함수\n * @param grid TreeGrid 인스턴스\n * @param layoutConfig 레이아웃 설정\n * @param disableBodyReload disableBodyReload 값\n */\nexport const applyTreeGridLayoutToGrid = (\n grid: TTGrid | TGrid,\n layoutConfig?: OwpTreeGridLayoutConfig,\n disableBodyReload?: boolean,\n) => {\n if (!layoutConfig || !grid) {\n return;\n }\n\n // @ts-expect-error - TreeGrid header block metadata is not declared in bundled types\n const hasSubHeaderBlock = (grid?.Header?.Block ?? 0) > 0;\n const headerLayout = layoutConfig.Header;\n const footerRow = grid.Foot?.lastChild;\n\n if (hasSubHeaderBlock && headerLayout && isPlainObject(headerLayout)) {\n applyTreeGridSubHeaderLayoutText(grid, headerLayout);\n }\n\n for (const sectionKey of TREE_GRID_LAYOUT_SECTION_KEYS) {\n const sectionLayout = layoutConfig[sectionKey] as TreeGridSectionConfig | undefined;\n\n if (!sectionLayout || !isPlainObject(sectionLayout)) {\n continue;\n }\n\n if (sectionKey === TREE_GRID_FOOT_SECTION && footerRow) {\n assignTreeGridSectionFields(footerRow, sectionLayout);\n continue;\n }\n\n const sectionTarget = grid[sectionKey];\n\n if (!sectionTarget) {\n continue;\n }\n\n assignTreeGridSectionFields(sectionTarget, sectionLayout);\n }\n\n if (!disableBodyReload) {\n grid.ReloadBody();\n }\n};\n\nexport const updateLayoutByGrid = applyTreeGridLayoutToGrid;\nexport const applyTreeGridLayoutByGrid = applyTreeGridLayoutToGrid;\n","import {\n DEFAULT_CELL_ALIGNMENT,\n DEFAULT_HEADER_FILL,\n DEFAULT_HEADER_FONT,\n DEFAULT_THIN_BORDER,\n DEFAULT_VALUE_FONT,\n DEFAULT_WRAP_CELL_ALIGNMENT,\n} from '@/constants/excel';\nimport { isEmpty } from 'es-toolkit/compat';\nimport ExcelJS from 'exceljs';\n\nexport {\n DEFAULT_CELL_ALIGNMENT,\n DEFAULT_HEADER_FILL,\n DEFAULT_HEADER_FONT,\n DEFAULT_THIN_BORDER,\n DEFAULT_VALUE_FONT,\n DEFAULT_WRAP_CELL_ALIGNMENT,\n};\n\ntype ExcelCellValue = string | number | boolean | Date | ExcelJS.CellValue | null;\ntype ExcelCellFont = ExcelJS.Cell['font'];\ntype ExcelCellAlignment = ExcelJS.Cell['alignment'];\ntype ExcelCellFill = ExcelJS.Cell['fill'];\ntype ExcelCellOptions = {\n key: string;\n value?: ExcelCellValue;\n font?: ExcelCellFont;\n alignment?: ExcelCellAlignment;\n fill?: ExcelCellFill;\n isHeader?: boolean;\n};\ntype ExcelMergeCellOptions = Omit<ExcelCellOptions, 'key'> & {\n range: string;\n};\n\nconst EXCEL_FILE_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\nconst DEFAULT_EXPORT_FILE_NAME = 'sheet';\n\n/**\n * 워크시트 셀 조회\n * @param ws 엑셀 워크시트\n * @param key 셀 키\n */\nconst getWorksheetCell = (ws: ExcelJS.Worksheet, key: string) => ws.getCell(key);\n\n/**\n * 엑셀 파일 다운로드\n * @param blob 엑셀 Blob 데이터\n * @param title 다운로드 파일명\n */\nconst downloadExcelFile = (blob: Blob, title?: string) => {\n const fileName = title ?? DEFAULT_EXPORT_FILE_NAME;\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `${fileName.normalize('NFC')}.xlsx`;\n anchor.click();\n URL.revokeObjectURL(url);\n};\n\n/**\n * 엑셀 셀 폰트 생성\n * @param isHeader 헤더 셀 여부\n * @param font 폰트 옵션\n */\nconst createCellFont = (isHeader?: boolean, font?: ExcelCellFont): ExcelCellFont => {\n return {\n ...DEFAULT_HEADER_FONT,\n ...(!isHeader && DEFAULT_VALUE_FONT),\n ...font,\n };\n};\n\n/**\n * 엑셀 셀 정렬 생성\n * @param alignment 정렬 옵션\n */\nconst createCellAlignment = (alignment?: ExcelCellAlignment): ExcelCellAlignment => {\n return {\n ...DEFAULT_WRAP_CELL_ALIGNMENT,\n ...alignment,\n };\n};\n\n/**\n * 엑셀 셀 채우기 반영\n * @param cell 워크시트 셀\n * @param fill 채우기 옵션\n * @param isHeader 헤더 셀 여부\n */\nconst applyCellFillAndBorder = (cell: ExcelJS.Cell, fill?: ExcelCellFill, isHeader?: boolean) => {\n cell.border = DEFAULT_THIN_BORDER;\n\n if (isHeader) {\n cell.fill = DEFAULT_HEADER_FILL;\n return;\n }\n\n if (isEmpty(fill)) {\n return;\n }\n\n cell.fill = fill;\n};\n\n/**\n * 엑셀 컬럼 문자 인덱스 변환\n * @param letters 엑셀 컬럼 문자\n */\nexport const getIndexByLetters = (letters: string) =>\n letters.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);\n\n/**\n * 엑셀 컬럼 인덱스 문자 변환\n * @param index 엑셀 컬럼 인덱스\n */\nexport const getLettersByIndex = (index: number) => {\n const columnIndexName = String.fromCharCode(65 + ((index - 1) % 26));\n if (index > 26) {\n return String.fromCharCode(64 + (index - 1) / 26) + columnIndexName;\n }\n return columnIndexName;\n};\n\n/**\n * 엑셀 버퍼 파일 다운로드\n * @param buffer 엑셀 버퍼 데이터\n * @param title 다운로드 파일명\n */\nexport const exportExcelByBuffer = (buffer: ExcelJS.Buffer, title?: string) => {\n const blob = new Blob([buffer], {\n type: EXCEL_FILE_MIME_TYPE,\n });\n\n downloadExcelFile(blob, title);\n};\n\n/**\n * 엑셀 셀 값 및 스타일 반영\n * @param ws 엑셀 워크시트\n * @param key 셀 키\n * @param value 셀 값\n * @param font 폰트 옵션\n * @param alignment 정렬 옵션\n * @param fill 채우기 옵션\n * @param isHeader 헤더 셀 여부\n */\nexport const setCellValue = (\n ws: ExcelJS.Worksheet,\n { key, value, font, alignment, fill, isHeader }: ExcelCellOptions,\n) => {\n const cell = getWorksheetCell(ws, key);\n\n cell.value = value;\n cell.font = createCellFont(isHeader, font);\n cell.alignment = createCellAlignment(alignment);\n applyCellFillAndBorder(cell, fill, isHeader);\n};\n\n/**\n * 엑셀 병합 셀 값 및 스타일 반영\n * @param ws 엑셀 워크시트\n * @param range 병합 범위\n * @param value 셀 값\n * @param font 폰트 옵션\n * @param alignment 정렬 옵션\n * @param fill 채우기 옵션\n * @param isHeader 헤더 셀 여부\n */\nexport const setMergeCells = (\n ws: ExcelJS.Worksheet,\n { range, value, font, alignment, fill, isHeader }: ExcelMergeCellOptions,\n) => {\n const end = range.split(':')[1];\n\n ws.mergeCells(range);\n setCellValue(ws, {\n key: end as string,\n value,\n alignment,\n font,\n fill,\n isHeader,\n });\n};\n","import dayjs from 'dayjs';\nimport ExcelJS from 'exceljs';\nimport { enqueueSnackbar } from 'notistack';\nimport {\n DEFAULT_WRAP_CELL_ALIGNMENT as DEFAULT_ALIGNMENT,\n DEFAULT_HEADER_FILL as HEADER_FILL,\n DEFAULT_HEADER_FONT as HEADER_FONT,\n DEFAULT_THIN_BORDER as HEADER_BORDER,\n DEFAULT_VALUE_FONT as BODY_FONT,\n exportExcelByBuffer,\n} from './excelUtil';\n\ntype TreeGridCellValue = string | number | boolean | Date | null | undefined;\ntype TreeGridLike = TTGrid;\ntype TreeGridRowLike = TRow & Record<string, unknown>;\ntype TranslateFunction = (key: string, options?: Record<string, unknown>) => string;\n\nexport interface ExportTreeGridExcelOptions {\n useAppendCurrentDateTimeToExportName?: boolean;\n exportName?: string;\n t?: TranslateFunction;\n}\n\ninterface ExportCellEntry {\n colIndex: number;\n colSpan: number;\n rowSpan: number;\n value: TreeGridCellValue;\n}\n\ninterface SpanInfo {\n allColSpan: number;\n rowSpan: number;\n visibleColIndex: number | null;\n visibleColSpan: number;\n}\n\nconst ROW_BATCH_SIZE = 200;\nconst DAYJS_DATE_FORMAT_CACHE = new Map<string, string | null>();\nconst DEFAULT_EXPORT_ERROR_MESSAGE = '엑셀 다운로드 중 오류가 발생했습니다.';\nconst DEFAULT_GRID_MISSING_MESSAGE = 'TreeGrid 인스턴스가 없습니다.';\n\nconst isPrimitiveCellValue = (value: unknown): value is TreeGridCellValue =>\n value === null ||\n value === undefined ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value instanceof Date;\n\nconst yieldToMain = () =>\n new Promise<void>((resolve) => {\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => {\n resolve();\n });\n return;\n }\n\n setTimeout(resolve, 0);\n });\n\n/**\n * 번역 텍스트 반환\n * @param t 번역 함수\n * @param key 번역 키\n * @param defaultValue 기본 문구\n */\nconst translateText = (t: TranslateFunction | undefined, key: string, defaultValue: string) => {\n return t?.(key, { defaultValue }) ?? defaultValue;\n};\n\nconst getGridColNames = (grid: TreeGridLike) => (grid.ColNames as string[][] | undefined) ?? [];\n\nconst getGridCols = (grid: TreeGridLike) =>\n grid.Cols as unknown as Record<string, TCol | undefined>;\n\nconst getGridRows = (grid: TreeGridLike) => grid.Rows as unknown as Record<string, TreeGridRowLike>;\n\nconst getGridHeader = (grid: TreeGridLike) =>\n (grid.Header as TreeGridRowLike | null | undefined) ?? null;\n\nconst getGridHead = (grid: TreeGridLike) =>\n (grid.Head as TreeGridRowLike | null | undefined) ?? null;\n\nconst getGridExportName = (grid: TreeGridLike) =>\n (grid as TreeGridLike & { ExportName?: string }).ExportName;\n\nconst getRowFirstChild = (row: TreeGridRowLike | null | undefined) =>\n (row?.firstChild as TreeGridRowLike | null | undefined) ?? null;\n\nconst getRowNextSibling = (row: TreeGridRowLike | null | undefined) =>\n (row?.nextSibling as TreeGridRowLike | null | undefined) ?? null;\n\nconst getSafeExportName = (value?: string) => {\n const exportName = (value ?? 'sheet').trim();\n\n return exportName.replace(/[\\\\/:*?\"<>|]/g, '_') || 'sheet';\n};\n\nconst getSafeSheetName = (value?: string) => getSafeExportName(value).slice(0, 31) || 'sheet';\n\nconst toPositiveInt = (value: unknown) => {\n const parsedValue = Number(value);\n\n if (!Number.isFinite(parsedValue) || parsedValue < 1) {\n return 1;\n }\n\n return Math.floor(parsedValue);\n};\n\nconst isVisible = (value: unknown) => value !== 0 && value !== false && value !== '0';\n\nconst isButtonColumn = (column?: TCol) =>\n column?.Type === 'Button' ||\n `${(column as TCol & { Button?: unknown })?.Button ?? ''}` === 'Button';\n\nconst getColumnNames = (grid: TreeGridLike) => {\n const sectionColumnNames = getGridColNames(grid).flat();\n const orderedColumnNames =\n sectionColumnNames.length > 0\n ? sectionColumnNames\n : typeof grid.GetCols === 'function'\n ? grid.GetCols()\n : [];\n const uniqueColumnNames: string[] = [];\n const seenColumnNames = new Set<string>();\n\n for (const colName of orderedColumnNames) {\n if (!colName || seenColumnNames.has(colName)) {\n continue;\n }\n\n seenColumnNames.add(colName);\n uniqueColumnNames.push(colName);\n }\n\n return uniqueColumnNames;\n};\n\nconst getAllExportColumns = (grid: TreeGridLike) => {\n const columns = getGridCols(grid);\n\n return getColumnNames(grid).filter((colName) => {\n const column = columns[colName];\n\n if (!column || colName === 'Panel' || isButtonColumn(column)) {\n return false;\n }\n\n return column.CanExport !== 0;\n });\n};\n\nconst getVisibleExportColumns = (grid: TreeGridLike, allExportColumns: string[]) => {\n const columns = getGridCols(grid);\n\n return allExportColumns.filter((colName) => {\n const column = columns[colName];\n\n if (!column) {\n return false;\n }\n\n return isVisible(column.Visible);\n });\n};\n\nconst getHeaderRows = (grid: TreeGridLike) => {\n const headerRows: TreeGridRowLike[] = [];\n const seenRows = new Set<TreeGridRowLike>();\n\n const appendHeaderRow = (row: TreeGridRowLike | null) => {\n if (!row || seenRows.has(row)) {\n return;\n }\n\n if (row.Kind && row.Kind !== 'Header') {\n return;\n }\n\n seenRows.add(row);\n headerRows.push(row);\n };\n\n appendHeaderRow(getGridHeader(grid));\n\n let row = getRowFirstChild(getGridHead(grid));\n\n while (row) {\n appendHeaderRow(row);\n row = getRowNextSibling(row);\n }\n\n return headerRows;\n};\n\nconst getVisibleDataRows = (grid: TreeGridLike) => {\n if (typeof grid.GetShownRows === 'function') {\n const shownRows = grid.GetShownRows() as TreeGridRowLike[];\n\n if (Array.isArray(shownRows)) {\n const visibleRows: TreeGridRowLike[] = [];\n\n for (let index = 0; index < shownRows.length; index += 1) {\n const row = shownRows[index];\n\n if (!row || row.Kind !== 'Data' || !isVisible(row.Visible) || row.Fixed === 'Foot') {\n continue;\n }\n\n visibleRows.push(row);\n }\n\n return visibleRows;\n }\n }\n\n const visibleRows: TreeGridRowLike[] = [];\n const rows = getGridRows(grid);\n\n for (const rowKey in rows) {\n const row = rows[rowKey];\n\n if (!row || row.Kind !== 'Data' || !isVisible(row.Visible) || row.Fixed === 'Foot') {\n continue;\n }\n\n visibleRows.push(row);\n }\n\n return visibleRows;\n};\n\nconst createSpanResolver = (allExportColumns: string[], visibleExportColumns: string[]) => {\n const allColumnIndexMap = new Map(allExportColumns.map((colName, index) => [colName, index]));\n const visibleColumnIndexMap = new Map(\n visibleExportColumns.map((colName, index) => [colName, index]),\n );\n const visiblePrefixCounts = new Array(allExportColumns.length + 1).fill(0);\n const visibleIndexByAllIndex = new Array(allExportColumns.length).fill(-1);\n const nextVisibleAllIndexByAllIndex = new Array(allExportColumns.length).fill(-1);\n let nextVisibleAllIndex = -1;\n\n for (let allIndex = 0; allIndex < allExportColumns.length; allIndex += 1) {\n const colName = allExportColumns[allIndex];\n\n if (!colName) {\n continue;\n }\n\n const visibleIndex = visibleColumnIndexMap.get(colName) ?? -1;\n\n visibleIndexByAllIndex[allIndex] = visibleIndex;\n visiblePrefixCounts[allIndex + 1] = visiblePrefixCounts[allIndex] + (visibleIndex >= 0 ? 1 : 0);\n }\n\n for (let allIndex = allExportColumns.length - 1; allIndex >= 0; allIndex -= 1) {\n if (visibleIndexByAllIndex[allIndex] >= 0) {\n nextVisibleAllIndex = allIndex;\n }\n\n nextVisibleAllIndexByAllIndex[allIndex] = nextVisibleAllIndex;\n }\n\n return (colName: string, rawColSpan: unknown) => {\n const startIndex = allColumnIndexMap.get(colName);\n\n if (startIndex === undefined) {\n return {\n allColSpan: 1,\n visibleColIndex: null,\n visibleColSpan: 0,\n };\n }\n\n const allColSpan = toPositiveInt(rawColSpan);\n const endIndex = Math.min(allExportColumns.length - 1, startIndex + allColSpan - 1);\n const firstVisibleAllIndex = nextVisibleAllIndexByAllIndex[startIndex];\n const visibleColIndex =\n firstVisibleAllIndex >= 0 && firstVisibleAllIndex <= endIndex\n ? visibleIndexByAllIndex[firstVisibleAllIndex]\n : null;\n const visibleColSpan = visiblePrefixCounts[endIndex + 1] - visiblePrefixCounts[startIndex];\n\n return {\n allColSpan,\n visibleColIndex: visibleColIndex !== null && visibleColIndex >= 0 ? visibleColIndex : null,\n visibleColSpan,\n };\n };\n};\n\nconst getCellHorizontalAlignment = (column?: TCol) => {\n const align = `${column?.Align ?? ''}`.toLowerCase();\n\n if (align === 'left' || align === 'center' || align === 'right') {\n return align;\n }\n\n if (column?.Type === 'Int' || column?.Type === 'Float') {\n return 'right';\n }\n\n if (column?.Type === 'Date' || column?.Type === 'Enum') {\n return 'center';\n }\n\n return 'left';\n};\n\nconst getDayjsDateFormat = (column?: TCol) => {\n if (column?.Type !== 'Date') {\n return null;\n }\n\n const rawFormat = `${column.Format ?? ''}`.trim();\n\n if (!rawFormat) {\n return null;\n }\n\n const cachedFormat = DAYJS_DATE_FORMAT_CACHE.get(rawFormat);\n\n if (cachedFormat !== undefined) {\n return cachedFormat;\n }\n\n const minuteTwoPlaceholder = '__TREEGRID_MINUTE_TWO__';\n const minuteOnePlaceholder = '__TREEGRID_MINUTE_ONE__';\n const convertedFormat = rawFormat\n .replace(/yyyy/g, 'YYYY')\n .replace(/yy/g, 'YY')\n .replace(/tt/g, 'A')\n .replace(/hh/g, 'HH')\n .replace(/\\bh\\b/g, 'H')\n .replace(/(H{1,2}:)mm/g, `$1${minuteTwoPlaceholder}`)\n .replace(/(H{1,2}:)m/g, `$1${minuteOnePlaceholder}`)\n .replace(/mmmm/g, 'MMMM')\n .replace(/mmm/g, 'MMM')\n .replace(/mm/g, 'MM')\n .replace(/\\bm\\b/g, 'M')\n .replace(new RegExp(minuteTwoPlaceholder, 'g'), 'mm')\n .replace(new RegExp(minuteOnePlaceholder, 'g'), 'm')\n .replace(/dddd/g, 'dddd')\n .replace(/ddd/g, 'ddd')\n .replace(/dd/g, 'DD')\n .replace(/\\bd\\b/g, 'D');\n\n DAYJS_DATE_FORMAT_CACHE.set(rawFormat, convertedFormat);\n\n return convertedFormat;\n};\n\nconst formatDateValue = (value: unknown, column?: TCol) => {\n const dayjsFormat = getDayjsDateFormat(column);\n\n if (!dayjsFormat) {\n return null;\n }\n\n if (!isPrimitiveCellValue(value) || value === null || value === undefined || value === '') {\n return null;\n }\n\n if (typeof value === 'boolean') {\n return null;\n }\n\n const parsedDate = dayjs(value);\n\n if (!parsedDate.isValid()) {\n return null;\n }\n\n return parsedDate.format(dayjsFormat);\n};\n\nconst formatBoolValue = (value: unknown, column?: TCol) => {\n if (column?.Type !== 'Bool') {\n return null;\n }\n\n if (value === null || value === undefined || value === '') {\n return '';\n }\n\n if (\n value === true ||\n value === 1 ||\n value === '1' ||\n value === 'Y' ||\n value === 'y' ||\n value === 'true' ||\n value === 'TRUE'\n ) {\n return 'Y';\n }\n\n if (\n value === false ||\n value === 0 ||\n value === '0' ||\n value === 'N' ||\n value === 'n' ||\n value === 'false' ||\n value === 'FALSE'\n ) {\n return 'N';\n }\n\n return null;\n};\n\nconst getHeaderValue = (grid: TreeGridLike, headerRow: TreeGridRowLike | null, colName: string) => {\n const headerValue = headerRow?.[colName];\n\n if (headerValue !== undefined && headerValue !== null) {\n return String(headerValue);\n }\n\n if (typeof grid.GetCaption === 'function') {\n return grid.GetCaption(colName) ?? '';\n }\n\n return colName;\n};\n\nconst appendHtmlPostfix = (value: TreeGridCellValue, column?: TCol) => {\n const htmlPostfix = `${(column as TCol & { HtmlPostfix?: unknown })?.HtmlPostfix ?? ''}`;\n\n if (!htmlPostfix || value === null || value === undefined || value === '') {\n return value;\n }\n\n return `${value}${htmlPostfix}`;\n};\n\nconst getBodyValue = (grid: TreeGridLike, row: TreeGridRowLike, colName: string, column?: TCol) => {\n if (column?.Type === 'Enum' && typeof grid.GetString === 'function') {\n const displayValue = grid.GetString(row, colName);\n\n if (displayValue !== undefined && displayValue !== null) {\n return appendHtmlPostfix(displayValue, column);\n }\n }\n\n const rowValue = row[colName];\n const formattedBoolValue = formatBoolValue(rowValue, column);\n\n if (formattedBoolValue !== null) {\n return appendHtmlPostfix(formattedBoolValue, column);\n }\n\n const formattedRowValue = formatDateValue(rowValue, column);\n\n if (formattedRowValue !== null) {\n return appendHtmlPostfix(formattedRowValue, column);\n }\n\n if (isPrimitiveCellValue(rowValue)) {\n return appendHtmlPostfix(rowValue, column);\n }\n\n if (typeof grid.GetValue === 'function') {\n const rawValue = grid.GetValue(row, colName);\n const formattedRawBoolValue = formatBoolValue(rawValue, column);\n\n if (formattedRawBoolValue !== null) {\n return appendHtmlPostfix(formattedRawBoolValue, column);\n }\n\n const formattedRawValue = formatDateValue(rawValue, column);\n\n if (formattedRawValue !== null) {\n return appendHtmlPostfix(formattedRawValue, column);\n }\n\n if (isPrimitiveCellValue(rawValue)) {\n return appendHtmlPostfix(rawValue, column);\n }\n }\n\n if (typeof grid.GetString === 'function') {\n const displayValue = grid.GetString(row, colName);\n const formattedDisplayBoolValue = formatBoolValue(displayValue, column);\n\n if (formattedDisplayBoolValue !== null) {\n return appendHtmlPostfix(formattedDisplayBoolValue, column);\n }\n\n const formattedDisplayValue = formatDateValue(displayValue, column);\n\n if (formattedDisplayValue !== null) {\n return appendHtmlPostfix(formattedDisplayValue, column);\n }\n\n if (displayValue !== undefined && displayValue !== null) {\n return appendHtmlPostfix(displayValue, column);\n }\n }\n\n return '';\n};\n\nconst getCellSpanInfo = ({\n colName,\n resolveSpan,\n row,\n rowIndex,\n totalRows,\n}: {\n colName: string;\n resolveSpan: (colName: string, rawColSpan: unknown) => Omit<SpanInfo, 'rowSpan'>;\n row: TreeGridRowLike;\n rowIndex: number;\n totalRows: number;\n}): SpanInfo => {\n const rowSpan = Math.min(\n toPositiveInt(row[`${colName}RowSpan`]),\n Math.max(1, totalRows - rowIndex),\n );\n const { allColSpan, visibleColIndex, visibleColSpan } = resolveSpan(\n colName,\n row[`${colName}Span`],\n );\n\n return {\n allColSpan,\n rowSpan,\n visibleColIndex,\n visibleColSpan,\n };\n};\n\nconst isOccupied = (occupiedCells: Map<number, Set<number>>, rowIndex: number, colIndex: number) =>\n occupiedCells.get(rowIndex)?.has(colIndex);\n\nconst markOccupied = (\n occupiedCells: Map<number, Set<number>>,\n rowIndex: number,\n colIndex: number,\n rowSpan: number,\n colSpan: number,\n) => {\n for (let targetRowIndex = rowIndex; targetRowIndex < rowIndex + rowSpan; targetRowIndex += 1) {\n const occupiedRow = occupiedCells.get(targetRowIndex) ?? new Set<number>();\n\n for (let targetColIndex = colIndex; targetColIndex < colIndex + colSpan; targetColIndex += 1) {\n occupiedRow.add(targetColIndex);\n }\n\n occupiedCells.set(targetRowIndex, occupiedRow);\n }\n};\n\nconst createEntryRows = async ({\n allExportColumns,\n getValue,\n onVisibleEntry,\n resolveSpan,\n rows,\n}: {\n allExportColumns: string[];\n getValue: (row: TreeGridRowLike, colName: string) => TreeGridCellValue;\n onVisibleEntry?: (colIndex: number, value: TreeGridCellValue) => void;\n resolveSpan: (colName: string, rawColSpan: unknown) => Omit<SpanInfo, 'rowSpan'>;\n rows: TreeGridRowLike[];\n}) => {\n if (!allExportColumns.length) {\n return [];\n }\n\n const occupiedCells = new Map<number, Set<number>>();\n const entryRows: ExportCellEntry[][] = rows.map(() => []);\n\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {\n const row = rows[rowIndex];\n const currentEntryRow = entryRows[rowIndex];\n\n if (!row || !currentEntryRow) {\n continue;\n }\n\n for (let allColIndex = 0; allColIndex < allExportColumns.length; allColIndex += 1) {\n const colName = allExportColumns[allColIndex];\n\n if (!colName) {\n continue;\n }\n\n if (isOccupied(occupiedCells, rowIndex, allColIndex)) {\n continue;\n }\n\n const { allColSpan, rowSpan, visibleColIndex, visibleColSpan } = getCellSpanInfo({\n row,\n colName,\n rowIndex,\n totalRows: rows.length,\n resolveSpan,\n });\n\n markOccupied(occupiedCells, rowIndex, allColIndex, rowSpan, allColSpan);\n\n if (visibleColIndex === null || visibleColSpan < 1) {\n continue;\n }\n\n const value = getValue(row, colName);\n\n onVisibleEntry?.(visibleColIndex, value);\n currentEntryRow.push({\n colIndex: visibleColIndex,\n value,\n rowSpan,\n colSpan: visibleColSpan,\n });\n }\n\n if ((rowIndex + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n\n return entryRows;\n};\n\nconst createHeaderEntries = async ({\n allExportColumns,\n grid,\n headerRows,\n resolveSpan,\n visibleExportColumns,\n}: {\n allExportColumns: string[];\n grid: TreeGridLike;\n headerRows: TreeGridRowLike[];\n resolveSpan: (colName: string, rawColSpan: unknown) => Omit<SpanInfo, 'rowSpan'>;\n visibleExportColumns: string[];\n}) => {\n if (!visibleExportColumns.length) {\n return [];\n }\n\n if (!headerRows.length) {\n return [\n visibleExportColumns.map((colName, colIndex) => ({\n colName,\n colIndex,\n value: getHeaderValue(grid, null, colName),\n rowSpan: 1,\n colSpan: 1,\n })),\n ];\n }\n\n return createEntryRows({\n allExportColumns,\n getValue: (row, colName) => getHeaderValue(grid, row, colName),\n resolveSpan,\n rows: headerRows,\n });\n};\n\nconst createBodyEntries = async ({\n allExportColumns,\n columns,\n onVisibleEntry,\n grid,\n dataRows,\n resolveSpan,\n visibleExportColumns,\n}: {\n allExportColumns: string[];\n columns: Record<string, TCol | undefined>;\n dataRows: TreeGridRowLike[];\n grid: TreeGridLike;\n onVisibleEntry?: (colIndex: number, value: TreeGridCellValue) => void;\n resolveSpan: (colName: string, rawColSpan: unknown) => Omit<SpanInfo, 'rowSpan'>;\n visibleExportColumns: string[];\n}) => {\n if (!visibleExportColumns.length) {\n return [];\n }\n\n return createEntryRows({\n allExportColumns,\n getValue: (row, colName) => getBodyValue(grid, row, colName, columns[colName]),\n onVisibleEntry,\n resolveSpan,\n rows: dataRows,\n });\n};\n\nconst appendEntryRows = async (\n worksheet: ExcelJS.Worksheet,\n entryRows: ExportCellEntry[][],\n visibleColumnCount: number,\n) => {\n const startRowIndex = worksheet.rowCount + 1;\n const pendingRows: TreeGridCellValue[][] = [];\n\n for (let rowIndex = 0; rowIndex < entryRows.length; rowIndex += 1) {\n const entries = entryRows[rowIndex] ?? [];\n const rowValues = new Array<TreeGridCellValue>(visibleColumnCount).fill('');\n\n for (let entryIndex = 0; entryIndex < entries.length; entryIndex += 1) {\n const entry = entries[entryIndex];\n\n if (!entry) {\n continue;\n }\n\n rowValues[entry.colIndex] = entry.value ?? '';\n }\n\n pendingRows.push(rowValues);\n\n if (pendingRows.length === ROW_BATCH_SIZE) {\n worksheet.addRows(pendingRows);\n pendingRows.length = 0;\n await yieldToMain();\n } else if ((rowIndex + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n\n if (pendingRows.length) {\n worksheet.addRows(pendingRows);\n }\n\n return startRowIndex;\n};\n\nconst mergeEntryRows = async (\n worksheet: ExcelJS.Worksheet,\n entryRows: ExportCellEntry[][],\n startRowIndex: number,\n) => {\n for (let rowOffset = 0; rowOffset < entryRows.length; rowOffset += 1) {\n const entries = entryRows[rowOffset] ?? [];\n\n for (let entryIndex = 0; entryIndex < entries.length; entryIndex += 1) {\n const entry = entries[entryIndex];\n\n if (!entry) {\n continue;\n }\n\n if (entry.rowSpan === 1 && entry.colSpan === 1) {\n continue;\n }\n\n worksheet.mergeCells(\n startRowIndex + rowOffset,\n entry.colIndex + 1,\n startRowIndex + rowOffset + entry.rowSpan - 1,\n entry.colIndex + entry.colSpan,\n );\n }\n\n if ((rowOffset + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n};\n\nconst styleHeaderRows = async (\n worksheet: ExcelJS.Worksheet,\n startRowIndex: number,\n rowCount: number,\n visibleColumnCount: number,\n) => {\n for (let rowOffset = 0; rowOffset < rowCount; rowOffset += 1) {\n const row = worksheet.getRow(startRowIndex + rowOffset);\n\n row.font = HEADER_FONT;\n\n for (let colIndex = 1; colIndex <= visibleColumnCount; colIndex += 1) {\n const cell = row.getCell(colIndex);\n\n cell.fill = HEADER_FILL;\n cell.border = HEADER_BORDER;\n cell.alignment = {\n ...DEFAULT_ALIGNMENT,\n horizontal: 'center',\n };\n }\n\n if ((rowOffset + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n};\n\nconst styleBodyRows = async (\n worksheet: ExcelJS.Worksheet,\n startRowIndex: number,\n rowCount: number,\n visibleColumnCount: number,\n) => {\n for (let rowOffset = 0; rowOffset < rowCount; rowOffset += 1) {\n const row = worksheet.getRow(startRowIndex + rowOffset);\n\n row.font = BODY_FONT;\n\n for (let colIndex = 1; colIndex <= visibleColumnCount; colIndex += 1) {\n row.getCell(colIndex).border = HEADER_BORDER;\n }\n\n if ((rowOffset + 1) % ROW_BATCH_SIZE === 0) {\n await yieldToMain();\n }\n }\n};\n\nconst getPreferredColumnWidth = (column?: TCol) => {\n const layoutWidth = Number(column?.Width ?? column?.MinWidth);\n\n if (!Number.isFinite(layoutWidth) || layoutWidth <= 0) {\n return null;\n }\n\n return Math.min(Math.max(Math.round(layoutWidth / 8), 10), 50);\n};\n\nconst getAutoColumnWidth = (valueLength: number) => Math.min(Math.max(valueLength + 4, 10), 50);\n\nconst createColumnWidths = (\n grid: TreeGridLike,\n columns: Record<string, TCol | undefined>,\n visibleExportColumns: string[],\n) => {\n const widths = new Array<number>(visibleExportColumns.length).fill(10);\n const fixedWidthMap = new Array<boolean>(visibleExportColumns.length).fill(false);\n\n for (let index = 0; index < visibleExportColumns.length; index += 1) {\n const colName = visibleExportColumns[index];\n\n if (!colName) {\n continue;\n }\n\n const column = columns[colName];\n const preferredWidth = getPreferredColumnWidth(column);\n\n if (preferredWidth !== null) {\n widths[index] = preferredWidth;\n fixedWidthMap[index] = true;\n continue;\n }\n\n const caption =\n (typeof grid.GetCaption === 'function' ? grid.GetCaption(colName) : '') || colName;\n\n widths[index] = getAutoColumnWidth(`${caption}`.length);\n }\n\n return {\n widths,\n updateWidth: (colIndex: number, value: TreeGridCellValue) => {\n if (fixedWidthMap[colIndex]) {\n return;\n }\n\n const currentWidth = widths[colIndex];\n\n if (currentWidth === undefined) {\n return;\n }\n\n const nextWidth = getAutoColumnWidth(`${value ?? ''}`.length);\n\n if (nextWidth > currentWidth) {\n widths[colIndex] = nextWidth;\n }\n },\n };\n};\n\n/**\n * TreeGrid 엑셀 내보내기\n * @param grid TreeGrid 인스턴스\n * @param options 다운로드 옵션\n */\nexport const exportTreeGridExcel = async (\n grid: TreeGridLike | null | undefined,\n options?: ExportTreeGridExcelOptions | string,\n) => {\n try {\n const resolvedOptions = typeof options === 'string' ? { exportName: options } : options;\n const t = resolvedOptions?.t;\n\n if (!grid) {\n throw new Error(\n translateText(t, 'Message.TreeGrid 인스턴스가 없습니다.', DEFAULT_GRID_MISSING_MESSAGE),\n );\n }\n\n const columns = getGridCols(grid);\n const allExportColumns = getAllExportColumns(grid);\n const visibleExportColumns = getVisibleExportColumns(grid, allExportColumns);\n const { widths, updateWidth } = createColumnWidths(grid, columns, visibleExportColumns);\n\n const headerRows = getHeaderRows(grid);\n const dataRows = getVisibleDataRows(grid);\n const resolveSpan = createSpanResolver(allExportColumns, visibleExportColumns);\n const headerEntries = await createHeaderEntries({\n allExportColumns,\n grid,\n headerRows,\n resolveSpan,\n visibleExportColumns,\n });\n const bodyEntries = await createBodyEntries({\n allExportColumns,\n columns,\n dataRows,\n grid,\n onVisibleEntry: updateWidth,\n resolveSpan,\n visibleExportColumns,\n });\n const workbook = new ExcelJS.Workbook();\n const baseExportName =\n resolvedOptions?.exportName ?? getGridExportName(grid) ?? grid.id ?? 'sheet';\n const exportNameSuffix = resolvedOptions?.useAppendCurrentDateTimeToExportName\n ? `-${dayjs().format('YYYY-MM-DD-HH-mm-ss')}`\n : '';\n const resolvedExportName = getSafeExportName(`${baseExportName}${exportNameSuffix}`);\n const worksheet = workbook.addWorksheet(getSafeSheetName(resolvedExportName));\n const headerStartRowIndex = await appendEntryRows(\n worksheet,\n headerEntries,\n visibleExportColumns.length,\n );\n const bodyStartRowIndex = await appendEntryRows(\n worksheet,\n bodyEntries,\n visibleExportColumns.length,\n );\n\n for (let index = 0; index < visibleExportColumns.length; index += 1) {\n const colName = visibleExportColumns[index];\n\n if (!colName) {\n continue;\n }\n\n const column = columns[colName];\n const worksheetColumn = worksheet.getColumn(index + 1);\n\n worksheetColumn.width = widths[index];\n worksheetColumn.alignment = {\n ...DEFAULT_ALIGNMENT,\n horizontal: getCellHorizontalAlignment(column),\n };\n }\n\n await mergeEntryRows(worksheet, headerEntries, headerStartRowIndex);\n await mergeEntryRows(worksheet, bodyEntries, bodyStartRowIndex);\n await styleHeaderRows(\n worksheet,\n headerStartRowIndex,\n headerEntries.length,\n visibleExportColumns.length,\n );\n await styleBodyRows(\n worksheet,\n bodyStartRowIndex,\n bodyEntries.length,\n visibleExportColumns.length,\n );\n\n worksheet.views = [{ state: 'frozen', ySplit: headerEntries.length }];\n\n await yieldToMain();\n\n const buffer = await workbook.xlsx.writeBuffer({\n useSharedStrings: false,\n useStyles: true,\n });\n\n exportExcelByBuffer(buffer, resolvedExportName);\n } catch (error) {\n const resolvedOptions = typeof options === 'string' ? { exportName: options } : options;\n const t = resolvedOptions?.t;\n\n enqueueSnackbar(\n error instanceof Error\n ? error.message\n : translateText(\n t,\n 'Message.엑셀 다운로드 중 오류가 발생했습니다.',\n DEFAULT_EXPORT_ERROR_MESSAGE,\n ),\n {\n variant: 'error',\n },\n );\n }\n};\n\n/**\n * @deprecated `exportTreeGridExcel` 사용\n */\nexport const exportExcelByGrid = exportTreeGridExcel;\n","import {\n TREEGRID_CELL_HIGHLIGHT_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { parseTreeGridXmlToJson } from '@/components/OwpTreeGrid/utils';\nimport { isPlainObject } from 'es-toolkit';\nimport { get, isArray, isEmpty, lowerCase, omit, without } from 'es-toolkit/compat';\nimport { exportTreeGridExcel } from './treeGridExportExcelUtil';\n\nexport {\n TREEGRID_CELL_HIGHLIGHT_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n};\n\ntype TreeGridInsertPosition = 'above' | 'below' | 'top' | 'last';\n\ntype TreeGridAddRowOptions<T> = {\n canSelect?: boolean;\n insertPosition?: TreeGridInsertPosition;\n parent?: TRow & T;\n anchorRow?: TRow & T;\n initialValues?: T;\n};\n\ntype TreeGridColumnVisibilityOptions = {\n targetKey: string;\n canVisible: boolean;\n};\n\ntype TreeGridHighlightTargetOption = {\n row: TRow;\n col: string;\n};\n\ntype TreeGridChangeStatus = 'Added' | 'Changed';\ntype TreeGridChangedRow = Record<string, unknown>;\n\nconst TREEGRID_CHANGE_STATUSES: TreeGridChangeStatus[] = ['Added', 'Changed'];\nconst TREEGRID_DATA_KEY_PREFIXES = ['OWP', 'IPX'];\n\n/**\n * TreeGrid 데이터 행 목록 추출\n * @param grid TreeGrid 인스턴스\n */\nconst getDataRows = (grid: TGrid | undefined) => {\n return Object.values(grid?.Rows ?? {}).filter((item) => item.Kind === 'Data');\n};\n\n/**\n * 신규 행 추가 대상 계산\n * @param grid TreeGrid 인스턴스\n * @param options 행 추가 옵션\n */\nconst resolveRowInsertionTarget = <T>(grid: TGrid, options?: TreeGridAddRowOptions<T>) => {\n const insertPosition = options?.insertPosition ?? 'top';\n const parent = options?.parent;\n const anchorRow = options?.anchorRow;\n\n let resolvedParent = parent ?? (anchorRow ? anchorRow.parentNode : null) ?? grid.GetFirst();\n let next = null;\n\n switch (insertPosition) {\n case 'top':\n next = grid.GetFirst();\n break;\n\n case 'last':\n resolvedParent = grid.GetNext(grid.GetLast(), grid.RowCount > 0 ? grid.RowCount + 1 : 0);\n next = resolvedParent;\n break;\n\n case 'above':\n next = anchorRow ?? grid.GetFirst();\n break;\n\n case 'below':\n next = anchorRow?.nextSibling ?? grid.GetFirst();\n break;\n }\n\n return { resolvedParent, next };\n};\n\n/**\n * 신규 행 초기값 반영\n * @param row 생성된 TreeGrid 행\n * @param initialValues 신규 행 초기값\n */\nconst assignInitialRowValues = <T>(row: TRow, initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return;\n }\n\n Object.entries(initialValues as Record<string, unknown>).forEach(([rowKey, rowValue]) => {\n (row as unknown as Record<string, unknown>)[rowKey] = rowValue;\n });\n};\n\n/**\n * 변경 데이터 컬럼 키 여부 확인\n * @param key 컬럼 키\n */\nconst isTreeGridDataKey = (key: string) => {\n return TREEGRID_DATA_KEY_PREFIXES.some((prefix) => key.startsWith(prefix));\n};\n\n/**\n * 추가 행 데이터 정규화\n * @param row TreeGrid 변경 행 데이터\n */\nconst normalizeAddedRow = <T>(row: TreeGridChangedRow) => {\n return Object.fromEntries(\n without(Object.keys(row), 'id')\n .filter((key) => isTreeGridDataKey(key) && !isEmpty(row[key]))\n .map((key) => [key, row[key]]),\n ) as T;\n};\n\n/**\n * 변경 상태별 행 데이터 반환\n * @param rows TreeGrid 변경 행 목록\n * @param status 조회할 변경 상태\n */\nconst getChangedRowsByStatus = <T>(rows: TreeGridChangedRow[], status: TreeGridChangeStatus) => {\n return rows\n .filter((row) => get(row, status) === '1' && row.Deleted !== '1')\n .map((row) => (status === 'Changed' ? omit(row, ['id', 'Changed']) : normalizeAddedRow<T>(row)))\n .filter((row) => !isEmpty(row));\n};\n\n/**\n * TreeGrid 인스턴스 ID 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridById = (gridId: string) => {\n return Grids[gridId];\n};\n\n/**\n * TreeGrid 데이터 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridDataRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n return getDataRows(grid) as T;\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param gridId TreeGrid 인스턴스 ID\n * @param rows 새로 반영할 행 데이터\n */\nexport const reloadTreeGridBodyById = (gridId: string, rows: unknown) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n // @ts-expect-error - Data property not defined in type\n const currentData = grid.Data.Data;\n\n // @ts-expect-error - Data property not defined in type\n grid.Data.Data = {\n ...currentData,\n Data: { Body: [rows || []] },\n Url: '',\n };\n grid.ReloadBody();\n};\n\n/**\n * 행을 특정 위치에 추가\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.canSelect 행 선택 가능 여부\n * @param options.parent 부모 행\n * @param options.anchorRow above/below용 기준 행\n * @param options.insertPosition 행 삽입 위치\n * @param options.initialValues 신규 행 초기값\n */\nexport const addTreeGridRowById = <T>(\n gridId: string,\n options?: TreeGridAddRowOptions<T>,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const canSelect = options?.canSelect;\n const initialValues = options?.initialValues;\n const { resolvedParent, next } = resolveRowInsertionTarget(grid, options);\n\n const newRow = grid.AddRow(resolvedParent, next, 1);\n\n assignInitialRowValues(newRow, initialValues);\n\n newRow.CanEdit = 1;\n newRow.CanDelete = 1;\n newRow.CanSelect = canSelect ? 1 : 0;\n\n grid.Focus(newRow);\n grid.RefreshRow(newRow);\n};\n\n/**\n * TreeGrid 추가/수정 데이터 행 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridRowChangesById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const changesData = parseTreeGridXmlToJson(grid?.GetXmlData('changes,allcols,nogrid,noio'));\n\n if (!isArray(changesData)) {\n return { added: [], changed: [] };\n }\n\n return Object.fromEntries(\n TREEGRID_CHANGE_STATUSES.map((status) => [\n lowerCase(status),\n getChangedRowsByStatus<T>(changesData as TreeGridChangedRow[], status),\n ]),\n ) as { added: T[]; changed: T[] };\n};\n\n/**\n * TreeGrid 데이터 엑셀 내보내기\n * @param gridId TreeGrid 인스턴스 ID\n * @param title 다운로드 파일명\n */\nexport const exportTreeGridToExcelById = (gridId: string, title?: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n void exportTreeGridExcel(grid, { exportName: title ?? '' });\n};\n\n/**\n * TreeGrid 현재 선택 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridSelectedRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const selectedRows = grid?.GetSelRows();\n\n return (selectedRows as T) ?? [];\n};\n\n/**\n * TreeGrid 컬럼 표시 여부 변경\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.targetKey 표시 상태를 변경할 컬럼 키\n * @param options.canVisible 컬럼 표시 여부\n */\nexport const setTreeGridColumnVisibilityById = (\n gridId: string,\n options: TreeGridColumnVisibilityOptions,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid || !options?.targetKey) {\n return;\n }\n\n const targetKey = options?.targetKey;\n const canVisible = options?.canVisible;\n\n if (canVisible) {\n grid.ShowCol(targetKey);\n return;\n }\n grid.HideCol(targetKey);\n};\n\n/**\n * 특정 셀 강조 스타일 적용\n * @param gridId TreeGrid 인스턴스 ID\n * @param targetOption.row 강조할 대상 행\n * @param targetOption.col 강조할 대상 컬럼\n */\nexport const highlightTreeGridCellById = (\n gridId: string,\n targetOption: TreeGridHighlightTargetOption,\n) => {\n const grid = getTreeGridById(gridId);\n\n const row = targetOption?.row;\n const col = targetOption?.col;\n\n if (!grid || !row || !col) {\n return;\n }\n\n grid.SetValue(row, `${col}Class`, TREEGRID_CELL_HIGHLIGHT_CLASS);\n grid.SetValue(row, `${col}Color`, TREEGRID_CELL_HIGHLIGHT_COLOR);\n grid.RefreshCell(row, col);\n};\n\n/**\n * TreeGrid 현재 선택 상태 전체 해제\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridSelectionById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionDeselectAll(1, 0);\n};\n\n/**\n * 여러 TreeGrid 선택 상태 전체 해제\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridSelectionsByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridSelectionById);\n};\n\n/**\n * TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridChangesById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionUndoAll(1, 0);\n resetTreeGridSelectionById(gridId);\n};\n\n/**\n * 여러 TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridChangesByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridChangesById);\n};\n\n/**\n * TreeGrid Enum 컬럼 옵션 반영\n * @param gridId TreeGrid 인스턴스 ID\n * @param columnName Enum을 적용할 컬럼명\n * @param options Enum 옵션 목록\n * @param valueKey Enum 값으로 사용할 필드명\n * @param labelKeys Enum 라벨로 사용할 필드 우선순위 목록\n */\nexport const setTreeGridColumnEnumOptionsById = <T extends object>(\n gridId: string,\n columnName: string,\n options: T[] | undefined,\n valueKey: keyof T & string,\n labelKeys: Array<keyof T & string>,\n) => {\n if (!options?.length) {\n return;\n }\n\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const enumValues = options\n .map((item) => {\n const option = item as Record<string, unknown>;\n const labelValue = labelKeys\n .map((labelKey) => option[labelKey])\n .find((value) => value !== undefined && value !== null && value !== '');\n\n return `${labelValue ?? ''}`;\n })\n .join('|');\n const enumKeys = options\n .map((item) => `${(item as Record<string, unknown>)[valueKey] ?? ''}`)\n .join('|');\n\n grid.SetAttribute(null, columnName, 'Type', 'Enum', 0, 0);\n grid.SetAttribute(null, columnName, 'Enum', `|${enumValues}`, 0, 0);\n grid.SetAttribute(null, columnName, 'EnumKeys', `|${enumKeys}`, 1, 0);\n};\n\n/**\n * @deprecated `getTreeGridById` 사용\n */\nexport const getGridById = getTreeGridById;\n\n/**\n * @deprecated `getTreeGridDataRowsById` 사용\n */\nexport const getDataRowsById = getTreeGridDataRowsById;\n\n/**\n * @deprecated `reloadTreeGridBodyById` 사용\n */\nexport const reloadBodyById = reloadTreeGridBodyById;\n\n/**\n * @deprecated `addTreeGridRowById` 사용\n */\nexport const addRowById = addTreeGridRowById;\n\n/**\n * @deprecated `getTreeGridRowChangesById` 사용\n */\nexport const getChangedDataRowsById = getTreeGridRowChangesById;\n\n/**\n * @deprecated `exportTreeGridToExcelById` 사용\n */\nexport const exportExcelById = exportTreeGridToExcelById;\n\n/**\n * @deprecated `getTreeGridSelectedRowsById` 사용\n */\nexport const getSelectedRowsById = getTreeGridSelectedRowsById;\n\n/**\n * @deprecated `setTreeGridColumnVisibilityById` 사용\n */\nexport const changeVisibleCellByGridId = setTreeGridColumnVisibilityById;\n\n/**\n * @deprecated `highlightTreeGridCellById` 사용\n */\nexport const setHighlightTargetCellByGridId = highlightTreeGridCellById;\n\n/**\n * @deprecated `resetTreeGridSelectionById` 사용\n */\nexport const resetGridSelection = resetTreeGridSelectionById;\n\n/**\n * @deprecated `resetTreeGridSelectionsByIds` 사용\n */\nexport const resetGridsSelection = resetTreeGridSelectionsByIds;\n\n/**\n * @deprecated `resetTreeGridChangesById` 사용\n */\nexport const resetGridChanges = resetTreeGridChangesById;\n\n/**\n * @deprecated `resetTreeGridChangesByIds` 사용\n */\nexport const resetGridsChanges = resetTreeGridChangesByIds;\n\n/**\n * @deprecated `setTreeGridColumnEnumOptionsById` 사용\n */\nexport const setGridEnum = setTreeGridColumnEnumOptionsById;\n"],"names":["difference","firstArr","secondArr","secondSet","item","__name","without","array","values","isArray","value","CASE_SPLIT_PATTERN","words","str","lowerCase","word","isArrayLikeObject","isObjectLike","isArrayLike","unset","obj","path","unsetWithPath","toKey","isUnsafeProperty","isDeepKey","toPath","parent","get","lastKey","without$1","toString","result","isPrototype","constructor","prototype","omit","keysArr","cloneDeep","i","keys","j","key","isEmpty","isTypedArray","isArguments","x","normalizeForCase","lowerCase$1","TREE_GRID_HEADER_SECTION","TREE_GRID_TOOLBAR_SECTION","TREE_GRID_FOOT_SECTION","TREE_GRID_NEXT_SIBLING_KEY","TREE_GRID_LAYOUT_SECTION_KEYS","hasOwnProperty","treeGridXmlParser","assignTreeGridSectionFields","targetSection","sectionConfig","mutableTargetSection","fieldName","fieldValue","applyTreeGridSubHeaderLayoutText","grid","headerLayout","currentHeaderLayout","currentGridHeader","parseTreeGridXmlToJson","xmlString","childElements","_a","parsedItems","nodeIndex","attributes","attrIndex","attribute","error","applyTreeGridLayoutToGrid","layoutConfig","disableBodyReload","hasSubHeaderBlock","footerRow","_b","isPlainObject","sectionKey","sectionLayout","sectionTarget","EXCEL_FILE_MIME_TYPE","DEFAULT_EXPORT_FILE_NAME","getWorksheetCell","ws","downloadExcelFile","blob","title","fileName","url","anchor","createCellFont","isHeader","font","DEFAULT_HEADER_FONT","DEFAULT_VALUE_FONT","createCellAlignment","alignment","DEFAULT_WRAP_CELL_ALIGNMENT","applyCellFillAndBorder","cell","fill","DEFAULT_THIN_BORDER","DEFAULT_HEADER_FILL","getIndexByLetters","letters","r","a","getLettersByIndex","index","columnIndexName","exportExcelByBuffer","buffer","setCellValue","setMergeCells","range","end","ROW_BATCH_SIZE","DAYJS_DATE_FORMAT_CACHE","DEFAULT_EXPORT_ERROR_MESSAGE","DEFAULT_GRID_MISSING_MESSAGE","isPrimitiveCellValue","yieldToMain","resolve","translateText","t","defaultValue","getGridColNames","getGridCols","getGridRows","getGridHeader","getGridHead","getGridExportName","getRowFirstChild","row","getRowNextSibling","getSafeExportName","getSafeSheetName","toPositiveInt","parsedValue","isVisible","isButtonColumn","column","getColumnNames","sectionColumnNames","orderedColumnNames","uniqueColumnNames","seenColumnNames","colName","getAllExportColumns","columns","getVisibleExportColumns","allExportColumns","getHeaderRows","headerRows","seenRows","appendHeaderRow","getVisibleDataRows","shownRows","visibleRows","rows","rowKey","createSpanResolver","visibleExportColumns","allColumnIndexMap","visibleColumnIndexMap","visiblePrefixCounts","visibleIndexByAllIndex","nextVisibleAllIndexByAllIndex","nextVisibleAllIndex","allIndex","visibleIndex","rawColSpan","startIndex","allColSpan","endIndex","firstVisibleAllIndex","visibleColIndex","visibleColSpan","getCellHorizontalAlignment","align","getDayjsDateFormat","rawFormat","cachedFormat","minuteTwoPlaceholder","minuteOnePlaceholder","convertedFormat","formatDateValue","dayjsFormat","parsedDate","dayjs","formatBoolValue","getHeaderValue","headerRow","headerValue","appendHtmlPostfix","htmlPostfix","getBodyValue","displayValue","rowValue","formattedBoolValue","formattedRowValue","rawValue","formattedRawBoolValue","formattedRawValue","formattedDisplayBoolValue","formattedDisplayValue","getCellSpanInfo","resolveSpan","rowIndex","totalRows","rowSpan","isOccupied","occupiedCells","colIndex","markOccupied","colSpan","targetRowIndex","occupiedRow","targetColIndex","createEntryRows","getValue","onVisibleEntry","entryRows","currentEntryRow","allColIndex","createHeaderEntries","createBodyEntries","dataRows","appendEntryRows","worksheet","visibleColumnCount","startRowIndex","pendingRows","entries","rowValues","entryIndex","entry","mergeEntryRows","rowOffset","styleHeaderRows","rowCount","HEADER_FONT","HEADER_FILL","HEADER_BORDER","DEFAULT_ALIGNMENT","styleBodyRows","BODY_FONT","getPreferredColumnWidth","layoutWidth","getAutoColumnWidth","valueLength","createColumnWidths","widths","fixedWidthMap","preferredWidth","caption","currentWidth","nextWidth","exportTreeGridExcel","options","resolvedOptions","updateWidth","headerEntries","bodyEntries","workbook","ExcelJS","baseExportName","exportNameSuffix","resolvedExportName","headerStartRowIndex","bodyStartRowIndex","worksheetColumn","enqueueSnackbar","exportExcelByGrid","TREEGRID_CHANGE_STATUSES","TREEGRID_DATA_KEY_PREFIXES","getDataRows","resolveRowInsertionTarget","insertPosition","anchorRow","resolvedParent","next","assignInitialRowValues","initialValues","isTreeGridDataKey","prefix","normalizeAddedRow","getChangedRowsByStatus","status","getTreeGridById","gridId","getTreeGridDataRowsById","reloadTreeGridBodyById","currentData","addTreeGridRowById","canSelect","newRow","getTreeGridRowChangesById","changesData","exportTreeGridToExcelById","getTreeGridSelectedRowsById","setTreeGridColumnVisibilityById","targetKey","highlightTreeGridCellById","targetOption","col","TREEGRID_CELL_HIGHLIGHT_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","resetTreeGridSelectionById","resetTreeGridSelectionsByIds","gridIds","resetTreeGridChangesById","resetTreeGridChangesByIds","setTreeGridColumnEnumOptionsById","columnName","valueKey","labelKeys","enumValues","option","labelKey","enumKeys","getGridById","getDataRowsById","reloadBodyById","addRowById","getChangedDataRowsById","exportExcelById","getSelectedRowsById","changeVisibleCellByGridId","setHighlightTargetCellByGridId","resetGridSelection","resetGridsSelection","resetGridChanges","resetGridsChanges","setGridEnum"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a deterministic chart color for a series index.
|
|
3
|
+
*/
|
|
4
|
+
export declare function getChartColorByIndex(index: number): string;
|
|
5
|
+
/**
|
|
6
|
+
* Builds a chart series color map with optional overrides.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createChartColorMap<T extends string>(seriesKeys: readonly T[], overrides?: Partial<Record<T, string>>): Record<T, string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './colorMap';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
1
|
+
export * from './palettes';
|
|
2
|
+
export * from './chart';
|
|
@@ -11,6 +11,6 @@ export declare class OwpErrorBoundary extends Component<OwpErrorBoundaryProps, O
|
|
|
11
11
|
constructor(props: OwpErrorBoundaryProps);
|
|
12
12
|
static getDerivedStateFromError(error: Error): OwpErrorBoundaryState;
|
|
13
13
|
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
14
|
-
render(): string | number | boolean | Iterable<ReactNode> | import("react/jsx-runtime").JSX.Element;
|
|
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
15
|
}
|
|
16
16
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ButtonProps } from '@mui/material/Button';
|
|
2
2
|
import { type ChangeEvent, type ReactNode } from 'react';
|
|
3
3
|
export interface OwpFileUploadButtonOwnProps {
|
|
4
4
|
multiple?: boolean;
|
|
@@ -7,7 +7,7 @@ export interface OwpFileUploadButtonOwnProps {
|
|
|
7
7
|
onChange?: (evt: ChangeEvent<HTMLInputElement>) => void;
|
|
8
8
|
onCancel?: (evt: Event) => void;
|
|
9
9
|
}
|
|
10
|
-
export type OwpFileUploadButtonProps = OwpFileUploadButtonOwnProps & Omit<
|
|
10
|
+
export type OwpFileUploadButtonProps = OwpFileUploadButtonOwnProps & Omit<ButtonProps, 'title'>;
|
|
11
11
|
/**
|
|
12
12
|
* OwpFileUploadButton 컴포넌트
|
|
13
13
|
* @param title 제목
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface OwpHiddenProps {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
xsUp?: boolean;
|
|
5
|
+
smUp?: boolean;
|
|
6
|
+
mdUp?: boolean;
|
|
7
|
+
lgUp?: boolean;
|
|
8
|
+
xlUp?: boolean;
|
|
9
|
+
xsDown?: boolean;
|
|
10
|
+
smDown?: boolean;
|
|
11
|
+
mdDown?: boolean;
|
|
12
|
+
lgDown?: boolean;
|
|
13
|
+
xlDown?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* MUI Hidden 대체용 breakpoint visibility gate
|
|
17
|
+
*/
|
|
18
|
+
export declare function OwpHidden({ children, xsUp, smUp, mdUp, lgUp, xlUp, xsDown, smDown, mdDown, lgDown, xlDown, }: OwpHiddenProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export default OwpHidden;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { themeLayoutsType } from '@/
|
|
1
|
+
import { themeLayoutsType } from '@/layout/themeLayouts';
|
|
2
2
|
import type { OwpSettingsConfigType } from '@/types/OwpSettingsTypes';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { RouteMatch, RouteObject } from 'react-router-dom';
|
|
@@ -10,7 +10,7 @@ export type OwpRouteMatchType = RouteMatch & {
|
|
|
10
10
|
route: OwpRouteObjectType;
|
|
11
11
|
};
|
|
12
12
|
type OwpLayoutProps = {
|
|
13
|
-
layouts
|
|
13
|
+
layouts?: themeLayoutsType;
|
|
14
14
|
children?: React.ReactNode;
|
|
15
15
|
};
|
|
16
16
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Theme } from '@mui/
|
|
1
|
+
import { type Theme } from '@mui/material/styles';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
/**
|
|
4
4
|
* OwpPageCarded 컴포넌트
|
|
@@ -54,5 +54,5 @@ declare const OwpPageCarded: import("react").NamedExoticComponent<((((import("@m
|
|
|
54
54
|
}, "ref">) & import("react").RefAttributes<{
|
|
55
55
|
toggleLeftSidebar: (T: boolean) => void;
|
|
56
56
|
toggleRightSidebar: (T: boolean) => void;
|
|
57
|
-
}>) & import("@mui/system").MUIStyledCommonProps<
|
|
57
|
+
}>) & import("@mui/system").MUIStyledCommonProps<Theme>) & {}>;
|
|
58
58
|
export { OwpPageCarded };
|
|
@@ -23,5 +23,5 @@ interface OwnProps {
|
|
|
23
23
|
* @param onIconClick 아이콘 클릭 핸들러
|
|
24
24
|
* @param ref forwardRef 참조
|
|
25
25
|
*/
|
|
26
|
-
export declare const DatePickerInput: import("react").ForwardRefExoticComponent<(Omit<import("@mui/material").FilledTextFieldProps & OwnProps, "ref"> | Omit<import("@mui/material").
|
|
26
|
+
export declare const DatePickerInput: import("react").ForwardRefExoticComponent<(Omit<import("@mui/material").FilledTextFieldProps & OwnProps, "ref"> | Omit<import("@mui/material").StandardTextFieldProps & OwnProps, "ref"> | Omit<import("@mui/material").OutlinedTextFieldProps & OwnProps, "ref">) & import("react").RefAttributes<unknown>>;
|
|
27
27
|
export {};
|