@owp/core 2.5.20 → 2.5.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dayjs.d.ts +4 -0
  2. package/dayjs.js +2 -0
  3. package/dist/_virtual/isBetween.js +8 -0
  4. package/dist/_virtual/isBetween.js.map +1 -0
  5. package/dist/_virtual/isBetween2.js +5 -0
  6. package/dist/_virtual/isBetween2.js.map +1 -0
  7. package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js +26 -26
  8. package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js.map +1 -1
  9. package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js +29 -29
  10. package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js.map +1 -1
  11. package/dist/components/OwpMrtTable/OwpMrtTable.js +144 -141
  12. package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
  13. package/dist/components/OwpOptionSelector/OwpOptionSelector.js +20 -20
  14. package/dist/components/OwpOptionSelector/OwpOptionSelector.js.map +1 -1
  15. package/dist/components/OwpPageContent/OwpPageContent.js +20 -19
  16. package/dist/components/OwpPageContent/OwpPageContent.js.map +1 -1
  17. package/dist/components/OwpPicker/OwpDatePicker.js +216 -235
  18. package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
  19. package/dist/components/OwpPicker/OwpDateRangePicker.js +21 -21
  20. package/dist/components/OwpPicker/OwpDateRangePicker.js.map +1 -1
  21. package/dist/components/OwpPicker/OwpTimePicker.js +310 -340
  22. package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
  23. package/dist/components/OwpPicker/OwpWeekDatePicker.js +28 -29
  24. package/dist/components/OwpPicker/OwpWeekDatePicker.js.map +1 -1
  25. package/dist/components/OwpPicker/OwpYearRangePicker.js +1 -1
  26. package/dist/components/OwpPicker/OwpYearRangePicker.js.map +1 -1
  27. package/dist/components/OwpPicker/constants/index.js +21 -6
  28. package/dist/components/OwpPicker/constants/index.js.map +1 -1
  29. package/dist/components/OwpPicker/internal/DatePickerInput.js +5 -5
  30. package/dist/components/OwpPicker/internal/DatePickerInput.js.map +1 -1
  31. package/dist/components/OwpPicker/utils/index.js +22 -0
  32. package/dist/components/OwpPicker/utils/index.js.map +1 -0
  33. package/dist/components/OwpQuerySelector/OwpQuerySelector.js +218 -205
  34. package/dist/components/OwpQuerySelector/OwpQuerySelector.js.map +1 -1
  35. package/dist/components/OwpSection/OwpSection.js +118 -111
  36. package/dist/components/OwpSection/OwpSection.js.map +1 -1
  37. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +59 -59
  38. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
  39. package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +88 -85
  40. package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -1
  41. package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js +93 -93
  42. package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js.map +1 -1
  43. package/dist/components/OwpTable/OwpDataTable.js +329 -317
  44. package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
  45. package/dist/components/OwpTable/OwpFieldTable.js +77 -74
  46. package/dist/components/OwpTable/OwpFieldTable.js.map +1 -1
  47. package/dist/components/OwpTable/OwpTable.js +66 -219
  48. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  49. package/dist/components/OwpTable/internal/OwpTableBase.js +195 -0
  50. package/dist/components/OwpTable/internal/OwpTableBase.js.map +1 -0
  51. package/dist/components/OwpTable/internal/OwpTableTotalCount.js +23 -0
  52. package/dist/components/OwpTable/internal/OwpTableTotalCount.js.map +1 -0
  53. package/dist/components/OwpTable/internal/defaultTableStyle.js +10 -10
  54. package/dist/components/OwpTable/internal/defaultTableStyle.js.map +1 -1
  55. package/dist/components/OwpTable/utils/tableSx.js +9 -0
  56. package/dist/components/OwpTable/utils/tableSx.js.map +1 -0
  57. package/dist/components/OwpTextField/OwpTextMaskField.js +95 -86
  58. package/dist/components/OwpTextField/OwpTextMaskField.js.map +1 -1
  59. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +1 -1
  60. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  61. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +164 -179
  62. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
  63. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +10 -10
  64. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  65. package/dist/components/OwpYesNoSelector/OwpYesNoSelector.js.map +1 -1
  66. package/dist/dayjs.js +18 -0
  67. package/dist/dayjs.js.map +1 -0
  68. package/dist/features/themePreview/components/ThemePreviewCanvas.js +22 -22
  69. package/dist/features/themePreview/components/ThemePreviewCanvas.js.map +1 -1
  70. package/dist/features/themePreview/configs/table.js +4 -4
  71. package/dist/features/themePreview/configs/table.js.map +1 -1
  72. package/dist/features/themePreview/hooks/useThemePreview.js +16 -16
  73. package/dist/features/themePreview/hooks/useThemePreview.js.map +1 -1
  74. package/dist/hooks/{useInitCommonCodes.js → internal/useInitCommonCodes.js} +6 -6
  75. package/dist/hooks/internal/useInitCommonCodes.js.map +1 -0
  76. package/dist/hooks/internal/useMinimumVisibleState.js +31 -0
  77. package/dist/hooks/internal/useMinimumVisibleState.js.map +1 -0
  78. package/dist/hooks/useInitApp.js +17 -14
  79. package/dist/hooks/useInitApp.js.map +1 -1
  80. package/dist/hooks.js +49 -51
  81. package/dist/hooks.js.map +1 -1
  82. package/dist/index.js +91 -94
  83. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/isBetween.js +23 -0
  84. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/isBetween.js.map +1 -0
  85. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
  86. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
  87. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
  88. package/dist/types/components/OwpCommonCode/OwpCommonCodeQuerySelector.d.ts +3 -3
  89. package/dist/types/components/OwpCommonCode/OwpCommonCodeSelector.d.ts +3 -3
  90. package/dist/types/components/OwpMrtTable/OwpMrtTable.d.ts +1 -0
  91. package/dist/types/components/OwpOptionSelector/OwpOptionSelector.d.ts +2 -2
  92. package/dist/types/components/OwpPicker/OwpDatePicker.d.ts +1 -1
  93. package/dist/types/components/OwpPicker/OwpTimePicker.d.ts +2 -2
  94. package/dist/types/components/OwpPicker/constants/index.d.ts +15 -0
  95. package/dist/types/components/OwpPicker/utils/index.d.ts +6 -0
  96. package/dist/types/components/OwpQuerySelector/OwpQuerySelector.d.ts +1 -1
  97. package/dist/types/components/OwpQuerySelector/types/types.d.ts +1 -0
  98. package/dist/types/components/OwpSection/OwpSection.d.ts +9 -3
  99. package/dist/types/components/OwpSelectorBase/hooks/useOwpSelectorBase.d.ts +1 -1
  100. package/dist/types/components/OwpSelectorBase/types/types.d.ts +1 -1
  101. package/dist/types/components/OwpTable/OwpDataTable.d.ts +5 -1
  102. package/dist/types/components/OwpTable/OwpFieldTable.d.ts +7 -1
  103. package/dist/types/components/OwpTable/OwpTable.d.ts +6 -38
  104. package/dist/types/components/OwpTable/internal/OwpTableBase.d.ts +34 -0
  105. package/dist/types/components/OwpTable/internal/OwpTableTotalCount.d.ts +9 -0
  106. package/dist/types/components/OwpTable/internal/defaultTableStyle.d.ts +4 -2
  107. package/dist/types/components/OwpTable/utils/tableSx.d.ts +11 -0
  108. package/dist/types/components/OwpTextField/OwpTextMaskField.d.ts +3 -3
  109. package/dist/types/components/OwpYesNoSelector/OwpYesNoSelector.d.ts +1 -1
  110. package/dist/types/dayjs.d.ts +18 -0
  111. package/dist/types/hooks/index.d.ts +0 -1
  112. package/dist/types/hooks/internal/useMinimumVisibleState.d.ts +7 -0
  113. package/dist/types/utils/dayjsBrowser.d.ts +1 -7
  114. package/dist/types/utils/formatDateToYmd.d.ts +1 -1
  115. package/dist/utils/formatDateToYmd.js +3 -3
  116. package/dist/utils/formatDateToYmd.js.map +1 -1
  117. package/dist/utils/treeGridExportExcelUtil.js +1 -1
  118. package/dist/utils/treeGridExportExcelUtil.js.map +1 -1
  119. package/dist/utils/zipUtil.js +3 -3
  120. package/dist/utils/zipUtil.js.map +1 -1
  121. package/package.json +3 -1
  122. package/dist/hooks/useInitCommonCodes.js.map +0 -1
  123. package/dist/utils/dayjsBrowser.js +0 -16
  124. package/dist/utils/dayjsBrowser.js.map +0 -1
  125. /package/dist/types/hooks/{useInitCommonCodes.d.ts → internal/useInitCommonCodes.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OwpTableTotalCount.js","sources":["../../../../src/components/OwpTable/internal/OwpTableTotalCount.tsx"],"sourcesContent":["import { Divider, Typography } from '@mui/material';\nimport { isNumber } from 'es-toolkit/compat';\n\n/**\n * 총 row 수 표시 영역\n * @param borderColor 경계선 색상\n * @param totalCount 전체 row 수\n */\nexport function OwpTableTotalCount({\n borderColor,\n totalCount,\n}: {\n borderColor?: string;\n totalCount?: number;\n}) {\n return (\n <>\n <Divider sx={borderColor ? { borderColor } : undefined} />\n <Typography className=\"w-full py-8 pr-12\" align=\"right\">\n 전체: {isNumber(totalCount) ? totalCount.toLocaleString() : 0} 건\n </Typography>\n </>\n );\n}\n"],"names":["OwpTableTotalCount","borderColor","totalCount","jsxs","Fragment","jsx","Divider","Typography","isNumber","__name"],"mappings":";;;;;AAQO,SAASA,EAAmB;AAAA,EACjC,aAAAC;AAAA,EACA,YAAAC;AACF,GAGG;AACD,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAACC,KAAQ,IAAIL,IAAc,EAAE,aAAAA,EAAA,IAAgB,QAAW;AAAA,IACxD,gBAAAE,EAACI,GAAA,EAAW,WAAU,qBAAoB,OAAM,SAAQ,UAAA;AAAA,MAAA;AAAA,MACjDC,EAASN,CAAU,IAAIA,EAAW,mBAAmB;AAAA,MAAE;AAAA,IAAA,EAAA,CAC9D;AAAA,EAAA,GACF;AAEJ;AAfgBO,EAAAT,GAAA;"}
@@ -1,7 +1,6 @@
1
1
  var l = Object.defineProperty;
2
2
  var r = (o, e) => l(o, "name", { value: e, configurable: !0 });
3
- import { grey as n } from "@mui/material/colors";
4
- const a = "7px 10px", d = {
3
+ const n = "7px 10px", i = "0.5rem", a = "#f5f5f5", d = {
5
4
  borderColor: "#e2e8f0",
6
5
  header: {
7
6
  backgroundColor: "",
@@ -13,21 +12,20 @@ const a = "7px 10px", d = {
13
12
  backgroundColor: "",
14
13
  fontSize: "1.7rem"
15
14
  }
16
- }, t = /* @__PURE__ */ r(() => ({
17
- padding: a,
15
+ }, t = /* @__PURE__ */ r((o) => ({
16
+ padding: n,
17
+ borderBottom: `1px solid ${o.borderColor}`,
18
18
  borderLeft: "none",
19
19
  borderRight: "none"
20
20
  }), "getDefaultTableCellBaseSx"), f = /* @__PURE__ */ r((o) => ({
21
- ...t(),
22
- borderBottomColor: o.borderColor,
21
+ ...t(o),
23
22
  ...o.cell.backgroundColor && {
24
23
  backgroundColor: o.cell.backgroundColor
25
24
  },
26
25
  fontSize: o.cell.fontSize
27
- }), "getDefaultTableCellSx"), b = /* @__PURE__ */ r((o, e = n[200]) => ({
28
- ...t(),
26
+ }), "getDefaultTableCellSx"), S = /* @__PURE__ */ r((o, e = a) => ({
27
+ ...t(o),
29
28
  backgroundColor: o.header.backgroundColor || e,
30
- borderBottomColor: o.borderColor,
31
29
  color: o.header.color,
32
30
  fontSize: o.header.fontSize,
33
31
  fontWeight: o.header.fontWeight
@@ -50,10 +48,12 @@ const a = "7px 10px", d = {
50
48
  }
51
49
  };
52
50
  export {
51
+ a as DEFAULT_TABLE_HEADER_BACKGROUND_COLOR,
52
+ i as DEFAULT_TABLE_RADIUS,
53
53
  d as defaultStyledTableTheme,
54
54
  u as defaultTableSortLabelSx,
55
55
  f as getDefaultTableCellSx,
56
- b as getDefaultTableHeaderCellSx,
56
+ S as getDefaultTableHeaderCellSx,
57
57
  g as getDefaultTableHeaderLabelSx
58
58
  };
59
59
  //# sourceMappingURL=defaultTableStyle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultTableStyle.js","sources":["../../../../src/components/OwpTable/internal/defaultTableStyle.ts"],"sourcesContent":["import type { OwpResolvedTableThemeConfigType } from '@/constants/tableTheme';\nimport { grey } from '@mui/material/colors';\n\nconst DEFAULT_TABLE_CELL_PADDING = '7px 10px';\n\nexport const defaultStyledTableTheme = {\n borderColor: '#e2e8f0',\n header: {\n backgroundColor: '',\n color: 'inherit',\n fontSize: '1.7rem',\n fontWeight: 600,\n },\n cell: {\n backgroundColor: '',\n fontSize: '1.7rem',\n },\n} satisfies OwpResolvedTableThemeConfigType;\n\nconst getDefaultTableCellBaseSx = () =>\n ({\n padding: DEFAULT_TABLE_CELL_PADDING,\n borderLeft: 'none',\n borderRight: 'none',\n }) as const;\n\n/** 기본 table cell sx */\nexport const getDefaultTableCellSx = (tableTheme: OwpResolvedTableThemeConfigType) =>\n ({\n ...getDefaultTableCellBaseSx(),\n borderBottomColor: tableTheme.borderColor,\n ...(tableTheme.cell.backgroundColor && {\n backgroundColor: tableTheme.cell.backgroundColor,\n }),\n fontSize: tableTheme.cell.fontSize,\n }) as const;\n\n/** 기본 table header cell sx */\nexport const getDefaultTableHeaderCellSx = (\n tableTheme: OwpResolvedTableThemeConfigType,\n fallbackBackgroundColor: string = grey[200],\n) =>\n ({\n ...getDefaultTableCellBaseSx(),\n backgroundColor: tableTheme.header.backgroundColor || fallbackBackgroundColor,\n borderBottomColor: tableTheme.borderColor,\n color: tableTheme.header.color,\n fontSize: tableTheme.header.fontSize,\n fontWeight: tableTheme.header.fontWeight,\n }) as const;\n\n/** 기본 table header label sx */\nexport const getDefaultTableHeaderLabelSx = (tableTheme: OwpResolvedTableThemeConfigType) =>\n ({\n color: tableTheme.header.color,\n fontSize: tableTheme.header.fontSize,\n fontWeight: tableTheme.header.fontWeight,\n }) as const;\n\nexport const defaultTableSortLabelSx = {\n '&.MuiTableSortLabel-root': {\n color: 'inherit',\n },\n '&.MuiTableSortLabel-root:hover': {\n color: 'inherit',\n },\n '&.Mui-active': {\n color: 'inherit',\n },\n '& .MuiTableSortLabel-icon': {\n color: 'currentColor !important',\n },\n} as const;\n"],"names":["DEFAULT_TABLE_CELL_PADDING","defaultStyledTableTheme","getDefaultTableCellBaseSx","__name","getDefaultTableCellSx","tableTheme","getDefaultTableHeaderCellSx","fallbackBackgroundColor","grey","getDefaultTableHeaderLabelSx","defaultTableSortLabelSx"],"mappings":";;;AAGA,MAAMA,IAA6B,YAEtBC,IAA0B;AAAA,EACrC,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EAAA;AAAA,EAEd,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,UAAU;AAAA,EAAA;AAEd,GAEMC,IAA4B,gBAAAC,EAAA,OAC/B;AAAA,EACC,SAASH;AAAA,EACT,YAAY;AAAA,EACZ,aAAa;AACf,IALgC,8BAQrBI,IAAwB,gBAAAD,EAAA,CAACE,OACnC;AAAA,EACC,GAAGH,EAAA;AAAA,EACH,mBAAmBG,EAAW;AAAA,EAC9B,GAAIA,EAAW,KAAK,mBAAmB;AAAA,IACrC,iBAAiBA,EAAW,KAAK;AAAA,EAAA;AAAA,EAEnC,UAAUA,EAAW,KAAK;AAC5B,IARmC,0BAWxBC,IAA8B,gBAAAH,EAAA,CACzCE,GACAE,IAAkCC,EAAK,GAAG,OAEzC;AAAA,EACC,GAAGN,EAAA;AAAA,EACH,iBAAiBG,EAAW,OAAO,mBAAmBE;AAAA,EACtD,mBAAmBF,EAAW;AAAA,EAC9B,OAAOA,EAAW,OAAO;AAAA,EACzB,UAAUA,EAAW,OAAO;AAAA,EAC5B,YAAYA,EAAW,OAAO;AAChC,IAXyC,gCAc9BI,IAA+B,gBAAAN,EAAA,CAACE,OAC1C;AAAA,EACC,OAAOA,EAAW,OAAO;AAAA,EACzB,UAAUA,EAAW,OAAO;AAAA,EAC5B,YAAYA,EAAW,OAAO;AAChC,IAL0C,iCAO/BK,IAA0B;AAAA,EACrC,4BAA4B;AAAA,IAC1B,OAAO;AAAA,EAAA;AAAA,EAET,kCAAkC;AAAA,IAChC,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,OAAO;AAAA,EAAA;AAAA,EAET,6BAA6B;AAAA,IAC3B,OAAO;AAAA,EAAA;AAEX;"}
1
+ {"version":3,"file":"defaultTableStyle.js","sources":["../../../../src/components/OwpTable/internal/defaultTableStyle.ts"],"sourcesContent":["import type { OwpResolvedTableThemeConfigType } from '@/constants/tableTheme';\n\nconst DEFAULT_TABLE_CELL_PADDING = '7px 10px';\n\nexport const DEFAULT_TABLE_RADIUS = '0.5rem';\nexport const DEFAULT_TABLE_HEADER_BACKGROUND_COLOR = '#f5f5f5';\n\nexport const defaultStyledTableTheme = {\n borderColor: '#e2e8f0',\n header: {\n backgroundColor: '',\n color: 'inherit',\n fontSize: '1.7rem',\n fontWeight: 600,\n },\n cell: {\n backgroundColor: '',\n fontSize: '1.7rem',\n },\n} satisfies OwpResolvedTableThemeConfigType;\n\n/** 기본 table cell 공통 sx */\nconst getDefaultTableCellBaseSx = (tableTheme: OwpResolvedTableThemeConfigType) =>\n ({\n padding: DEFAULT_TABLE_CELL_PADDING,\n borderBottom: `1px solid ${tableTheme.borderColor}`,\n borderLeft: 'none',\n borderRight: 'none',\n }) as const;\n\n/** 기본 table cell sx */\nexport const getDefaultTableCellSx = (tableTheme: OwpResolvedTableThemeConfigType) =>\n ({\n ...getDefaultTableCellBaseSx(tableTheme),\n ...(tableTheme.cell.backgroundColor && {\n backgroundColor: tableTheme.cell.backgroundColor,\n }),\n fontSize: tableTheme.cell.fontSize,\n }) as const;\n\n/** 기본 table header cell sx */\nexport const getDefaultTableHeaderCellSx = (\n tableTheme: OwpResolvedTableThemeConfigType,\n fallbackBackgroundColor: string = DEFAULT_TABLE_HEADER_BACKGROUND_COLOR,\n) =>\n ({\n ...getDefaultTableCellBaseSx(tableTheme),\n backgroundColor: tableTheme.header.backgroundColor || fallbackBackgroundColor,\n color: tableTheme.header.color,\n fontSize: tableTheme.header.fontSize,\n fontWeight: tableTheme.header.fontWeight,\n }) as const;\n\n/** 기본 table header label sx */\nexport const getDefaultTableHeaderLabelSx = (tableTheme: OwpResolvedTableThemeConfigType) =>\n ({\n color: tableTheme.header.color,\n fontSize: tableTheme.header.fontSize,\n fontWeight: tableTheme.header.fontWeight,\n }) as const;\n\nexport const defaultTableSortLabelSx = {\n '&.MuiTableSortLabel-root': {\n color: 'inherit',\n },\n '&.MuiTableSortLabel-root:hover': {\n color: 'inherit',\n },\n '&.Mui-active': {\n color: 'inherit',\n },\n '& .MuiTableSortLabel-icon': {\n color: 'currentColor !important',\n },\n} as const;\n"],"names":["DEFAULT_TABLE_CELL_PADDING","DEFAULT_TABLE_RADIUS","DEFAULT_TABLE_HEADER_BACKGROUND_COLOR","defaultStyledTableTheme","getDefaultTableCellBaseSx","__name","tableTheme","getDefaultTableCellSx","getDefaultTableHeaderCellSx","fallbackBackgroundColor","getDefaultTableHeaderLabelSx","defaultTableSortLabelSx"],"mappings":";;AAEA,MAAMA,IAA6B,YAEtBC,IAAuB,UACvBC,IAAwC,WAExCC,IAA0B;AAAA,EACrC,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EAAA;AAAA,EAEd,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,UAAU;AAAA,EAAA;AAEd,GAGMC,IAA4B,gBAAAC,EAAA,CAACC,OAChC;AAAA,EACC,SAASN;AAAA,EACT,cAAc,aAAaM,EAAW,WAAW;AAAA,EACjD,YAAY;AAAA,EACZ,aAAa;AACf,IANgC,8BASrBC,IAAwB,gBAAAF,EAAA,CAACC,OACnC;AAAA,EACC,GAAGF,EAA0BE,CAAU;AAAA,EACvC,GAAIA,EAAW,KAAK,mBAAmB;AAAA,IACrC,iBAAiBA,EAAW,KAAK;AAAA,EAAA;AAAA,EAEnC,UAAUA,EAAW,KAAK;AAC5B,IAPmC,0BAUxBE,IAA8B,gBAAAH,EAAA,CACzCC,GACAG,IAAkCP,OAEjC;AAAA,EACC,GAAGE,EAA0BE,CAAU;AAAA,EACvC,iBAAiBA,EAAW,OAAO,mBAAmBG;AAAA,EACtD,OAAOH,EAAW,OAAO;AAAA,EACzB,UAAUA,EAAW,OAAO;AAAA,EAC5B,YAAYA,EAAW,OAAO;AAChC,IAVyC,gCAa9BI,IAA+B,gBAAAL,EAAA,CAACC,OAC1C;AAAA,EACC,OAAOA,EAAW,OAAO;AAAA,EACzB,UAAUA,EAAW,OAAO;AAAA,EAC5B,YAAYA,EAAW,OAAO;AAChC,IAL0C,iCAO/BK,IAA0B;AAAA,EACrC,4BAA4B;AAAA,IAC1B,OAAO;AAAA,EAAA;AAAA,EAET,kCAAkC;AAAA,IAChC,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,OAAO;AAAA,EAAA;AAAA,EAET,6BAA6B;AAAA,IAC3B,OAAO;AAAA,EAAA;AAEX;"}
@@ -0,0 +1,9 @@
1
+ var t = Object.defineProperty;
2
+ var n = (r, e) => t(r, "name", { value: e, configurable: !0 });
3
+ import { isArray as u } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArray.js";
4
+ const p = /* @__PURE__ */ n((...r) => r.reduce((e, o) => o ? [...e, ...u(o) ? o : [o]] : e, []), "mergeSx"), f = /* @__PURE__ */ n((r) => typeof r == "number" ? `${r}px` : r, "toTableRadiusCssValue");
5
+ export {
6
+ p as mergeSx,
7
+ f as toTableRadiusCssValue
8
+ };
9
+ //# sourceMappingURL=tableSx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableSx.js","sources":["../../../../src/components/OwpTable/utils/tableSx.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material';\nimport { isArray } from 'es-toolkit/compat';\n\n/**\n * sx 조건부 배열 병합\n * @param styles sx 목록\n */\nexport const mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\n/**\n * table radius CSS 값 변환\n * @param value radius 값\n */\nexport const toTableRadiusCssValue = (value: number | string) => {\n return typeof value === 'number' ? `${value}px` : value;\n};\n"],"names":["mergeSx","__name","styles","acc","style","isArray","toTableRadiusCssValue","value"],"mappings":";;;AAOO,MAAMA,IAAU,gBAAAC,EAAA,IAAIC,MACzBA,EAAO,OAA2D,CAACC,GAAKC,MACjEA,IAIE,CAAC,GAAGD,GAAK,GAAIE,EAAQD,CAAK,IAAIA,IAAQ,CAACA,CAAK,CAAE,IAH5CD,GAIR,CAAA,CAAE,GAPgB,YAaVG,IAAwB,gBAAAL,EAAA,CAACM,MAC7B,OAAOA,KAAU,WAAW,GAAGA,CAAK,OAAOA,GADf;"}
@@ -1,20 +1,22 @@
1
- var z = Object.defineProperty;
2
- var i = (e, r) => z(e, "name", { value: r, configurable: !0 });
3
- import { jsxs as E, jsx as M } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
- import { FormHelperText as j } from "@mui/material";
5
- import y from "@mui/material/FormControl";
6
- import b from "@mui/material/Input";
7
- import A from "@mui/material/InputLabel";
8
- import { useId as H, forwardRef as L, useRef as s, useEffect as p } from "react";
9
- import { InputMask as P } from "imask";
10
- function $(e, r) {
1
+ var E = Object.defineProperty;
2
+ var s = (e, r) => E(e, "name", { value: r, configurable: !0 });
3
+ import { jsxs as j, jsx as V } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
+ import { FormHelperText as y } from "@mui/material";
5
+ import z from "@mui/material/FormControl";
6
+ import A from "@mui/material/FilledInput";
7
+ import H from "@mui/material/Input";
8
+ import L from "@mui/material/InputLabel";
9
+ import P from "@mui/material/OutlinedInput";
10
+ import { useId as $, forwardRef as b, useRef as c, useEffect as k } from "react";
11
+ import { InputMask as q } from "imask";
12
+ function B(e, r) {
11
13
  if (typeof e == "function") {
12
14
  e(r);
13
15
  return;
14
16
  }
15
17
  e && (e.current = r);
16
18
  }
17
- i($, "assignInputRef");
19
+ s(B, "assignInputRef");
18
20
  function T({
19
21
  mask: e,
20
22
  definitions: r
@@ -25,133 +27,140 @@ function T({
25
27
  overwrite: !0
26
28
  };
27
29
  }
28
- i(T, "buildTextMaskOptions");
29
- const q = L(/* @__PURE__ */ i(function(r, h) {
30
+ s(T, "buildTextMaskOptions");
31
+ const D = b(/* @__PURE__ */ s(function(r, h) {
30
32
  const {
31
- onMaskChange: c,
32
- mask: a,
33
- definitions: l,
33
+ onMaskChange: l,
34
+ mask: i,
35
+ definitions: m,
34
36
  name: f,
35
37
  value: o,
36
- defaultValue: d,
37
- ownerState: O,
38
- as: C,
39
- onChange: R,
40
- ...V
41
- } = r, k = s(null), u = s(null), g = s(c), v = s(f), x = s(T({ mask: a, definitions: l })), m = s(o !== void 0 ? o : d);
42
- p(() => {
43
- g.current = c;
44
- }, [c]), p(() => {
45
- v.current = f;
46
- }, [f]), p(() => {
47
- const n = k.current;
38
+ defaultValue: I,
39
+ ownerState: S,
40
+ as: x,
41
+ onChange: w,
42
+ ...O
43
+ } = r, a = c(null), u = c(null), g = c(l), C = c(f), M = c(T({ mask: i, definitions: m })), p = c(o !== void 0 ? o : I);
44
+ k(() => {
45
+ g.current = l;
46
+ }, [l]), k(() => {
47
+ C.current = f;
48
+ }, [f]), k(() => {
49
+ const n = a.current;
48
50
  if (!n)
49
51
  return;
50
- const t = new P(
52
+ const t = new q(
51
53
  n,
52
- x.current
53
- ), S = /* @__PURE__ */ i(() => {
54
+ M.current
55
+ ), R = /* @__PURE__ */ s(() => {
54
56
  g.current({
55
57
  target: {
56
- name: v.current ?? n.name ?? "",
58
+ name: C.current ?? n.name ?? "",
57
59
  value: t.value
58
60
  },
59
61
  unmaskedValue: t.unmaskedValue
60
62
  });
61
63
  }, "emitMaskChange");
62
- if (t.on("accept", S), u.current = t, m.current !== void 0) {
63
- const F = m.current == null ? "" : String(m.current);
64
- t.value !== F && (t.value = F);
64
+ if (t.on("accept", R), u.current = t, p.current !== void 0) {
65
+ const d = p.current == null ? "" : String(p.current);
66
+ t.value !== d && (t.value = d);
65
67
  }
66
68
  return () => {
67
- t.off("accept", S), t.destroy(), u.current === t && (u.current = null);
69
+ t.off("accept", R), t.destroy(), u.current === t && (u.current = null);
68
70
  };
69
- }, []), p(() => {
71
+ }, []), k(() => {
70
72
  const n = u.current;
71
- n && n.updateOptions(T({ mask: a, definitions: l }));
72
- }, [a, l]), p(() => {
73
+ n && n.updateOptions(T({ mask: i, definitions: m }));
74
+ }, [i, m]), k(() => {
73
75
  const n = u.current;
74
76
  if (!n || o === void 0)
75
77
  return;
76
78
  const t = o == null ? "" : String(o);
77
79
  n.value !== t && (n.value = t);
78
80
  }, [o]);
79
- const I = o !== void 0 ? o : d, w = I == null ? "" : String(I);
80
- return /* @__PURE__ */ M(
81
+ const v = o !== void 0 ? o : I, F = v == null ? "" : String(v);
82
+ return /* @__PURE__ */ V(
81
83
  "input",
82
84
  {
83
- ...V,
84
- defaultValue: w,
85
- onChange: R,
86
- ref: /* @__PURE__ */ i((n) => {
87
- k.current = n, $(h, n);
85
+ ...O,
86
+ defaultValue: F,
87
+ onChange: w,
88
+ ref: /* @__PURE__ */ s((n) => {
89
+ a.current = n, B(h, n);
88
90
  }, "ref")
89
91
  }
90
92
  );
91
93
  }, "TextMaskCustom2"));
92
- function W({
94
+ function nn({
93
95
  className: e,
94
96
  sx: r,
95
97
  id: h,
96
- name: c,
97
- label: a,
98
- value: l,
98
+ name: l,
99
+ label: i,
100
+ value: m,
99
101
  defaultValue: f,
100
102
  color: o,
101
- onChange: d,
102
- error: O,
103
- helperText: C,
104
- mask: R,
105
- definitions: V,
106
- variant: k,
103
+ onChange: I,
104
+ error: S,
105
+ helperText: x,
106
+ mask: w,
107
+ definitions: O,
108
+ variant: a,
107
109
  fullWidth: u,
108
110
  disabled: g,
109
- required: v,
110
- placeholder: x,
111
- autoFocus: m,
112
- inputProps: I,
113
- inputRef: w
111
+ required: C,
112
+ size: M,
113
+ placeholder: p,
114
+ autoFocus: v,
115
+ inputProps: F,
116
+ inputRef: n,
117
+ ...t
114
118
  }) {
115
- const n = H(), t = h ?? `text-mask-input-${n}`;
116
- return /* @__PURE__ */ E(
117
- y,
119
+ const R = $(), d = h ?? `text-mask-input-${R}`;
120
+ return /* @__PURE__ */ j(
121
+ z,
118
122
  {
123
+ className: e,
119
124
  color: o,
120
- variant: k,
125
+ variant: a,
121
126
  fullWidth: u,
122
- error: O,
127
+ error: S,
123
128
  disabled: g,
124
- required: v,
129
+ required: C,
130
+ size: M,
131
+ sx: r,
125
132
  children: [
126
- a ? /* @__PURE__ */ M(A, { htmlFor: t, children: a }) : null,
127
- /* @__PURE__ */ M(
128
- b,
133
+ i ? /* @__PURE__ */ V(L, { htmlFor: d, children: i }) : null,
134
+ /* @__PURE__ */ V(
135
+ a === "outlined" ? P : a === "filled" ? A : H,
129
136
  {
130
- className: e,
131
- sx: r,
132
- value: l,
137
+ ...t,
138
+ ...a === "outlined" ? { label: i } : void 0,
139
+ value: m,
133
140
  defaultValue: f,
134
- name: c,
135
- id: t,
136
- placeholder: x,
137
- autoFocus: m,
138
- inputRef: w,
139
- inputComponent: q,
141
+ fullWidth: u,
142
+ name: l,
143
+ id: d,
144
+ size: M,
145
+ placeholder: p,
146
+ autoFocus: v,
147
+ inputRef: n,
148
+ inputComponent: D,
140
149
  inputProps: {
141
- ...I,
142
- onMaskChange: d,
143
- mask: R,
144
- definitions: V
150
+ ...F,
151
+ onMaskChange: I,
152
+ mask: w,
153
+ definitions: O
145
154
  }
146
155
  }
147
156
  ),
148
- C ? /* @__PURE__ */ M(j, { children: C }) : null
157
+ x ? /* @__PURE__ */ V(y, { children: x }) : null
149
158
  ]
150
159
  }
151
160
  );
152
161
  }
153
- i(W, "OwpTextMaskField");
162
+ s(nn, "OwpTextMaskField");
154
163
  export {
155
- W as OwpTextMaskField
164
+ nn as OwpTextMaskField
156
165
  };
157
166
  //# sourceMappingURL=OwpTextMaskField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OwpTextMaskField.js","sources":["../../../src/components/OwpTextField/OwpTextMaskField.tsx"],"sourcesContent":["import { FormHelperText } from '@mui/material';\nimport FormControl from '@mui/material/FormControl';\nimport type { FormControlProps } from '@mui/material/FormControl';\nimport Input from '@mui/material/Input';\nimport type { InputProps as MuiInputProps } from '@mui/material/Input';\nimport type { InputBaseComponentProps } from '@mui/material/InputBase';\nimport InputLabel from '@mui/material/InputLabel';\nimport {\n forwardRef,\n type ForwardedRef,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n} from 'react';\nimport { InputMask as IMaskInput, type Definitions, type FactoryOpts } from 'imask';\n\ntype TextMaskFieldChangeEvent = {\n target: { name: string; value: string };\n unmaskedValue: string;\n};\n\ntype TextMaskValue = FactoryOpts['mask'];\n\ninterface CustomProps {\n onMaskChange: (event: TextMaskFieldChangeEvent) => void;\n name?: string;\n mask: TextMaskValue;\n definitions?: Definitions;\n}\n\ntype OwpTextMaskFieldProps = Omit<MuiInputProps, 'onChange' | 'inputComponent'> &\n Omit<CustomProps, 'onMaskChange'> & {\n label?: ReactNode;\n helperText?: ReactNode;\n variant?: FormControlProps['variant'];\n onChange: CustomProps['onMaskChange'];\n };\n\n/** 마스크 입력 어댑터 */\ntype TextMaskCustomProps = InputBaseComponentProps & CustomProps;\n\ntype TextMaskOptions = FactoryOpts & {\n definitions?: Definitions;\n overwrite: true;\n};\n\n/** ref 전달 정규화 */\nfunction assignInputRef<T>(ref: ForwardedRef<T>, value: T | null) {\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n\n if (ref) {\n ref.current = value;\n }\n}\n\n/** 마스크 옵션 생성 */\nfunction buildTextMaskOptions({\n mask,\n definitions,\n}: Pick<CustomProps, 'mask' | 'definitions'>): TextMaskOptions {\n return {\n mask,\n definitions,\n overwrite: true,\n } as TextMaskOptions;\n}\n\nconst TextMaskCustom = forwardRef<HTMLInputElement, TextMaskCustomProps>(function TextMaskCustom(\n props,\n ref,\n) {\n const {\n onMaskChange,\n mask,\n definitions,\n name,\n value,\n defaultValue,\n ownerState: ignoredOwnerState,\n as: ignoredAs,\n onChange,\n ...other\n } = props;\n const inputElementRef = useRef<HTMLInputElement | null>(null);\n const maskRef = useRef<IMaskInput<FactoryOpts> | null>(null);\n const onMaskChangeRef = useRef(onMaskChange);\n const nameRef = useRef(name);\n const initialMaskOptionsRef = useRef(buildTextMaskOptions({ mask, definitions }));\n const initialValueRef = useRef(value !== undefined ? value : defaultValue);\n\n void ignoredOwnerState;\n void ignoredAs;\n\n useEffect(() => {\n onMaskChangeRef.current = onMaskChange;\n }, [onMaskChange]);\n\n useEffect(() => {\n nameRef.current = name;\n }, [name]);\n\n useEffect(() => {\n const inputElement = inputElementRef.current;\n\n if (!inputElement) {\n return;\n }\n\n const maskInstance = new IMaskInput(\n inputElement,\n initialMaskOptionsRef.current as FactoryOpts,\n );\n const emitMaskChange = () => {\n onMaskChangeRef.current({\n target: {\n name: nameRef.current ?? inputElement.name ?? '',\n value: maskInstance.value,\n },\n unmaskedValue: maskInstance.unmaskedValue,\n });\n };\n\n maskInstance.on('accept', emitMaskChange);\n maskRef.current = maskInstance;\n\n if (initialValueRef.current !== undefined) {\n const normalizedInitialValue =\n initialValueRef.current == null ? '' : String(initialValueRef.current);\n\n if (maskInstance.value !== normalizedInitialValue) {\n maskInstance.value = normalizedInitialValue;\n }\n }\n\n return () => {\n maskInstance.off('accept', emitMaskChange);\n maskInstance.destroy();\n\n if (maskRef.current === maskInstance) {\n maskRef.current = null;\n }\n };\n }, []);\n\n useEffect(() => {\n const maskInstance = maskRef.current;\n\n if (!maskInstance) {\n return;\n }\n\n maskInstance.updateOptions(buildTextMaskOptions({ mask, definitions }) as FactoryOpts);\n }, [mask, definitions]);\n\n useEffect(() => {\n const maskInstance = maskRef.current;\n\n if (!maskInstance || value === undefined) {\n return;\n }\n\n const normalizedValue = value == null ? '' : String(value);\n\n if (maskInstance.value !== normalizedValue) {\n maskInstance.value = normalizedValue;\n }\n }, [value]);\n\n const initialValue = value !== undefined ? value : defaultValue;\n const normalizedInitialValue = initialValue == null ? '' : String(initialValue);\n\n return (\n <input\n {...other}\n defaultValue={normalizedInitialValue}\n onChange={onChange}\n ref={(element) => {\n inputElementRef.current = element;\n assignInputRef(ref, element);\n }}\n />\n );\n});\n\n/**\n * 마스크 텍스트 입력 필드\n * @param mask 입력 마스크 정의\n * @param definitions 사용자 정의 마스크 정의\n * @param onChange 마스크 변경 이벤트 핸들러\n */\nexport function OwpTextMaskField({\n className,\n sx,\n id: idProp,\n name,\n label,\n value,\n defaultValue,\n color,\n onChange,\n error,\n helperText,\n mask,\n definitions,\n variant,\n fullWidth,\n disabled,\n required,\n placeholder,\n autoFocus,\n inputProps,\n inputRef,\n}: OwpTextMaskFieldProps) {\n const generatedId = useId();\n const id = idProp ?? `text-mask-input-${generatedId}`;\n\n return (\n <FormControl\n color={color}\n variant={variant}\n fullWidth={fullWidth}\n error={error}\n disabled={disabled}\n required={required}\n >\n {label ? <InputLabel htmlFor={id}>{label}</InputLabel> : null}\n <Input\n className={className}\n sx={sx}\n value={value}\n defaultValue={defaultValue}\n name={name}\n id={id}\n placeholder={placeholder}\n autoFocus={autoFocus}\n inputRef={inputRef}\n inputComponent={TextMaskCustom}\n inputProps={{\n ...inputProps,\n onMaskChange: onChange,\n mask,\n definitions,\n }}\n />\n {helperText ? <FormHelperText>{helperText}</FormHelperText> : null}\n </FormControl>\n );\n}\n"],"names":["assignInputRef","ref","value","__name","buildTextMaskOptions","mask","definitions","TextMaskCustom","forwardRef","props","onMaskChange","name","defaultValue","ignoredOwnerState","ignoredAs","onChange","other","inputElementRef","useRef","maskRef","onMaskChangeRef","nameRef","initialMaskOptionsRef","initialValueRef","useEffect","inputElement","maskInstance","IMaskInput","emitMaskChange","normalizedInitialValue","normalizedValue","initialValue","jsx","element","OwpTextMaskField","className","sx","idProp","label","color","error","helperText","variant","fullWidth","disabled","required","placeholder","autoFocus","inputProps","inputRef","generatedId","useId","id","jsxs","FormControl","InputLabel","Input","FormHelperText"],"mappings":"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"}
1
+ {"version":3,"file":"OwpTextMaskField.js","sources":["../../../src/components/OwpTextField/OwpTextMaskField.tsx"],"sourcesContent":["import { FormHelperText } from '@mui/material';\nimport FormControl from '@mui/material/FormControl';\nimport type { FormControlProps } from '@mui/material/FormControl';\nimport FilledInput from '@mui/material/FilledInput';\nimport Input from '@mui/material/Input';\nimport type { InputProps as MuiInputProps } from '@mui/material/Input';\nimport type { InputBaseComponentProps } from '@mui/material/InputBase';\nimport InputLabel from '@mui/material/InputLabel';\nimport OutlinedInput from '@mui/material/OutlinedInput';\nimport {\n forwardRef,\n type ForwardedRef,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n} from 'react';\nimport { InputMask as IMaskInput, type Definitions, type FactoryOpts } from 'imask';\n\nexport type OwpTextMaskFieldChangeEvent = {\n target: { name: string; value: string };\n unmaskedValue: string;\n};\n\ntype TextMaskValue = FactoryOpts['mask'];\n\ninterface CustomProps {\n onMaskChange: (event: OwpTextMaskFieldChangeEvent) => void;\n name?: string;\n mask: TextMaskValue;\n definitions?: Definitions;\n}\n\ntype OwpTextMaskFieldProps = Omit<MuiInputProps, 'onChange' | 'inputComponent'> &\n Omit<CustomProps, 'onMaskChange'> & {\n label?: ReactNode;\n helperText?: ReactNode;\n variant?: FormControlProps['variant'];\n onChange: CustomProps['onMaskChange'];\n };\n\n/** 마스크 입력 어댑터 */\ntype TextMaskCustomProps = InputBaseComponentProps & CustomProps;\n\ntype TextMaskOptions = FactoryOpts & {\n definitions?: Definitions;\n overwrite: true;\n};\n\n/** ref 전달 정규화 */\nfunction assignInputRef<T>(ref: ForwardedRef<T>, value: T | null) {\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n\n if (ref) {\n ref.current = value;\n }\n}\n\n/** 마스크 옵션 생성 */\nfunction buildTextMaskOptions({\n mask,\n definitions,\n}: Pick<CustomProps, 'mask' | 'definitions'>): TextMaskOptions {\n return {\n mask,\n definitions,\n overwrite: true,\n } as TextMaskOptions;\n}\n\nconst TextMaskCustom = forwardRef<HTMLInputElement, TextMaskCustomProps>(function TextMaskCustom(\n props,\n ref,\n) {\n const {\n onMaskChange,\n mask,\n definitions,\n name,\n value,\n defaultValue,\n ownerState: ignoredOwnerState,\n as: ignoredAs,\n onChange,\n ...other\n } = props;\n const inputElementRef = useRef<HTMLInputElement | null>(null);\n const maskRef = useRef<IMaskInput<FactoryOpts> | null>(null);\n const onMaskChangeRef = useRef(onMaskChange);\n const nameRef = useRef(name);\n const initialMaskOptionsRef = useRef(buildTextMaskOptions({ mask, definitions }));\n const initialValueRef = useRef(value !== undefined ? value : defaultValue);\n\n void ignoredOwnerState;\n void ignoredAs;\n\n useEffect(() => {\n onMaskChangeRef.current = onMaskChange;\n }, [onMaskChange]);\n\n useEffect(() => {\n nameRef.current = name;\n }, [name]);\n\n useEffect(() => {\n const inputElement = inputElementRef.current;\n\n if (!inputElement) {\n return;\n }\n\n const maskInstance = new IMaskInput(\n inputElement,\n initialMaskOptionsRef.current as FactoryOpts,\n );\n const emitMaskChange = () => {\n onMaskChangeRef.current({\n target: {\n name: nameRef.current ?? inputElement.name ?? '',\n value: maskInstance.value,\n },\n unmaskedValue: maskInstance.unmaskedValue,\n });\n };\n\n maskInstance.on('accept', emitMaskChange);\n maskRef.current = maskInstance;\n\n if (initialValueRef.current !== undefined) {\n const normalizedInitialValue =\n initialValueRef.current == null ? '' : String(initialValueRef.current);\n\n if (maskInstance.value !== normalizedInitialValue) {\n maskInstance.value = normalizedInitialValue;\n }\n }\n\n return () => {\n maskInstance.off('accept', emitMaskChange);\n maskInstance.destroy();\n\n if (maskRef.current === maskInstance) {\n maskRef.current = null;\n }\n };\n }, []);\n\n useEffect(() => {\n const maskInstance = maskRef.current;\n\n if (!maskInstance) {\n return;\n }\n\n maskInstance.updateOptions(buildTextMaskOptions({ mask, definitions }) as FactoryOpts);\n }, [mask, definitions]);\n\n useEffect(() => {\n const maskInstance = maskRef.current;\n\n if (!maskInstance || value === undefined) {\n return;\n }\n\n const normalizedValue = value == null ? '' : String(value);\n\n if (maskInstance.value !== normalizedValue) {\n maskInstance.value = normalizedValue;\n }\n }, [value]);\n\n const initialValue = value !== undefined ? value : defaultValue;\n const normalizedInitialValue = initialValue == null ? '' : String(initialValue);\n\n return (\n <input\n {...other}\n defaultValue={normalizedInitialValue}\n onChange={onChange}\n ref={(element) => {\n inputElementRef.current = element;\n assignInputRef(ref, element);\n }}\n />\n );\n});\n\n/**\n * 마스크 텍스트 입력 필드\n * @param mask 입력 마스크 정의\n * @param definitions 사용자 정의 마스크 정의\n * @param onChange 마스크 변경 이벤트 핸들러\n */\nexport function OwpTextMaskField({\n className,\n sx,\n id: idProp,\n name,\n label,\n value,\n defaultValue,\n color,\n onChange,\n error,\n helperText,\n mask,\n definitions,\n variant,\n fullWidth,\n disabled,\n required,\n size,\n placeholder,\n autoFocus,\n inputProps,\n inputRef,\n ...inputBaseProps\n}: OwpTextMaskFieldProps) {\n const generatedId = useId();\n const id = idProp ?? `text-mask-input-${generatedId}`;\n const InputComponent = (\n variant === 'outlined' ? OutlinedInput : variant === 'filled' ? FilledInput : Input\n ) as typeof Input;\n\n return (\n <FormControl\n className={className}\n color={color}\n variant={variant}\n fullWidth={fullWidth}\n error={error}\n disabled={disabled}\n required={required}\n size={size}\n sx={sx}\n >\n {label ? <InputLabel htmlFor={id}>{label}</InputLabel> : null}\n <InputComponent\n {...inputBaseProps}\n {...(variant === 'outlined' ? { label } : undefined)}\n value={value}\n defaultValue={defaultValue}\n fullWidth={fullWidth}\n name={name}\n id={id}\n size={size}\n placeholder={placeholder}\n autoFocus={autoFocus}\n inputRef={inputRef}\n inputComponent={TextMaskCustom}\n inputProps={{\n ...inputProps,\n onMaskChange: onChange,\n mask,\n definitions,\n }}\n />\n {helperText ? <FormHelperText>{helperText}</FormHelperText> : null}\n </FormControl>\n );\n}\n"],"names":["assignInputRef","ref","value","__name","buildTextMaskOptions","mask","definitions","TextMaskCustom","forwardRef","props","onMaskChange","name","defaultValue","ignoredOwnerState","ignoredAs","onChange","other","inputElementRef","useRef","maskRef","onMaskChangeRef","nameRef","initialMaskOptionsRef","initialValueRef","useEffect","inputElement","maskInstance","IMaskInput","emitMaskChange","normalizedInitialValue","normalizedValue","initialValue","jsx","element","OwpTextMaskField","className","sx","idProp","label","color","error","helperText","variant","fullWidth","disabled","required","size","placeholder","autoFocus","inputProps","inputRef","inputBaseProps","generatedId","useId","id","jsxs","FormControl","InputLabel","OutlinedInput","FilledInput","Input","FormHelperText"],"mappings":";;;;;;;;;;;AAkDA,SAASA,EAAkBC,GAAsBC,GAAiB;AAChE,MAAI,OAAOD,KAAQ,YAAY;AAC7B,IAAAA,EAAIC,CAAK;AACT;AAAA,EACF;AAEA,EAAID,MACFA,EAAI,UAAUC;AAElB;AATSC,EAAAH,GAAA;AAYT,SAASI,EAAqB;AAAA,EAC5B,MAAAC;AAAA,EACA,aAAAC;AACF,GAA+D;AAC7D,SAAO;AAAA,IACL,MAAAD;AAAA,IACA,aAAAC;AAAA,IACA,WAAW;AAAA,EAAA;AAEf;AATSH,EAAAC,GAAA;AAWT,MAAMG,IAAiBC,EAAkD,gBAAAL,EAAA,SACvEM,GACAR,GACA;AACA,QAAM;AAAA,IACJ,cAAAS;AAAA,IACA,MAAAL;AAAA,IACA,aAAAC;AAAA,IACA,MAAAK;AAAA,IACA,OAAAT;AAAA,IACA,cAAAU;AAAA,IACA,YAAYC;AAAA,IACZ,IAAIC;AAAA,IACJ,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDP,GACEQ,IAAkBC,EAAgC,IAAI,GACtDC,IAAUD,EAAuC,IAAI,GACrDE,IAAkBF,EAAOR,CAAY,GACrCW,IAAUH,EAAOP,CAAI,GACrBW,IAAwBJ,EAAOd,EAAqB,EAAE,MAAAC,GAAM,aAAAC,EAAA,CAAa,CAAC,GAC1EiB,IAAkBL,EAAOhB,MAAU,SAAYA,IAAQU,CAAY;AAKzE,EAAAY,EAAU,MAAM;AACd,IAAAJ,EAAgB,UAAUV;AAAA,EAC5B,GAAG,CAACA,CAAY,CAAC,GAEjBc,EAAU,MAAM;AACd,IAAAH,EAAQ,UAAUV;AAAA,EACpB,GAAG,CAACA,CAAI,CAAC,GAETa,EAAU,MAAM;AACd,UAAMC,IAAeR,EAAgB;AAErC,QAAI,CAACQ;AACH;AAGF,UAAMC,IAAe,IAAIC;AAAAA,MACvBF;AAAA,MACAH,EAAsB;AAAA,IAAA,GAElBM,IAAiB,gBAAAzB,EAAA,MAAM;AAC3B,MAAAiB,EAAgB,QAAQ;AAAA,QACtB,QAAQ;AAAA,UACN,MAAMC,EAAQ,WAAWI,EAAa,QAAQ;AAAA,UAC9C,OAAOC,EAAa;AAAA,QAAA;AAAA,QAEtB,eAAeA,EAAa;AAAA,MAAA,CAC7B;AAAA,IACH,GARuB;AAavB,QAHAA,EAAa,GAAG,UAAUE,CAAc,GACxCT,EAAQ,UAAUO,GAEdH,EAAgB,YAAY,QAAW;AACzC,YAAMM,IACJN,EAAgB,WAAW,OAAO,KAAK,OAAOA,EAAgB,OAAO;AAEvE,MAAIG,EAAa,UAAUG,MACzBH,EAAa,QAAQG;AAAAA,IAEzB;AAEA,WAAO,MAAM;AACX,MAAAH,EAAa,IAAI,UAAUE,CAAc,GACzCF,EAAa,QAAA,GAETP,EAAQ,YAAYO,MACtBP,EAAQ,UAAU;AAAA,IAEtB;AAAA,EACF,GAAG,CAAA,CAAE,GAELK,EAAU,MAAM;AACd,UAAME,IAAeP,EAAQ;AAE7B,IAAKO,KAILA,EAAa,cAActB,EAAqB,EAAE,MAAAC,GAAM,aAAAC,EAAA,CAAa,CAAgB;AAAA,EACvF,GAAG,CAACD,GAAMC,CAAW,CAAC,GAEtBkB,EAAU,MAAM;AACd,UAAME,IAAeP,EAAQ;AAE7B,QAAI,CAACO,KAAgBxB,MAAU;AAC7B;AAGF,UAAM4B,IAAkB5B,KAAS,OAAO,KAAK,OAAOA,CAAK;AAEzD,IAAIwB,EAAa,UAAUI,MACzBJ,EAAa,QAAQI;AAAA,EAEzB,GAAG,CAAC5B,CAAK,CAAC;AAEV,QAAM6B,IAAe7B,MAAU,SAAYA,IAAQU,GAC7CiB,IAAyBE,KAAgB,OAAO,KAAK,OAAOA,CAAY;AAE9E,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGhB;AAAA,MACJ,cAAca;AAAA,MACd,UAAAd;AAAA,MACA,KAAK,gBAAAZ,EAAA,CAAC8B,MAAY;AAChB,QAAAhB,EAAgB,UAAUgB,GAC1BjC,EAAeC,GAAKgC,CAAO;AAAA,MAC7B,GAHK;AAAA,IAGL;AAAA,EAAA;AAGN,GAnHyE,kBAmHxE;AAQM,SAASC,GAAiB;AAAA,EAC/B,WAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,MAAA1B;AAAA,EACA,OAAA2B;AAAA,EACA,OAAApC;AAAA,EACA,cAAAU;AAAA,EACA,OAAA2B;AAAA,EACA,UAAAxB;AAAA,EACA,OAAAyB;AAAA,EACA,YAAAC;AAAA,EACA,MAAApC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAoC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GAA0B;AACxB,QAAMC,IAAcC,EAAA,GACdC,IAAKjB,KAAU,mBAAmBe,CAAW;AAKnD,SACE,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAArB;AAAA,MACA,OAAAI;AAAA,MACA,SAAAG;AAAA,MACA,WAAAC;AAAA,MACA,OAAAH;AAAA,MACA,UAAAI;AAAA,MACA,UAAAC;AAAA,MACA,MAAAC;AAAA,MACA,IAAAV;AAAA,MAEC,UAAA;AAAA,QAAAE,IAAQ,gBAAAN,EAACyB,GAAA,EAAW,SAASH,GAAK,aAAM,IAAgB;AAAA,QACzD,gBAAAtB;AAAA,UAhBFU,MAAY,aAAagB,IAAgBhB,MAAY,WAAWiB,IAAcC;AAAA,UAgB3E;AAAA,YACE,GAAGT;AAAA,YACH,GAAIT,MAAY,aAAa,EAAE,OAAAJ,MAAU;AAAA,YAC1C,OAAApC;AAAA,YACA,cAAAU;AAAA,YACA,WAAA+B;AAAA,YACA,MAAAhC;AAAA,YACA,IAAA2C;AAAA,YACA,MAAAR;AAAA,YACA,aAAAC;AAAA,YACA,WAAAC;AAAA,YACA,UAAAE;AAAA,YACA,gBAAgB3C;AAAA,YAChB,YAAY;AAAA,cACV,GAAG0C;AAAA,cACH,cAAclC;AAAA,cACd,MAAAV;AAAA,cACA,aAAAC;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAEDmC,IAAa,gBAAAT,EAAC6B,GAAA,EAAgB,UAAApB,EAAA,CAAW,IAAoB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGpE;AAnEgBtC,EAAA+B,IAAA;"}
@@ -90,7 +90,7 @@ const Fr = /* @__PURE__ */ i((e) => {
90
90
  height: C = "100%",
91
91
  width: D = "100%",
92
92
  canUseTableRadius: ne = !1,
93
- tableBorderRadius: Ue = ".8rem",
93
+ tableBorderRadius: Ue = "0.5rem",
94
94
  layoutUrl: $e,
95
95
  layoutData: j,
96
96
  dataUrl: ze,
@@ -1 +1 @@
1
- {"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { resolveOwpGridTheme } from '@/constants/gridTheme';\nimport {\n resolveTreeGridColorNumber,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport { useConfirm } from '@/hooks/useConfirm';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport {\n appendTreeGridAddedRowHighlightColumn,\n clearTreeGridCellHighlightById,\n getTreeGridAddedRowBaselineValue,\n getTreeGridCellComparableValue,\n highlightTreeGridCellById,\n isTreeGridRowAddedById,\n removeTreeGridAddedRowHighlightColumn,\n} from '@/utils/treeGridUtil';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./internal/utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './internal/utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport { useOwpTreeGridDatePickerEditor } from './internal/hooks/useOwpTreeGridDatePickerEditor';\nimport { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridExplicitEnterMode,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\nimport {\n createTreeGridThemeContainerStyle,\n TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n TREE_GRID_THEME_WRAPPER_CLASS,\n treeGridThemeStyles,\n type TreeGridThemeContainerStyle,\n} from './internal/treeGridTheme';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridCellBaselineMap = WeakMap<TRow, Map<string, string>>;\n\nconst isVisibleTreeGridRow = (row: TRow | null | undefined) => {\n const visible = (row as { Visible?: unknown } | null)?.Visible;\n\n return !!row && visible !== 0 && visible !== false && visible !== '0';\n};\n\nconst isAddedTreeGridRow = (row: TRow | null | undefined) => {\n const added = (row as { Added?: unknown } | null)?.Added;\n\n return !!row && added !== 0 && added !== false && added !== '0' && added !== undefined;\n};\n\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot' || !isVisibleTreeGridRow(row)) {\n return false;\n }\n\n return row.Kind === 'Data' || isAddedTreeGridRow(row);\n};\n\nconst getTreeGridRows = (grid: TGrid) => {\n if (typeof grid.GetFirst === 'function' && typeof grid.GetNext === 'function') {\n const rows: TRow[] = [];\n let row = grid.GetFirst();\n\n while (row) {\n rows.push(row);\n row = grid.GetNext(row);\n }\n\n return rows;\n }\n\n return Object.values(grid.Rows ?? {});\n};\n\nconst captureTreeGridChangeBaselines = (\n grid: TGrid | null | undefined,\n baselineMap: TreeGridCellBaselineMap,\n) => {\n if (!grid) {\n return;\n }\n\n const cols = Object.keys(grid.Cols ?? {}).filter(Boolean);\n\n getTreeGridRows(grid).forEach((row) => {\n if (!isDisplayTreeGridRow(row)) {\n return;\n }\n\n baselineMap.set(\n row,\n new Map(cols.map((col) => [col, getTreeGridCellComparableValue(grid, row, col)])),\n );\n });\n};\n\nconst isTreeGridChangedFlag = (value: unknown) =>\n value !== undefined &&\n value !== null &&\n value !== '' &&\n value !== 0 &&\n value !== false &&\n value !== '0';\n\nconst hasOtherTreeGridChangedCells = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n\n return Object.keys(grid.Cols ?? {}).some((column) => {\n return column !== col && isTreeGridChangedFlag(rowRecord[`${column}Changed`]);\n });\n};\n\nconst clearTreeGridCellChangedState = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n\n rowRecord[`${col}Changed`] = 0;\n\n if (!isTreeGridRowAddedById(row) && !hasOtherTreeGridChangedCells(grid, row, col)) {\n rowRecord.Changed = 0;\n }\n};\n\nconst resolveTreeGridCellBaselineValue = (\n baselineMap: TreeGridCellBaselineMap,\n row: TRow,\n col: string,\n) => {\n const baselineValues = baselineMap.get(row);\n\n if (baselineValues?.has(col)) {\n return baselineValues.get(col);\n }\n\n if (isTreeGridRowAddedById(row)) {\n return getTreeGridAddedRowBaselineValue(row, col) ?? '';\n }\n\n return undefined;\n};\n\nconst syncTreeGridChangedCellHighlightById = ({\n gridId,\n grid,\n row,\n col,\n backgroundColor,\n baselineMap,\n}: {\n gridId: string;\n grid: TGrid;\n row: TRow;\n col: string;\n backgroundColor: string;\n baselineMap: TreeGridCellBaselineMap;\n}) => {\n if (!isDisplayTreeGridRow(row)) {\n return;\n }\n\n const baselineValue = resolveTreeGridCellBaselineValue(baselineMap, row, col);\n const currentValue = getTreeGridCellComparableValue(grid, row, col);\n\n if (baselineValue !== undefined && currentValue === baselineValue) {\n clearTreeGridCellHighlightById(gridId, { row, col });\n clearTreeGridCellChangedState(grid, row, col);\n\n if (isTreeGridRowAddedById(row)) {\n removeTreeGridAddedRowHighlightColumn(row, col);\n }\n\n return;\n }\n\n highlightTreeGridCellById(gridId, {\n row,\n col,\n backgroundColor,\n });\n\n if (isTreeGridRowAddedById(row)) {\n appendTreeGridAddedRowHighlightColumn(row, col);\n }\n};\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\n\nexport interface OwpTreeGridDatePickerEditorColumnOption {\n baseYear?: string;\n baseYearMonth?: string;\n}\n\nexport interface OwpTreeGridDatePickerEditorConfig {\n enabled?: boolean;\n columns?: readonly string[];\n allowInput?: boolean;\n columnOptions?: Record<string, OwpTreeGridDatePickerEditorColumnOption>;\n showTimeInput?: boolean;\n showTimeSelect?: boolean;\n timeIntervals?: number;\n}\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n toolbarRowBackgroundColor?: CSSProperties['backgroundColor'];\n layoutUrl?: string;\n layoutData?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n canUseTableRadius?: boolean;\n tableBorderRadius?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n datePickerEditor?: OwpTreeGridDatePickerEditorConfig;\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n syncDeletedRowCanEdit?: boolean;\n confirmDeletedRowRemoval?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param toolbarRowBackgroundColor 하단 Toolbar row 배경색\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n * @param canUseTableRadius TreeGrid 내부 테이블 radius 사용 여부\n * @param tableBorderRadius TreeGrid 내부 테이블 radius 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n toolbarRowBackgroundColor,\n className,\n style,\n height = '100%',\n width = '100%',\n canUseTableRadius = false,\n tableBorderRadius = '.8rem',\n layoutUrl,\n layoutData,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n datePickerEditor,\n highlightEditableCells = true,\n highlightChangedCells = true,\n syncDeletedRowCanEdit = true,\n confirmDeletedRowRemoval = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const { confirmDelete } = useConfirm();\n const currentSettings = useGetCurrentSettings();\n const currentGridThemeConfig = currentSettings?.theme?.main?.grid;\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const layoutHasExplicitEnterModeRef = useRef(hasTreeGridExplicitEnterMode(layoutData));\n const handleBeforeRowUndelete = confirmDeletedRowRemoval\n ? async () => {\n const confirmed = await confirmDelete({\n title: t('Message.삭제된 항목을 완전히 삭제하시겠습니까?'),\n description: t('Message.취소하면 삭제 상태가 해제됩니다.'),\n okText: t('Button.완전 삭제'),\n });\n\n return confirmed ? 'remove' : 'undelete';\n }\n : undefined;\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const syncDeletedRowCanEditRef = useRef(syncDeletedRowCanEdit);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentGridThemeConfig),\n [currentGridThemeConfig],\n );\n const editableCellBackgroundColorValueRef = useRef(\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR),\n );\n const changedCellBackgroundColorRef = useRef(\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR,\n );\n const changedCellBaselineRef = useRef<TreeGridCellBaselineMap>(new WeakMap());\n const selectedCellBackgroundColorRef = useRef(treeGridTheme.state.selectedCellBackgroundColor);\n const hoverCellBackgroundColorRef = useRef(treeGridTheme.state.hoverCellBackgroundColor);\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n const handleDatePickerEditorValueChange = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: unknown,\n ) => {\n if (highlightChangedCellsRef.current && row.Fixed !== 'Foot') {\n syncTreeGridChangedCellHighlightById({\n gridId: id,\n grid,\n row,\n col,\n backgroundColor: changedCellBackgroundColorRef.current,\n baselineMap: changedCellBaselineRef.current,\n });\n }\n\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row, col, value);\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n layoutHasExplicitEnterModeRef.current = hasTreeGridExplicitEnterMode(layoutData);\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n syncDeletedRowCanEditRef.current = syncDeletedRowCanEdit;\n editableCellBackgroundColorValueRef.current =\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR);\n changedCellBackgroundColorRef.current =\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR;\n selectedCellBackgroundColorRef.current = treeGridTheme.state.selectedCellBackgroundColor;\n hoverCellBackgroundColorRef.current = treeGridTheme.state.hoverCellBackgroundColor;\n const {\n datePickerEditorElement,\n handleDatePickerEditorButtonClick,\n handleDatePickerEditorCellClick,\n handleDatePickerEditorKeyDown,\n handleDatePickerEditorStartEdit,\n } =\n useOwpTreeGridDatePickerEditor({\n config: datePickerEditor,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange: handleDatePickerEditorValueChange,\n });\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n onInternalButtonClick: handleDatePickerEditorButtonClick,\n onInternalCellClick: handleDatePickerEditorCellClick,\n onInternalKeyDown: handleDatePickerEditorKeyDown,\n onInternalStartEdit: handleDatePickerEditorStartEdit,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n layoutHasExplicitEnterModeRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n syncDeletedRowCanEditRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\n changedCellBaselineRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n layoutData,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n changedCellBaselineRef.current = new WeakMap();\n captureTreeGridChangeBaselines(treeGrid, changedCellBaselineRef.current);\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n\n }, [isTreeGridReady, layoutOverrides, data, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: TreeGridThemeContainerStyle = createTreeGridThemeContainerStyle({\n width,\n height,\n treeGridTheme,\n gridThemeConfig: currentGridThemeConfig,\n containerStyle,\n tableBorderRadius: canUseTableRadius ? tableBorderRadius : undefined,\n });\n\n if (toolbarRowBackgroundColor !== undefined) {\n resolvedContainerStyle['--owp-tree-grid-toolbar-row-background-color'] =\n String(toolbarRowBackgroundColor);\n }\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div\n ref={treeGridContainerRef}\n className={[\n TREE_GRID_THEME_WRAPPER_CLASS,\n canUseTableRadius && TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n containerClassName,\n ]\n .filter(Boolean)\n .join(' ')}\n style={resolvedContainerStyle}\n >\n <GlobalStyles styles={treeGridThemeStyles} />\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n {datePickerEditorElement}\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["isVisibleTreeGridRow","__name","row","visible","isAddedTreeGridRow","added","isDisplayTreeGridRow","getTreeGridRows","grid","rows","captureTreeGridChangeBaselines","baselineMap","cols","col","getTreeGridCellComparableValue","isTreeGridChangedFlag","value","hasOtherTreeGridChangedCells","rowRecord","column","clearTreeGridCellChangedState","isTreeGridRowAddedById","resolveTreeGridCellBaselineValue","baselineValues","getTreeGridAddedRowBaselineValue","syncTreeGridChangedCellHighlightById","gridId","backgroundColor","baselineValue","currentValue","clearTreeGridCellHighlightById","removeTreeGridAddedRowHighlightColumn","highlightTreeGridCellById","appendTreeGridAddedRowHighlightColumn","OwpTreeGrid","id","containerStyle","containerClassName","toolbarRowBackgroundColor","className","style","height","width","canUseTableRadius","tableBorderRadius","layoutUrl","layoutData","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","datePickerEditor","highlightEditableCells","highlightChangedCells","syncDeletedRowCanEdit","confirmDeletedRowRemoval","loading","showLoading","t","useOwpTranslation","confirmDelete","useConfirm","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","layoutHasExplicitEnterModeRef","hasTreeGridExplicitEnterMode","handleBeforeRowUndelete","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","syncDeletedRowCanEditRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","treeGridTheme","useMemo","resolveOwpGridTheme","editableCellBackgroundColorValueRef","resolveTreeGridColorNumber","TREEGRID_INPUT_CELL_COLOR","changedCellBackgroundColorRef","TREEGRID_CELL_HIGHLIGHT_COLOR","changedCellBaselineRef","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","hasTreeGridDisplayDataRows","handleDatePickerEditorValueChange","valueChangedHandler","datePickerEditorElement","handleDatePickerEditorButtonClick","handleDatePickerEditorCellClick","handleDatePickerEditorKeyDown","handleDatePickerEditorStartEdit","useOwpTreeGridDatePickerEditor","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","resolvedContainerStyle","createTreeGridThemeContainerStyle","jsxs","TREE_GRID_THEME_WRAPPER_CLASS","TREE_GRID_THEME_TABLE_RADIUS_CLASS","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
1
+ {"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { resolveOwpGridTheme } from '@/constants/gridTheme';\nimport {\n resolveTreeGridColorNumber,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport { useConfirm } from '@/hooks/useConfirm';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport {\n appendTreeGridAddedRowHighlightColumn,\n clearTreeGridCellHighlightById,\n getTreeGridAddedRowBaselineValue,\n getTreeGridCellComparableValue,\n highlightTreeGridCellById,\n isTreeGridRowAddedById,\n removeTreeGridAddedRowHighlightColumn,\n} from '@/utils/treeGridUtil';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./internal/utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './internal/utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport { useOwpTreeGridDatePickerEditor } from './internal/hooks/useOwpTreeGridDatePickerEditor';\nimport { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridExplicitEnterMode,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\nimport {\n createTreeGridThemeContainerStyle,\n TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n TREE_GRID_THEME_WRAPPER_CLASS,\n treeGridThemeStyles,\n type TreeGridThemeContainerStyle,\n} from './internal/treeGridTheme';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridCellBaselineMap = WeakMap<TRow, Map<string, string>>;\n\nconst isVisibleTreeGridRow = (row: TRow | null | undefined) => {\n const visible = (row as { Visible?: unknown } | null)?.Visible;\n\n return !!row && visible !== 0 && visible !== false && visible !== '0';\n};\n\nconst isAddedTreeGridRow = (row: TRow | null | undefined) => {\n const added = (row as { Added?: unknown } | null)?.Added;\n\n return !!row && added !== 0 && added !== false && added !== '0' && added !== undefined;\n};\n\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot' || !isVisibleTreeGridRow(row)) {\n return false;\n }\n\n return row.Kind === 'Data' || isAddedTreeGridRow(row);\n};\n\nconst getTreeGridRows = (grid: TGrid) => {\n if (typeof grid.GetFirst === 'function' && typeof grid.GetNext === 'function') {\n const rows: TRow[] = [];\n let row = grid.GetFirst();\n\n while (row) {\n rows.push(row);\n row = grid.GetNext(row);\n }\n\n return rows;\n }\n\n return Object.values(grid.Rows ?? {});\n};\n\nconst captureTreeGridChangeBaselines = (\n grid: TGrid | null | undefined,\n baselineMap: TreeGridCellBaselineMap,\n) => {\n if (!grid) {\n return;\n }\n\n const cols = Object.keys(grid.Cols ?? {}).filter(Boolean);\n\n getTreeGridRows(grid).forEach((row) => {\n if (!isDisplayTreeGridRow(row)) {\n return;\n }\n\n baselineMap.set(\n row,\n new Map(cols.map((col) => [col, getTreeGridCellComparableValue(grid, row, col)])),\n );\n });\n};\n\nconst isTreeGridChangedFlag = (value: unknown) =>\n value !== undefined &&\n value !== null &&\n value !== '' &&\n value !== 0 &&\n value !== false &&\n value !== '0';\n\nconst hasOtherTreeGridChangedCells = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n\n return Object.keys(grid.Cols ?? {}).some((column) => {\n return column !== col && isTreeGridChangedFlag(rowRecord[`${column}Changed`]);\n });\n};\n\nconst clearTreeGridCellChangedState = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n\n rowRecord[`${col}Changed`] = 0;\n\n if (!isTreeGridRowAddedById(row) && !hasOtherTreeGridChangedCells(grid, row, col)) {\n rowRecord.Changed = 0;\n }\n};\n\nconst resolveTreeGridCellBaselineValue = (\n baselineMap: TreeGridCellBaselineMap,\n row: TRow,\n col: string,\n) => {\n const baselineValues = baselineMap.get(row);\n\n if (baselineValues?.has(col)) {\n return baselineValues.get(col);\n }\n\n if (isTreeGridRowAddedById(row)) {\n return getTreeGridAddedRowBaselineValue(row, col) ?? '';\n }\n\n return undefined;\n};\n\nconst syncTreeGridChangedCellHighlightById = ({\n gridId,\n grid,\n row,\n col,\n backgroundColor,\n baselineMap,\n}: {\n gridId: string;\n grid: TGrid;\n row: TRow;\n col: string;\n backgroundColor: string;\n baselineMap: TreeGridCellBaselineMap;\n}) => {\n if (!isDisplayTreeGridRow(row)) {\n return;\n }\n\n const baselineValue = resolveTreeGridCellBaselineValue(baselineMap, row, col);\n const currentValue = getTreeGridCellComparableValue(grid, row, col);\n\n if (baselineValue !== undefined && currentValue === baselineValue) {\n clearTreeGridCellHighlightById(gridId, { row, col });\n clearTreeGridCellChangedState(grid, row, col);\n\n if (isTreeGridRowAddedById(row)) {\n removeTreeGridAddedRowHighlightColumn(row, col);\n }\n\n return;\n }\n\n highlightTreeGridCellById(gridId, {\n row,\n col,\n backgroundColor,\n });\n\n if (isTreeGridRowAddedById(row)) {\n appendTreeGridAddedRowHighlightColumn(row, col);\n }\n};\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\n\nexport interface OwpTreeGridDatePickerEditorColumnOption {\n baseYear?: string;\n baseYearMonth?: string;\n}\n\nexport interface OwpTreeGridDatePickerEditorConfig {\n enabled?: boolean;\n columns?: readonly string[];\n allowInput?: boolean;\n columnOptions?: Record<string, OwpTreeGridDatePickerEditorColumnOption>;\n showTimeInput?: boolean;\n showTimeSelect?: boolean;\n timeIntervals?: number;\n}\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n toolbarRowBackgroundColor?: CSSProperties['backgroundColor'];\n layoutUrl?: string;\n layoutData?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n canUseTableRadius?: boolean;\n tableBorderRadius?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n datePickerEditor?: OwpTreeGridDatePickerEditorConfig;\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n syncDeletedRowCanEdit?: boolean;\n confirmDeletedRowRemoval?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param toolbarRowBackgroundColor 하단 Toolbar row 배경색\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n * @param canUseTableRadius TreeGrid 내부 테이블 radius 사용 여부\n * @param tableBorderRadius TreeGrid 내부 테이블 radius 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n toolbarRowBackgroundColor,\n className,\n style,\n height = '100%',\n width = '100%',\n canUseTableRadius = false,\n tableBorderRadius = '0.5rem',\n layoutUrl,\n layoutData,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n datePickerEditor,\n highlightEditableCells = true,\n highlightChangedCells = true,\n syncDeletedRowCanEdit = true,\n confirmDeletedRowRemoval = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const { confirmDelete } = useConfirm();\n const currentSettings = useGetCurrentSettings();\n const currentGridThemeConfig = currentSettings?.theme?.main?.grid;\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const layoutHasExplicitEnterModeRef = useRef(hasTreeGridExplicitEnterMode(layoutData));\n const handleBeforeRowUndelete = confirmDeletedRowRemoval\n ? async () => {\n const confirmed = await confirmDelete({\n title: t('Message.삭제된 항목을 완전히 삭제하시겠습니까?'),\n description: t('Message.취소하면 삭제 상태가 해제됩니다.'),\n okText: t('Button.완전 삭제'),\n });\n\n return confirmed ? 'remove' : 'undelete';\n }\n : undefined;\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const syncDeletedRowCanEditRef = useRef(syncDeletedRowCanEdit);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentGridThemeConfig),\n [currentGridThemeConfig],\n );\n const editableCellBackgroundColorValueRef = useRef(\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR),\n );\n const changedCellBackgroundColorRef = useRef(\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR,\n );\n const changedCellBaselineRef = useRef<TreeGridCellBaselineMap>(new WeakMap());\n const selectedCellBackgroundColorRef = useRef(treeGridTheme.state.selectedCellBackgroundColor);\n const hoverCellBackgroundColorRef = useRef(treeGridTheme.state.hoverCellBackgroundColor);\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n const handleDatePickerEditorValueChange = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: unknown,\n ) => {\n if (highlightChangedCellsRef.current && row.Fixed !== 'Foot') {\n syncTreeGridChangedCellHighlightById({\n gridId: id,\n grid,\n row,\n col,\n backgroundColor: changedCellBackgroundColorRef.current,\n baselineMap: changedCellBaselineRef.current,\n });\n }\n\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row, col, value);\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n layoutHasExplicitEnterModeRef.current = hasTreeGridExplicitEnterMode(layoutData);\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n syncDeletedRowCanEditRef.current = syncDeletedRowCanEdit;\n editableCellBackgroundColorValueRef.current =\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR);\n changedCellBackgroundColorRef.current =\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR;\n selectedCellBackgroundColorRef.current = treeGridTheme.state.selectedCellBackgroundColor;\n hoverCellBackgroundColorRef.current = treeGridTheme.state.hoverCellBackgroundColor;\n const {\n datePickerEditorElement,\n handleDatePickerEditorButtonClick,\n handleDatePickerEditorCellClick,\n handleDatePickerEditorKeyDown,\n handleDatePickerEditorStartEdit,\n } =\n useOwpTreeGridDatePickerEditor({\n config: datePickerEditor,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange: handleDatePickerEditorValueChange,\n });\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n onInternalButtonClick: handleDatePickerEditorButtonClick,\n onInternalCellClick: handleDatePickerEditorCellClick,\n onInternalKeyDown: handleDatePickerEditorKeyDown,\n onInternalStartEdit: handleDatePickerEditorStartEdit,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n layoutHasExplicitEnterModeRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n syncDeletedRowCanEditRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\n changedCellBaselineRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n layoutData,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n changedCellBaselineRef.current = new WeakMap();\n captureTreeGridChangeBaselines(treeGrid, changedCellBaselineRef.current);\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n\n }, [isTreeGridReady, layoutOverrides, data, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: TreeGridThemeContainerStyle = createTreeGridThemeContainerStyle({\n width,\n height,\n treeGridTheme,\n gridThemeConfig: currentGridThemeConfig,\n containerStyle,\n tableBorderRadius: canUseTableRadius ? tableBorderRadius : undefined,\n });\n\n if (toolbarRowBackgroundColor !== undefined) {\n resolvedContainerStyle['--owp-tree-grid-toolbar-row-background-color'] =\n String(toolbarRowBackgroundColor);\n }\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div\n ref={treeGridContainerRef}\n className={[\n TREE_GRID_THEME_WRAPPER_CLASS,\n canUseTableRadius && TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n containerClassName,\n ]\n .filter(Boolean)\n .join(' ')}\n style={resolvedContainerStyle}\n >\n <GlobalStyles styles={treeGridThemeStyles} />\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n {datePickerEditorElement}\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["isVisibleTreeGridRow","__name","row","visible","isAddedTreeGridRow","added","isDisplayTreeGridRow","getTreeGridRows","grid","rows","captureTreeGridChangeBaselines","baselineMap","cols","col","getTreeGridCellComparableValue","isTreeGridChangedFlag","value","hasOtherTreeGridChangedCells","rowRecord","column","clearTreeGridCellChangedState","isTreeGridRowAddedById","resolveTreeGridCellBaselineValue","baselineValues","getTreeGridAddedRowBaselineValue","syncTreeGridChangedCellHighlightById","gridId","backgroundColor","baselineValue","currentValue","clearTreeGridCellHighlightById","removeTreeGridAddedRowHighlightColumn","highlightTreeGridCellById","appendTreeGridAddedRowHighlightColumn","OwpTreeGrid","id","containerStyle","containerClassName","toolbarRowBackgroundColor","className","style","height","width","canUseTableRadius","tableBorderRadius","layoutUrl","layoutData","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","datePickerEditor","highlightEditableCells","highlightChangedCells","syncDeletedRowCanEdit","confirmDeletedRowRemoval","loading","showLoading","t","useOwpTranslation","confirmDelete","useConfirm","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","layoutHasExplicitEnterModeRef","hasTreeGridExplicitEnterMode","handleBeforeRowUndelete","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","syncDeletedRowCanEditRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","treeGridTheme","useMemo","resolveOwpGridTheme","editableCellBackgroundColorValueRef","resolveTreeGridColorNumber","TREEGRID_INPUT_CELL_COLOR","changedCellBackgroundColorRef","TREEGRID_CELL_HIGHLIGHT_COLOR","changedCellBaselineRef","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","hasTreeGridDisplayDataRows","handleDatePickerEditorValueChange","valueChangedHandler","datePickerEditorElement","handleDatePickerEditorButtonClick","handleDatePickerEditorCellClick","handleDatePickerEditorKeyDown","handleDatePickerEditorStartEdit","useOwpTreeGridDatePickerEditor","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","resolvedContainerStyle","createTreeGridThemeContainerStyle","jsxs","TREE_GRID_THEME_WRAPPER_CLASS","TREE_GRID_THEME_TABLE_RADIUS_CLASS","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}