@owp/core 2.5.9 → 2.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index10.js +2 -2
- package/dist/_virtual/index12.js +2 -2
- package/dist/_virtual/index13.js +2 -2
- package/dist/_virtual/index14.js +2 -2
- package/dist/_virtual/index15.js +2 -2
- package/dist/_virtual/index20.js +2 -2
- package/dist/_virtual/index21.js +2 -2
- package/dist/_virtual/index22.js +2 -2
- package/dist/_virtual/index5.js +2 -2
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +195 -147
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/features/themePreview/components/ThemePreviewColorField.js +10 -11
- package/dist/features/themePreview/components/ThemePreviewColorField.js.map +1 -1
- package/dist/features/themePreview/components/ThemePreviewControls.js +232 -198
- package/dist/features/themePreview/components/ThemePreviewControls.js.map +1 -1
- package/dist/features/themePreview/hooks/useThemePreview.js +214 -199
- package/dist/features/themePreview/hooks/useThemePreview.js.map +1 -1
- package/dist/features/themePreview/utils/themePreviewSettings.js +188 -151
- package/dist/features/themePreview/utils/themePreviewSettings.js.map +1 -1
- package/dist/features/themePreview.js +18 -17
- package/dist/node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/match/index.js +1 -1
- package/dist/node_modules/.pnpm/autosuggest-highlight@3.3.4/node_modules/autosuggest-highlight/parse/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
- package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/features/themePreview/utils/index.d.ts +1 -1
- package/dist/types/features/themePreview/utils/themePreviewSettings.d.ts +11 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeGridRuntime.js","sources":["../../../../src/components/OwpTreeGrid/internal/treeGridRuntime.ts"],"sourcesContent":["import { getTreeGridTextResourceUrl } from '@/constants/treeGrid';\nimport { highlightTreeGridCellById } from '@/utils/treeGridUtil';\nimport { debounce, get, isEmpty } from 'es-toolkit/compat';\nimport { enqueueSnackbar } from 'notistack';\nimport {\n type Dispatch,\n type RefObject,\n type SetStateAction,\n} from 'react';\nimport type {\n OwpTreeGridBodyData,\n OwpTreeGridColumnEditRule,\n OwpTreeGridLayoutConfig,\n OwpTreeGridProps,\n OwpTreeGridRowModel,\n OwpTreeGridSelectedRows,\n} from '../OwpTreeGrid';\nimport { applyTreeGridLayoutToGrid } from './treeGridLayout';\nimport {\n resetTreeGridColumnEditRulesState,\n resolveTreeGridColumnEditValue,\n syncTreeGridColumnEditRules,\n type TreeGridColumnEditRuleLookup,\n type TreeGridColumnEditRulesState,\n} from './treeGridColumnEditRules';\nimport { measureTreeGridPerf } from './utils/perf';\n\nexport const TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS = 300;\n\nconst TREE_GRID_SELECTED_CELL_RGB = [255, 255, 166] as const;\nconst TREE_GRID_READONLY_HOVER_CELL_RGB = [240, 240, 240] as const;\nconst TREE_GRID_READONLY_NO_FOCUS_HOVER_CELL_RGB = [248, 248, 248] as const;\nconst TREE_GRID_PREVIEW_CELL_RGB = [255, 255, 255] as const;\nconst TREE_GRID_PREVIEW_CELL_SOFT_RGB = [255, 255, 254] as const;\nconst TREE_GRID_PREVIEW_CELL_DIM_RGB = [242, 242, 242] as const;\n\ntype TreeGridInitializationInput<T> = {\n id: string;\n layoutUrl?: string;\n layoutData?: string;\n dataUrl?: string;\n bodyData: OwpTreeGridBodyData<T>;\n useDataUrl?: boolean;\n width?: string | number;\n height?: string | number;\n languageId: string;\n};\n\nexport type TreeGridEventHandlers<T> = Pick<\n OwpTreeGridProps<T>,\n | 'onSelect'\n | 'onRowClick'\n | 'onRowAdd'\n | 'onRowDelete'\n | 'onRowUndelete'\n | 'onRowChange'\n | 'onClickButton'\n | 'onSave'\n | 'onReady'\n | 'onAfterValueChanged'\n>;\n\nexport type TreeGridEventBindingOptions<T> = Pick<OwpTreeGridProps<T>, 'id'> & {\n latestEventHandlersRef: RefObject<TreeGridEventHandlers<T>>;\n highlightEditableCellsRef: RefObject<boolean>;\n highlightChangedCellsRef: RefObject<boolean>;\n editableCellBackgroundColorValueRef: RefObject<number | undefined>;\n changedCellBackgroundColorRef: RefObject<string>;\n selectedCellBackgroundColorRef: RefObject<string>;\n hoverCellBackgroundColorRef: RefObject<string>;\n treeGridInstanceRef: RefObject<TGrid>;\n treeGridInitStartedAtRef: RefObject<number | null>;\n latestLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;\n appliedLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;\n appliedBodyDataPropRef: RefObject<OwpTreeGridBodyData<T>>;\n latestColumnEditRulesRef: RefObject<readonly OwpTreeGridColumnEditRule[] | undefined>;\n latestColumnEditRuleLookupRef: RefObject<TreeGridColumnEditRuleLookup | undefined>;\n appliedColumnEditRulesRef: RefObject<readonly OwpTreeGridColumnEditRule[] | undefined>;\n columnEditRulesStateRef: RefObject<TreeGridColumnEditRulesState>;\n hasAppliedInitialLayoutRef: RefObject<boolean>;\n syncHasDisplayDataRows: (grid: TGrid | null) => void;\n setIsTreeGridReady: Dispatch<SetStateAction<boolean>>;\n};\n\nconst isTreeGridInlineUrl = (url?: string) => {\n return url?.startsWith('data:') || url?.startsWith('blob:');\n};\n\nconst treeGridInlineBlobUrlCache = new Map<string, string>();\n\nconst resolveTreeGridInlineUrl = (url?: string) => {\n if (!url || !url.startsWith('data:')) {\n return url;\n }\n\n const cachedUrl = treeGridInlineBlobUrlCache.get(url);\n\n if (cachedUrl) {\n return cachedUrl;\n }\n\n try {\n const [meta, encodedData = ''] = url.split(',', 2);\n const match = /^data:([^;]*)(;base64)?$/i.exec(meta);\n const mimeType = match?.[1] || 'application/octet-stream';\n const decodedData = match?.[2] ? atob(encodedData) : decodeURIComponent(encodedData);\n const bytes = new Uint8Array(decodedData.length);\n\n for (let index = 0; index < decodedData.length; index += 1) {\n bytes[index] = decodedData.charCodeAt(index);\n }\n\n const blobUrl = URL.createObjectURL(new Blob([bytes], { type: mimeType }));\n\n treeGridInlineBlobUrlCache.set(url, blobUrl);\n\n return blobUrl;\n } catch {\n return url;\n }\n};\n\nconst appendNoCacheQuery = (url: string) => {\n if (!url || isTreeGridInlineUrl(url)) {\n return resolveTreeGridInlineUrl(url);\n }\n\n const hashIndex = url.indexOf('#');\n const [baseUrl, hashFragment] =\n hashIndex >= 0 ? [url.slice(0, hashIndex), url.slice(hashIndex)] : [url, ''];\n const querySeparator = baseUrl.includes('?') ? '&' : '?';\n\n return `${baseUrl}${querySeparator}noCache=${Date.now()}${hashFragment}`;\n};\n\nconst resolveTreeGridDataUrl = (dataUrl?: string) => {\n if (!dataUrl) {\n return '';\n }\n\n if (isTreeGridInlineUrl(dataUrl) || dataUrl.includes('assets')) {\n return appendNoCacheQuery(dataUrl);\n }\n\n // @ts-expect-error - API base URL env is provided by host app\n return appendNoCacheQuery(`${import.meta.env.VITE_API_BASE_URL}/${dataUrl}`);\n};\n\nconst buildTreeGridDataSource = <T,>(\n useDataUrl: boolean | undefined,\n dataUrl: string | undefined,\n bodyData: OwpTreeGridBodyData<T>,\n) => {\n if (useDataUrl) {\n return { Url: resolveTreeGridDataUrl(dataUrl) };\n }\n\n return { Data: { Body: [isEmpty(bodyData) ? [] : bodyData] } };\n};\n\n/**\n * TreeGrid 초기화 옵션 생성\n * @param input 초기화 입력값\n */\nexport const buildTreeGridInitializationOptions = <T,>({\n id,\n layoutUrl,\n layoutData,\n dataUrl,\n bodyData,\n useDataUrl,\n width,\n height,\n languageId,\n}: TreeGridInitializationInput<T>) => {\n return {\n id,\n Layout: layoutData ? { Data: layoutData } : { Url: appendNoCacheQuery(layoutUrl ?? '') },\n Data: buildTreeGridDataSource(useDataUrl, dataUrl, bodyData),\n Text: {\n Url: getTreeGridTextResourceUrl(languageId),\n },\n width,\n height,\n Debug: 'Error',\n };\n};\n\nconst getTreeGridBodyData = (grid: TGrid | null) => {\n return get(grid, 'Data.Data.Data.Body.0');\n};\n\n/**\n * TreeGrid Body 데이터 건수\n * @param bodyData TreeGrid Body 데이터\n */\nexport const getTreeGridBodyDataCount = <T,>(bodyData: OwpTreeGridBodyData<T>) => {\n return Array.isArray(bodyData) ? bodyData.length : 0;\n};\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\n/**\n * TreeGrid 추가 행 여부\n * @param row TreeGrid 행\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\n/**\n * TreeGrid 본문 표시 행 여부\n * @param row TreeGrid 행\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\n/**\n * TreeGrid 셀 편집 가능 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst isEditableTreeGridCell = (grid: TGrid, row: TRow | null | undefined, col: string) => {\n if (!row || !col || !isDisplayTreeGridRow(row)) {\n return false;\n }\n\n return grid.CanEdit(row, col) === 1;\n};\n\n/**\n * TreeGrid 셀 명시 색상 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst hasExplicitTreeGridCellColor = (grid: TGrid, row: TRow, col: string) => {\n const color = grid.GetAttribute(row, col, 'Color');\n\n return color !== undefined && color !== null && color !== '';\n};\n\n/**\n * TreeGrid 입력 셀 기본 배경색 계산\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst getEditableTreeGridCellDefaultColor = (\n grid: TGrid,\n row: TRow | null | undefined,\n col: string,\n editableCellBackgroundColorValue: number | undefined,\n) => {\n if (\n !row ||\n editableCellBackgroundColorValue === undefined ||\n !isEditableTreeGridCell(grid, row, col) ||\n hasExplicitTreeGridCellColor(grid, row, col)\n ) {\n return undefined;\n }\n\n return editableCellBackgroundColorValue;\n};\n\nconst matchesTreeGridRgbColor = (\n r: number,\n g: number,\n b: number,\n expected: readonly [number, number, number],\n) => {\n return r === expected[0] && g === expected[1] && b === expected[2];\n};\n\nconst isTreeGridSelectedCellState = (grid: TGrid, row: TRow | null | undefined, col: string) => {\n if (!row || !col || !isDisplayTreeGridRow(row)) {\n return false;\n }\n\n const selected = grid.IsSelected(row, col);\n\n return selected !== 0 && selected !== false && selected !== undefined && selected !== null;\n};\n\nconst isTreeGridReadonlyHoveredCellState = (\n grid: TGrid,\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col || !isDisplayTreeGridRow(row) || grid.ARow !== row || grid.ACol !== col) {\n return false;\n }\n\n return grid.CanEdit(row, col) === 0;\n};\n\nconst isTreeGridPreviewHoveredCellState = (\n grid: TGrid,\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col || !isDisplayTreeGridRow(row) || grid.ARow !== row || grid.ACol !== col) {\n return false;\n }\n\n return grid.CanEdit(row, col) === 2;\n};\n\nconst resolveTreeGridStateBackgroundColor = ({\n grid,\n row,\n col,\n r,\n g,\n b,\n selectedCellBackgroundColor,\n hoverCellBackgroundColor,\n}: {\n grid: TGrid;\n row: TRow | null | undefined;\n col: string;\n r: number;\n g: number;\n b: number;\n selectedCellBackgroundColor: string;\n hoverCellBackgroundColor: string;\n}) => {\n if (\n isTreeGridSelectedCellState(grid, row, col) &&\n matchesTreeGridRgbColor(r, g, b, TREE_GRID_SELECTED_CELL_RGB)\n ) {\n return selectedCellBackgroundColor;\n }\n\n if (\n isTreeGridReadonlyHoveredCellState(grid, row, col) &&\n (matchesTreeGridRgbColor(r, g, b, TREE_GRID_READONLY_HOVER_CELL_RGB) ||\n matchesTreeGridRgbColor(r, g, b, TREE_GRID_READONLY_NO_FOCUS_HOVER_CELL_RGB))\n ) {\n return hoverCellBackgroundColor;\n }\n\n if (\n isTreeGridPreviewHoveredCellState(grid, row, col) &&\n (matchesTreeGridRgbColor(r, g, b, TREE_GRID_PREVIEW_CELL_RGB) ||\n matchesTreeGridRgbColor(r, g, b, TREE_GRID_PREVIEW_CELL_SOFT_RGB) ||\n matchesTreeGridRgbColor(r, g, b, TREE_GRID_PREVIEW_CELL_DIM_RGB))\n ) {\n return hoverCellBackgroundColor;\n }\n\n return undefined;\n};\n\n/**\n * TreeGrid 표시 데이터 행 존재 여부\n * @param grid TreeGrid 인스턴스\n */\nexport const hasTreeGridDisplayDataRows = (grid: TGrid | null) => {\n if (!grid) {\n return false;\n }\n\n if (typeof grid.GetFirst === 'function' && typeof grid.GetNext === 'function') {\n let row = grid.GetFirst();\n\n while (row) {\n if (isDisplayTreeGridRow(row)) {\n return true;\n }\n\n row = grid.GetNext(row);\n }\n\n return false;\n }\n\n return Object.values(grid.Rows ?? {}).some((row) => {\n return isDisplayTreeGridRow(row);\n });\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param grid TreeGrid 인스턴스\n * @param bodyData 새 Body 데이터\n * @param onReloadFinish 재로드 완료 콜백\n */\nexport const replaceTreeGridBodyData = <T,>(\n grid: TGrid,\n bodyData: OwpTreeGridBodyData<T>,\n onReloadFinish?: (code: number) => void,\n) => {\n // @ts-expect-error - TreeGrid Data.Data shape is not reflected in bundled types\n const currentDataConfig = grid.Data?.Data;\n\n // @ts-expect-error - TreeGrid Data.Data shape is not reflected in bundled types\n grid.Data.Data = {\n ...currentDataConfig,\n Data: { Body: [bodyData || []] },\n Url: '',\n };\n\n grid.ReloadBody(onReloadFinish);\n};\n\n/**\n * TreeGrid 이벤트 바인딩\n * @param options 이벤트 바인딩 옵션\n */\nexport const bindTreeGridEvents = <T,>({\n id,\n latestEventHandlersRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n latestColumnEditRulesRef,\n latestColumnEditRuleLookupRef,\n appliedColumnEditRulesRef,\n columnEditRulesStateRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n}: TreeGridEventBindingOptions<T>) => {\n const initialEventHandlers = latestEventHandlersRef.current;\n\n window.TGSetEvent('OnRowAdd', id, (grid, row) => {\n row.CanEdit = 1;\n row.CanDelete = 1;\n\n latestEventHandlersRef.current?.onRowAdd?.(grid, row as OwpTreeGridRowModel<T>);\n });\n window.TGSetEvent('OnRowAdded', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n\n if (typeof initialEventHandlers?.onRowClick === 'function') {\n window.TGSetEvent(\n 'OnClick',\n id,\n debounce((grid, row, col, x, y, event) => {\n latestEventHandlersRef.current?.onRowClick?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n col,\n x,\n y,\n event,\n );\n }, 300),\n );\n }\n\n if (typeof initialEventHandlers?.onClickButton === 'function') {\n window.TGSetEvent(\n 'OnClickButton',\n id,\n debounce((grid, row, col, event) => {\n latestEventHandlersRef.current?.onClickButton?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n col,\n event,\n );\n }, 300),\n );\n }\n\n if (typeof initialEventHandlers?.onRowDelete === 'function') {\n window.TGSetEvent('OnRowDelete', id, (grid, row, deleteType) => {\n syncHasDisplayDataRows(grid);\n latestEventHandlersRef.current?.onRowDelete?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n deleteType,\n );\n });\n } else {\n window.TGSetEvent('OnRowDelete', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n }\n if (typeof initialEventHandlers?.onRowUndelete === 'function') {\n window.TGSetEvent('OnRowUndelete', id, (grid, row) => {\n syncHasDisplayDataRows(grid);\n latestEventHandlersRef.current?.onRowUndelete?.(grid, row as OwpTreeGridRowModel<T>);\n });\n } else {\n window.TGSetEvent('OnRowUndelete', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n }\n window.TGSetEvent('OnGetDefaultColor', id, (grid, row, col) => {\n if (!highlightEditableCellsRef.current || !isDisplayTreeGridRow(row)) {\n return undefined;\n }\n\n return getEditableTreeGridCellDefaultColor(\n grid,\n row,\n col,\n editableCellBackgroundColorValueRef.current,\n );\n });\n window.TGSetEvent('OnGetColor', id, (grid, row, col, r, g, b, type) => {\n if (type) {\n return undefined;\n }\n\n return resolveTreeGridStateBackgroundColor({\n grid,\n row,\n col,\n r,\n g,\n b,\n selectedCellBackgroundColor: selectedCellBackgroundColorRef.current,\n hoverCellBackgroundColor: hoverCellBackgroundColorRef.current,\n });\n });\n window.TGSetEvent('OnAfterValueChanged', id, (grid, row, col, value) => {\n const columnEditRuleLookup = latestColumnEditRuleLookupRef.current;\n const resolvedEditValue = columnEditRuleLookup\n ? resolveTreeGridColumnEditValue(columnEditRuleLookup, col, value)\n : undefined;\n const nextValue = resolvedEditValue?.value;\n const resolvedValue = nextValue ?? value;\n\n if (resolvedEditValue?.invalidText) {\n enqueueSnackbar(resolvedEditValue.invalidText, { variant: 'warning' });\n }\n\n if (nextValue !== undefined) {\n grid.SetValue(row, col, nextValue, 1);\n }\n\n if (highlightChangedCellsRef.current && isDisplayTreeGridRow(row)) {\n highlightTreeGridCellById(id, {\n row,\n col,\n backgroundColor: changedCellBackgroundColorRef.current,\n });\n }\n\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row as OwpTreeGridRowModel<T>, col, resolvedValue);\n });\n if (typeof initialEventHandlers?.onSelect === 'function') {\n window.TGSetEvent(\n 'OnSelect',\n id,\n debounce((grid) => {\n const selectedRows = (grid.GetSelRows() ?? []) as OwpTreeGridSelectedRows<T>;\n latestEventHandlersRef.current?.onSelect?.(selectedRows);\n }, 100),\n );\n }\n if (typeof initialEventHandlers?.onSave === 'function') {\n window.TGSetEvent('OnSave', id, (grid, row, autoupdate) => {\n latestEventHandlersRef.current?.onSave?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n autoupdate,\n );\n });\n }\n\n window.TGSetEvent(\n 'OnReady',\n id,\n debounce((grid) => {\n if (!hasAppliedInitialLayoutRef.current) {\n const latestLayoutOverrides = latestLayoutOverridesRef.current;\n\n hasAppliedInitialLayoutRef.current = true;\n applyTreeGridLayoutToGrid(grid, latestLayoutOverrides);\n resetTreeGridColumnEditRulesState(columnEditRulesStateRef.current);\n syncTreeGridColumnEditRules(\n grid,\n latestColumnEditRuleLookupRef.current,\n columnEditRulesStateRef.current,\n );\n treeGridInstanceRef.current = grid;\n appliedLayoutOverridesRef.current = latestLayoutOverrides;\n appliedBodyDataPropRef.current = getTreeGridBodyData(grid) as OwpTreeGridBodyData<T>;\n appliedColumnEditRulesRef.current = latestColumnEditRulesRef.current;\n syncHasDisplayDataRows(grid);\n setIsTreeGridReady(true);\n measureTreeGridPerf(id, 'TreeGrid init ready', treeGridInitStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(\n getTreeGridBodyData(grid) as OwpTreeGridBodyData<T>,\n ),\n });\n treeGridInitStartedAtRef.current = null;\n latestEventHandlersRef.current?.onReady?.(grid);\n }\n }, 100),\n );\n};\n"],"names":["TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","TREE_GRID_SELECTED_CELL_RGB","TREE_GRID_READONLY_HOVER_CELL_RGB","TREE_GRID_READONLY_NO_FOCUS_HOVER_CELL_RGB","TREE_GRID_PREVIEW_CELL_RGB","TREE_GRID_PREVIEW_CELL_SOFT_RGB","TREE_GRID_PREVIEW_CELL_DIM_RGB","isTreeGridInlineUrl","__name","url","treeGridInlineBlobUrlCache","resolveTreeGridInlineUrl","cachedUrl","meta","encodedData","match","mimeType","decodedData","bytes","index","blobUrl","appendNoCacheQuery","hashIndex","baseUrl","hashFragment","querySeparator","resolveTreeGridDataUrl","dataUrl","buildTreeGridDataSource","useDataUrl","bodyData","isEmpty","buildTreeGridInitializationOptions","id","layoutUrl","layoutData","width","height","languageId","getTreeGridTextResourceUrl","getTreeGridBodyData","grid","get","getTreeGridBodyDataCount","isVisibleTreeGridRow","row","visible","isAddedTreeGridRow","added","isDisplayTreeGridRow","isEditableTreeGridCell","col","hasExplicitTreeGridCellColor","color","getEditableTreeGridCellDefaultColor","editableCellBackgroundColorValue","matchesTreeGridRgbColor","r","g","b","expected","isTreeGridSelectedCellState","selected","isTreeGridReadonlyHoveredCellState","isTreeGridPreviewHoveredCellState","resolveTreeGridStateBackgroundColor","selectedCellBackgroundColor","hoverCellBackgroundColor","hasTreeGridDisplayDataRows","replaceTreeGridBodyData","onReloadFinish","currentDataConfig","_a","bindTreeGridEvents","latestEventHandlersRef","highlightEditableCellsRef","highlightChangedCellsRef","editableCellBackgroundColorValueRef","changedCellBackgroundColorRef","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","treeGridInstanceRef","treeGridInitStartedAtRef","latestLayoutOverridesRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","appliedColumnEditRulesRef","columnEditRulesStateRef","hasAppliedInitialLayoutRef","syncHasDisplayDataRows","setIsTreeGridReady","initialEventHandlers","_b","debounce","x","y","event","deleteType","type","value","columnEditRuleLookup","resolvedEditValue","resolveTreeGridColumnEditValue","nextValue","resolvedValue","enqueueSnackbar","highlightTreeGridCellById","valueChangedHandler","selectedRows","autoupdate","latestLayoutOverrides","applyTreeGridLayoutToGrid","resetTreeGridColumnEditRulesState","syncTreeGridColumnEditRules","measureTreeGridPerf"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"treeGridRuntime.js","sources":["../../../../src/components/OwpTreeGrid/internal/treeGridRuntime.ts"],"sourcesContent":["import { getTreeGridTextResourceUrl } from '@/constants/treeGrid';\nimport { highlightTreeGridCellById } from '@/utils/treeGridUtil';\nimport { debounce, get, isEmpty } from 'es-toolkit/compat';\nimport { enqueueSnackbar } from 'notistack';\nimport {\n type Dispatch,\n type RefObject,\n type SetStateAction,\n} from 'react';\nimport type {\n OwpTreeGridBodyData,\n OwpTreeGridColumnEditRule,\n OwpTreeGridLayoutConfig,\n OwpTreeGridProps,\n OwpTreeGridRowModel,\n OwpTreeGridSelectedRows,\n} from '../OwpTreeGrid';\nimport { applyTreeGridLayoutToGrid } from './treeGridLayout';\nimport {\n resetTreeGridColumnEditRulesState,\n resolveTreeGridColumnEditValue,\n syncTreeGridColumnEditRules,\n type TreeGridColumnEditRuleLookup,\n type TreeGridColumnEditRulesState,\n} from './treeGridColumnEditRules';\nimport {\n countTreeGridPerf,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './utils/perf';\n\nexport const TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS = 300;\n\nconst TREE_GRID_SELECTED_CELL_RGB = [255, 255, 166] as const;\nconst TREE_GRID_READONLY_HOVER_CELL_RGB = [240, 240, 240] as const;\nconst TREE_GRID_READONLY_NO_FOCUS_HOVER_CELL_RGB = [248, 248, 248] as const;\nconst TREE_GRID_PREVIEW_CELL_RGB = [255, 255, 255] as const;\nconst TREE_GRID_PREVIEW_CELL_SOFT_RGB = [255, 255, 254] as const;\nconst TREE_GRID_PREVIEW_CELL_DIM_RGB = [242, 242, 242] as const;\nconst TREE_GRID_GROUP_HEADER_BUTTON_ATTRIBUTE = 'Button';\n\ntype TreeGridInitializationInput<T> = {\n id: string;\n layoutUrl?: string;\n layoutData?: string;\n dataUrl?: string;\n bodyData: OwpTreeGridBodyData<T>;\n useDataUrl?: boolean;\n width?: string | number;\n height?: string | number;\n languageId: string;\n};\n\nexport type TreeGridEventHandlers<T> = Pick<\n OwpTreeGridProps<T>,\n | 'onSelect'\n | 'onRowClick'\n | 'onRowAdd'\n | 'onRowDelete'\n | 'onRowUndelete'\n | 'onRowChange'\n | 'onClickButton'\n | 'onSave'\n | 'onReady'\n | 'onAfterValueChanged'\n>;\n\nexport type TreeGridEventBindingOptions<T> = Pick<OwpTreeGridProps<T>, 'id'> & {\n latestEventHandlersRef: RefObject<TreeGridEventHandlers<T>>;\n highlightEditableCellsRef: RefObject<boolean>;\n highlightChangedCellsRef: RefObject<boolean>;\n editableCellBackgroundColorValueRef: RefObject<number | undefined>;\n changedCellBackgroundColorRef: RefObject<string>;\n selectedCellBackgroundColorRef: RefObject<string>;\n hoverCellBackgroundColorRef: RefObject<string>;\n treeGridInstanceRef: RefObject<TGrid>;\n treeGridInitStartedAtRef: RefObject<number | null>;\n latestLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;\n appliedLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;\n appliedBodyDataPropRef: RefObject<OwpTreeGridBodyData<T>>;\n latestColumnEditRulesRef: RefObject<readonly OwpTreeGridColumnEditRule[] | undefined>;\n latestColumnEditRuleLookupRef: RefObject<TreeGridColumnEditRuleLookup | undefined>;\n appliedColumnEditRulesRef: RefObject<readonly OwpTreeGridColumnEditRule[] | undefined>;\n columnEditRulesStateRef: RefObject<TreeGridColumnEditRulesState>;\n hasAppliedInitialLayoutRef: RefObject<boolean>;\n syncHasDisplayDataRows: (grid: TGrid | null) => void;\n setIsTreeGridReady: Dispatch<SetStateAction<boolean>>;\n};\n\nconst isTreeGridInlineUrl = (url?: string) => {\n return url?.startsWith('data:') || url?.startsWith('blob:');\n};\n\nconst treeGridInlineBlobUrlCache = new Map<string, string>();\n\nconst resolveTreeGridInlineUrl = (url?: string) => {\n if (!url || !url.startsWith('data:')) {\n return url;\n }\n\n const cachedUrl = treeGridInlineBlobUrlCache.get(url);\n\n if (cachedUrl) {\n return cachedUrl;\n }\n\n try {\n const [meta, encodedData = ''] = url.split(',', 2);\n const match = /^data:([^;]*)(;base64)?$/i.exec(meta);\n const mimeType = match?.[1] || 'application/octet-stream';\n const decodedData = match?.[2] ? atob(encodedData) : decodeURIComponent(encodedData);\n const bytes = new Uint8Array(decodedData.length);\n\n for (let index = 0; index < decodedData.length; index += 1) {\n bytes[index] = decodedData.charCodeAt(index);\n }\n\n const blobUrl = URL.createObjectURL(new Blob([bytes], { type: mimeType }));\n\n treeGridInlineBlobUrlCache.set(url, blobUrl);\n\n return blobUrl;\n } catch {\n return url;\n }\n};\n\nconst appendNoCacheQuery = (url: string) => {\n if (!url || isTreeGridInlineUrl(url)) {\n return resolveTreeGridInlineUrl(url);\n }\n\n const hashIndex = url.indexOf('#');\n const [baseUrl, hashFragment] =\n hashIndex >= 0 ? [url.slice(0, hashIndex), url.slice(hashIndex)] : [url, ''];\n const querySeparator = baseUrl.includes('?') ? '&' : '?';\n\n return `${baseUrl}${querySeparator}noCache=${Date.now()}${hashFragment}`;\n};\n\nconst resolveTreeGridDataUrl = (dataUrl?: string) => {\n if (!dataUrl) {\n return '';\n }\n\n if (isTreeGridInlineUrl(dataUrl) || dataUrl.includes('assets')) {\n return appendNoCacheQuery(dataUrl);\n }\n\n // @ts-expect-error - API base URL env is provided by host app\n return appendNoCacheQuery(`${import.meta.env.VITE_API_BASE_URL}/${dataUrl}`);\n};\n\nconst buildTreeGridDataSource = <T,>(\n useDataUrl: boolean | undefined,\n dataUrl: string | undefined,\n bodyData: OwpTreeGridBodyData<T>,\n) => {\n if (useDataUrl) {\n return { Url: resolveTreeGridDataUrl(dataUrl) };\n }\n\n return { Data: { Body: [isEmpty(bodyData) ? [] : bodyData] } };\n};\n\n/**\n * TreeGrid 초기화 옵션 생성\n * @param input 초기화 입력값\n */\nexport const buildTreeGridInitializationOptions = <T,>({\n id,\n layoutUrl,\n layoutData,\n dataUrl,\n bodyData,\n useDataUrl,\n width,\n height,\n languageId,\n}: TreeGridInitializationInput<T>) => {\n return {\n id,\n Layout: layoutData ? { Data: layoutData } : { Url: appendNoCacheQuery(layoutUrl ?? '') },\n Data: buildTreeGridDataSource(useDataUrl, dataUrl, bodyData),\n Text: {\n Url: getTreeGridTextResourceUrl(languageId),\n },\n width,\n height,\n Debug: 'Error',\n };\n};\n\nconst getTreeGridBodyData = (grid: TGrid | null) => {\n return get(grid, 'Data.Data.Data.Body.0');\n};\n\ntype TreeGridCellSpanAttribute = 'Span' | 'RowSpan';\n\n/**\n * TreeGrid span 속성 숫자 변환\n * @param value span 속성 원본값\n */\nconst parseTreeGridPositiveNumber = (value: unknown) => {\n if (typeof value === 'number') {\n return Number.isFinite(value) && value > 0 ? value : undefined;\n }\n\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const trimmedValue = value.trim();\n\n if (!trimmedValue) {\n return undefined;\n }\n\n const numericValue = Number(trimmedValue);\n\n return Number.isFinite(numericValue) && numericValue > 0 ? numericValue : undefined;\n};\n\n/**\n * TreeGrid 헤더 셀 span 속성 조회\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n * @param attributeName span 속성 이름\n */\nconst getTreeGridHeaderCellSpanAttribute = (\n grid: TGrid,\n row: TRow | null | undefined,\n col: string,\n attributeName: TreeGridCellSpanAttribute,\n) => {\n if (!row || !col) {\n return undefined;\n }\n\n const attributeValue = grid.GetAttribute(row, col, attributeName);\n const resolvedAttributeValue = parseTreeGridPositiveNumber(attributeValue);\n\n if (resolvedAttributeValue !== undefined) {\n return resolvedAttributeValue;\n }\n\n return parseTreeGridPositiveNumber(\n (row as unknown as Record<string, unknown>)[`${col}${attributeName}`],\n );\n};\n\n/**\n * TreeGrid 그룹 전용 헤더 셀 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst isTreeGridGroupHeaderCell = (grid: TGrid, row: TRow | null | undefined, col: string) => {\n if (!row || !col || row.Fixed !== 'Head') {\n return false;\n }\n\n const colSpan = getTreeGridHeaderCellSpanAttribute(grid, row, col, 'Span') ?? 1;\n\n if (colSpan <= 1) {\n return false;\n }\n\n const rowSpan = getTreeGridHeaderCellSpanAttribute(grid, row, col, 'RowSpan') ?? 1;\n\n return rowSpan === 1;\n};\n\n/**\n * TreeGrid 그룹 헤더 sort 버튼 비활성 셀 속성 적용\n * @param grid TreeGrid 인스턴스\n * @param gridId TreeGrid 인스턴스 ID\n * @param refreshRows 반영 후 헤더 행 refresh 여부\n */\nconst applyTreeGridGroupHeaderSortButtonAttributes = (\n grid: TGrid,\n gridId: string,\n refreshRows = false,\n) => {\n const applyStartedAt =\n typeof performance !== 'undefined' ? performance.now() : Date.now();\n const headerRows =\n typeof grid.GetFixedRows === 'function'\n ? grid.GetFixedRows().filter((row) => row.Fixed === 'Head')\n : [];\n const cols = typeof grid.GetCols === 'function' ? grid.GetCols() : [];\n\n if (!headerRows.length || !cols.length) {\n return;\n }\n\n const updatedRows = new Set<TRow>();\n let updatedCellCount = 0;\n\n if (typeof grid.StartUpdate === 'function') {\n grid.StartUpdate();\n }\n\n try {\n headerRows.forEach((row) => {\n cols.forEach((col) => {\n if (!isTreeGridGroupHeaderCell(grid, row, col)) {\n return;\n }\n\n if (grid.GetAttribute(row, col, TREE_GRID_GROUP_HEADER_BUTTON_ATTRIBUTE) === '') {\n return;\n }\n\n grid.SetAttribute(row, col, TREE_GRID_GROUP_HEADER_BUTTON_ATTRIBUTE, '', 0, 0);\n updatedRows.add(row);\n updatedCellCount += 1;\n });\n });\n } finally {\n if (typeof grid.EndUpdate === 'function') {\n grid.EndUpdate();\n }\n }\n\n if (!updatedRows.size) {\n return;\n }\n\n if (refreshRows) {\n updatedRows.forEach((row) => {\n if (typeof grid.RefreshRow === 'function') {\n grid.RefreshRow(row);\n }\n });\n }\n\n countTreeGridPerf(gridId, 'group header button attribute apply');\n measureTreeGridPerf(gridId, 'group header button attribute apply', applyStartedAt, {\n updatedCellCount,\n updatedRowCount: updatedRows.size,\n });\n};\n\n/**\n * TreeGrid Body 데이터 건수\n * @param bodyData TreeGrid Body 데이터\n */\nexport const getTreeGridBodyDataCount = <T,>(bodyData: OwpTreeGridBodyData<T>) => {\n return Array.isArray(bodyData) ? bodyData.length : 0;\n};\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\n/**\n * TreeGrid 추가 행 여부\n * @param row TreeGrid 행\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\n/**\n * TreeGrid 본문 표시 행 여부\n * @param row TreeGrid 행\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\n/**\n * TreeGrid 셀 편집 가능 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst isEditableTreeGridCell = (grid: TGrid, row: TRow | null | undefined, col: string) => {\n if (!row || !col || !isDisplayTreeGridRow(row)) {\n return false;\n }\n\n return grid.CanEdit(row, col) === 1;\n};\n\n/**\n * TreeGrid 셀 명시 색상 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst hasExplicitTreeGridCellColor = (grid: TGrid, row: TRow, col: string) => {\n const color = grid.GetAttribute(row, col, 'Color');\n\n return color !== undefined && color !== null && color !== '';\n};\n\n/**\n * TreeGrid 입력 셀 기본 배경색 계산\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst getEditableTreeGridCellDefaultColor = (\n grid: TGrid,\n row: TRow | null | undefined,\n col: string,\n editableCellBackgroundColorValue: number | undefined,\n) => {\n if (\n !row ||\n editableCellBackgroundColorValue === undefined ||\n !isEditableTreeGridCell(grid, row, col) ||\n hasExplicitTreeGridCellColor(grid, row, col)\n ) {\n return undefined;\n }\n\n return editableCellBackgroundColorValue;\n};\n\nconst matchesTreeGridRgbColor = (\n r: number,\n g: number,\n b: number,\n expected: readonly [number, number, number],\n) => {\n return r === expected[0] && g === expected[1] && b === expected[2];\n};\n\nconst isTreeGridSelectedCellState = (grid: TGrid, row: TRow | null | undefined, col: string) => {\n if (!row || !col || !isDisplayTreeGridRow(row)) {\n return false;\n }\n\n const selected = grid.IsSelected(row, col);\n\n return selected !== 0 && selected !== false && selected !== undefined && selected !== null;\n};\n\nconst isTreeGridReadonlyHoveredCellState = (\n grid: TGrid,\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col || !isDisplayTreeGridRow(row) || grid.ARow !== row || grid.ACol !== col) {\n return false;\n }\n\n return grid.CanEdit(row, col) === 0;\n};\n\nconst isTreeGridPreviewHoveredCellState = (\n grid: TGrid,\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col || !isDisplayTreeGridRow(row) || grid.ARow !== row || grid.ACol !== col) {\n return false;\n }\n\n return grid.CanEdit(row, col) === 2;\n};\n\nconst resolveTreeGridStateBackgroundColor = ({\n grid,\n row,\n col,\n r,\n g,\n b,\n selectedCellBackgroundColor,\n hoverCellBackgroundColor,\n}: {\n grid: TGrid;\n row: TRow | null | undefined;\n col: string;\n r: number;\n g: number;\n b: number;\n selectedCellBackgroundColor: string;\n hoverCellBackgroundColor: string;\n}) => {\n if (\n isTreeGridSelectedCellState(grid, row, col) &&\n matchesTreeGridRgbColor(r, g, b, TREE_GRID_SELECTED_CELL_RGB)\n ) {\n return selectedCellBackgroundColor;\n }\n\n if (\n isTreeGridReadonlyHoveredCellState(grid, row, col) &&\n (matchesTreeGridRgbColor(r, g, b, TREE_GRID_READONLY_HOVER_CELL_RGB) ||\n matchesTreeGridRgbColor(r, g, b, TREE_GRID_READONLY_NO_FOCUS_HOVER_CELL_RGB))\n ) {\n return hoverCellBackgroundColor;\n }\n\n if (\n isTreeGridPreviewHoveredCellState(grid, row, col) &&\n (matchesTreeGridRgbColor(r, g, b, TREE_GRID_PREVIEW_CELL_RGB) ||\n matchesTreeGridRgbColor(r, g, b, TREE_GRID_PREVIEW_CELL_SOFT_RGB) ||\n matchesTreeGridRgbColor(r, g, b, TREE_GRID_PREVIEW_CELL_DIM_RGB))\n ) {\n return hoverCellBackgroundColor;\n }\n\n return undefined;\n};\n\n/**\n * TreeGrid 표시 데이터 행 존재 여부\n * @param grid TreeGrid 인스턴스\n */\nexport const hasTreeGridDisplayDataRows = (grid: TGrid | null) => {\n if (!grid) {\n return false;\n }\n\n if (typeof grid.GetFirst === 'function' && typeof grid.GetNext === 'function') {\n let row = grid.GetFirst();\n\n while (row) {\n if (isDisplayTreeGridRow(row)) {\n return true;\n }\n\n row = grid.GetNext(row);\n }\n\n return false;\n }\n\n return Object.values(grid.Rows ?? {}).some((row) => {\n return isDisplayTreeGridRow(row);\n });\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param grid TreeGrid 인스턴스\n * @param bodyData 새 Body 데이터\n * @param onReloadFinish 재로드 완료 콜백\n */\nexport const replaceTreeGridBodyData = <T,>(\n grid: TGrid,\n bodyData: OwpTreeGridBodyData<T>,\n onReloadFinish?: (code: number) => void,\n) => {\n // @ts-expect-error - TreeGrid Data.Data shape is not reflected in bundled types\n const currentDataConfig = grid.Data?.Data;\n\n // @ts-expect-error - TreeGrid Data.Data shape is not reflected in bundled types\n grid.Data.Data = {\n ...currentDataConfig,\n Data: { Body: [bodyData || []] },\n Url: '',\n };\n\n grid.ReloadBody(onReloadFinish);\n};\n\n/**\n * TreeGrid 이벤트 바인딩\n * @param options 이벤트 바인딩 옵션\n */\nexport const bindTreeGridEvents = <T,>({\n id,\n latestEventHandlersRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n latestColumnEditRulesRef,\n latestColumnEditRuleLookupRef,\n appliedColumnEditRulesRef,\n columnEditRulesStateRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n}: TreeGridEventBindingOptions<T>) => {\n const initialEventHandlers = latestEventHandlersRef.current;\n\n window.TGSetEvent('OnRowAdd', id, (grid, row) => {\n row.CanEdit = 1;\n row.CanDelete = 1;\n\n latestEventHandlersRef.current?.onRowAdd?.(grid, row as OwpTreeGridRowModel<T>);\n });\n window.TGSetEvent('OnRowAdded', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n\n if (typeof initialEventHandlers?.onRowClick === 'function') {\n window.TGSetEvent(\n 'OnClick',\n id,\n debounce((grid, row, col, x, y, event) => {\n latestEventHandlersRef.current?.onRowClick?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n col,\n x,\n y,\n event,\n );\n }, 300),\n );\n }\n\n if (typeof initialEventHandlers?.onClickButton === 'function') {\n window.TGSetEvent(\n 'OnClickButton',\n id,\n debounce((grid, row, col, event) => {\n latestEventHandlersRef.current?.onClickButton?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n col,\n event,\n );\n }, 300),\n );\n }\n\n if (typeof initialEventHandlers?.onRowDelete === 'function') {\n window.TGSetEvent('OnRowDelete', id, (grid, row, deleteType) => {\n syncHasDisplayDataRows(grid);\n latestEventHandlersRef.current?.onRowDelete?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n deleteType,\n );\n });\n } else {\n window.TGSetEvent('OnRowDelete', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n }\n if (typeof initialEventHandlers?.onRowUndelete === 'function') {\n window.TGSetEvent('OnRowUndelete', id, (grid, row) => {\n syncHasDisplayDataRows(grid);\n latestEventHandlersRef.current?.onRowUndelete?.(grid, row as OwpTreeGridRowModel<T>);\n });\n } else {\n window.TGSetEvent('OnRowUndelete', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n }\n window.TGSetEvent('OnGetDefaultColor', id, (grid, row, col) => {\n if (!highlightEditableCellsRef.current || !isDisplayTreeGridRow(row)) {\n return undefined;\n }\n\n return getEditableTreeGridCellDefaultColor(\n grid,\n row,\n col,\n editableCellBackgroundColorValueRef.current,\n );\n });\n window.TGSetEvent('OnGetColor', id, (grid, row, col, r, g, b, type) => {\n if (type) {\n return undefined;\n }\n\n return resolveTreeGridStateBackgroundColor({\n grid,\n row,\n col,\n r,\n g,\n b,\n selectedCellBackgroundColor: selectedCellBackgroundColorRef.current,\n hoverCellBackgroundColor: hoverCellBackgroundColorRef.current,\n });\n });\n window.TGSetEvent('OnAfterValueChanged', id, (grid, row, col, value) => {\n const columnEditRuleLookup = latestColumnEditRuleLookupRef.current;\n const resolvedEditValue = columnEditRuleLookup\n ? resolveTreeGridColumnEditValue(columnEditRuleLookup, col, value)\n : undefined;\n const nextValue = resolvedEditValue?.value;\n const resolvedValue = nextValue ?? value;\n\n if (resolvedEditValue?.invalidText) {\n enqueueSnackbar(resolvedEditValue.invalidText, { variant: 'warning' });\n }\n\n if (nextValue !== undefined) {\n grid.SetValue(row, col, nextValue, 1);\n }\n\n if (highlightChangedCellsRef.current && isDisplayTreeGridRow(row)) {\n highlightTreeGridCellById(id, {\n row,\n col,\n backgroundColor: changedCellBackgroundColorRef.current,\n });\n }\n\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row as OwpTreeGridRowModel<T>, col, resolvedValue);\n });\n if (typeof initialEventHandlers?.onSelect === 'function') {\n window.TGSetEvent(\n 'OnSelect',\n id,\n debounce((grid) => {\n const selectedRows = (grid.GetSelRows() ?? []) as OwpTreeGridSelectedRows<T>;\n latestEventHandlersRef.current?.onSelect?.(selectedRows);\n }, 100),\n );\n }\n if (typeof initialEventHandlers?.onSave === 'function') {\n window.TGSetEvent('OnSave', id, (grid, row, autoupdate) => {\n latestEventHandlersRef.current?.onSave?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n autoupdate,\n );\n });\n }\n window.TGSetEvent('OnSort', id, (grid, col) => {\n if (!col || !isTreeGridGroupHeaderCell(grid, grid.ARow, col)) {\n return undefined;\n }\n\n countTreeGridPerf(id, 'group header sort blocked');\n logTreeGridPerf(id, 'group header sort blocked', {\n rowId: grid.ARow?.id,\n col,\n });\n\n return -1;\n });\n window.TGSetEvent('OnRenderStart', id, (grid) => {\n applyTreeGridGroupHeaderSortButtonAttributes(grid, id, false);\n });\n\n window.TGSetEvent(\n 'OnReady',\n id,\n debounce((grid) => {\n if (!hasAppliedInitialLayoutRef.current) {\n const latestLayoutOverrides = latestLayoutOverridesRef.current;\n\n hasAppliedInitialLayoutRef.current = true;\n applyTreeGridLayoutToGrid(grid, latestLayoutOverrides);\n resetTreeGridColumnEditRulesState(columnEditRulesStateRef.current);\n syncTreeGridColumnEditRules(\n grid,\n latestColumnEditRuleLookupRef.current,\n columnEditRulesStateRef.current,\n );\n treeGridInstanceRef.current = grid;\n appliedLayoutOverridesRef.current = latestLayoutOverrides;\n appliedBodyDataPropRef.current = getTreeGridBodyData(grid) as OwpTreeGridBodyData<T>;\n appliedColumnEditRulesRef.current = latestColumnEditRulesRef.current;\n syncHasDisplayDataRows(grid);\n setIsTreeGridReady(true);\n applyTreeGridGroupHeaderSortButtonAttributes(grid, id, true);\n measureTreeGridPerf(id, 'TreeGrid init ready', treeGridInitStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(\n getTreeGridBodyData(grid) as OwpTreeGridBodyData<T>,\n ),\n });\n treeGridInitStartedAtRef.current = null;\n latestEventHandlersRef.current?.onReady?.(grid);\n }\n }, 100),\n );\n};\n"],"names":["TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","TREE_GRID_SELECTED_CELL_RGB","TREE_GRID_READONLY_HOVER_CELL_RGB","TREE_GRID_READONLY_NO_FOCUS_HOVER_CELL_RGB","TREE_GRID_PREVIEW_CELL_RGB","TREE_GRID_PREVIEW_CELL_SOFT_RGB","TREE_GRID_PREVIEW_CELL_DIM_RGB","TREE_GRID_GROUP_HEADER_BUTTON_ATTRIBUTE","isTreeGridInlineUrl","__name","url","treeGridInlineBlobUrlCache","resolveTreeGridInlineUrl","cachedUrl","meta","encodedData","match","mimeType","decodedData","bytes","index","blobUrl","appendNoCacheQuery","hashIndex","baseUrl","hashFragment","querySeparator","resolveTreeGridDataUrl","dataUrl","buildTreeGridDataSource","useDataUrl","bodyData","isEmpty","buildTreeGridInitializationOptions","id","layoutUrl","layoutData","width","height","languageId","getTreeGridTextResourceUrl","getTreeGridBodyData","grid","get","parseTreeGridPositiveNumber","value","trimmedValue","numericValue","getTreeGridHeaderCellSpanAttribute","row","col","attributeName","attributeValue","resolvedAttributeValue","isTreeGridGroupHeaderCell","applyTreeGridGroupHeaderSortButtonAttributes","gridId","refreshRows","applyStartedAt","headerRows","cols","updatedRows","updatedCellCount","countTreeGridPerf","measureTreeGridPerf","getTreeGridBodyDataCount","isVisibleTreeGridRow","visible","isAddedTreeGridRow","added","isDisplayTreeGridRow","isEditableTreeGridCell","hasExplicitTreeGridCellColor","color","getEditableTreeGridCellDefaultColor","editableCellBackgroundColorValue","matchesTreeGridRgbColor","r","g","b","expected","isTreeGridSelectedCellState","selected","isTreeGridReadonlyHoveredCellState","isTreeGridPreviewHoveredCellState","resolveTreeGridStateBackgroundColor","selectedCellBackgroundColor","hoverCellBackgroundColor","hasTreeGridDisplayDataRows","replaceTreeGridBodyData","onReloadFinish","currentDataConfig","_a","bindTreeGridEvents","latestEventHandlersRef","highlightEditableCellsRef","highlightChangedCellsRef","editableCellBackgroundColorValueRef","changedCellBackgroundColorRef","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","treeGridInstanceRef","treeGridInitStartedAtRef","latestLayoutOverridesRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","appliedColumnEditRulesRef","columnEditRulesStateRef","hasAppliedInitialLayoutRef","syncHasDisplayDataRows","setIsTreeGridReady","initialEventHandlers","_b","debounce","x","y","event","deleteType","type","columnEditRuleLookup","resolvedEditValue","resolveTreeGridColumnEditValue","nextValue","resolvedValue","enqueueSnackbar","highlightTreeGridCellById","valueChangedHandler","selectedRows","autoupdate","logTreeGridPerf","latestLayoutOverrides","applyTreeGridLayoutToGrid","resetTreeGridColumnEditRulesState","syncTreeGridColumnEditRules"],"mappings":"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"}
|
|
@@ -78,7 +78,7 @@ function ze(t) {
|
|
|
78
78
|
return (t ? ke[t] : null) ?? null;
|
|
79
79
|
}
|
|
80
80
|
l(ze, "getUnitValueFormat");
|
|
81
|
-
function
|
|
81
|
+
function $e({
|
|
82
82
|
disabled: t = !1,
|
|
83
83
|
definition: e,
|
|
84
84
|
resetVersion: n,
|
|
@@ -107,16 +107,15 @@ function Se({
|
|
|
107
107
|
e.path,
|
|
108
108
|
u ? Be(r, u) : r
|
|
109
109
|
);
|
|
110
|
-
}, "commitBufferedTextValue"),
|
|
110
|
+
}, "commitBufferedTextValue"), S = /* @__PURE__ */ l((r) => {
|
|
111
111
|
a.current && (window.clearTimeout(a.current), a.current = null), B(!1), g(e.path, N(i, r));
|
|
112
|
-
}, "commitBufferedPickerValue"),
|
|
112
|
+
}, "commitBufferedPickerValue"), $ = y || u ? /* @__PURE__ */ o(Z, { position: "end", children: /* @__PURE__ */ c("div", { className: "flex items-center gap-6 pr-2", children: [
|
|
113
113
|
y ? /* @__PURE__ */ o(
|
|
114
114
|
X,
|
|
115
115
|
{
|
|
116
116
|
size: "small",
|
|
117
117
|
"aria-label": `${e.label} reset`,
|
|
118
118
|
disabled: t,
|
|
119
|
-
edge: "end",
|
|
120
119
|
onMouseDown: /* @__PURE__ */ l((r) => {
|
|
121
120
|
r.preventDefault();
|
|
122
121
|
}, "onMouseDown"),
|
|
@@ -132,7 +131,7 @@ function Se({
|
|
|
132
131
|
children: /* @__PURE__ */ o(oe, { sx: { fontSize: 16 } })
|
|
133
132
|
}
|
|
134
133
|
) : null,
|
|
135
|
-
u ? /* @__PURE__ */ o(v, { variant: "body2", children: u }) : null
|
|
134
|
+
u ? /* @__PURE__ */ o(v, { variant: "body2", sx: { whiteSpace: "nowrap" }, children: u }) : null
|
|
136
135
|
] }) }) : void 0;
|
|
137
136
|
return /* @__PURE__ */ c("div", { className: "grid grid-cols-[minmax(0,1fr)_144px] items-start gap-12", children: [
|
|
138
137
|
/* @__PURE__ */ o(
|
|
@@ -173,8 +172,8 @@ function Se({
|
|
|
173
172
|
} : {}
|
|
174
173
|
},
|
|
175
174
|
input: {
|
|
176
|
-
|
|
177
|
-
endAdornment:
|
|
175
|
+
...$ ? {
|
|
176
|
+
endAdornment: $
|
|
178
177
|
} : {}
|
|
179
178
|
}
|
|
180
179
|
},
|
|
@@ -212,11 +211,11 @@ function Se({
|
|
|
212
211
|
onChange: /* @__PURE__ */ l((r) => {
|
|
213
212
|
const d = r.target.value;
|
|
214
213
|
V(d), B(!0), a.current && window.clearTimeout(a.current), a.current = window.setTimeout(() => {
|
|
215
|
-
|
|
214
|
+
S(d);
|
|
216
215
|
}, Ee);
|
|
217
216
|
}, "onChange"),
|
|
218
217
|
onBlur: /* @__PURE__ */ l(() => {
|
|
219
|
-
A &&
|
|
218
|
+
A && S(O);
|
|
220
219
|
}, "onBlur"),
|
|
221
220
|
slotProps: {
|
|
222
221
|
htmlInput: {
|
|
@@ -396,8 +395,8 @@ function Se({
|
|
|
396
395
|
] }) : /* @__PURE__ */ o("div", {})
|
|
397
396
|
] });
|
|
398
397
|
}
|
|
399
|
-
l(
|
|
398
|
+
l($e, "ThemePreviewColorField");
|
|
400
399
|
export {
|
|
401
|
-
|
|
400
|
+
$e as ThemePreviewColorField
|
|
402
401
|
};
|
|
403
402
|
//# sourceMappingURL=ThemePreviewColorField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemePreviewColorField.js","sources":["../../../../src/features/themePreview/components/ThemePreviewColorField.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Divider,\n IconButton,\n InputAdornment,\n MenuItem,\n Popover,\n TextField,\n Typography,\n} from '@mui/material';\nimport RestartAltOutlinedIcon from '@mui/icons-material/RestartAltOutlined';\nimport {\n amber,\n blue,\n blueGrey,\n cyan,\n deepOrange,\n deepPurple,\n green,\n grey,\n indigo,\n lightBlue,\n orange,\n pink,\n purple,\n red,\n teal,\n} from '@mui/material/colors';\nimport type {\n ThemePreviewFieldDefinition,\n ThemePreviewSectionKey,\n ThemePreviewSettings,\n} from '../types';\nimport {\n applyColorPickerValue,\n getColorAlphaValue,\n getThemePreviewPaletteValue,\n toColorPickerValue,\n} from '../utils';\nimport { useEffect, useRef, useState } from 'react';\n\ninterface ThemePreviewColorFieldProps {\n disabled?: boolean;\n definition: ThemePreviewFieldDefinition;\n resetVersion?: number;\n sectionKey: ThemePreviewSectionKey;\n settings: ThemePreviewSettings;\n onChange: (path: string, value: string) => void;\n onReset?: (path: string) => void;\n}\n\nconst themePreviewInputUnits = {\n 'px-number': 'px',\n 'rem-number': 'rem',\n} as const;\n\ntype ThemePreviewInputUnit = (typeof themePreviewInputUnits)[keyof typeof themePreviewInputUnits];\n\nconst themePreviewMuiColorShades = [\n '50',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n 'A100',\n 'A200',\n 'A400',\n 'A700',\n] as const;\nconst themePreviewMuiColorPalettes = [\n ['Blue', blue],\n ['Light Blue', lightBlue],\n ['Cyan', cyan],\n ['Teal', teal],\n ['Green', green],\n ['Amber', amber],\n ['Orange', orange],\n ['Deep Orange', deepOrange],\n ['Red', red],\n ['Pink', pink],\n ['Purple', purple],\n ['Deep Purple', deepPurple],\n ['Indigo', indigo],\n ['Grey', grey],\n ['Blue Grey', blueGrey],\n] as const;\nconst themePreviewMuiPaletteColorRows = themePreviewMuiColorPalettes.map(([label, palette]) => ({\n label,\n colors: themePreviewMuiColorShades.reduce<Array<{\n key: string;\n shade: string;\n value: string;\n }>>((acc, shade) => {\n const paletteValue = (palette as Record<string, string>)[shade];\n\n if (!paletteValue) {\n return acc;\n }\n\n acc.push({\n key: `${label}-${shade}`,\n shade,\n value: paletteValue,\n });\n\n return acc;\n }, []),\n}));\nconst THEME_PREVIEW_COLOR_PICKER_APPLY_DELAY_MS = 500;\nconst THEME_PREVIEW_SMALL_FIELD_HEIGHT = 32;\nconst THEME_PREVIEW_PICKER_SWATCH_HEIGHT = 20;\n\nfunction getUnitInputDisplayValue(value: string, unit: ThemePreviewInputUnit) {\n return value.replace(new RegExp(`${unit}$`, 'i'), '');\n}\n\nfunction normalizeUnitInputDisplayValue(value: string) {\n const sanitizedValue = value.replace(/[^0-9.,]/g, '').replace(/,/g, '.');\n const decimalPointIndex = sanitizedValue.indexOf('.');\n\n if (decimalPointIndex < 0) {\n return sanitizedValue;\n }\n\n const integerPart = sanitizedValue.slice(0, decimalPointIndex);\n const decimalPart = sanitizedValue.slice(decimalPointIndex + 1).replace(/\\./g, '');\n\n return `${integerPart}.${decimalPart}`;\n}\n\nfunction normalizeCommittedUnitInputDisplayValue(value: string) {\n const normalizedValue = normalizeUnitInputDisplayValue(value);\n\n if (!normalizedValue || normalizedValue === '.') {\n return '';\n }\n\n if (normalizedValue.startsWith('.')) {\n return `0${normalizedValue}`;\n }\n\n if (normalizedValue.endsWith('.')) {\n return normalizedValue.slice(0, -1);\n }\n\n return normalizedValue;\n}\n\nfunction normalizeUnitInputValue(value: string, unit: ThemePreviewInputUnit) {\n const normalizedValue = normalizeCommittedUnitInputDisplayValue(value);\n\n return normalizedValue ? `${normalizedValue}${unit}` : '';\n}\n\nfunction getUnitValueFormat(valueFormat?: ThemePreviewFieldDefinition['valueFormat']) {\n return (valueFormat ? themePreviewInputUnits[valueFormat] : null) ?? null;\n}\n\nexport function ThemePreviewColorField({\n disabled = false,\n definition,\n resetVersion,\n sectionKey,\n settings,\n onChange,\n onReset,\n}: ThemePreviewColorFieldProps) {\n const [muiPaletteAnchorElement, setMuiPaletteAnchorElement] = useState<HTMLElement | null>(null);\n const value = getThemePreviewPaletteValue(settings, sectionKey, definition.path);\n const unitValueFormat = getUnitValueFormat(definition.valueFormat);\n const showColorPicker = definition.showColorPicker !== false;\n const alphaValue = definition.allowAlpha ? getColorAlphaValue(value) : null;\n const helperText = [definition.description];\n\n if (definition.allowAlpha) {\n helperText.push(\n alphaValue\n ? `알파값은 ${alphaValue}로 고정되고 색상만 변경됩니다. Pick 또는 MUI로 색상만 변경할 수 있습니다.`\n : '알파값은 고정되고 색상만 변경됩니다. Pick 또는 MUI로 색상만 변경할 수 있습니다.',\n );\n }\n\n const resolvedHelperText = helperText.filter(Boolean).join(' ');\n const hasOptions = Boolean(definition.options?.length);\n const isReadOnlyColorTextInput = Boolean(\n definition.allowAlpha && showColorPicker && !hasOptions && !unitValueFormat,\n );\n const displayValue =\n unitValueFormat ? getUnitInputDisplayValue(value, unitValueFormat) : value;\n const hasPickerControls = showColorPicker;\n const canBufferTextInput = !hasOptions && !isReadOnlyColorTextInput;\n const [bufferedTextValue, setBufferedTextValue] = useState(displayValue);\n const [isBufferedTextInputFocused, setIsBufferedTextInputFocused] = useState(false);\n const [bufferedPickerValue, setBufferedPickerValue] = useState(toColorPickerValue(value));\n const [isBufferedPickerDirty, setIsBufferedPickerDirty] = useState(false);\n const colorPickerApplyTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!canBufferTextInput || isBufferedTextInputFocused) {\n return;\n }\n\n setBufferedTextValue(displayValue);\n }, [canBufferTextInput, displayValue, isBufferedTextInputFocused]);\n\n useEffect(() => {\n if (isBufferedPickerDirty) {\n return;\n }\n\n setBufferedPickerValue(toColorPickerValue(value));\n }, [isBufferedPickerDirty, value]);\n\n useEffect(() => {\n return () => {\n if (!colorPickerApplyTimeoutRef.current) {\n return;\n }\n\n window.clearTimeout(colorPickerApplyTimeoutRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (typeof resetVersion === 'undefined') {\n return;\n }\n\n if (colorPickerApplyTimeoutRef.current) {\n window.clearTimeout(colorPickerApplyTimeoutRef.current);\n colorPickerApplyTimeoutRef.current = null;\n }\n\n setBufferedTextValue(displayValue);\n setIsBufferedTextInputFocused(false);\n setBufferedPickerValue(toColorPickerValue(value));\n setIsBufferedPickerDirty(false);\n }, [resetVersion]);\n\n const commitBufferedTextValue = (nextValue: string) => {\n onChange(\n definition.path,\n unitValueFormat ? normalizeUnitInputValue(nextValue, unitValueFormat) : nextValue,\n );\n };\n const commitBufferedPickerValue = (nextPickerValue: string) => {\n if (colorPickerApplyTimeoutRef.current) {\n window.clearTimeout(colorPickerApplyTimeoutRef.current);\n colorPickerApplyTimeoutRef.current = null;\n }\n\n setIsBufferedPickerDirty(false);\n onChange(definition.path, applyColorPickerValue(value, nextPickerValue));\n };\n const inputEndAdornment = onReset || unitValueFormat ? (\n <InputAdornment position=\"end\">\n <div className=\"flex items-center gap-2\">\n {onReset ? (\n <IconButton\n size=\"small\"\n aria-label={`${definition.label} reset`}\n disabled={disabled}\n edge=\"end\"\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n onReset(definition.path);\n }}\n sx={{\n border: '1px solid #cbd5e1',\n borderRadius: 1,\n color: '#6b7280',\n p: 0.25,\n }}\n >\n <RestartAltOutlinedIcon sx={{ fontSize: 16 }} />\n </IconButton>\n ) : null}\n {unitValueFormat ? <Typography variant=\"body2\">{unitValueFormat}</Typography> : null}\n </div>\n </InputAdornment>\n ) : undefined;\n\n return (\n <div className=\"grid grid-cols-[minmax(0,1fr)_144px] items-start gap-12\">\n <TextField\n select={hasOptions}\n label={definition.label}\n size=\"small\"\n value={canBufferTextInput ? bufferedTextValue : displayValue}\n disabled={disabled}\n onChange={(event) => {\n if (isReadOnlyColorTextInput) {\n return;\n }\n\n const nextValue = unitValueFormat\n ? normalizeUnitInputDisplayValue(event.target.value)\n : event.target.value;\n\n if (canBufferTextInput) {\n setBufferedTextValue(nextValue);\n return;\n }\n\n onChange(definition.path, nextValue);\n }}\n onFocus={() => {\n if (!canBufferTextInput) {\n return;\n }\n\n setIsBufferedTextInputFocused(true);\n }}\n onBlur={() => {\n if (!canBufferTextInput) {\n return;\n }\n\n setIsBufferedTextInputFocused(false);\n commitBufferedTextValue(bufferedTextValue);\n }}\n onKeyDown={(event) => {\n if (!canBufferTextInput || event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n setIsBufferedTextInputFocused(false);\n commitBufferedTextValue(bufferedTextValue);\n event.currentTarget.blur();\n }}\n helperText={resolvedHelperText}\n slotProps={{\n htmlInput:\n {\n ...(unitValueFormat\n ? {\n inputMode: 'decimal',\n }\n : {}),\n ...(isReadOnlyColorTextInput\n ? {\n readOnly: true,\n }\n : {}),\n },\n input:\n {\n ...(inputEndAdornment\n ? {\n endAdornment: inputEndAdornment,\n }\n : {}),\n },\n }}\n >\n {definition.options?.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n\n {hasPickerControls ? (\n <div className=\"grid grid-cols-2 gap-6\">\n <>\n <Button\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n disabled={disabled}\n sx={{\n fontSize: '1.2rem',\n height: THEME_PREVIEW_SMALL_FIELD_HEIGHT,\n minWidth: 0,\n }}\n onClick={(event) => {\n setMuiPaletteAnchorElement(event.currentTarget);\n }}\n >\n MUI\n </Button>\n <TextField\n hiddenLabel\n type=\"color\"\n size=\"small\"\n value={bufferedPickerValue}\n disabled={disabled}\n onChange={(event) => {\n const nextPickerValue = event.target.value;\n\n setBufferedPickerValue(nextPickerValue);\n setIsBufferedPickerDirty(true);\n\n if (colorPickerApplyTimeoutRef.current) {\n window.clearTimeout(colorPickerApplyTimeoutRef.current);\n }\n\n colorPickerApplyTimeoutRef.current = window.setTimeout(() => {\n commitBufferedPickerValue(nextPickerValue);\n }, THEME_PREVIEW_COLOR_PICKER_APPLY_DELAY_MS);\n }}\n onBlur={() => {\n if (!isBufferedPickerDirty) {\n return;\n }\n\n commitBufferedPickerValue(bufferedPickerValue);\n }}\n slotProps={{\n htmlInput: {\n 'aria-label': 'Pick color',\n },\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n height: THEME_PREVIEW_SMALL_FIELD_HEIGHT,\n px: 0.5,\n },\n '& input[type=\"color\"]': {\n WebkitAppearance: 'none',\n alignSelf: 'center',\n boxSizing: 'border-box',\n border: 0,\n borderRadius: 0,\n display: 'block',\n height: THEME_PREVIEW_PICKER_SWATCH_HEIGHT,\n minHeight: THEME_PREVIEW_PICKER_SWATCH_HEIGHT,\n overflow: 'hidden',\n padding: 0,\n p: 0,\n width: '100%',\n },\n '& input[type=\"color\"]::-webkit-color-swatch-wrapper': {\n borderRadius: 0,\n p: 0,\n },\n '& input[type=\"color\"]::-webkit-color-swatch': {\n borderColor: '#94a3b8',\n borderRadius: 0,\n },\n '& input[type=\"color\"]::-moz-color-swatch': {\n borderColor: '#94a3b8',\n borderRadius: 0,\n },\n }}\n />\n {muiPaletteAnchorElement ? (\n <Popover\n open\n anchorEl={muiPaletteAnchorElement}\n transitionDuration={0}\n onClose={() => {\n setMuiPaletteAnchorElement(null);\n }}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n slotProps={{\n paper: {\n sx: {\n maxHeight: 'calc(100vh - 32px)',\n maxWidth: 'calc(100vw - 32px)',\n minWidth: 320,\n overflow: 'auto',\n p: 1.5,\n width: 'min(760px, calc(100vw - 32px))',\n },\n },\n }}\n >\n <div className=\"flex min-w-0 flex-col gap-10\">\n {themePreviewMuiPaletteColorRows.map((paletteRow, paletteRowIndex) => (\n <Box key={paletteRow.label} className=\"flex flex-col gap-10\">\n {paletteRowIndex > 0 ? <Divider flexItem /> : null}\n <Box\n sx={{\n display: 'grid',\n gap: 1,\n gridTemplateColumns: {\n xs: 'minmax(0, 1fr)',\n sm: '84px minmax(0, 1fr)',\n },\n }}\n >\n <Typography variant=\"caption\" color=\"text.secondary\">\n {paletteRow.label}\n </Typography>\n <Box\n sx={{\n display: 'grid',\n gap: 0.75,\n gridTemplateColumns: 'repeat(auto-fit, minmax(68px, 1fr))',\n minWidth: 0,\n }}\n >\n {paletteRow.colors.map((colorItem) => (\n <Box\n key={colorItem.key}\n component=\"button\"\n type=\"button\"\n onClick={() => {\n onChange(\n definition.path,\n applyColorPickerValue(value, colorItem.value),\n );\n setMuiPaletteAnchorElement(null);\n }}\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.paper',\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: 1,\n color: 'text.secondary',\n cursor: 'pointer',\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n justifyContent: 'center',\n minWidth: 0,\n p: 0.5,\n transition: 'background-color 120ms ease, border-color 120ms ease',\n width: '100%',\n '&:hover': {\n backgroundColor: 'action.hover',\n borderColor: 'text.secondary',\n },\n }}\n >\n <Box\n sx={{\n width: 30,\n height: 30,\n borderRadius: 1,\n backgroundColor: colorItem.value,\n border: '1px solid',\n borderColor: 'divider',\n }}\n />\n <Box\n component=\"span\"\n sx={{\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: 1,\n }}\n >\n {colorItem.shade}\n </Box>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n ))}\n </div>\n </Popover>\n ) : null}\n </>\n {definition.allowAlpha ? (\n <div className=\"col-span-2 flex flex-col gap-2\">\n <Typography variant=\"caption\" color=\"text.secondary\">\n Current\n </Typography>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n className=\"truncate whitespace-nowrap\"\n >\n {value || '-'}\n </Typography>\n </div>\n ) : null}\n </div>\n ) : (\n <div />\n )}\n </div>\n );\n}\n"],"names":["themePreviewInputUnits","themePreviewMuiColorShades","themePreviewMuiColorPalettes","blue","lightBlue","cyan","teal","green","amber","orange","deepOrange","red","pink","purple","deepPurple","indigo","grey","blueGrey","themePreviewMuiPaletteColorRows","label","palette","acc","shade","paletteValue","THEME_PREVIEW_COLOR_PICKER_APPLY_DELAY_MS","THEME_PREVIEW_SMALL_FIELD_HEIGHT","THEME_PREVIEW_PICKER_SWATCH_HEIGHT","getUnitInputDisplayValue","value","unit","__name","normalizeUnitInputDisplayValue","sanitizedValue","decimalPointIndex","integerPart","decimalPart","normalizeCommittedUnitInputDisplayValue","normalizedValue","normalizeUnitInputValue","getUnitValueFormat","valueFormat","ThemePreviewColorField","disabled","definition","resetVersion","sectionKey","settings","onChange","onReset","muiPaletteAnchorElement","setMuiPaletteAnchorElement","useState","getThemePreviewPaletteValue","unitValueFormat","showColorPicker","alphaValue","getColorAlphaValue","helperText","resolvedHelperText","hasOptions","_a","isReadOnlyColorTextInput","displayValue","hasPickerControls","canBufferTextInput","bufferedTextValue","setBufferedTextValue","isBufferedTextInputFocused","setIsBufferedTextInputFocused","bufferedPickerValue","setBufferedPickerValue","toColorPickerValue","isBufferedPickerDirty","setIsBufferedPickerDirty","colorPickerApplyTimeoutRef","useRef","useEffect","commitBufferedTextValue","nextValue","commitBufferedPickerValue","nextPickerValue","applyColorPickerValue","inputEndAdornment","jsx","InputAdornment","jsxs","IconButton","event","RestartAltOutlinedIcon","Typography","TextField","_b","option","MenuItem","Fragment","Button","Popover","paletteRow","paletteRowIndex","Box","Divider","colorItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThemePreviewColorField.js","sources":["../../../../src/features/themePreview/components/ThemePreviewColorField.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Divider,\n IconButton,\n InputAdornment,\n MenuItem,\n Popover,\n TextField,\n Typography,\n} from '@mui/material';\nimport RestartAltOutlinedIcon from '@mui/icons-material/RestartAltOutlined';\nimport {\n amber,\n blue,\n blueGrey,\n cyan,\n deepOrange,\n deepPurple,\n green,\n grey,\n indigo,\n lightBlue,\n orange,\n pink,\n purple,\n red,\n teal,\n} from '@mui/material/colors';\nimport type {\n ThemePreviewFieldDefinition,\n ThemePreviewSectionKey,\n ThemePreviewSettings,\n} from '../types';\nimport {\n applyColorPickerValue,\n getColorAlphaValue,\n getThemePreviewPaletteValue,\n toColorPickerValue,\n} from '../utils';\nimport { useEffect, useRef, useState } from 'react';\n\ninterface ThemePreviewColorFieldProps {\n disabled?: boolean;\n definition: ThemePreviewFieldDefinition;\n resetVersion?: number;\n sectionKey: ThemePreviewSectionKey;\n settings: ThemePreviewSettings;\n onChange: (path: string, value: string) => void;\n onReset?: (path: string) => void;\n}\n\nconst themePreviewInputUnits = {\n 'px-number': 'px',\n 'rem-number': 'rem',\n} as const;\n\ntype ThemePreviewInputUnit = (typeof themePreviewInputUnits)[keyof typeof themePreviewInputUnits];\n\nconst themePreviewMuiColorShades = [\n '50',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n 'A100',\n 'A200',\n 'A400',\n 'A700',\n] as const;\nconst themePreviewMuiColorPalettes = [\n ['Blue', blue],\n ['Light Blue', lightBlue],\n ['Cyan', cyan],\n ['Teal', teal],\n ['Green', green],\n ['Amber', amber],\n ['Orange', orange],\n ['Deep Orange', deepOrange],\n ['Red', red],\n ['Pink', pink],\n ['Purple', purple],\n ['Deep Purple', deepPurple],\n ['Indigo', indigo],\n ['Grey', grey],\n ['Blue Grey', blueGrey],\n] as const;\nconst themePreviewMuiPaletteColorRows = themePreviewMuiColorPalettes.map(([label, palette]) => ({\n label,\n colors: themePreviewMuiColorShades.reduce<Array<{\n key: string;\n shade: string;\n value: string;\n }>>((acc, shade) => {\n const paletteValue = (palette as Record<string, string>)[shade];\n\n if (!paletteValue) {\n return acc;\n }\n\n acc.push({\n key: `${label}-${shade}`,\n shade,\n value: paletteValue,\n });\n\n return acc;\n }, []),\n}));\nconst THEME_PREVIEW_COLOR_PICKER_APPLY_DELAY_MS = 500;\nconst THEME_PREVIEW_SMALL_FIELD_HEIGHT = 32;\nconst THEME_PREVIEW_PICKER_SWATCH_HEIGHT = 20;\n\nfunction getUnitInputDisplayValue(value: string, unit: ThemePreviewInputUnit) {\n return value.replace(new RegExp(`${unit}$`, 'i'), '');\n}\n\nfunction normalizeUnitInputDisplayValue(value: string) {\n const sanitizedValue = value.replace(/[^0-9.,]/g, '').replace(/,/g, '.');\n const decimalPointIndex = sanitizedValue.indexOf('.');\n\n if (decimalPointIndex < 0) {\n return sanitizedValue;\n }\n\n const integerPart = sanitizedValue.slice(0, decimalPointIndex);\n const decimalPart = sanitizedValue.slice(decimalPointIndex + 1).replace(/\\./g, '');\n\n return `${integerPart}.${decimalPart}`;\n}\n\nfunction normalizeCommittedUnitInputDisplayValue(value: string) {\n const normalizedValue = normalizeUnitInputDisplayValue(value);\n\n if (!normalizedValue || normalizedValue === '.') {\n return '';\n }\n\n if (normalizedValue.startsWith('.')) {\n return `0${normalizedValue}`;\n }\n\n if (normalizedValue.endsWith('.')) {\n return normalizedValue.slice(0, -1);\n }\n\n return normalizedValue;\n}\n\nfunction normalizeUnitInputValue(value: string, unit: ThemePreviewInputUnit) {\n const normalizedValue = normalizeCommittedUnitInputDisplayValue(value);\n\n return normalizedValue ? `${normalizedValue}${unit}` : '';\n}\n\nfunction getUnitValueFormat(valueFormat?: ThemePreviewFieldDefinition['valueFormat']) {\n return (valueFormat ? themePreviewInputUnits[valueFormat] : null) ?? null;\n}\n\nexport function ThemePreviewColorField({\n disabled = false,\n definition,\n resetVersion,\n sectionKey,\n settings,\n onChange,\n onReset,\n}: ThemePreviewColorFieldProps) {\n const [muiPaletteAnchorElement, setMuiPaletteAnchorElement] = useState<HTMLElement | null>(null);\n const value = getThemePreviewPaletteValue(settings, sectionKey, definition.path);\n const unitValueFormat = getUnitValueFormat(definition.valueFormat);\n const showColorPicker = definition.showColorPicker !== false;\n const alphaValue = definition.allowAlpha ? getColorAlphaValue(value) : null;\n const helperText = [definition.description];\n\n if (definition.allowAlpha) {\n helperText.push(\n alphaValue\n ? `알파값은 ${alphaValue}로 고정되고 색상만 변경됩니다. Pick 또는 MUI로 색상만 변경할 수 있습니다.`\n : '알파값은 고정되고 색상만 변경됩니다. Pick 또는 MUI로 색상만 변경할 수 있습니다.',\n );\n }\n\n const resolvedHelperText = helperText.filter(Boolean).join(' ');\n const hasOptions = Boolean(definition.options?.length);\n const isReadOnlyColorTextInput = Boolean(\n definition.allowAlpha && showColorPicker && !hasOptions && !unitValueFormat,\n );\n const displayValue =\n unitValueFormat ? getUnitInputDisplayValue(value, unitValueFormat) : value;\n const hasPickerControls = showColorPicker;\n const canBufferTextInput = !hasOptions && !isReadOnlyColorTextInput;\n const [bufferedTextValue, setBufferedTextValue] = useState(displayValue);\n const [isBufferedTextInputFocused, setIsBufferedTextInputFocused] = useState(false);\n const [bufferedPickerValue, setBufferedPickerValue] = useState(toColorPickerValue(value));\n const [isBufferedPickerDirty, setIsBufferedPickerDirty] = useState(false);\n const colorPickerApplyTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!canBufferTextInput || isBufferedTextInputFocused) {\n return;\n }\n\n setBufferedTextValue(displayValue);\n }, [canBufferTextInput, displayValue, isBufferedTextInputFocused]);\n\n useEffect(() => {\n if (isBufferedPickerDirty) {\n return;\n }\n\n setBufferedPickerValue(toColorPickerValue(value));\n }, [isBufferedPickerDirty, value]);\n\n useEffect(() => {\n return () => {\n if (!colorPickerApplyTimeoutRef.current) {\n return;\n }\n\n window.clearTimeout(colorPickerApplyTimeoutRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (typeof resetVersion === 'undefined') {\n return;\n }\n\n if (colorPickerApplyTimeoutRef.current) {\n window.clearTimeout(colorPickerApplyTimeoutRef.current);\n colorPickerApplyTimeoutRef.current = null;\n }\n\n setBufferedTextValue(displayValue);\n setIsBufferedTextInputFocused(false);\n setBufferedPickerValue(toColorPickerValue(value));\n setIsBufferedPickerDirty(false);\n }, [resetVersion]);\n\n const commitBufferedTextValue = (nextValue: string) => {\n onChange(\n definition.path,\n unitValueFormat ? normalizeUnitInputValue(nextValue, unitValueFormat) : nextValue,\n );\n };\n const commitBufferedPickerValue = (nextPickerValue: string) => {\n if (colorPickerApplyTimeoutRef.current) {\n window.clearTimeout(colorPickerApplyTimeoutRef.current);\n colorPickerApplyTimeoutRef.current = null;\n }\n\n setIsBufferedPickerDirty(false);\n onChange(definition.path, applyColorPickerValue(value, nextPickerValue));\n };\n const inputEndAdornment = onReset || unitValueFormat ? (\n <InputAdornment position=\"end\">\n <div className=\"flex items-center gap-6 pr-2\">\n {onReset ? (\n <IconButton\n size=\"small\"\n aria-label={`${definition.label} reset`}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n onReset(definition.path);\n }}\n sx={{\n border: '1px solid #cbd5e1',\n borderRadius: 1,\n color: '#6b7280',\n p: 0.25,\n }}\n >\n <RestartAltOutlinedIcon sx={{ fontSize: 16 }} />\n </IconButton>\n ) : null}\n {unitValueFormat ? (\n <Typography variant=\"body2\" sx={{ whiteSpace: 'nowrap' }}>\n {unitValueFormat}\n </Typography>\n ) : null}\n </div>\n </InputAdornment>\n ) : undefined;\n\n return (\n <div className=\"grid grid-cols-[minmax(0,1fr)_144px] items-start gap-12\">\n <TextField\n select={hasOptions}\n label={definition.label}\n size=\"small\"\n value={canBufferTextInput ? bufferedTextValue : displayValue}\n disabled={disabled}\n onChange={(event) => {\n if (isReadOnlyColorTextInput) {\n return;\n }\n\n const nextValue = unitValueFormat\n ? normalizeUnitInputDisplayValue(event.target.value)\n : event.target.value;\n\n if (canBufferTextInput) {\n setBufferedTextValue(nextValue);\n return;\n }\n\n onChange(definition.path, nextValue);\n }}\n onFocus={() => {\n if (!canBufferTextInput) {\n return;\n }\n\n setIsBufferedTextInputFocused(true);\n }}\n onBlur={() => {\n if (!canBufferTextInput) {\n return;\n }\n\n setIsBufferedTextInputFocused(false);\n commitBufferedTextValue(bufferedTextValue);\n }}\n onKeyDown={(event) => {\n if (!canBufferTextInput || event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n setIsBufferedTextInputFocused(false);\n commitBufferedTextValue(bufferedTextValue);\n event.currentTarget.blur();\n }}\n helperText={resolvedHelperText}\n slotProps={{\n htmlInput:\n {\n ...(unitValueFormat\n ? {\n inputMode: 'decimal',\n }\n : {}),\n ...(isReadOnlyColorTextInput\n ? {\n readOnly: true,\n }\n : {}),\n },\n input:\n {\n ...(inputEndAdornment\n ? {\n endAdornment: inputEndAdornment,\n }\n : {}),\n },\n }}\n >\n {definition.options?.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n\n {hasPickerControls ? (\n <div className=\"grid grid-cols-2 gap-6\">\n <>\n <Button\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n disabled={disabled}\n sx={{\n fontSize: '1.2rem',\n height: THEME_PREVIEW_SMALL_FIELD_HEIGHT,\n minWidth: 0,\n }}\n onClick={(event) => {\n setMuiPaletteAnchorElement(event.currentTarget);\n }}\n >\n MUI\n </Button>\n <TextField\n hiddenLabel\n type=\"color\"\n size=\"small\"\n value={bufferedPickerValue}\n disabled={disabled}\n onChange={(event) => {\n const nextPickerValue = event.target.value;\n\n setBufferedPickerValue(nextPickerValue);\n setIsBufferedPickerDirty(true);\n\n if (colorPickerApplyTimeoutRef.current) {\n window.clearTimeout(colorPickerApplyTimeoutRef.current);\n }\n\n colorPickerApplyTimeoutRef.current = window.setTimeout(() => {\n commitBufferedPickerValue(nextPickerValue);\n }, THEME_PREVIEW_COLOR_PICKER_APPLY_DELAY_MS);\n }}\n onBlur={() => {\n if (!isBufferedPickerDirty) {\n return;\n }\n\n commitBufferedPickerValue(bufferedPickerValue);\n }}\n slotProps={{\n htmlInput: {\n 'aria-label': 'Pick color',\n },\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n height: THEME_PREVIEW_SMALL_FIELD_HEIGHT,\n px: 0.5,\n },\n '& input[type=\"color\"]': {\n WebkitAppearance: 'none',\n alignSelf: 'center',\n boxSizing: 'border-box',\n border: 0,\n borderRadius: 0,\n display: 'block',\n height: THEME_PREVIEW_PICKER_SWATCH_HEIGHT,\n minHeight: THEME_PREVIEW_PICKER_SWATCH_HEIGHT,\n overflow: 'hidden',\n padding: 0,\n p: 0,\n width: '100%',\n },\n '& input[type=\"color\"]::-webkit-color-swatch-wrapper': {\n borderRadius: 0,\n p: 0,\n },\n '& input[type=\"color\"]::-webkit-color-swatch': {\n borderColor: '#94a3b8',\n borderRadius: 0,\n },\n '& input[type=\"color\"]::-moz-color-swatch': {\n borderColor: '#94a3b8',\n borderRadius: 0,\n },\n }}\n />\n {muiPaletteAnchorElement ? (\n <Popover\n open\n anchorEl={muiPaletteAnchorElement}\n transitionDuration={0}\n onClose={() => {\n setMuiPaletteAnchorElement(null);\n }}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n slotProps={{\n paper: {\n sx: {\n maxHeight: 'calc(100vh - 32px)',\n maxWidth: 'calc(100vw - 32px)',\n minWidth: 320,\n overflow: 'auto',\n p: 1.5,\n width: 'min(760px, calc(100vw - 32px))',\n },\n },\n }}\n >\n <div className=\"flex min-w-0 flex-col gap-10\">\n {themePreviewMuiPaletteColorRows.map((paletteRow, paletteRowIndex) => (\n <Box key={paletteRow.label} className=\"flex flex-col gap-10\">\n {paletteRowIndex > 0 ? <Divider flexItem /> : null}\n <Box\n sx={{\n display: 'grid',\n gap: 1,\n gridTemplateColumns: {\n xs: 'minmax(0, 1fr)',\n sm: '84px minmax(0, 1fr)',\n },\n }}\n >\n <Typography variant=\"caption\" color=\"text.secondary\">\n {paletteRow.label}\n </Typography>\n <Box\n sx={{\n display: 'grid',\n gap: 0.75,\n gridTemplateColumns: 'repeat(auto-fit, minmax(68px, 1fr))',\n minWidth: 0,\n }}\n >\n {paletteRow.colors.map((colorItem) => (\n <Box\n key={colorItem.key}\n component=\"button\"\n type=\"button\"\n onClick={() => {\n onChange(\n definition.path,\n applyColorPickerValue(value, colorItem.value),\n );\n setMuiPaletteAnchorElement(null);\n }}\n sx={{\n alignItems: 'center',\n backgroundColor: 'background.paper',\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: 1,\n color: 'text.secondary',\n cursor: 'pointer',\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n justifyContent: 'center',\n minWidth: 0,\n p: 0.5,\n transition: 'background-color 120ms ease, border-color 120ms ease',\n width: '100%',\n '&:hover': {\n backgroundColor: 'action.hover',\n borderColor: 'text.secondary',\n },\n }}\n >\n <Box\n sx={{\n width: 30,\n height: 30,\n borderRadius: 1,\n backgroundColor: colorItem.value,\n border: '1px solid',\n borderColor: 'divider',\n }}\n />\n <Box\n component=\"span\"\n sx={{\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: 1,\n }}\n >\n {colorItem.shade}\n </Box>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n ))}\n </div>\n </Popover>\n ) : null}\n </>\n {definition.allowAlpha ? (\n <div className=\"col-span-2 flex flex-col gap-2\">\n <Typography variant=\"caption\" color=\"text.secondary\">\n Current\n </Typography>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n className=\"truncate whitespace-nowrap\"\n >\n {value || '-'}\n </Typography>\n </div>\n ) : null}\n </div>\n ) : (\n <div />\n )}\n </div>\n );\n}\n"],"names":["themePreviewInputUnits","themePreviewMuiColorShades","themePreviewMuiColorPalettes","blue","lightBlue","cyan","teal","green","amber","orange","deepOrange","red","pink","purple","deepPurple","indigo","grey","blueGrey","themePreviewMuiPaletteColorRows","label","palette","acc","shade","paletteValue","THEME_PREVIEW_COLOR_PICKER_APPLY_DELAY_MS","THEME_PREVIEW_SMALL_FIELD_HEIGHT","THEME_PREVIEW_PICKER_SWATCH_HEIGHT","getUnitInputDisplayValue","value","unit","__name","normalizeUnitInputDisplayValue","sanitizedValue","decimalPointIndex","integerPart","decimalPart","normalizeCommittedUnitInputDisplayValue","normalizedValue","normalizeUnitInputValue","getUnitValueFormat","valueFormat","ThemePreviewColorField","disabled","definition","resetVersion","sectionKey","settings","onChange","onReset","muiPaletteAnchorElement","setMuiPaletteAnchorElement","useState","getThemePreviewPaletteValue","unitValueFormat","showColorPicker","alphaValue","getColorAlphaValue","helperText","resolvedHelperText","hasOptions","_a","isReadOnlyColorTextInput","displayValue","hasPickerControls","canBufferTextInput","bufferedTextValue","setBufferedTextValue","isBufferedTextInputFocused","setIsBufferedTextInputFocused","bufferedPickerValue","setBufferedPickerValue","toColorPickerValue","isBufferedPickerDirty","setIsBufferedPickerDirty","colorPickerApplyTimeoutRef","useRef","useEffect","commitBufferedTextValue","nextValue","commitBufferedPickerValue","nextPickerValue","applyColorPickerValue","inputEndAdornment","jsx","InputAdornment","jsxs","IconButton","event","RestartAltOutlinedIcon","Typography","TextField","_b","option","MenuItem","Fragment","Button","Popover","paletteRow","paletteRowIndex","Box","Divider","colorItem"],"mappings":"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"}
|