@owp/core 2.5.25 → 2.5.27

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 (74) hide show
  1. package/dist/_virtual/index10.js +2 -2
  2. package/dist/_virtual/index12.js +2 -2
  3. package/dist/_virtual/index13.js +2 -2
  4. package/dist/_virtual/index14.js +2 -2
  5. package/dist/_virtual/index16.js +4 -4
  6. package/dist/_virtual/index17.js +4 -4
  7. package/dist/_virtual/index18.js +4 -4
  8. package/dist/_virtual/index19.js +4 -4
  9. package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js +19 -19
  10. package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js.map +1 -1
  11. package/dist/components/OwpPicker/OwpDatePicker.js +316 -291
  12. package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
  13. package/dist/components/OwpPicker/OwpDateRangePicker.js +175 -85
  14. package/dist/components/OwpPicker/OwpDateRangePicker.js.map +1 -1
  15. package/dist/components/OwpPicker/OwpTimePicker.js +305 -305
  16. package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
  17. package/dist/components/OwpPicker/internal/AnimatedCalendarContainer.js +21 -31
  18. package/dist/components/OwpPicker/internal/AnimatedCalendarContainer.js.map +1 -1
  19. package/dist/components/OwpPicker/internal/OwpDatePickerCalendarHeader.js +182 -0
  20. package/dist/components/OwpPicker/internal/OwpDatePickerCalendarHeader.js.map +1 -0
  21. package/dist/components/OwpPicker/internal/pickerEditorStyles.js +68 -0
  22. package/dist/components/OwpPicker/internal/pickerEditorStyles.js.map +1 -0
  23. package/dist/components/OwpPicker/internal/useOwpDatePickerCalendarHeaderState.js +50 -0
  24. package/dist/components/OwpPicker/internal/useOwpDatePickerCalendarHeaderState.js.map +1 -0
  25. package/dist/components/OwpPicker/internal/useOwpPickerPopperTransition.js +36 -0
  26. package/dist/components/OwpPicker/internal/useOwpPickerPopperTransition.js.map +1 -0
  27. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +125 -117
  28. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
  29. package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +84 -77
  30. package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -1
  31. package/dist/components/OwpSelectorBase/selectorBaseStyles.js +10 -0
  32. package/dist/components/OwpSelectorBase/selectorBaseStyles.js.map +1 -0
  33. package/dist/components/OwpStyleProvider/OwpStyleProvider.js +76 -72
  34. package/dist/components/OwpStyleProvider/OwpStyleProvider.js.map +1 -1
  35. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +415 -401
  36. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
  37. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +420 -267
  38. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
  39. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +289 -176
  40. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  41. package/dist/components/OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.js +10 -10
  42. package/dist/components/OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.js.map +1 -1
  43. package/dist/layout/components/logo/Logo.js +40 -53
  44. package/dist/layout/components/logo/Logo.js.map +1 -1
  45. package/dist/layout/components/navbar/style/NavbarStyle.js +47 -40
  46. package/dist/layout/components/navbar/style/NavbarStyle.js.map +1 -1
  47. package/dist/layout/components/navbar/style/NavbarStyleContent.js +67 -42
  48. package/dist/layout/components/navbar/style/NavbarStyleContent.js.map +1 -1
  49. package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
  50. package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropUp.js +9 -0
  51. package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropUp.js.map +1 -0
  52. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
  53. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
  54. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
  55. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
  56. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
  57. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
  58. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
  59. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
  60. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
  61. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
  62. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
  63. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
  64. package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
  65. package/dist/owp-app.css +1 -1
  66. package/dist/types/components/OwpPicker/OwpDatePicker.d.ts +1 -1
  67. package/dist/types/components/OwpPicker/OwpDateRangePicker.d.ts +2 -2
  68. package/dist/types/components/OwpPicker/internal/OwpDatePickerCalendarHeader.d.ts +28 -0
  69. package/dist/types/components/OwpPicker/internal/pickerEditorStyles.d.ts +9 -0
  70. package/dist/types/components/OwpPicker/internal/useOwpDatePickerCalendarHeaderState.d.ts +25 -0
  71. package/dist/types/components/OwpPicker/internal/useOwpPickerPopperTransition.d.ts +10 -0
  72. package/dist/types/components/OwpSelectorBase/selectorBaseStyles.d.ts +8 -0
  73. package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +4 -0
  74. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
- var a = {};
1
+ var r = {};
2
2
  export {
3
- a as __exports
3
+ r as __exports
4
4
  };
5
5
  //# sourceMappingURL=index10.js.map
@@ -1,5 +1,5 @@
1
- var r = {};
1
+ var a = {};
2
2
  export {
3
- r as __exports
3
+ a as __exports
4
4
  };
5
5
  //# sourceMappingURL=index12.js.map
@@ -1,5 +1,5 @@
1
- var e = {};
1
+ var r = {};
2
2
  export {
3
- e as __exports
3
+ r as __exports
4
4
  };
5
5
  //# sourceMappingURL=index13.js.map
@@ -1,5 +1,5 @@
1
- var r = {};
1
+ var e = {};
2
2
  export {
3
- r as __exports
3
+ e as __exports
4
4
  };
5
5
  //# sourceMappingURL=index14.js.map
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as t } from "../node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/match/index.js";
3
- var o = t();
4
- const m = /* @__PURE__ */ r(o);
2
+ import { __require as o } from "../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js";
3
+ var p = /* @__PURE__ */ o();
4
+ const s = /* @__PURE__ */ r(p);
5
5
  export {
6
- m as default
6
+ s as default
7
7
  };
8
8
  //# sourceMappingURL=index16.js.map
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as e } from "../node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/parse/index.js";
3
- var o = e();
4
- const s = /* @__PURE__ */ r(o);
2
+ import { __require as t } from "../node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/match/index.js";
3
+ var o = t();
4
+ const m = /* @__PURE__ */ r(o);
5
5
  export {
6
- s as default
6
+ m as default
7
7
  };
8
8
  //# sourceMappingURL=index17.js.map
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as t } from "../node_modules/.pnpm/react-autosuggest@10.1.0_react@19.2.4/node_modules/react-autosuggest/dist/index.js";
3
- var o = t();
4
- const i = /* @__PURE__ */ r(o);
2
+ import { __require as e } from "../node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/parse/index.js";
3
+ var o = e();
4
+ const s = /* @__PURE__ */ r(o);
5
5
  export {
6
- i as default
6
+ s as default
7
7
  };
8
8
  //# sourceMappingURL=index18.js.map
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as o } from "../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js";
3
- var p = /* @__PURE__ */ o();
4
- const s = /* @__PURE__ */ r(p);
2
+ import { __require as t } from "../node_modules/.pnpm/react-autosuggest@10.1.0_react@19.2.4/node_modules/react-autosuggest/dist/index.js";
3
+ var o = t();
4
+ const i = /* @__PURE__ */ r(o);
5
5
  export {
6
- s as default
6
+ i as default
7
7
  };
8
8
  //# sourceMappingURL=index19.js.map
@@ -18,7 +18,7 @@ const C = "sheet1", W = "sheet", M = 10, V = 50, J = 4, L = /* @__PURE__ */ i((t
18
18
  return U(o.toUpperCase());
19
19
  }, "getColumnIndexFromCellKey"), A = /* @__PURE__ */ i((t) => {
20
20
  const o = t.split(/\r?\n/).reduce((n, s) => {
21
- const r = Array.from(s).reduce((e, a) => e + ((a.codePointAt(0) ?? 0) <= 255 ? 1 : 2), 0);
21
+ const r = Array.from(s).reduce((e, c) => e + ((c.codePointAt(0) ?? 0) <= 255 ? 1 : 2), 0);
22
22
  return Math.max(n, r);
23
23
  }, 0);
24
24
  return Math.min(Math.max(o + J, M), V);
@@ -42,17 +42,17 @@ const C = "sheet1", W = "sheet", M = 10, V = 50, J = 4, L = /* @__PURE__ */ i((t
42
42
  });
43
43
  }
44
44
  }, "applyExcelHeaders"), G = /* @__PURE__ */ i((t, o, n) => {
45
- const s = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ i((e, a) => {
46
- s.set(e, Math.max(s.get(e) ?? M, a));
45
+ const s = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ i((e, c) => {
46
+ s.set(e, Math.max(s.get(e) ?? M, c));
47
47
  }, "updateWidth");
48
48
  for (let e = 0; e < n.length; e += 1)
49
49
  r(e + 1, M);
50
- for (const { key: e, range: a, value: c } of o) {
51
- if (a) {
52
- const [m, x] = a.split(":"), u = m ? E(m) : void 0, p = x ? E(x) : void 0;
50
+ for (const { key: e, range: c, value: a } of o) {
51
+ if (c) {
52
+ const [m, x] = c.split(":"), u = m ? E(m) : void 0, p = x ? E(x) : void 0;
53
53
  if (!u || !p || p < u)
54
54
  continue;
55
- const w = p - u + 1, d = Math.ceil(A(c) / w);
55
+ const w = p - u + 1, d = Math.ceil(A(a) / w);
56
56
  for (let l = u; l <= p; l += 1)
57
57
  r(l, d);
58
58
  continue;
@@ -60,21 +60,21 @@ const C = "sheet1", W = "sheet", M = 10, V = 50, J = 4, L = /* @__PURE__ */ i((t
60
60
  if (!e)
61
61
  continue;
62
62
  const f = E(e);
63
- f && r(f, A(c));
63
+ f && r(f, A(a));
64
64
  }
65
- s.forEach((e, a) => {
66
- t.getColumn(a).width = e;
65
+ s.forEach((e, c) => {
66
+ t.getColumn(c).width = e;
67
67
  });
68
68
  }, "applyExcelColumnWidths"), Z = /* @__PURE__ */ i((t, o, n) => {
69
69
  var r;
70
70
  const s = (((r = t.lastRow) == null ? void 0 : r.number) ?? 0) + 1;
71
71
  for (let e = 0; e < n.length; e += 1) {
72
- const a = n[e];
73
- for (let c = 0; c < o.length; c += 1) {
74
- const f = o[c];
72
+ const c = n[e];
73
+ for (let a = 0; a < o.length; a += 1) {
74
+ const f = o[a];
75
75
  B(t, {
76
- key: `${O(c + 1)}${s + e}`,
77
- value: j(a, f)
76
+ key: `${O(a + 1)}${s + e}`,
77
+ value: j(c, f)
78
78
  });
79
79
  }
80
80
  }
@@ -91,8 +91,8 @@ function ut({
91
91
  exportName: s,
92
92
  title: r,
93
93
  loading: e,
94
- loadingPosition: a,
95
- onClick: c,
94
+ loadingPosition: c,
95
+ onClick: a,
96
96
  ...f
97
97
  }) {
98
98
  const { t: m } = H(), [x, u] = P(!1), p = /* @__PURE__ */ i(async () => {
@@ -125,9 +125,9 @@ function ut({
125
125
  color: "success",
126
126
  ...f,
127
127
  loading: !!(e || x),
128
- loadingPosition: a ?? "start",
128
+ loadingPosition: c ?? "center",
129
129
  onClick: /* @__PURE__ */ i((d) => {
130
- c == null || c(d), !(d.defaultPrevented || e || x) && p();
130
+ a == null || a(d), !(d.defaultPrevented || e || x) && p();
131
131
  }, "handleClick"),
132
132
  children: r ?? m("Button.엑셀 다운로드")
133
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OwpExportExcelButton.js","sources":["../../../src/components/OwpExportExcelButton/OwpExportExcelButton.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport {\n exportExcelByBuffer,\n getIndexByLetters,\n getLettersByIndex,\n setCellValue,\n setMergeCells,\n} from '@/utils/excelUtil';\nimport { loadExcelJSBrowser } from '@/utils/internal/exceljsBrowser';\nimport { Button, type ButtonProps } from '@mui/material';\nimport { isArray, isEmpty, isNumber, isString } from 'es-toolkit/compat';\nimport type * as ExcelJS from 'exceljs';\nimport { enqueueSnackbar } from 'notistack';\nimport { type MouseEventHandler, useState } from 'react';\n\nexport type ExcelHeader = {\n key?: string;\n range?: string;\n value: string;\n};\n\nexport type ExcelDataMapper = {\n key: string;\n colSpan?: string;\n rowSpan?: string;\n prefix?: string;\n suffix?: string;\n};\n\ninterface OwpExportDataToExcelButtonProps<T> extends ButtonProps {\n header: ExcelHeader[];\n mapper: ExcelDataMapper[];\n data?: T;\n title?: string;\n exportName?: string;\n}\n\nconst DEFAULT_WORKSHEET_NAME = 'sheet1';\nconst DEFAULT_EXPORT_NAME = 'sheet';\nconst DEFAULT_COLUMN_WIDTH = 10;\nconst MAX_COLUMN_WIDTH = 50;\nconst COLUMN_WIDTH_PADDING = 4;\n\nconst getSafeExportName = (value?: string) => {\n const exportName = (value ?? DEFAULT_EXPORT_NAME).trim();\n\n return exportName.replace(/[\\\\/:*?\"<>|]/g, '_') || DEFAULT_EXPORT_NAME;\n};\n\nconst getSafeSheetName = (value?: string) =>\n getSafeExportName(value ?? DEFAULT_WORKSHEET_NAME).slice(0, 31) || DEFAULT_WORKSHEET_NAME;\n\nconst getColumnIndexFromCellKey = (key: string) => {\n const matchedColumn = key.match(/^([A-Z]+)\\d+$/i)?.[1];\n\n if (!matchedColumn) {\n return undefined;\n }\n\n return getIndexByLetters(matchedColumn.toUpperCase());\n};\n\nconst getExcelTextWidth = (value: string) => {\n const longestLineWidth = value\n .split(/\\r?\\n/)\n .reduce((maxWidth, line) => {\n const lineWidth = Array.from(line).reduce((width, character) => {\n return width + ((character.codePointAt(0) ?? 0) <= 0xff ? 1 : 2);\n }, 0);\n\n return Math.max(maxWidth, lineWidth);\n }, 0);\n\n return Math.min(Math.max(longestLineWidth + COLUMN_WIDTH_PADDING, DEFAULT_COLUMN_WIDTH), MAX_COLUMN_WIDTH);\n};\n\nconst getExportCellValue = (item: unknown, { key, prefix, suffix }: ExcelDataMapper) => {\n const row = item as Record<string, unknown> | undefined;\n const rawValue = row?.[key];\n\n if (!isNumber(rawValue) && !isString(rawValue)) {\n return '';\n }\n\n return `${prefix ?? ''}${rawValue}${suffix ?? ''}`;\n};\n\nconst applyExcelHeaders = (worksheet: ExcelJS.Worksheet, header: ExcelHeader[]) => {\n for (const { key, range, value } of header) {\n if (range) {\n setMergeCells(worksheet, {\n isHeader: true,\n range,\n value,\n });\n continue;\n }\n\n if (!key) {\n continue;\n }\n\n setCellValue(worksheet, {\n isHeader: true,\n key,\n value,\n });\n }\n};\n\nconst applyExcelColumnWidths = (\n worksheet: ExcelJS.Worksheet,\n header: ExcelHeader[],\n mapper: ExcelDataMapper[],\n) => {\n const widths = new Map<number, number>();\n const updateWidth = (columnIndex: number, nextWidth: number) => {\n widths.set(columnIndex, Math.max(widths.get(columnIndex) ?? DEFAULT_COLUMN_WIDTH, nextWidth));\n };\n\n for (let colIndex = 0; colIndex < mapper.length; colIndex += 1) {\n updateWidth(colIndex + 1, DEFAULT_COLUMN_WIDTH);\n }\n\n for (const { key, range, value } of header) {\n if (range) {\n const [startKey, endKey] = range.split(':');\n const startColumnIndex = startKey ? getColumnIndexFromCellKey(startKey) : undefined;\n const endColumnIndex = endKey ? getColumnIndexFromCellKey(endKey) : undefined;\n\n if (!startColumnIndex || !endColumnIndex || endColumnIndex < startColumnIndex) {\n continue;\n }\n\n const columnSpan = endColumnIndex - startColumnIndex + 1;\n const distributedWidth = Math.ceil(getExcelTextWidth(value) / columnSpan);\n\n for (let columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex += 1) {\n updateWidth(columnIndex, distributedWidth);\n }\n\n continue;\n }\n\n if (!key) {\n continue;\n }\n\n const columnIndex = getColumnIndexFromCellKey(key);\n\n if (!columnIndex) {\n continue;\n }\n\n updateWidth(columnIndex, getExcelTextWidth(value));\n }\n\n widths.forEach((width, columnIndex) => {\n worksheet.getColumn(columnIndex).width = width;\n });\n};\n\nconst appendExcelRows = (\n worksheet: ExcelJS.Worksheet,\n mapper: ExcelDataMapper[],\n rows: unknown[],\n) => {\n const startDataRowIndex = (worksheet.lastRow?.number ?? 0) + 1;\n\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {\n const row = rows[rowIndex];\n\n for (let colIndex = 0; colIndex < mapper.length; colIndex += 1) {\n const columnMapper = mapper[colIndex];\n\n setCellValue(worksheet, {\n key: `${getLettersByIndex(colIndex + 1)}${startDataRowIndex + rowIndex}`,\n value: getExportCellValue(row, columnMapper),\n });\n }\n }\n};\n\nconst resolveExportValidationMessage = (\n header: ExcelHeader[],\n mapper: ExcelDataMapper[],\n translate: (key: string) => string,\n) => {\n if (!isArray(header) || isEmpty(header)) {\n return translate('Message.헤더정보가 없습니다');\n }\n\n if (!isArray(mapper) || isEmpty(mapper)) {\n return translate('Message.맵핑정보가 없습니다');\n }\n\n return undefined;\n};\n\n/**\n * OwpExportDataToExcelButton 컴포넌트\n * @param header 헤더 정보\n * @param mapper 엑셀 매핑 정보\n * @param data 데이터\n * @param exportName 다운로드 파일명\n * @param title 제목\n */\nexport function OwpExportDataToExcelButton<T>({\n header,\n mapper,\n data,\n exportName,\n title,\n loading,\n loadingPosition,\n onClick,\n ...restProps\n}: OwpExportDataToExcelButtonProps<T>) {\n const { t } = useOwpTranslation();\n const [isLoading, setLoadingStatus] = useState(false);\n\n const handleExportExcel = async () => {\n if (isLoading) {\n return;\n }\n\n const validationMessage = resolveExportValidationMessage(header, mapper, t);\n\n if (validationMessage) {\n enqueueSnackbar(validationMessage, { variant: 'warning' });\n return;\n }\n\n setLoadingStatus(true);\n\n try {\n const ExcelJSBrowser = await loadExcelJSBrowser();\n const workbook = new ExcelJSBrowser.Workbook();\n const resolvedExportName = getSafeExportName(exportName);\n const worksheet = workbook.addWorksheet(getSafeSheetName(exportName));\n const rows = isArray(data) ? data : [];\n\n worksheet.properties.defaultRowHeight = 19;\n\n applyExcelHeaders(worksheet, header);\n appendExcelRows(worksheet, mapper, rows);\n applyExcelColumnWidths(worksheet, header, mapper);\n\n const buffer = await workbook.xlsx.writeBuffer();\n\n exportExcelByBuffer(buffer, resolvedExportName);\n } catch (error) {\n console.error(error);\n enqueueSnackbar(\n error instanceof Error && error.message\n ? error.message\n : t('Message.엑셀 저장 중 오류가 발생했습니다'),\n { variant: 'error' },\n );\n } finally {\n setLoadingStatus(false);\n }\n };\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n onClick?.(event);\n\n if (event.defaultPrevented || loading || isLoading) {\n return;\n }\n\n void handleExportExcel();\n };\n\n return (\n <Button\n variant=\"contained\"\n color=\"success\"\n {...restProps}\n loading={Boolean(loading || isLoading)}\n loadingPosition={loadingPosition ?? 'start'}\n onClick={handleClick}\n >\n {title ?? t('Button.엑셀 다운로드')}\n </Button>\n );\n}\n"],"names":["DEFAULT_WORKSHEET_NAME","DEFAULT_EXPORT_NAME","DEFAULT_COLUMN_WIDTH","MAX_COLUMN_WIDTH","COLUMN_WIDTH_PADDING","getSafeExportName","__name","value","getSafeSheetName","getColumnIndexFromCellKey","key","matchedColumn","_a","getIndexByLetters","getExcelTextWidth","longestLineWidth","maxWidth","line","lineWidth","width","character","getExportCellValue","item","prefix","suffix","row","rawValue","isNumber","isString","applyExcelHeaders","worksheet","header","range","setMergeCells","setCellValue","applyExcelColumnWidths","mapper","widths","updateWidth","columnIndex","nextWidth","colIndex","startKey","endKey","startColumnIndex","endColumnIndex","columnSpan","distributedWidth","appendExcelRows","rows","startDataRowIndex","rowIndex","columnMapper","getLettersByIndex","resolveExportValidationMessage","translate","isArray","isEmpty","OwpExportDataToExcelButton","data","exportName","title","loading","loadingPosition","onClick","restProps","t","useOwpTranslation","isLoading","setLoadingStatus","useState","handleExportExcel","validationMessage","enqueueSnackbar","ExcelJSBrowser","loadExcelJSBrowser","workbook","resolvedExportName","buffer","exportExcelByBuffer","error","jsx","Button","event"],"mappings":"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"}
1
+ {"version":3,"file":"OwpExportExcelButton.js","sources":["../../../src/components/OwpExportExcelButton/OwpExportExcelButton.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport {\n exportExcelByBuffer,\n getIndexByLetters,\n getLettersByIndex,\n setCellValue,\n setMergeCells,\n} from '@/utils/excelUtil';\nimport { loadExcelJSBrowser } from '@/utils/internal/exceljsBrowser';\nimport { Button, type ButtonProps } from '@mui/material';\nimport { isArray, isEmpty, isNumber, isString } from 'es-toolkit/compat';\nimport type * as ExcelJS from 'exceljs';\nimport { enqueueSnackbar } from 'notistack';\nimport { type MouseEventHandler, useState } from 'react';\n\nexport type ExcelHeader = {\n key?: string;\n range?: string;\n value: string;\n};\n\nexport type ExcelDataMapper = {\n key: string;\n colSpan?: string;\n rowSpan?: string;\n prefix?: string;\n suffix?: string;\n};\n\ninterface OwpExportDataToExcelButtonProps<T> extends ButtonProps {\n header: ExcelHeader[];\n mapper: ExcelDataMapper[];\n data?: T;\n title?: string;\n exportName?: string;\n}\n\nconst DEFAULT_WORKSHEET_NAME = 'sheet1';\nconst DEFAULT_EXPORT_NAME = 'sheet';\nconst DEFAULT_COLUMN_WIDTH = 10;\nconst MAX_COLUMN_WIDTH = 50;\nconst COLUMN_WIDTH_PADDING = 4;\n\nconst getSafeExportName = (value?: string) => {\n const exportName = (value ?? DEFAULT_EXPORT_NAME).trim();\n\n return exportName.replace(/[\\\\/:*?\"<>|]/g, '_') || DEFAULT_EXPORT_NAME;\n};\n\nconst getSafeSheetName = (value?: string) =>\n getSafeExportName(value ?? DEFAULT_WORKSHEET_NAME).slice(0, 31) || DEFAULT_WORKSHEET_NAME;\n\nconst getColumnIndexFromCellKey = (key: string) => {\n const matchedColumn = key.match(/^([A-Z]+)\\d+$/i)?.[1];\n\n if (!matchedColumn) {\n return undefined;\n }\n\n return getIndexByLetters(matchedColumn.toUpperCase());\n};\n\nconst getExcelTextWidth = (value: string) => {\n const longestLineWidth = value\n .split(/\\r?\\n/)\n .reduce((maxWidth, line) => {\n const lineWidth = Array.from(line).reduce((width, character) => {\n return width + ((character.codePointAt(0) ?? 0) <= 0xff ? 1 : 2);\n }, 0);\n\n return Math.max(maxWidth, lineWidth);\n }, 0);\n\n return Math.min(Math.max(longestLineWidth + COLUMN_WIDTH_PADDING, DEFAULT_COLUMN_WIDTH), MAX_COLUMN_WIDTH);\n};\n\nconst getExportCellValue = (item: unknown, { key, prefix, suffix }: ExcelDataMapper) => {\n const row = item as Record<string, unknown> | undefined;\n const rawValue = row?.[key];\n\n if (!isNumber(rawValue) && !isString(rawValue)) {\n return '';\n }\n\n return `${prefix ?? ''}${rawValue}${suffix ?? ''}`;\n};\n\nconst applyExcelHeaders = (worksheet: ExcelJS.Worksheet, header: ExcelHeader[]) => {\n for (const { key, range, value } of header) {\n if (range) {\n setMergeCells(worksheet, {\n isHeader: true,\n range,\n value,\n });\n continue;\n }\n\n if (!key) {\n continue;\n }\n\n setCellValue(worksheet, {\n isHeader: true,\n key,\n value,\n });\n }\n};\n\nconst applyExcelColumnWidths = (\n worksheet: ExcelJS.Worksheet,\n header: ExcelHeader[],\n mapper: ExcelDataMapper[],\n) => {\n const widths = new Map<number, number>();\n const updateWidth = (columnIndex: number, nextWidth: number) => {\n widths.set(columnIndex, Math.max(widths.get(columnIndex) ?? DEFAULT_COLUMN_WIDTH, nextWidth));\n };\n\n for (let colIndex = 0; colIndex < mapper.length; colIndex += 1) {\n updateWidth(colIndex + 1, DEFAULT_COLUMN_WIDTH);\n }\n\n for (const { key, range, value } of header) {\n if (range) {\n const [startKey, endKey] = range.split(':');\n const startColumnIndex = startKey ? getColumnIndexFromCellKey(startKey) : undefined;\n const endColumnIndex = endKey ? getColumnIndexFromCellKey(endKey) : undefined;\n\n if (!startColumnIndex || !endColumnIndex || endColumnIndex < startColumnIndex) {\n continue;\n }\n\n const columnSpan = endColumnIndex - startColumnIndex + 1;\n const distributedWidth = Math.ceil(getExcelTextWidth(value) / columnSpan);\n\n for (let columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex += 1) {\n updateWidth(columnIndex, distributedWidth);\n }\n\n continue;\n }\n\n if (!key) {\n continue;\n }\n\n const columnIndex = getColumnIndexFromCellKey(key);\n\n if (!columnIndex) {\n continue;\n }\n\n updateWidth(columnIndex, getExcelTextWidth(value));\n }\n\n widths.forEach((width, columnIndex) => {\n worksheet.getColumn(columnIndex).width = width;\n });\n};\n\nconst appendExcelRows = (\n worksheet: ExcelJS.Worksheet,\n mapper: ExcelDataMapper[],\n rows: unknown[],\n) => {\n const startDataRowIndex = (worksheet.lastRow?.number ?? 0) + 1;\n\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {\n const row = rows[rowIndex];\n\n for (let colIndex = 0; colIndex < mapper.length; colIndex += 1) {\n const columnMapper = mapper[colIndex];\n\n setCellValue(worksheet, {\n key: `${getLettersByIndex(colIndex + 1)}${startDataRowIndex + rowIndex}`,\n value: getExportCellValue(row, columnMapper),\n });\n }\n }\n};\n\nconst resolveExportValidationMessage = (\n header: ExcelHeader[],\n mapper: ExcelDataMapper[],\n translate: (key: string) => string,\n) => {\n if (!isArray(header) || isEmpty(header)) {\n return translate('Message.헤더정보가 없습니다');\n }\n\n if (!isArray(mapper) || isEmpty(mapper)) {\n return translate('Message.맵핑정보가 없습니다');\n }\n\n return undefined;\n};\n\n/**\n * OwpExportDataToExcelButton 컴포넌트\n * @param header 헤더 정보\n * @param mapper 엑셀 매핑 정보\n * @param data 데이터\n * @param exportName 다운로드 파일명\n * @param title 제목\n */\nexport function OwpExportDataToExcelButton<T>({\n header,\n mapper,\n data,\n exportName,\n title,\n loading,\n loadingPosition,\n onClick,\n ...restProps\n}: OwpExportDataToExcelButtonProps<T>) {\n const { t } = useOwpTranslation();\n const [isLoading, setLoadingStatus] = useState(false);\n\n const handleExportExcel = async () => {\n if (isLoading) {\n return;\n }\n\n const validationMessage = resolveExportValidationMessage(header, mapper, t);\n\n if (validationMessage) {\n enqueueSnackbar(validationMessage, { variant: 'warning' });\n return;\n }\n\n setLoadingStatus(true);\n\n try {\n const ExcelJSBrowser = await loadExcelJSBrowser();\n const workbook = new ExcelJSBrowser.Workbook();\n const resolvedExportName = getSafeExportName(exportName);\n const worksheet = workbook.addWorksheet(getSafeSheetName(exportName));\n const rows = isArray(data) ? data : [];\n\n worksheet.properties.defaultRowHeight = 19;\n\n applyExcelHeaders(worksheet, header);\n appendExcelRows(worksheet, mapper, rows);\n applyExcelColumnWidths(worksheet, header, mapper);\n\n const buffer = await workbook.xlsx.writeBuffer();\n\n exportExcelByBuffer(buffer, resolvedExportName);\n } catch (error) {\n console.error(error);\n enqueueSnackbar(\n error instanceof Error && error.message\n ? error.message\n : t('Message.엑셀 저장 중 오류가 발생했습니다'),\n { variant: 'error' },\n );\n } finally {\n setLoadingStatus(false);\n }\n };\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n onClick?.(event);\n\n if (event.defaultPrevented || loading || isLoading) {\n return;\n }\n\n void handleExportExcel();\n };\n\n return (\n <Button\n variant=\"contained\"\n color=\"success\"\n {...restProps}\n loading={Boolean(loading || isLoading)}\n loadingPosition={loadingPosition ?? 'center'}\n onClick={handleClick}\n >\n {title ?? t('Button.엑셀 다운로드')}\n </Button>\n );\n}\n"],"names":["DEFAULT_WORKSHEET_NAME","DEFAULT_EXPORT_NAME","DEFAULT_COLUMN_WIDTH","MAX_COLUMN_WIDTH","COLUMN_WIDTH_PADDING","getSafeExportName","__name","value","getSafeSheetName","getColumnIndexFromCellKey","key","matchedColumn","_a","getIndexByLetters","getExcelTextWidth","longestLineWidth","maxWidth","line","lineWidth","width","character","getExportCellValue","item","prefix","suffix","row","rawValue","isNumber","isString","applyExcelHeaders","worksheet","header","range","setMergeCells","setCellValue","applyExcelColumnWidths","mapper","widths","updateWidth","columnIndex","nextWidth","colIndex","startKey","endKey","startColumnIndex","endColumnIndex","columnSpan","distributedWidth","appendExcelRows","rows","startDataRowIndex","rowIndex","columnMapper","getLettersByIndex","resolveExportValidationMessage","translate","isArray","isEmpty","OwpExportDataToExcelButton","data","exportName","title","loading","loadingPosition","onClick","restProps","t","useOwpTranslation","isLoading","setLoadingStatus","useState","handleExportExcel","validationMessage","enqueueSnackbar","ExcelJSBrowser","loadExcelJSBrowser","workbook","resolvedExportName","buffer","exportExcelByBuffer","error","jsx","Button","event"],"mappings":"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"}