@vmscloud/moz-ui-grid-vue 0.1.41
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/README.md +71 -0
- package/dist/MozGrid.vue.d.ts +127 -0
- package/dist/bridge/VueRenderer.d.ts +37 -0
- package/dist/bridge/fieldBuilder.d.ts +9 -0
- package/dist/bridge/lifecycle.d.ts +6 -0
- package/dist/bridge/templateRegistry.d.ts +8 -0
- package/dist/chunks/index-BDQ0HlwR.js +3404 -0
- package/dist/chunks/index-D5KJLBGW.cjs +14 -0
- package/dist/chunks/notification.contract-BTOch6ed.js +16 -0
- package/dist/chunks/notification.contract-oFkBaE2U.cjs +1 -0
- package/dist/compat/MozGridVue.vue.d.ts +645 -0
- package/dist/compat/MozPivotVue.vue.d.ts +606 -0
- package/dist/compat/index.d.ts +9 -0
- package/dist/compat/legacyGridAliases.d.ts +8 -0
- package/dist/composables/useGridPreset.d.ts +19 -0
- package/dist/contracts/UserLayoutInstance.d.ts +38 -0
- package/dist/contracts/notification.contract.d.ts +41 -0
- package/dist/contracts/userLayout.contract.d.ts +16 -0
- package/dist/index.cjs +26 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +90599 -0
- package/dist/legacy/components/common/Dragging.d.ts +17 -0
- package/dist/legacy/components/common/Dragging.vue.d.ts +49 -0
- package/dist/legacy/components/common/custom-cell/FormulaEngine.d.ts +256 -0
- package/dist/legacy/components/common/custom-cell/FormulaInput.vue.d.ts +33 -0
- package/dist/legacy/components/common/custom-cell/GridCustomCell.vue.d.ts +23 -0
- package/dist/legacy/components/common/custom-cell/useFormulaAutocomplete.d.ts +44 -0
- package/dist/legacy/components/common/excel/ClientExcelUploadPopup.vue.d.ts +201 -0
- package/dist/legacy/components/common/excel/assets/IconDropZone.vue.d.ts +2 -0
- package/dist/legacy/components/common/excel/assets/IconFileUpload.vue.d.ts +2 -0
- package/dist/legacy/components/common/filter/GridFilter.vue.d.ts +23 -0
- package/dist/legacy/components/common/footer/GridFooter.vue.d.ts +29 -0
- package/dist/legacy/components/common/sort/GridSort.vue.d.ts +23 -0
- package/dist/legacy/components/common/toolbar/GridSearchInput.vue.d.ts +33 -0
- package/dist/legacy/components/grid/MozGridVue.vue.d.ts +2041 -0
- package/dist/legacy/components/grid/MozGridVueCore.vue.d.ts +118 -0
- package/dist/legacy/components/grid/bulk-editor/GridBulkEditor.vue.d.ts +10 -0
- package/dist/legacy/components/grid/column-settings/AlignPicker.vue.d.ts +10 -0
- package/dist/legacy/components/grid/column-settings/ColorSwatchPicker.vue.d.ts +11 -0
- package/dist/legacy/components/grid/column-settings/ColumnListItem.vue.d.ts +17 -0
- package/dist/legacy/components/grid/column-settings/ColumnOptionsPanel.vue.d.ts +32 -0
- package/dist/legacy/components/grid/column-settings/FontSizePicker.vue.d.ts +10 -0
- package/dist/legacy/components/grid/column-settings/FontStyleToggles.vue.d.ts +15 -0
- package/dist/legacy/components/grid/column-settings/MaskPresetPicker.vue.d.ts +14 -0
- package/dist/legacy/components/grid/context-menu/GridContextMenu.vue.d.ts +208 -0
- package/dist/legacy/components/grid/group-panel/GroupPanel.vue.d.ts +18 -0
- package/dist/legacy/components/grid/toolbar/ColumnPicker.vue.d.ts +17 -0
- package/dist/legacy/components/grid/toolbar/ColumnSettings.vue.d.ts +30 -0
- package/dist/legacy/components/grid/toolbar/GridOptionModal.vue.d.ts +211 -0
- package/dist/legacy/components/grid/toolbar/GridToolBox.vue.d.ts +69 -0
- package/dist/legacy/components/pivot/MozPivotVue.vue.d.ts +1868 -0
- package/dist/legacy/components/pivot/PivotContextMenu.vue.d.ts +634 -0
- package/dist/legacy/components/pivot/PivotFieldChip.vue.d.ts +16 -0
- package/dist/legacy/components/pivot/PivotFieldDropZone.vue.d.ts +26 -0
- package/dist/legacy/components/pivot/PivotFieldPanel.vue.d.ts +28 -0
- package/dist/legacy/components/pivot/PivotOptionModal.vue.d.ts +534 -0
- package/dist/legacy/components/pivot/PivotToolBox.vue.d.ts +79 -0
- package/dist/legacy/components/pivot/chart/EChart.vue.d.ts +13 -0
- package/dist/legacy/components/pivot/chart/MozPivotChart.types.d.ts +16 -0
- package/dist/legacy/components/pivot/chart/MozPivotChart.vue.d.ts +14 -0
- package/dist/legacy/components/pivot/chart/PivotChartDetail.vue.d.ts +13 -0
- package/dist/legacy/components/pivot/chart/PivotChartMini.vue.d.ts +18 -0
- package/dist/legacy/components/pivot/chart/PivotChartMultiple.vue.d.ts +18 -0
- package/dist/legacy/components/pivot/chart/PivotChartToolbar.vue.d.ts +38 -0
- package/dist/legacy/components/pivot/chart/chartUtils.d.ts +45 -0
- package/dist/legacy/components/pivot/chart/useChartData.d.ts +35 -0
- package/dist/legacy/composables/useCellTooltip.d.ts +8 -0
- package/dist/legacy/composables/useClientExcelExport.d.ts +24 -0
- package/dist/legacy/composables/useClientExcelStore.d.ts +16 -0
- package/dist/legacy/composables/useColumnFormatter.d.ts +45 -0
- package/dist/legacy/composables/useColumnSettings.d.ts +35 -0
- package/dist/legacy/composables/useContextMenu.d.ts +71 -0
- package/dist/legacy/composables/useGridBulkEditor.d.ts +36 -0
- package/dist/legacy/composables/useGridChanges.d.ts +28 -0
- package/dist/legacy/composables/useGridColumns.d.ts +37 -0
- package/dist/legacy/composables/useGridCustomCell.d.ts +34 -0
- package/dist/legacy/composables/useGridEvents.d.ts +14 -0
- package/dist/legacy/composables/useGridFilter.d.ts +38 -0
- package/dist/legacy/composables/useGridInstance.d.ts +16 -0
- package/dist/legacy/composables/useGridSelect.d.ts +18 -0
- package/dist/legacy/composables/useGridSelection.d.ts +18 -0
- package/dist/legacy/composables/useGridSort.d.ts +38 -0
- package/dist/legacy/composables/useGridUndoRedo.d.ts +28 -0
- package/dist/legacy/composables/useGridValidation.d.ts +28 -0
- package/dist/legacy/composables/useMaskPresets.d.ts +38 -0
- package/dist/legacy/composables/useSearchHighlight.d.ts +12 -0
- package/dist/legacy/icons/IconAdd.vue.d.ts +11 -0
- package/dist/legacy/icons/IconArrowDownWithTail.vue.d.ts +11 -0
- package/dist/legacy/icons/IconArrowLeft.vue.d.ts +11 -0
- package/dist/legacy/icons/IconArrowLeftWithTail.vue.d.ts +11 -0
- package/dist/legacy/icons/IconArrowRight.vue.d.ts +11 -0
- package/dist/legacy/icons/IconArrowUpCenter.vue.d.ts +11 -0
- package/dist/legacy/icons/IconArrowUpWithTail.vue.d.ts +11 -0
- package/dist/legacy/icons/IconChart.vue.d.ts +11 -0
- package/dist/legacy/icons/IconClose.vue.d.ts +13 -0
- package/dist/legacy/icons/IconColorPicker.vue.d.ts +11 -0
- package/dist/legacy/icons/IconCustomCell.vue.d.ts +11 -0
- package/dist/legacy/icons/IconDecide.vue.d.ts +11 -0
- package/dist/legacy/icons/IconDownload.vue.d.ts +11 -0
- package/dist/legacy/icons/IconDragHandler.vue.d.ts +11 -0
- package/dist/legacy/icons/IconFilter.vue.d.ts +11 -0
- package/dist/legacy/icons/IconInfoFilled.vue.d.ts +11 -0
- package/dist/legacy/icons/IconRedo.vue.d.ts +9 -0
- package/dist/legacy/icons/IconReset.vue.d.ts +9 -0
- package/dist/legacy/icons/IconResetGridToolbar.vue.d.ts +11 -0
- package/dist/legacy/icons/IconSearch.vue.d.ts +11 -0
- package/dist/legacy/icons/IconSetting.vue.d.ts +11 -0
- package/dist/legacy/icons/IconSettingFilled.vue.d.ts +11 -0
- package/dist/legacy/icons/IconSort.vue.d.ts +11 -0
- package/dist/legacy/icons/IconToastWarning.vue.d.ts +11 -0
- package/dist/legacy/icons/IconUndo.vue.d.ts +9 -0
- package/dist/legacy/icons/index.d.ts +25 -0
- package/dist/legacy/index.d.ts +69 -0
- package/dist/legacy/shared/colorPresets.d.ts +36 -0
- package/dist/legacy/store/UploadRefreshRegistry.d.ts +5 -0
- package/dist/legacy/store/excelStore.d.ts +89 -0
- package/dist/legacy/store/index.d.ts +231 -0
- package/dist/legacy/stores/index.d.ts +2 -0
- package/dist/legacy/stores/projectInfo/projectInfo.contract.d.ts +130 -0
- package/dist/legacy/stories/Autofit.stories.d.ts +9 -0
- package/dist/legacy/stories/CRUD.stories.d.ts +9 -0
- package/dist/legacy/stories/CellAttributes.stories.d.ts +19 -0
- package/dist/legacy/stories/CellMask.stories.d.ts +19 -0
- package/dist/legacy/stories/ClientExcel.stories.d.ts +8 -0
- package/dist/legacy/stories/Clipboard.stories.d.ts +12 -0
- package/dist/legacy/stories/ColumnVisibility.stories.d.ts +12 -0
- package/dist/legacy/stories/ColumnWidths.stories.d.ts +11 -0
- package/dist/legacy/stories/CustomSortFilter.stories.d.ts +7 -0
- package/dist/legacy/stories/DynamicRowHeight.stories.d.ts +13 -0
- package/dist/legacy/stories/Editors.stories.d.ts +9 -0
- package/dist/legacy/stories/EmptyState.stories.d.ts +10 -0
- package/dist/legacy/stories/FormatRow.stories.d.ts +20 -0
- package/dist/legacy/stories/Grouping.stories.d.ts +14 -0
- package/dist/legacy/stories/HeaderGroup.stories.d.ts +11 -0
- package/dist/legacy/stories/LargeData.stories.d.ts +19 -0
- package/dist/legacy/stories/MasterDetail.stories.d.ts +17 -0
- package/dist/legacy/stories/Merge.stories.d.ts +10 -0
- package/dist/legacy/stories/MultiRow.stories.d.ts +12 -0
- package/dist/legacy/stories/MultiRowCrud.stories.d.ts +11 -0
- package/dist/legacy/stories/MultiRowGroup.stories.d.ts +11 -0
- package/dist/legacy/stories/Pinning.stories.d.ts +44 -0
- package/dist/legacy/stories/Pivot.stories.d.ts +23 -0
- package/dist/legacy/stories/PivotAdvanced.stories.d.ts +20 -0
- package/dist/legacy/stories/PivotChart.stories.d.ts +23 -0
- package/dist/legacy/stories/PivotNonNumeric.stories.d.ts +27 -0
- package/dist/legacy/stories/Preset.stories.d.ts +11 -0
- package/dist/legacy/stories/ReactiveAPI.stories.d.ts +8 -0
- package/dist/legacy/stories/ReactiveSafety.stories.d.ts +28 -0
- package/dist/legacy/stories/Repro.stories.d.ts +36 -0
- package/dist/legacy/stories/RowAPI.stories.d.ts +12 -0
- package/dist/legacy/stories/SelectionModes.stories.d.ts +35 -0
- package/dist/legacy/stories/Streaming.stories.d.ts +12 -0
- package/dist/legacy/stories/Tree.stories.d.ts +13 -0
- package/dist/legacy/stories/WorkerMode.stories.d.ts +15 -0
- package/dist/legacy/stories/_helpers/localDataLoader.d.ts +7 -0
- package/dist/legacy/stories/_helpers/sampleData.d.ts +117 -0
- package/dist/legacy/types/FileParameter.d.ts +31 -0
- package/dist/legacy/types/StreamingParameter.d.ts +18 -0
- package/dist/legacy/types/excel.types.d.ts +48 -0
- package/dist/legacy/types/index.d.ts +10 -0
- package/dist/legacy/types/pivot-props.d.ts +140 -0
- package/dist/legacy/types/props.d.ts +176 -0
- package/dist/legacy/types/toolbar.d.ts +225 -0
- package/dist/legacy/utils/async/debounce.d.ts +4 -0
- package/dist/legacy/utils/crypto/crypto.d.ts +7 -0
- package/dist/legacy/utils/dialog/dialog.d.ts +19 -0
- package/dist/legacy/utils/excel/ExcelGuard.d.ts +73 -0
- package/dist/legacy/utils/excel/ExcelImportUtil.d.ts +34 -0
- package/dist/legacy/utils/excel/ExcelQueueManager.d.ts +57 -0
- package/dist/legacy/utils/excel/ExcelTaskRunner.d.ts +17 -0
- package/dist/legacy/utils/excel/ExcelTimeoutManager.d.ts +37 -0
- package/dist/legacy/utils/file.d.ts +34 -0
- package/dist/legacy/utils/http/rest.d.ts +5 -0
- package/dist/legacy/utils/id/generator.d.ts +2 -0
- package/dist/legacy/utils/index.d.ts +10 -0
- package/dist/store.cjs +1 -0
- package/dist/store.js +8 -0
- package/dist/stories/ColumnLockVisible.stories.d.ts +42 -0
- package/dist/stories/DateBooleanFilter.stories.d.ts +42 -0
- package/dist/stories/DisplayedRowApi.stories.d.ts +28 -0
- package/dist/stories/FieldId.stories.d.ts +113 -0
- package/dist/stories/GroupPanelWithoutToolbox.stories.d.ts +28 -0
- package/dist/stories/GroupRowRecycle.stories.d.ts +45 -0
- package/dist/stories/GroupTreeExpandNav.stories.d.ts +41 -0
- package/dist/stories/LargeData.stories.d.ts +20 -0
- package/dist/stories/MozGrid.stories.d.ts +51 -0
- package/dist/stories/PivotBarInitiallyOpen.stories.d.ts +69 -0
- package/dist/stories/PivotBarWithoutToolbox.stories.d.ts +39 -0
- package/dist/stories/SelectionApiPlayground.stories.d.ts +28 -0
- package/dist/stories/SingleSelectionModes.stories.d.ts +47 -0
- package/dist/stories/WideColumns.stories.d.ts +17 -0
- package/dist/style.css +1 -0
- package/dist/templates/CellEditor.d.ts +27 -0
- package/dist/templates/CellTemplate.d.ts +27 -0
- package/dist/templates/DetailTemplate.d.ts +60 -0
- package/dist/templates/GroupTemplate.d.ts +17 -0
- package/dist/templates/HeaderTemplate.d.ts +25 -0
- package/dist/types/injection-keys.d.ts +24 -0
- package/dist/types/slots.d.ts +49 -0
- package/dist/utils/excel/ExcelGuard.cjs +1 -0
- package/dist/utils/excel/ExcelGuard.js +74 -0
- package/dist/utils/excel/ExcelImportUtil.cjs +1 -0
- package/dist/utils/excel/ExcelImportUtil.js +61 -0
- package/dist/utils/excel/ExcelQueueManager.cjs +1 -0
- package/dist/utils/excel/ExcelQueueManager.js +10 -0
- package/dist/utils/excel/ExcelTaskRunner.cjs +1 -0
- package/dist/utils/excel/ExcelTaskRunner.js +12 -0
- package/dist/utils/excel/ExcelTimeoutManager.cjs +1 -0
- package/dist/utils/excel/ExcelTimeoutManager.js +420 -0
- package/docs/manual/examples.md +2385 -0
- package/docs/manual/reference.md +4695 -0
- package/docs/manual/reference_vue.md +709 -0
- package/package.json +129 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/vue3';
|
|
2
|
+
import { default as MozGrid } from '../MozGrid.vue';
|
|
3
|
+
/**
|
|
4
|
+
* 피벗 옵션 바를 **처음부터 켜 두기** — ITSM-2026-002154
|
|
5
|
+
*
|
|
6
|
+
* ## 두 축을 섞지 않는다
|
|
7
|
+
*
|
|
8
|
+
* | 축 | 소유자 | 성격 |
|
|
9
|
+
* |---|---|---|
|
|
10
|
+
* | 이 화면에서 바를 **쓰는가** | `usePivotBar` prop (기본 true) | 단방향 입력값 |
|
|
11
|
+
* | 지금 **보이는가** | `chrome.setPivotBarVisible()` | 사용자가 런타임에 바꾸는 상태 |
|
|
12
|
+
*
|
|
13
|
+
* 표시 여부를 prop 으로 받지 않는 이유: wrapper UI 옵션은 단방향이라(선언된 `update:*` emit 은
|
|
14
|
+
* `update:coreConfig` 하나뿐) 초기값 prop 을 두면 사용자가 바를 끈 뒤 실제 상태와 어긋난다.
|
|
15
|
+
* 그래서 표시의 소유자를 메서드 하나로 두고, 초기 표시는 **ready 콜백에서** 정한다.
|
|
16
|
+
*
|
|
17
|
+
* ## 그래서 이렇게 쓴다
|
|
18
|
+
*
|
|
19
|
+
* ```vue
|
|
20
|
+
* <MozGrid :core-config="coreConfig" @ready="onReady" />
|
|
21
|
+
* ```
|
|
22
|
+
* ```ts
|
|
23
|
+
* // 소비처는 패키지 루트에서 타입을 가져온다(vue/react index 가 재노출).
|
|
24
|
+
* import { MozGrid, type GridChrome, type PureSheet } from '@vmscloud/moz-ui-grid-vue';
|
|
25
|
+
* const onReady = (grid: PureSheet, chrome: GridChrome) => {
|
|
26
|
+
* chrome.setPivotBarVisible(true);
|
|
27
|
+
* };
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* (이 스토리 파일 자신은 패키지 내부라 `../MozGrid.vue` 를 직접 import 한다 — 형제 스토리와 동일.
|
|
31
|
+
* 루트 index 는 legacy 재노출을 포함해 스토리 번들에 불필요한 의존을 끌어온다.)
|
|
32
|
+
*
|
|
33
|
+
* `@ready` 의 **두 번째 인자로 크롬**이 온다. `ref` 로도 크롬에 닿을 수 있지만, ready 시점은
|
|
34
|
+
* 크롬이 확실히 준비된 순간이라 "안전한 시점 + 핸들"이 한 쌍으로 도착한다.
|
|
35
|
+
*/
|
|
36
|
+
declare const meta: Meta<typeof MozGrid>;
|
|
37
|
+
export default meta;
|
|
38
|
+
type Story = StoryObj<typeof MozGrid>;
|
|
39
|
+
/**
|
|
40
|
+
* ✅ 본 예제 — 화면을 열자마자 바가 떠 있다.
|
|
41
|
+
*
|
|
42
|
+
* 확인 포인트
|
|
43
|
+
* 1. 별도 조작 없이 **처음부터** 열/행/값 세 영역의 옵션 바가 보인다.
|
|
44
|
+
* 2. 상단 상태줄의 `pivotBarVisible: true` — ready 콜백이 켠 결과다.
|
|
45
|
+
* 3. 바의 필드 아이템 클릭 → 정렬이 asc → desc → none 으로 순환한다.
|
|
46
|
+
* 4. 필드 아이템의 필터 아이콘 → 값 목록 팝오버가 열린다(피벗의 유일한 필터 진입점).
|
|
47
|
+
* 5. 툴박스 ⚙ → '피벗 옵션 바 보기' 를 끄면 사라진다 — 초기값일 뿐 잠금이 아니다.
|
|
48
|
+
*/
|
|
49
|
+
export declare const InitiallyOpen: Story;
|
|
50
|
+
/**
|
|
51
|
+
* 대조군 — ready 에서 아무것도 하지 않으면 **바는 숨김으로 시작**한다(기존 기본 동작).
|
|
52
|
+
*
|
|
53
|
+
* 위 스토리와 나란히 열어 비교한다. 차이는 오직 ready 콜백 한 줄이다.
|
|
54
|
+
*/
|
|
55
|
+
export declare const DefaultHidden: Story;
|
|
56
|
+
/**
|
|
57
|
+
* 🚨 `usePivotBar: false` — 바를 **아예 쓰지 않는** 화면.
|
|
58
|
+
*
|
|
59
|
+
* 이때 `setPivotBarVisible(true)` 는 예외 없이 **무시**된다(바 자체가 없으므로).
|
|
60
|
+
*
|
|
61
|
+
* ⚠️ 이것은 "바 숨김"이 아니라 **피벗의 정렬·필터 진입점 제거**다:
|
|
62
|
+
* - 피벗은 헤더 클릭으로 정렬하지 않는다. 헤더 클릭이 바를 켜서 정렬 지점을 안내하는 구조라,
|
|
63
|
+
* 바가 없으면 정렬 진입점이 사라진다 → 헤더를 눌러도 아무 일도 일어나지 않는다.
|
|
64
|
+
* - 피벗 헤더에는 필터 아이콘이 없다. 값 목록 필터의 앵커가 바 아이템뿐이라 필터도 열 수 없다.
|
|
65
|
+
* - 툴박스 ⚙ 의 '피벗 옵션 바 보기' 항목도 함께 사라진다(죽은 토글 방지).
|
|
66
|
+
*
|
|
67
|
+
* 그래서 기본값은 `true` 이고, `false` 는 "피벗을 읽기 전용 표로만 쓴다"는 선언에 가깝다.
|
|
68
|
+
*/
|
|
69
|
+
export declare const DisabledEntirely: Story;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/vue3';
|
|
2
|
+
import { default as MozGrid } from '../MozGrid.vue';
|
|
3
|
+
/**
|
|
4
|
+
* 툴박스 없는 화면의 피벗 옵션 바 — ITSM-2026-001434
|
|
5
|
+
*
|
|
6
|
+
* `GroupPanelWithoutToolbox` 의 피벗 판. 그룹 패널에서 확인한 두 규칙이 피벗 옵션 바
|
|
7
|
+
* (`PivotBar`)에서도 똑같이 지켜지는지 보는 데모다.
|
|
8
|
+
*
|
|
9
|
+
* 1. **피벗 설정이 바를 강제로 켜지 않는다.**
|
|
10
|
+
* `PivotBar.template()` 은 처음부터 `!this.visible` 게이트를 갖고 있어 이 부분은 원래
|
|
11
|
+
* 정상이었다(그룹 패널만 이탈해 있었음). 회귀로 고정하기 위해 데모에 포함한다.
|
|
12
|
+
* 피벗에 진입해도 바는 숨김이고, 보기 설정 토글·헤더 클릭·`setPivotBarVisible` 로 열린다.
|
|
13
|
+
* 2. **툴박스가 없으면 바 위쪽 여백이 사라진다.**
|
|
14
|
+
* 바의 margin 은 `0 11px 8px 11px`(top 0)이라 위 여백을 툴박스가 대신 만들어 주고 있었다.
|
|
15
|
+
* `useToolBox: false` 면 바가 gridPane 테두리에 딱 붙어 보인다 → 그 조합에서만 `margin-top: 8px`.
|
|
16
|
+
*
|
|
17
|
+
* 툴박스가 없으면 보기 설정 팝오버(⚙)도 없어 바를 켤 UI 가 헤더 클릭뿐이었다.
|
|
18
|
+
* 그래서 `setPivotBarVisible` / `isPivotBarVisible` 을 공개 API 로 노출했다.
|
|
19
|
+
*/
|
|
20
|
+
declare const meta: Meta<typeof MozGrid>;
|
|
21
|
+
export default meta;
|
|
22
|
+
type Story = StoryObj<typeof MozGrid>;
|
|
23
|
+
/**
|
|
24
|
+
* 확인 포인트
|
|
25
|
+
* 1. 초기 화면 — 피벗으로 떠 있지만 **옵션 바가 보이지 않는다**(강제 활성화 없음).
|
|
26
|
+
* 2. [피벗 옵션 바 표시] 를 누르면 열/행/값 세 영역이 있는 바가 뜬다.
|
|
27
|
+
* 툴박스가 없어도 API 로 켜고 끌 수 있다.
|
|
28
|
+
* 3. 바가 뜬 상태에서 **위쪽 여백이 아래와 같은 8px** 인지 [여백 실측] 로 확인.
|
|
29
|
+
* 4. 그리드 헤더를 클릭해도 바가 열린다(피벗의 정렬 진입점 안내 동작).
|
|
30
|
+
* 5. 바의 필드 아이템을 클릭하면 정렬이 asc → desc → none 으로 순환한다.
|
|
31
|
+
*/
|
|
32
|
+
export declare const NoToolboxPivotBar: Story;
|
|
33
|
+
/**
|
|
34
|
+
* 대조군 — 툴박스가 있는 같은 피벗 화면.
|
|
35
|
+
*
|
|
36
|
+
* 툴박스 톱니바퀴(⚙) → '피벗 옵션 바 보기' 토글로 바를 켤 수 있고, 이때 바의 위쪽 여백은
|
|
37
|
+
* **0 이 정상**이다(툴박스가 이미 간격을 만들고 있다). 위 스토리와 나란히 열어 비교한다.
|
|
38
|
+
*/
|
|
39
|
+
export declare const WithToolboxPivotBar: Story;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/vue3';
|
|
2
|
+
import { default as MozGrid } from '../MozGrid.vue';
|
|
3
|
+
/**
|
|
4
|
+
* Selection API Playground — 이번 리팩터링으로 추가/변경된 선택 API 전수 검증
|
|
5
|
+
*
|
|
6
|
+
* API 하나당 버튼 1~2개로 실제 동작을 눈으로 확인한다.
|
|
7
|
+
*
|
|
8
|
+
* grid.rows (행 선택)
|
|
9
|
+
* - selectRowsByIds([rowId]) : rowId로 행 선택 (안정, enableReferCache:true)
|
|
10
|
+
* - selectRowsByViewIndices([v]) : 화면 물리 위치(viewIndex)로 행 선택 — 정렬/필터 정확
|
|
11
|
+
* - selectRowRangeByViewIndex(s, e) : 화면상 N~M번째 범위 선택
|
|
12
|
+
* - getActiveRow() : 마지막 상호작용 행(정책④ 앵커)
|
|
13
|
+
*
|
|
14
|
+
* grid.cells (셀 선택)
|
|
15
|
+
* - selectCellsByIds([{rowId, columnId}]) : rowId+열로 셀 선택
|
|
16
|
+
* - selectCellsByViewIndices([{viewIndex, columnId}]) : viewIndex+열로 셀 선택
|
|
17
|
+
* - selectCellRangeByViewIndex(a,b) : 셀 사각형 범위
|
|
18
|
+
* - getActiveCell() : 현재 앵커 셀 {rowId, viewIndex, columnId}
|
|
19
|
+
* - clearCellSelection() : 셀 선택만 해제 (행 선택 유지)
|
|
20
|
+
*
|
|
21
|
+
* 이벤트: row:click / cell:click 페이로드에 rowId·viewIndex·sourceIndex가 실리는지 확인
|
|
22
|
+
*
|
|
23
|
+
* 정책④ traversal: getActiveRow 를 앵커로 "다음/이전" — 셀 클릭 후에도 셀 커서 기준 이동
|
|
24
|
+
*/
|
|
25
|
+
declare const meta: Meta<typeof MozGrid>;
|
|
26
|
+
export default meta;
|
|
27
|
+
type Story = StoryObj<typeof MozGrid>;
|
|
28
|
+
export declare const Playground: Story;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/vue3';
|
|
2
|
+
import { default as MozGrid } from '../MozGrid.vue';
|
|
3
|
+
/**
|
|
4
|
+
* 단일 선택 모드 데모 — ITSM-2026-001552.
|
|
5
|
+
*
|
|
6
|
+
* ## 두 도메인은 독립이다
|
|
7
|
+
*
|
|
8
|
+
* `rowSelection`(행 = identity)과 `cellSelection`(셀 = 자리)은 서로 다른 축이며,
|
|
9
|
+
* 한쪽을 `'single'` 로 좁혀도 다른 쪽 동작은 그대로 남는다.
|
|
10
|
+
*
|
|
11
|
+
* | 스토리 | 설정 | 기대 |
|
|
12
|
+
* |---|---|---|
|
|
13
|
+
* | `SingleRow` | `rowSelection: single + trigger:'checkbox'` + `cellSelection: range` | 행은 항상 1개(라디오처럼), 셀 범위는 자유 |
|
|
14
|
+
* | `SingleCell` | `cellSelection: single` | 셀은 항상 1개 |
|
|
15
|
+
*
|
|
16
|
+
* ## 무엇을 확인하는 스토리인가
|
|
17
|
+
*
|
|
18
|
+
* `'single'` 인데 여러 개가 잡히던 회귀(ITSM-2026-001552)를 눈으로 재확인하기 위한 것이다.
|
|
19
|
+
* 아래 조작을 **모두** 시도해도 카운터가 1을 넘지 않아야 한다:
|
|
20
|
+
* 체크박스 연속 체크, 드래그, Ctrl+클릭 반복, Shift+클릭, Shift+화살표, Ctrl+A.
|
|
21
|
+
*
|
|
22
|
+
* 특히 `trigger: 'checkbox'` 는 원래 **누적(additive)** 시맨틱이라 `single` 과 정면으로 부딪히는
|
|
23
|
+
* 조합이다. 회귀 당시 이 경로가 플래그를 우회해 그대로 누적됐으므로 기본 스토리로 삼는다.
|
|
24
|
+
*
|
|
25
|
+
* ## wrapper 기본값과의 관계
|
|
26
|
+
*
|
|
27
|
+
* MozGrid(GridChrome)는 `cellSelection` 미지정 시 `{ mode: 'range' }` 를 주입한다
|
|
28
|
+
* (ITSM-2026-001457). 이는 **미지정일 때만** 적용되므로, 아래처럼 명시하면 그 값이 이긴다.
|
|
29
|
+
*/
|
|
30
|
+
declare const meta: Meta<typeof MozGrid>;
|
|
31
|
+
export default meta;
|
|
32
|
+
type Story = StoryObj<typeof MozGrid>;
|
|
33
|
+
/**
|
|
34
|
+
* 행 단일 선택 — `rowSelection: { mode: 'single' }`.
|
|
35
|
+
*
|
|
36
|
+
* 셀 범위 선택(`cellSelection: 'range'`)을 **함께** 켜 둔 것이 핵심이다. 회귀 당시 이 조합에서
|
|
37
|
+
* 행 `single` 이 무력화됐기 때문에(코어가 두 모드를 OR 로 묶어 다중 허용을 판정했다),
|
|
38
|
+
* 같은 조합을 그대로 재현해 둔다.
|
|
39
|
+
*/
|
|
40
|
+
export declare const SingleRow: Story;
|
|
41
|
+
/**
|
|
42
|
+
* 셀 단일 선택 — `cellSelection: { mode: 'single' }`.
|
|
43
|
+
*
|
|
44
|
+
* 이 모드는 타입에만 존재하고 실제로는 `'range'` 와 동일하게 동작했다(사실상 미구현).
|
|
45
|
+
* ITSM-2026-001552 에서 실제 단일 셀 동작을 구현했다.
|
|
46
|
+
*/
|
|
47
|
+
export declare const SingleCell: Story;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/vue3';
|
|
2
|
+
import { default as MozGrid } from '../MozGrid.vue';
|
|
3
|
+
/**
|
|
4
|
+
* 다수 컬럼(가로 가상화) 성능 스토리
|
|
5
|
+
*
|
|
6
|
+
* 300개 컬럼 × 20,000행. Center 컬럼 수가 가로 가상화 임계값(50)을 크게 넘겨
|
|
7
|
+
* `HorizontalVirtualScroller`가 활성화되고, 보이는 컬럼만 DOM에 렌더링된다.
|
|
8
|
+
* 기존 `LargeData`(10컬럼)는 가로 가상화가 켜지지 않으므로, 가로 스크롤 성능·
|
|
9
|
+
* 빈 셀 깜빡임·컬럼 정렬을 검증하려면 이 스토리를 사용한다.
|
|
10
|
+
*/
|
|
11
|
+
declare const meta: Meta<typeof MozGrid>;
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof MozGrid>;
|
|
14
|
+
/**
|
|
15
|
+
* 300컬럼 × 20k행 — 가로 가상화 활성 상태에서 가로/세로 스크롤 성능 검증용.
|
|
16
|
+
*/
|
|
17
|
+
export declare const ThreeHundredColumns: Story;
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";.moz-client-excel-body{height:100%;display:flex;flex-direction:column}.moz-client-excel-options{display:flex;gap:8px;padding:0 0 12px;justify-content:space-between}.moz-client-excel-options .option-row{display:flex;gap:8px;font-size:12px}.moz-client-excel-options .option-label{color:#6a7184;font-weight:500;min-width:70px}.moz-drop-zone{flex:1;background-color:#f8f8fd;border:1px dashed #4568e0;display:flex;align-items:center;justify-content:center;flex-direction:column;font-size:13px;cursor:pointer}.moz-drop-zone>*{pointer-events:none}.moz-drop-zone.dropzone-active{border-style:solid}.moz-grid-chrome[data-v-8f519055]{overflow:hidden}.ps-key-field:before{content:"";width:12px;height:12px;min-width:12px;min-height:12px;background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3e%3cg%20clip-path='url(%23clip0_7840_6172)'%3e%3cpath%20d='M5.32501%200.347116C6.03401%200.467898%206.70045%200.767629%207.26124%201.21793C7.82204%201.66824%208.25863%202.25422%208.52969%202.9204C8.80075%203.58658%208.8973%204.31091%208.81021%205.02483C8.72312%205.73876%208.45527%206.41864%208.03201%207.00012L8.09501%207.06212H8.60801C8.69659%207.06212%208.78154%207.09731%208.84418%207.15994C8.90682%207.22258%208.94201%207.30753%208.94201%207.39612V7.82112H9.37001C9.45859%207.82112%209.54354%207.85631%209.60618%207.91894C9.66882%207.98158%209.70401%208.06653%209.70401%208.15512V8.58012H10.132C10.2206%208.58012%2010.3055%208.61531%2010.3682%208.67794C10.4308%208.74058%2010.466%208.82553%2010.466%208.91412V9.34312H10.991C11.0368%209.34324%2011.082%209.35271%2011.1239%209.37094C11.1659%209.38917%2011.2037%209.41577%2011.235%209.44912L11.609%209.84912C11.6678%209.91197%2011.7%209.99508%2011.699%2010.0811L11.685%2011.4581C11.6842%2011.5462%2011.6487%2011.6304%2011.5861%2011.6924C11.5236%2011.7543%2011.4391%2011.7891%2011.351%2011.7891H9.99201C9.94785%2011.7889%209.90417%2011.78%209.86349%2011.7628C9.82281%2011.7457%209.78594%2011.7206%209.75501%2011.6891L6.41001%208.34512C5.80867%208.6281%205.14914%208.76549%204.48483%208.74614C3.82051%208.7268%203.17009%208.55127%202.58624%208.23377C2.00239%207.91627%201.50153%207.46573%201.1242%206.91863C0.746885%206.37153%200.503719%205.74326%200.414401%205.08469C0.325083%204.42613%200.392124%203.75578%200.610094%203.12795C0.828064%202.50011%201.19084%201.93244%201.66903%201.4709C2.14722%201.00936%202.72739%200.666936%203.36256%200.47135C3.99772%200.275764%204.67002%200.232518%205.32501%200.345116M3.31101%204.22412C3.54784%204.28542%203.79826%204.26714%204.02368%204.17208C4.24909%204.07702%204.43699%203.91047%204.55841%203.69809C4.67982%203.48571%204.72802%203.23929%204.69558%202.99681C4.66313%202.75433%204.55184%202.52926%204.37885%202.35627C4.20587%202.18329%203.98079%202.07199%203.73831%202.03955C3.49584%202.0071%203.24942%202.0553%203.03704%202.17672C2.82465%202.29814%202.6581%202.48603%202.56304%202.71145C2.46798%202.93686%202.4497%203.18728%202.51101%203.42412C2.56105%203.61661%202.66159%203.79225%202.80223%203.93289C2.94287%204.07353%203.11851%204.17407%203.31101%204.22412Z'%20fill='%238998B5'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_7840_6172'%3e%3crect%20width='12'%20height='12'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e");margin-right:6px}.ps-sorted.ps-sort-asc .ps-sort-icon{display:flex!important;align-items:center;display:inline-block}.ps-sorted.ps-sort-asc .ps-sort-icon:before{content:""!important;width:12px!important;height:12px!important;min-width:12px!important;min-height:12px!important;display:inline-block;background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3e%3cpath%20d='M5.04577%203.5507L2.27851%205.99951C2.10357%206.15432%201.88091%206.23173%201.61055%206.23173C1.34018%206.23173%201.11753%206.15432%200.942589%205.99951C0.767647%205.8447%200.680176%205.64767%200.680176%205.40842C0.680176%205.16917%200.767647%204.97214%200.942589%204.81733L5.33204%200.933012C5.52289%200.764129%205.74554%200.679688%206%200.679688C6.25446%200.679688%206.47711%200.764129%206.66796%200.933012L11.0574%204.81733C11.2324%204.97214%2011.3198%205.16917%2011.3198%205.40842C11.3198%205.64767%2011.2324%205.8447%2011.0574%205.99951C10.8825%206.15432%2010.6598%206.23173%2010.3895%206.23173C10.1191%206.23173%209.89643%206.15432%209.72149%205.99951L6.95423%203.5507V10.4749C6.95423%2010.7142%206.86278%2010.9147%206.67989%2011.0766C6.49699%2011.2384%206.27036%2011.3193%206%2011.3193C5.72964%2011.3193%205.50301%2011.2384%205.32011%2011.0766C5.13722%2010.9147%205.04577%2010.7142%205.04577%2010.4749V3.5507Z'%20fill='%234568E0'%3e%3c/path%3e%3c/svg%3e")}.ps-sorted.ps-sort-asc .ps-sort-icon:after{color:#4568e0;font-size:12px;opacity:1;display:inline-block}.ps-sorted.ps-sort-desc .ps-sort-icon{display:flex!important;align-items:center;display:inline-block}.ps-sorted.ps-sort-desc .ps-sort-icon:before{content:""!important;width:12px!important;height:12px!important;min-width:12px!important;min-height:12px!important;display:inline-block;background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3e%3cpath%20d='M5.04577%208.4493L2.27851%206.00049C2.10357%205.84568%201.88091%205.76827%201.61055%205.76827C1.34018%205.76827%201.11753%205.84568%200.942589%206.00049C0.767647%206.1553%200.680176%206.35233%200.680176%206.59158C0.680176%206.83083%200.767647%207.02786%200.942589%207.18267L5.33204%2011.067C5.52289%2011.2359%205.74554%2011.3203%206%2011.3203C6.25446%2011.3203%206.47711%2011.2359%206.66796%2011.067L11.0574%207.18267C11.2324%207.02786%2011.3198%206.83083%2011.3198%206.59158C11.3198%206.35233%2011.2324%206.1553%2011.0574%206.00049C10.8825%205.84568%2010.6598%205.76827%2010.3895%205.76827C10.1191%205.76827%209.89643%205.84568%209.72149%206.00049L6.95423%208.4493V1.52508C6.95423%201.28583%206.86278%201.08528%206.67989%200.923434C6.49699%200.761588%206.27036%200.680664%206%200.680664C5.72964%200.680664%205.50301%200.761588%205.32011%200.923434C5.13722%201.08528%205.04577%201.28583%205.04577%201.52508V8.4493Z'%20fill='%234568E0'%3e%3c/path%3e%3c/svg%3e")}.ps-sorted.ps-sort-desc .ps-sort-icon:after{color:#4568e0;font-size:12px;opacity:1;display:inline-block}.moz-grid-tooltip{position:fixed;color:#fff;font-size:.8125rem;line-height:1rem;text-align:left;padding:6px 10px;background:#5d606b;pointer-events:none;box-shadow:2px 2px 7px #00000030;border-radius:4px;z-index:999999;max-width:350px;overflow:hidden;word-break:break-all;transition-property:opacity;transition-duration:.12s}.moz-grid-tooltip div,.moz-grid-tooltip span,.moz-grid-tooltip td,.moz-grid-tooltip th{color:#fff}.moz-grid-tooltip .title{display:flex;align-items:center;font-weight:700;font-size:15px}.moz-grid-tooltip .small{font-size:.6875rem;line-height:.6875rem;font-weight:400;color:#b6b7c1;display:block;margin-bottom:2px;margin-top:4px}.moz-grid-tooltip--error{background:#c0392b}.grid-search-moz-input[data-v-17b36a9d]{width:180px;height:30px;border-radius:4px}.grid-search-moz-input .moz-input-grid-search.no-label[data-v-17b36a9d]{margin-top:0}.grid-search-moz-input .moz-input-grid-search[data-v-17b36a9d]{display:flex;position:relative;width:100%;height:100%}.grid-search-moz-input .moz-input-grid-search .moz-input-grid-search-input-wrapper[data-v-17b36a9d]{display:flex;flex:1;border:1px solid #bac6d4;border-left:none;border-right:none}.grid-search-moz-input .moz-input-grid-search .moz-input-grid-search-input-wrapper[data-v-17b36a9d]:focus-within{box-shadow:0 0 0 3px #4568e033;z-index:2}.grid-search-moz-input .moz-input-grid-search .moz-input-grid-search-input-wrapper[data-v-17b36a9d]:has(input:disabled){background-color:var(--color-input-disabled-background)}.grid-search-moz-input .moz-input-grid-search .moz-input-grid-search-input-wrapper input[data-v-17b36a9d]{height:28px;color:#28364e;font-size:.813rem;padding:4px 8px;border:none;width:100%;background:transparent;box-sizing:border-box}.grid-search-moz-input .moz-input-grid-search .moz-input-grid-search-input-wrapper input[data-v-17b36a9d]:focus{outline:none}.grid-search-moz-input .moz-input-grid-search .moz-input-grid-search-input-wrapper .grid-search-count-popup[data-v-17b36a9d]{position:absolute;top:100%;left:50%;transform:translate(-50%);margin-top:4px;padding:2px 8px;font-size:.6875rem;color:#6a7184;background:#fff;border:1px solid #dde2ea;border-radius:4px;white-space:nowrap;box-shadow:0 2px 6px #00000014;z-index:10;pointer-events:none;display:flex;align-items:center;gap:4px}.grid-search-moz-input .moz-input-grid-search .moz-input-grid-search-input-wrapper .grid-search-loading[data-v-17b36a9d]{display:inline-flex;align-items:center;gap:3px;color:#4568e0;font-size:.625rem}.grid-search-moz-input .moz-input-grid-search .moz-input-grid-search-input-wrapper .grid-search-spinner[data-v-17b36a9d]{width:10px;height:10px;border:1.5px solid #dde2ea;border-top-color:#4568e0;border-radius:50%;animation:grid-search-spin-17b36a9d .6s linear infinite}@keyframes grid-search-spin-17b36a9d{to{transform:rotate(360deg)}}.grid-search-moz-input .moz-input-grid-search:not(:has(>label))>.moz-button[data-v-17b36a9d]{margin-top:0}.grid-search-moz-input .moz-input-grid-search input[data-v-17b36a9d]::placeholder{color:#96a5be}.grid-search-moz-input .moz-input-grid-search>button.search-button.spin[data-v-17b36a9d]{border:1px solid #a7b1bc!important;top:0;height:100%;width:30px}.grid-search-moz-input .moz-input-grid-search>button.search-button.spin.inc[data-v-17b36a9d]{border-top-left-radius:0;border-bottom-left-radius:0}.grid-search-moz-input .moz-input-grid-search>button.search-button.spin.inc svg[data-v-17b36a9d]{transform:rotate(180deg)}.grid-search-moz-input .moz-input-grid-search>button.search-button.spin.dec[data-v-17b36a9d]{border-top-right-radius:0;border-bottom-right-radius:0}.grid-search-moz-input .moz-input-grid-search>button.search-button.spin[data-v-17b36a9d]:disabled{background-color:var(--color-input-disabled-background);color:#a7b1bc;border:1px solid var(--color-font-button-disabled)}.grid-search-moz-input .moz-input-grid-search:focus-within .moz-input-grid-search-input-wrapper[data-v-17b36a9d],.grid-search-moz-input .moz-input-grid-search:hover .moz-input-grid-search-input-wrapper[data-v-17b36a9d]{border-color:#4568e0}.grid-search-moz-input .moz-input-grid-search:focus-within button.moz-button.spin[data-v-17b36a9d],.grid-search-moz-input .moz-input-grid-search:hover button.moz-button.spin[data-v-17b36a9d]{border-color:#4568e0!important}.grid-search-moz-input .moz-input-grid-search:focus-within:has(input:disabled) .moz-input-grid-search-input-wrapper[data-v-17b36a9d],.grid-search-moz-input .moz-input-grid-search:hover:has(input:disabled) .moz-input-grid-search-input-wrapper[data-v-17b36a9d]{border-color:#bac6d4}.grid-search-moz-input .moz-input-grid-search:focus-within:has(input:disabled) button.moz-button.spin[data-v-17b36a9d],.grid-search-moz-input .moz-input-grid-search:hover:has(input:disabled) button.moz-button.spin[data-v-17b36a9d]{border-color:#b1bac4!important;background:none;background-color:#f4f4f9!important}.extend-flex-grid-tool-container[data-v-6803b520]{box-sizing:border-box}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper[data-v-6803b520]{height:50px;min-height:50px;max-height:50px;display:flex;justify-content:space-between;align-items:center;padding:8px 10px;background-color:#fff;box-sizing:border-box}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper[data-v-6803b520]{display:flex;align-items:center;margin-right:6px;gap:2px}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper[data-v-6803b520]{width:24px;height:24px}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper[data-v-6803b520]{width:24px;height:24px;cursor:pointer;display:flex;gap:4px;justify-content:center;align-items:center;border-radius:4px;background-color:#fff;place-items:center}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper[data-v-6803b520]:hover{background-color:#8998b529}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper:not(.extend-grid-tool-disabled).has-item[data-v-6803b520]{background-color:#4568e029}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper:not(.extend-grid-tool-disabled).is-active[data-v-6803b520]{background-color:#4568e029}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper span[data-v-6803b520]{color:#28364e;font-size:12px;font-style:normal;font-weight:400;line-height:100%;white-space:nowrap}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper span.extend-grid-tool-badge-count[data-v-6803b520]{border:none;width:17px;height:16px;border-radius:4px;background:#4568e0;color:#fff;font-size:12px;font-style:normal;font-weight:400;line-height:100%;display:flex;justify-content:center;align-items:center;margin-left:2px}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper span.extend-grid-tool-badge-count[data-count="0"][data-v-6803b520]{background:#8998b5}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper .extend-grid-filter-disabled[data-v-6803b520]:hover,.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper.disabled[data-v-6803b520]:hover{cursor:not-allowed}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-setup-wrapper[data-v-6803b520]{display:flex;align-items:center}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-setup-wrapper .icon-grid-setting-wrapper[data-v-6803b520]{display:flex;margin-right:5px;justify-content:center;align-items:center;width:28px;height:28px;border-radius:4px;border:1px solid #bac6d4}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-setup-wrapper .icon-grid-setting-wrapper[data-v-6803b520]:hover{background-color:#8998b529}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-setup-wrapper .icon-grid-setting-wrapper.disabled[data-v-6803b520]:hover{cursor:not-allowed;background-color:inherit}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-setup-wrapper .chart-icon-wrapper[data-v-6803b520]{border:1px solid #bac6d4}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-setup-wrapper .chart-icon-wrapper[data-v-6803b520]:hover{background-color:#8998b529}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-setup-wrapper .chart-icon-wrapper.disabled[data-v-6803b520]:hover{cursor:not-allowed;background-color:inherit}.extend-flex-grid-tool-container .extend-flex-grid-tool-top-wrapper .extend-grid-tool-setup-wrapper svg[data-v-6803b520]{vertical-align:middle;cursor:pointer}.extend-grid-tool-disabled[data-v-6803b520]{pointer-events:none}.extend-grid-tool-disabled[data-v-6803b520]:hover{cursor:not-allowed}.extend-grid-tool-separator[data-v-6803b520]{width:1px;height:15px;margin-right:10px;background-color:#bac6d4}.extend-grid-tool-search[data-v-6803b520]{width:180px}.extend-grid-tool-search .moz-button[data-v-6803b520],.extend-grid-tool-search .moz-input[data-v-6803b520],.extend-grid-tool-search .wj-control[data-v-6803b520]{min-height:26px!important;height:26px!important}.extend-grid-tool-search .wj-form-control[data-v-6803b520]{min-height:24px!important;height:24px!important}.extend-grid-tool-toggle-icon-wrapper[data-v-6803b520]{width:18px;height:18px;background-color:#e9edf4;border-radius:100%;display:flex;justify-content:center;align-items:center;cursor:pointer;margin-left:10px}.extend-grid-tool-toggle[data-v-6803b520]{display:flex;justify-content:center;cursor:pointer}.extend-grid-tool-toggle[data-v-6803b520]:hover{background-color:#4568e017}.extend-grid-tool-badge-wrapper[data-v-6803b520]{display:flex;align-items:center}.extend-grid-tool-badge-wrapper .extend-grid-tool-badge-item-wrapper.extend-grid-tool-disabled[data-v-6803b520]:hover{cursor:not-allowed!important}.chart-icon-wrapper[data-v-6803b520]{display:flex;justify-content:center;align-items:center;width:28px;height:28px;border-radius:4px}.chart-icon-wrapper[data-v-6803b520]:hover{background-color:#8998b529}.pivot-grid-context-menu .context-menu-content-wrapper[data-v-b4015119]{border-radius:8px}.pivot-grid-context-menu .context-menu-content-wrapper .context-menu-separator[data-v-b4015119]{background:#ddddec}.pivot-grid-context-menu .context-menu-content-wrapper .context-menu-item[data-v-b4015119]{padding:0 16px;height:36px;font-size:13px;display:flex;justify-content:space-between;align-items:center}.pivot-grid-context-menu .context-menu-content-wrapper .context-menu-item[data-v-b4015119]:hover{background:#4568e017}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-option-item[data-v-b4015119]{padding:0 16px;height:36px;font-size:13px;display:flex;justify-content:space-between;align-items:center;gap:10px}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-option-footer[data-v-b4015119]{padding:13px 16px;display:flex;justify-content:flex-end;gap:8px}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-context-menu-title-wrapper[data-v-b4015119]{padding:8px 16px;display:flex;justify-content:space-between}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-context-menu-title-wrapper .pivot-grid-context-menu-button[data-v-b4015119]{width:22px!important;min-width:22px!important;height:22px!important;min-height:22px!important}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-context-menu-title-wrapper .pivot-grid-context-menu-title[data-v-b4015119]{font-size:16px;font-weight:500}.layout-title-input[data-v-b4015119]{height:26px;border-radius:4px;border:1px solid #a7b1bc;background-color:#fff;font-size:12px;padding:10px 6px;color:#28364e}.layout-title-input[data-v-b4015119]:hover{border-color:#4568e0}.layout-title-input[data-v-b4015119]:focus{border-color:#4568e0}.layout-title-input.invalid[data-v-b4015119]{border-color:red}.layout-title-input.disabled[data-v-b4015119]{background-color:#f4f4f9;color:#a7b1bc}.layout-title-input.disabled[data-v-b4015119]:hover{border-color:#a7b1bc}.drag-item[data-v-1b0d68de]{position:relative;cursor:grab}.drag-item[data-v-1b0d68de]:active{cursor:grabbing}.drag-item.drag-handle-mode[data-v-1b0d68de]{cursor:default;-webkit-user-select:auto;user-select:auto}.drag-item.drag-handle-mode[data-v-1b0d68de]:active{cursor:default}.drag-item.on-drag-over-top[data-v-1b0d68de]:before{content:"";position:absolute;top:-1px;left:0;right:0;height:2px;background:#4568e0;border-radius:1px;z-index:1;pointer-events:none}.drag-item.on-drag-over-bottom[data-v-1b0d68de]:after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:#4568e0;border-radius:1px;z-index:1;pointer-events:none}.drag-item.on-drag-over-left[data-v-1b0d68de]:before{content:"";position:absolute;left:-1px;top:0;bottom:0;width:2px;background:#4568e0;border-radius:1px;z-index:1;pointer-events:none}.drag-item.on-drag-over-right[data-v-1b0d68de]:after{content:"";position:absolute;right:-1px;top:0;bottom:0;width:2px;background:#4568e0;border-radius:1px;z-index:1;pointer-events:none}.list-move[data-v-1b0d68de]{transition:all .5s ease}.list-enter-active[data-v-1b0d68de],.list-leave-active[data-v-1b0d68de]{transition:none}.list-enter-from[data-v-1b0d68de],.list-leave-to[data-v-1b0d68de]{opacity:0}.list-leave-active[data-v-1b0d68de]{position:absolute}.moz-filters-wrapper.dragging-container[data-v-9890c576]{display:flex;flex-direction:column;gap:8px}.moz-popup-container.moz-filter-popup .moz-popup[data-v-9890c576]{overflow-x:hidden}.moz-popup-container.moz-filter-popup .moz-popup .moz-filter-handler[data-v-9890c576]{display:flex;justify-content:center;align-items:center;width:20px;height:20px;cursor:grab}.moz-popup-container.moz-filter-popup .moz-popup .moz-filter-handler[data-v-9890c576]:active{cursor:grabbing}.moz-popup-container.moz-filter-popup .moz-popup .moz-filter-row[data-v-9890c576]{align-items:center;display:grid;grid-template-columns:20px 75px 130px 65px 1fr 20px;gap:10px}.moz-popup-container.moz-filter-popup .moz-popup .moz-filter-row.minify-width[data-v-9890c576]{grid-template-columns:20px 130px 65px 1fr 20px}.moz-popup-container.moz-filter-popup .moz-popup .moz-filter-row .filter-operation-row[data-v-9890c576]{display:flex;flex-direction:row}.moz-popup-container.moz-filter-popup .moz-popup .moz-filter-row .filter-operation-row td[data-v-9890c576]{font-family:Roboto;white-space:pre;overflow:hidden;text-overflow:ellipsis}.moz-popup-container.moz-filter-popup .moz-popup .moz-filter-row .filter-operation-row td.symbol[data-v-9890c576]{width:14px;margin-right:20px;text-align:center}.moz-popup-container.moz-filter-popup .moz-popup .moz-filter-row .filter-operation-row td.desc[data-v-9890c576]{width:100px;color:#96a5be}.moz-popup-container.moz-filter-popup .moz-popup .remove-row[data-v-9890c576]{cursor:pointer;width:20px!important;height:20px!important;min-width:20px!important;min-height:20px!important;display:flex;justify-content:center;align-items:center}.moz-popup-container.moz-filter-popup .moz-popup .remove-row[data-v-9890c576]:focus{box-shadow:0 0 0 3px #4568e033,0 0 0 .5px #4568e0;border-radius:4px}.moz-popup-container.moz-filter-popup .moz-popup .add-row[data-v-9890c576]{display:flex;justify-content:space-between;color:#4568e0;font-size:12px;padding-top:0;width:100%}.moz-filter-footer[data-v-9890c576]{display:flex;justify-content:space-between;align-items:center;width:100%;padding:0 4px}.moz-filter-footer-actions[data-v-9890c576]{display:flex;gap:8px;color:#4568e0;font-size:12px}.filter-operation-row[data-v-9890c576]{display:flex;flex-direction:row}.filter-operation-row td[data-v-9890c576]{font-family:Roboto;white-space:pre;overflow:hidden;text-overflow:ellipsis}.filter-operation-row td.symbol[data-v-9890c576]{width:14px;margin-right:20px;text-align:center}.filter-operation-row td.desc[data-v-9890c576]{width:100px;color:#96a5be}.moz-sort-container[data-v-76b573a3]{display:flex;flex-direction:column;gap:10px}.moz-sort-row[data-v-76b573a3]{align-items:center;display:grid;grid-template-columns:20px 2fr 1fr 20px;gap:10px}.moz-sort-row--pivot[data-v-76b573a3]{grid-template-columns:20px 2fr 1fr 1fr 20px}.moz-sort-handler[data-v-76b573a3]{display:flex;justify-content:center;align-items:center;width:20px;height:20px;cursor:grab}.moz-sort-handler[data-v-76b573a3]:active{cursor:grabbing}.remove-row[data-v-76b573a3]{cursor:pointer;width:20px!important;height:20px!important;min-width:20px!important;min-height:20px!important;display:flex;justify-content:center;align-items:center}.add-row[data-v-76b573a3]{display:flex;justify-content:space-between;color:#4568e0;font-size:12px;padding:16px 0}.moz-sort-footer[data-v-76b573a3]{display:flex;justify-content:space-between;align-items:center;width:100%}.moz-sort-footer-actions[data-v-76b573a3]{display:flex;gap:8px;color:#4568e0;font-size:12px}.formula-input-container[data-v-135d55ba],.formula-input-wrapper[data-v-135d55ba]{position:relative;width:100%}.formula-textarea[data-v-135d55ba],.formula-highlight-overlay[data-v-135d55ba]{padding:10px 12px;margin:0;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;font-weight:400;font-style:normal;font-variant:normal;font-stretch:normal;line-height:1.5;letter-spacing:0px;word-spacing:0px;text-rendering:auto;text-indent:0;text-transform:none;tab-size:4;-moz-tab-size:4;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;box-sizing:border-box;border:1px solid transparent;border-radius:4px}.formula-highlight-overlay[data-v-135d55ba]{position:absolute;top:0;left:0;right:0;min-height:60px;color:#28364e;background-color:#fff;overflow:auto;pointer-events:none}.formula-highlight-overlay[data-v-135d55ba] span{display:inline;margin:0;padding:0;border:0;font:inherit;letter-spacing:inherit;word-spacing:inherit;line-height:inherit;vertical-align:baseline;text-decoration:none;text-transform:none}.formula-highlight-overlay[data-v-135d55ba] .hl-column{color:#001080}.formula-highlight-overlay[data-v-135d55ba] .hl-number{color:#098658}.formula-highlight-overlay[data-v-135d55ba] .hl-string{color:#a31515}.formula-highlight-overlay[data-v-135d55ba] .hl-date{color:#af00db}.formula-highlight-overlay[data-v-135d55ba] .hl-boolean,.formula-highlight-overlay[data-v-135d55ba] .hl-logical{color:#00f}.formula-highlight-overlay[data-v-135d55ba] .hl-comparison{color:#d63384}.formula-highlight-overlay[data-v-135d55ba] .hl-arithmetic,.formula-highlight-overlay[data-v-135d55ba] .hl-string-op,.formula-highlight-overlay[data-v-135d55ba] .hl-postfix-op{color:#00f}.formula-highlight-overlay[data-v-135d55ba] .hl-paren{color:#000}.formula-highlight-overlay.disabled[data-v-135d55ba]{background-color:#f4f4f9}.formula-textarea[data-v-135d55ba]{position:relative;width:100%;min-height:60px;color:#28364e;-webkit-text-fill-color:transparent;caret-color:#28364e;cursor:text;background-color:transparent;border-color:#cad4e5;resize:vertical;transition:border-color .2s ease,box-shadow .2s ease}.formula-textarea[data-v-135d55ba]::placeholder{color:#a8b4c9;font-family:inherit}.formula-textarea[data-v-135d55ba]:hover{border-color:#4568e0}.formula-textarea[data-v-135d55ba]:focus{outline:none;border-color:#4568e0;box-shadow:0 0 0 3px #4568e026}.formula-textarea[data-v-135d55ba]:disabled{background-color:#f4f4f9;border-color:#d3d5e5;caret-color:#d3d5e5;cursor:not-allowed}.is-invalid .formula-textarea[data-v-135d55ba]{border-color:#f28270;box-shadow:0 0 0 3px #f2827026}.formula-suggestions-dropdown{background-color:#fff;border:1px solid #bac6d4;border-radius:4px;box-shadow:0 3px 6px #39377a1a;min-width:280px;max-width:400px;overflow:hidden;animation:formulaDropdownFadeIn .2s ease-out}@keyframes formulaDropdownFadeIn{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}.formula-suggestions-dropdown .suggestions-header{line-height:12px;padding:9px 10px;height:30px}.formula-suggestions-dropdown .suggestions-header .context-badge{font-size:12px;line-height:12px;font-weight:500;color:#939aac}.formula-suggestions-dropdown .suggestions-list{max-height:200px;overflow-y:auto}.formula-suggestions-dropdown .suggestion-item{display:flex;align-items:center;padding:5.5px 10px;cursor:pointer;transition:background-color .1s ease}.formula-suggestions-dropdown .suggestion-item:hover,.formula-suggestions-dropdown .suggestion-item.is-selected{background-color:#4568e017}.formula-suggestions-dropdown .suggestion-item .suggestion-icon{flex-shrink:0;width:20px;text-align:center;font-size:13px}.formula-suggestions-dropdown .suggestion-item .suggestion-text{flex:1;font-size:13px;line-height:13px;font-weight:400;color:#28364e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.formula-suggestions-dropdown .suggestion-item .suggestion-text .highlight{color:#3550b0;font-weight:700}.formula-suggestions-dropdown .suggestion-item .suggestion-description{flex-shrink:0;font-size:12px;line-height:12px;color:#96a5be;max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.formula-suggestions-dropdown .suggestion-item.type-column .suggestion-icon{color:#4caf50}.formula-suggestions-dropdown .suggestion-item.type-operator .suggestion-icon{color:#ff9800}.formula-suggestions-dropdown .suggestion-item.type-logical .suggestion-icon{color:#9c27b0}.formula-suggestions-dropdown .suggestion-item.type-function .suggestion-icon{color:#2196f3;font-style:italic}.formula-suggestions-dropdown .suggestion-item.type-value .suggestion-icon{color:#607d8b}.formula-suggestions-dropdown .suggestions-footer{display:flex;gap:10px;padding:9px 10px;border-top:1px solid #bac6d4;background-color:#f5f7fc}.formula-suggestions-dropdown .suggestions-footer .hint{font-size:12px;line-height:12px;color:#939aac}.formula-suggestions-dropdown .suggestions-footer .hint:before{content:"";display:inline-block;width:4px;height:4px;margin-right:4px;margin-bottom:2px;background-color:#939aac;border-radius:50%;vertical-align:middle}.moz-popup-container.moz-custom-cell-popup .moz-popup .moz-custom-cell-wrapper{display:flex;flex-direction:column}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-sets-container{display:flex;flex-direction:column;gap:16px;overflow-y:auto}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-section{border:1px solid #cad4e5;border-radius:6px}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-header{display:flex;justify-content:space-between;align-items:center;padding:11px 12px;border-bottom:1px solid #e1e3f0}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-title{display:flex;align-items:center;gap:8px;flex:1}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-title .moz-input-wrapper .moz-input{border-color:#cad4e5}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-title .moz-input-wrapper .moz-input:focus{border-color:#4568e0}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-title .moz-input-wrapper .moz-input:hover{border-color:#4568e0}.moz-popup-container.moz-custom-cell-popup .moz-popup .priority-badge{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;background:#4568e029;color:#4568e0;border-radius:4px;font-size:14px;font-weight:500;padding:0 6px}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-name-input{border:1px solid #bbc6d9;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px;flex:1;max-width:250px}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-name-input:focus{outline:none;border-color:#4568e0}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-divider{width:1px;height:14px;background:#bac6d4;margin-left:14px;margin-right:10px}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-actions{display:flex;gap:8px}.moz-popup-container.moz-custom-cell-popup .moz-popup .mode-tabs{display:flex;border-bottom:1px solid #e1e3f0;padding:0 12px;gap:0}.moz-popup-container.moz-custom-cell-popup .moz-popup .mode-tab{padding:10px 16px;background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;font-size:13px;font-weight:500;color:#96a5be;transition:all .2s ease}.moz-popup-container.moz-custom-cell-popup .moz-popup .mode-tab:hover{color:#28364e}.moz-popup-container.moz-custom-cell-popup .moz-popup .mode-tab.active{color:#4568e0;border-bottom-color:#4568e0}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-section{padding:12px;display:flex;flex-direction:column}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-input-wrapper{display:flex;flex-direction:column}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-input{width:100%;min-height:80px;padding:10px 12px;border:1px solid #bbc6d9;border-radius:6px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;resize:vertical;background:#fff;color:#28364e}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-input:focus{outline:none;border-color:#4568e0;box-shadow:0 0 0 2px #4568e01a}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-input.has-error{border-color:#f28270}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-input.has-error:focus{box-shadow:0 0 0 2px #f282701a}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-input::placeholder{color:#96a5be}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-validation-slot{position:relative;min-height:20px}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-error,.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-valid,.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-hint{position:absolute;top:0;left:0;right:0;font-size:11px;line-height:11px;padding:4px 0 0 2px;pointer-events:none}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-valid{display:flex;align-items:center}.moz-popup-container.moz-custom-cell-popup .moz-popup .decide-icon{margin-right:4px}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-error{color:#dc5a5a}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-valid{color:#357e63}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-hint{color:#96a5be}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-help{background:#f5f7fc;border-radius:6px;padding:12px}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-help-title{display:flex;align-items:center;gap:4px;font-size:12px;line-height:12px;font-weight:500;color:#6a7184;margin-bottom:16px}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-help-content{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 24px}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-help-item{display:flex;align-items:center;gap:12px;font-size:11px;line-height:11px}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-help-item .formula-help-label{color:#8998b5;width:50px}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-help-item code{color:#2d5592;font-size:11px}.moz-popup-container.moz-custom-cell-popup .moz-popup .formula-help-item .hint-text{color:#6a7184;font-style:italic;font-size:11px}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-content{display:flex;flex-direction:column}.moz-popup-container.moz-custom-cell-popup .moz-popup .rules-section{display:flex;flex-direction:column;padding:12px 12px 16px;gap:8px}.moz-popup-container.moz-custom-cell-popup .moz-popup .moz-custom-cell-row{align-items:center;display:grid;grid-template-columns:75px 130px 65px 1fr 20px;gap:8px}.moz-popup-container.moz-custom-cell-popup .moz-popup .moz-custom-cell-row.minify-width{grid-template-columns:130px 65px 1fr 20px}.moz-popup-container.moz-custom-cell-popup .moz-popup .moz-custom-cell-row .spacer{width:75px}.moz-popup-container.moz-custom-cell-popup .moz-popup .add-rule-button{align-self:flex-start;margin-top:4px;display:flex;align-items:center;gap:6px;cursor:pointer}.moz-popup-container.moz-custom-cell-popup .moz-popup .add-rule-button span{font-size:12px;color:#4568e0;margin-top:1px}.moz-popup-container.moz-custom-cell-popup .moz-popup .rule-set-styling{padding:12px;border-top:1px solid #e1e3f0;display:flex;align-items:center}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-section-row{width:100%;display:flex;align-items:center;gap:6px}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-section-row .color-section-row-label{font-weight:500;color:#6a7184;font-size:12px;line-height:12px;white-space:nowrap;flex:1;width:100%}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-pickers{display:flex;gap:8px;align-items:center}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item{display:flex;align-items:center;gap:6px}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item>span{font-size:12px;font-weight:500;line-height:12px;color:#6a7184;white-space:nowrap}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item .color-picker-dropdown-wrapper{position:relative}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item .color-picker-dropdown-wrapper .color-preview-trigger{width:22px;height:22px;border:1px solid #bac6d4;border-radius:4px;cursor:pointer}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item .color-picker-dropdown-wrapper .color-combined-trigger{display:flex;align-items:center;justify-content:center}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item .color-picker-dropdown-wrapper .color-combined-trigger-a{font-size:13px;font-weight:500;line-height:1}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item .color-picker{width:20px;height:20px;border:1px solid #bbc6d9;border-radius:4px;cursor:pointer;padding:0}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item .color-picker::-webkit-color-swatch-wrapper{padding:0}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item .color-picker::-webkit-color-swatch{border:none;border-radius:2px}.moz-popup-container.moz-custom-cell-popup .moz-popup .color-picker-item-divider{width:1px;height:14px;background:#bac6d4;margin:0 2px 0 10px}.moz-popup-container.moz-custom-cell-popup .moz-popup .remove-row{cursor:pointer;width:20px!important;height:20px!important;min-width:20px!important;min-height:20px!important;display:flex;justify-content:center;align-items:center}.moz-popup-container.moz-custom-cell-popup .moz-popup .remove-row:focus{box-shadow:0 0 0 3px #4568e033,0 0 0 .5px #4568e0;border-radius:4px}.moz-popup-container.moz-custom-cell-popup .moz-popup .moz-ui-custom-cell-footer{display:flex;flex-direction:row;width:100%;justify-content:space-between}.moz-popup-container.moz-custom-cell-popup .moz-popup .moz-ui-custom-cell-footer .button-section{display:flex;justify-content:space-between;color:#4568e0;font-size:12px;gap:12px}.moz-popup-container.moz-custom-cell-popup .moz-popup .moz-ui-custom-cell-footer .reset-all-rule-button{display:flex;gap:8px;font-size:14px;cursor:pointer;font-weight:400;line-height:14px}.moz-popup-container.moz-custom-cell-popup .moz-popup .moz-ui-custom-cell-footer .add-rule-group-button{display:flex;gap:8px;font-size:14px;font-weight:400;cursor:pointer;line-height:14px}.moz-popup-footer{padding:16px!important}.custom-cell-operation-row{display:flex;flex-direction:row}.custom-cell-operation-row td{font-family:Roboto;white-space:pre;overflow:hidden;text-overflow:ellipsis}.custom-cell-operation-row td.symbol{width:14px;margin-right:20px;text-align:center}.custom-cell-operation-row td.desc{width:100px;color:#96a5be}.color-dropdown-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000}.color-dropdown-teleport{background-color:#fff;border:1px solid #bac6d4;border-radius:8px;padding:4px 0;box-shadow:0 3px 6px #39377a1a}.color-dropdown-teleport .color-dropdown-section{padding:8px 14px}.color-dropdown-teleport .color-dropdown-title{font-size:12px!important;line-height:12px!important;font-weight:500!important;color:#6a7184!important;font-family:noto sans kr!important;margin-bottom:10px!important}.color-dropdown-teleport .color-option{width:22px;height:22px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;border:1px solid transparent;box-sizing:border-box}.color-dropdown-teleport .color-option.selected-color{background:#4568e008}.color-dropdown-teleport .color-option .color-swatch{width:22px;height:22px;border:1px solid #dddde2;border-radius:4px;flex-shrink:0}.color-dropdown-teleport .color-option .color-swatch:hover{border-color:var(--border-color, #dddde2)}.color-dropdown-teleport .color-option.selected-color .color-swatch{border-width:2px;border-color:var(--border-color, #dddde2)}.color-dropdown-teleport .color-option .color-swatch-text{display:flex;align-items:center;justify-content:center;background:#fff;font-size:13px;font-weight:500;line-height:1}.color-dropdown-teleport .color-option-divider{height:1px;background:#ddddec;margin:4px 0}.color-default-presets{width:100%;display:flex;gap:6px;padding:0;flex-wrap:nowrap}.color-custom-input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}.color-custom-swatch{position:relative}.color-swatch-custom{display:flex;align-items:center;justify-content:center;background:#fff}.editor-input-container,.editor-input-container .editor-input{width:100%}.moz-ui-grid-footer-container{border-top:1px solid #bbc6d9;background:#fff;height:31px;min-height:31px;max-height:31px;display:flex;justify-content:space-between;flex-direction:row}.moz-ui-grid-footer-container div{padding:5px 10px;color:#4568e0;font-size:13px;font-style:normal;font-weight:500;display:flex;align-items:center}.moz-ui-grid-footer-container .grid-footer-aggregates{display:flex;gap:16px;color:#4568e0;font-size:12px;font-weight:500}.grid-context-menu-aggregate[data-v-f216629c]{display:flex;font-weight:500;justify-content:space-between;align-items:center;padding:.5rem .875rem;gap:16px;font-size:.8125rem;line-height:100%;-webkit-user-select:none;user-select:none;white-space:nowrap}.grid-context-menu-aggregate--compact[data-v-f216629c]{padding:.25rem .875rem;font-size:.75rem}.grid-context-menu-aggregate__label[data-v-f216629c]{color:#6a7184;font-size:.75rem;flex-shrink:0}.grid-context-menu-aggregate__value[data-v-f216629c]{font-weight:600;color:#1e293b;text-align:right}.mzc-col-list-item[data-v-d591b042]{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:13px;color:var(--text-700, #28364e);transition:background .12s;min-width:0;overflow:hidden}.mzc-col-list-item[data-v-d591b042]:hover{background:var(--background-200, #f9fafc)}.mzc-col-list-item.selected[data-v-d591b042]{background:var(--color-accent-50, #eaf3ff);color:var(--color-accent-500, #3e5dc9);font-weight:600}.mzc-col-list-item.dragging[data-v-d591b042]{opacity:.4}.mzc-col-list-item.drop-target[data-v-d591b042]{border-top:2px solid var(--color-accent-400, #4568e0)}.drag-handle[data-v-d591b042]{color:var(--icon-300, #b6b7c1);font-size:12px;cursor:grab}.drag-handle[data-v-d591b042]:active{cursor:grabbing}.col-header[data-v-d591b042]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pin-badge[data-v-d591b042]{font-size:11px;opacity:.7}.align-picker[data-v-b69b3af0]{display:inline-flex;border:1px solid var(--boarder-100, #e1e3f0);border-radius:4px;overflow:hidden}.align-picker-btn[data-v-b69b3af0]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:28px;padding:0;background:var(--background-0, #fff);border:none;border-right:1px solid var(--boarder-100, #e1e3f0);cursor:pointer;transition:background .15s}.align-picker-btn[data-v-b69b3af0]:last-child{border-right:none}.align-picker-btn[data-v-b69b3af0]:hover{background:var(--background-200, #f9fafc)}.align-picker-btn.active[data-v-b69b3af0]{background:var(--color-accent-50, #eaf3ff)}.align-picker-btn.active .line[data-v-b69b3af0]{background:var(--color-accent-400, #4568e0)}.align-picker-icon[data-v-b69b3af0]{display:inline-flex;flex-direction:column;gap:2px;width:14px}.align-picker-icon .line[data-v-b69b3af0]{height:1.5px;background:var(--text-400, #6a7184);border-radius:1px}.align-picker-icon[data-align=left] .line-1[data-v-b69b3af0]{width:100%}.align-picker-icon[data-align=left] .line-2[data-v-b69b3af0]{width:60%;align-self:flex-start}.align-picker-icon[data-align=left] .line-3[data-v-b69b3af0]{width:80%;align-self:flex-start}.align-picker-icon[data-align=center] .line-1[data-v-b69b3af0]{width:100%;align-self:center}.align-picker-icon[data-align=center] .line-2[data-v-b69b3af0]{width:60%;align-self:center}.align-picker-icon[data-align=center] .line-3[data-v-b69b3af0]{width:80%;align-self:center}.align-picker-icon[data-align=right] .line-1[data-v-b69b3af0]{width:100%;align-self:flex-end}.align-picker-icon[data-align=right] .line-2[data-v-b69b3af0]{width:60%;align-self:flex-end}.align-picker-icon[data-align=right] .line-3[data-v-b69b3af0]{width:80%;align-self:flex-end}.mask-preset-picker[data-v-43179547]{display:flex;flex-direction:column;gap:4px}.mask-preset-hint[data-v-43179547]{font-size:11px;color:var(--text-400, #6a7184);font-style:italic}.color-default-presets[data-v-56550540]{width:100%;display:flex;gap:4px;padding:0;flex-wrap:wrap}.color-option[data-v-56550540]{display:flex;align-items:center;justify-content:center;cursor:pointer;box-sizing:border-box}.color-option .color-swatch[data-v-56550540]{width:22px;height:22px;border:1px solid #dddde2;border-radius:4px;flex-shrink:0;box-sizing:border-box}.color-option .color-swatch[data-v-56550540]:hover{border-color:var(--border-color, #dddde2)}.color-option.selected-color .color-swatch[data-v-56550540]{border-width:2px;border-color:var(--border-color, #dddde2)}.color-option .color-swatch-text[data-v-56550540]{display:flex;align-items:center;justify-content:center;background:#fff;font-size:13px;font-weight:500;line-height:1}.color-custom-input[data-v-56550540]{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}.color-custom-swatch[data-v-56550540]{position:relative}.color-swatch-custom[data-v-56550540]{display:flex;align-items:center;justify-content:center;background:#fff}.color-option-none .color-swatch-none[data-v-56550540]{position:relative;background:#fff}.color-option-none .color-swatch-none .color-swatch-none-mark[data-v-56550540]{position:absolute;top:50%;left:12%;right:12%;height:1.5px;background:#f28270;transform:translateY(-50%) rotate(-30deg)}.font-style-toggles[data-v-8b8e48a7]{display:inline-flex;border:1px solid var(--boarder-100, #e1e3f0);border-radius:4px;overflow:hidden}.style-toggle[data-v-8b8e48a7]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:var(--background-0, #fff);border:none;border-right:1px solid var(--boarder-100, #e1e3f0);cursor:pointer;transition:background .12s}.style-toggle[data-v-8b8e48a7]:last-child{border-right:none}.style-toggle[data-v-8b8e48a7]:hover{background:var(--background-200, #f9fafc)}.style-toggle.active[data-v-8b8e48a7]{background:var(--color-accent-50, #eaf3ff)}.style-toggle.active .style-toggle-label[data-v-8b8e48a7]{color:var(--color-accent-500, #3e5dc9)}.style-toggle-label[data-v-8b8e48a7]{font-size:13px;color:var(--text-700, #28364e);line-height:1;display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}.bold-label[data-v-8b8e48a7]{font-weight:700}.italic-label[data-v-8b8e48a7]{font-style:italic;font-family:serif}.underline-label[data-v-8b8e48a7]{text-decoration:underline}.options-panel-empty[data-v-56659903]{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-400, #6a7184);font-size:13px;text-align:center;padding:20px}.options-panel[data-v-56659903]{--col-options-row-width: 360px;display:flex;flex-direction:column;gap:14px;padding:16px;height:100%;overflow-y:auto;width:calc(var(--col-options-row-width) + 24px + 32px + 16px);scrollbar-gutter:stable;box-sizing:border-box}.options-panel-header[data-v-56659903]{display:flex;justify-content:space-between;align-items:baseline;gap:8px;padding-bottom:10px;border-bottom:1px solid var(--boarder-100, #e1e3f0)}.options-panel-header .col-id[data-v-56659903]{font-family:Consolas,monospace;font-size:12px;color:var(--text-400, #6a7184);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.options-panel-header .col-type[data-v-56659903]{font-size:11px;color:var(--color-accent-400, #4568e0);background:var(--color-accent-50, #eaf3ff);padding:2px 6px;border-radius:3px;text-transform:uppercase}.options-section[data-v-56659903]{display:flex;flex-direction:column;gap:10px}.options-group>.options-section[data-v-56659903]{width:100%}.options-label[data-v-56659903],.inline-control-label[data-v-56659903],.color-section-title[data-v-56659903]{font-size:12px;line-height:12px;font-weight:500;color:#6a7184;font-family:noto sans kr,sans-serif}.options-label[data-v-56659903]{margin-bottom:0}.text-input[data-v-56659903]{width:100%;height:28px;padding:0 8px;font-size:13px;border:1px solid var(--boarder-100, #e1e3f0);border-radius:4px;background:var(--background-0, #fff);color:var(--text-700, #28364e)}.text-input[data-v-56659903]:focus{outline:none;border-color:var(--color-accent-400, #4568e0)}.width-input[data-v-56659903]{width:120px}.pin-buttons[data-v-56659903]{display:inline-flex;border:1px solid var(--boarder-100, #e1e3f0);border-radius:4px;overflow:hidden}.pin-buttons .pin-btn[data-v-56659903]{flex:1;height:28px;padding:0 12px;font-size:12px;background:var(--background-0, #fff);color:var(--text-700, #28364e);border:none;border-right:1px solid var(--boarder-100, #e1e3f0);cursor:pointer;transition:background .12s}.pin-buttons .pin-btn[data-v-56659903]:last-child{border-right:none}.pin-buttons .pin-btn[data-v-56659903]:hover{background:var(--background-200, #f9fafc)}.pin-buttons .pin-btn.active[data-v-56659903]{background:var(--color-accent-50, #eaf3ff);color:var(--color-accent-500, #3e5dc9);font-weight:600}.options-group[data-v-56659903]{display:flex;flex-direction:column;gap:16px;padding:12px;background:var(--background-200, #f9fafc);border:1px solid var(--boarder-100, #e1e3f0);border-radius:4px}.options-group-title[data-v-56659903]{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--text-400, #6a7184);margin-bottom:2px;padding-bottom:6px;border-bottom:1px solid var(--boarder-100, #e1e3f0)}.options-group-header[data-v-56659903]{background:#4568e00a}.style-row[data-v-56659903]{display:flex;align-items:center;gap:8px}.style-row-label[data-v-56659903]{flex-shrink:0;width:64px;font-size:11px;color:var(--text-400, #6a7184)}.color-section[data-v-56659903]{display:flex;flex-direction:column;gap:10px}.inline-controls-row[data-v-56659903]{display:flex;flex-wrap:nowrap;align-items:flex-end;justify-content:space-between;width:100%}.inline-control[data-v-56659903]{display:flex;flex-direction:column;gap:10px;flex:0 0 auto}.options-panel-footer[data-v-56659903]{margin-top:auto;padding-top:12px;border-top:1px solid var(--boarder-100, #e1e3f0)}.reset-btn[data-v-56659903]{width:100%;height:30px;font-size:12px;color:var(--text-400, #6a7184);background:var(--background-0, #fff);border:1px solid var(--boarder-100, #e1e3f0);border-radius:4px;cursor:pointer}.reset-btn[data-v-56659903]:hover{background:var(--background-200, #f9fafc);color:var(--text-700, #28364e)}.column-settings-actions[data-v-30577646]{display:flex;justify-content:space-between;align-items:center;padding:4px 0 12px}.column-settings-actions .reset-all-button[data-v-30577646]{cursor:pointer;font-size:13px;color:var(--color-accent-400, #4568e0);background:none;border:none;padding:4px 8px}.column-settings-actions .reset-all-button[data-v-30577646]:hover{text-decoration:underline}.column-settings-actions .reset-all-button.disabled[data-v-30577646],.column-settings-actions .reset-all-button[data-v-30577646]:disabled{cursor:default;color:var(--text-400, #999);text-decoration:none;pointer-events:none}.column-settings-body[data-v-30577646]{display:grid;grid-template-columns:1fr auto;gap:0;height:480px;border:1px solid var(--boarder-100, #e1e3f0);border-radius:4px;overflow:hidden}.column-list-panel[data-v-30577646]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:min-content;align-content:start;gap:2px 8px;padding:6px;overflow-y:auto;border-right:1px solid var(--boarder-100, #e1e3f0);background:var(--background-200, #f9fafc)}.column-options-pane[data-v-30577646]{overflow:hidden;background:var(--background-0, #fff)}.column-picker[data-v-0431327e]{margin-top:8px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:0 13px;columns:2;font-size:14px;font-weight:400;padding:6px;border:1px solid var(--boarder-800, #bbc6d9)!important;border-radius:0!important;position:relative;overflow:hidden}.column-picker[data-v-0431327e]:after{content:"";position:absolute;left:50%;top:8.5px;bottom:8.5px;width:0;border-left:1px solid var(--boarder-100, #e1e3f0)}.column-picker .column-picker-item[data-v-0431327e]{display:flex;align-items:center;padding:4px 6px;border-radius:4px;cursor:grab;-webkit-user-select:none;user-select:none;transition:background .15s;height:24px}.column-picker .column-picker-item[data-v-0431327e]:hover{background:#4568e017}.column-picker .column-picker-item:hover .column-picker-drag-handle[data-v-0431327e]{color:#4568e0;visibility:visible}.column-picker .column-picker-item.is-dragging[data-v-0431327e]{opacity:.4}.column-picker .column-picker-item.drop-target[data-v-0431327e]{border-left:2px solid #0085c7}.column-picker .column-picker-drag-handle[data-v-0431327e]{margin:0 4px;cursor:grab;color:#999;font-size:12px;line-height:1;-webkit-user-select:none;user-select:none;visibility:visible}.column-picker .column-picker-drag-handle[data-v-0431327e]:active{cursor:grabbing}.column-picker[data-v-0431327e] .drop-marker{position:absolute;background:#0085c7;opacity:.5;pointer-events:none;z-index:1000}.column-picker-actions[data-v-0431327e]{display:flex;justify-content:space-between;align-items:center}.column-picker-actions .moz-checkbox .moz-label[data-v-0431327e]{font-size:13px;font-weight:400}.column-picker-actions .reset-button[data-v-0431327e]{cursor:pointer;font-size:13px;color:var(--color-accent-400)}.column-picker-actions .reset-button.disabled[data-v-0431327e]{cursor:default;color:var(--color-text-200, #999);pointer-events:none}.extend-pivot-grid-tool-container[data-v-8b425c4f]{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border-bottom:1px solid #bbc6d9;height:50px;min-height:50px;max-height:50px;box-sizing:border-box;background-color:#fff;-webkit-user-select:none;user-select:none}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper[data-v-8b425c4f]{display:flex;align-items:center;margin-right:6px;gap:2px}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper[data-v-8b425c4f]{width:24px;height:24px}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper[data-v-8b425c4f]{cursor:pointer;width:24px;height:24px;display:flex;gap:4px;justify-content:center;align-items:center;border-radius:4px;background-color:#fff;place-items:center}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper[data-v-8b425c4f]:hover{background-color:#8998b529}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper:not(.extend-grid-tool-disabled).has-item[data-v-8b425c4f]{background-color:#4568e029}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper:not(.extend-grid-tool-disabled).is-active[data-v-8b425c4f]{background-color:#4568e029}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper span[data-v-8b425c4f]{color:#28364e;font-size:12px;font-style:normal;font-weight:400;line-height:100%;white-space:nowrap}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper span.extend-grid-tool-badge-count[data-v-8b425c4f]{border:none;width:17px;height:16px;border-radius:4px;background:#4568e0;color:#fff;font-size:12px;font-style:normal;font-weight:400;line-height:100%;display:flex;justify-content:center;align-items:center;margin-left:2px}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper span.extend-grid-tool-badge-count[data-count="0"][data-v-8b425c4f]{background:#8998b5}.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper .extend-grid-tool-badge-item-wrapper .extend-grid-filter-disabled[data-v-8b425c4f]:hover,.extend-pivot-grid-tool-container .extend-grid-tool-badge-wrapper .extend-grid-tool-items-wrapper.disabled[data-v-8b425c4f]:hover{cursor:not-allowed}.extend-pivot-grid-tool-container .extend-grid-tool-setup-wrapper[data-v-8b425c4f]{display:flex;align-items:center}.extend-pivot-grid-tool-container .extend-grid-tool-setup-wrapper svg[data-v-8b425c4f]{vertical-align:middle;cursor:pointer}.extend-grid-tool-disabled[data-v-8b425c4f]{pointer-events:none}.extend-grid-tool-disabled[data-v-8b425c4f]:hover{cursor:not-allowed}.extend-grid-tool-separator[data-v-8b425c4f]{width:1px;height:15px;margin-right:10px;background-color:#bac6d4}.extend-grid-tool-search[data-v-8b425c4f]{width:180px}.extend-grid-tool-search .moz-button[data-v-8b425c4f],.extend-grid-tool-search .moz-input[data-v-8b425c4f],.extend-grid-tool-search .wj-control[data-v-8b425c4f]{min-height:26px!important;height:26px!important}.extend-grid-tool-search .wj-form-control[data-v-8b425c4f]{min-height:24px!important;height:24px!important}.extend-grid-tool-toggle-icon-wrapper[data-v-8b425c4f]{width:18px;height:18px;background-color:#e9edf4;border-radius:100%;display:flex;justify-content:center;align-items:center;cursor:pointer;margin-left:10px}.extend-grid-tool-toggle[data-v-8b425c4f]{border-bottom:1px solid #bbc6d9;display:flex;justify-content:center;cursor:pointer}.extend-grid-tool-toggle[data-v-8b425c4f]:hover{background-color:#4568e017}.extend-grid-tool-badge-wrapper .extend-grid-tool-badge-item-wrapper.extend-grid-tool-disabled[data-v-8b425c4f]:hover{cursor:not-allowed!important}.pivot-grid-context-menu{z-index:1000}.pivot-grid-context-menu .context-menu-content-wrapper{border-radius:8px}.pivot-grid-context-menu .context-menu-content-wrapper .context-menu-separator{background:#ddddec}.pivot-grid-context-menu .context-menu-content-wrapper .context-menu-item{padding:0 16px;height:36px;font-size:13px;display:flex;justify-content:space-between;align-items:center}.pivot-grid-context-menu .context-menu-content-wrapper .context-menu-item:hover{background:#4568e017}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-option-item{padding:0 16px;height:36px;font-size:13px;display:flex;justify-content:space-between;align-items:center;gap:10px}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-option-section{padding:0}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-option-footer{padding:13px 16px;display:flex;justify-content:flex-end;gap:8px}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-context-menu-title-wrapper{padding:8px 16px;display:flex;justify-content:space-between;align-items:center}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-context-menu-title-wrapper .pivot-grid-context-menu-button{width:20px!important;min-width:20px!important;height:20px!important;min-height:20px!important}.pivot-grid-context-menu .context-menu-content-wrapper .pivot-grid-context-menu-title-wrapper .pivot-grid-context-menu-title{font-size:16px;font-weight:500;color:#28364e}.pivot-field-chip{display:flex;align-items:center;box-sizing:border-box;flex-shrink:0;height:26px;padding:0 4px;background:#e1e9ff;color:#4568e0;border:1px solid #4568e0;border-radius:4px;font-size:12px;-webkit-user-select:none;user-select:none;gap:2px}.pivot-field-chip__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pivot-field-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;cursor:pointer}.pivot-field-chip__remove:hover{color:#3e5dc9}.pivot-field-chip--value{height:26px;max-height:26px;padding-left:6px;padding-right:7px;background-color:#e2e7fa;line-height:100%;overflow:hidden;justify-content:space-between;font-size:13px;cursor:pointer;gap:0}.pivot-field-chip--value .pivot-field-chip__left{display:flex;align-items:center;overflow:hidden}.pivot-field-chip--value .pivot-field-chip__summary{color:#6a7184;font-weight:500;line-height:100%;position:relative;font-size:12px;display:flex;align-items:center}.pivot-field-chip--value .pivot-field-chip__summary:after{position:relative;right:-4px;content:"l";color:#a7b1bc;margin-right:7px;display:flex;line-height:100%}.pivot-field-chip--value .pivot-field-chip__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#4568e0}.pivot-field-chip--value .pivot-field-chip__settings{width:12px;height:12px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}.pivot-drop-zone{flex:1;display:flex;flex-direction:column;overflow:hidden}.pivot-drop-zone__label{font-size:12px;font-weight:600;color:#6a7184;margin-bottom:5px}.pivot-drop-zone__content{position:relative;display:flex;flex:1;min-height:0}.pivot-drop-zone__area{min-height:34px;padding:12px;border:1px dashed rgb(69,104,224);background:#f8f8fd;transition:background .15s,border-color .15s;position:relative;overflow:hidden auto;flex:1;min-height:0}.pivot-drop-zone__area.dragging-container{display:flex;flex-direction:column;gap:4px}.pivot-drop-zone__placeholder{position:absolute;width:100%;top:50%;left:50%;transform:translate(-50%,-50%);color:#8998b5;font-size:12px;-webkit-user-select:none;user-select:none;pointer-events:none;text-align:center}.pivot-field-panel{display:flex;gap:12px;height:100%}.pivot-field-panel__heading{font-size:12px;font-weight:500;color:#28364e;flex-shrink:0}.pivot-field-panel__list{width:227px;flex-shrink:0;display:flex;flex-direction:column;gap:6px;overflow:hidden;min-height:0}.pivot-field-panel__field-items{flex:1;overflow-y:auto;border:1px solid #e2e1ee;padding:5px;min-height:0}.pivot-field-panel__field-item{align-items:center;gap:6px;padding:0 6px;border-radius:3px;cursor:grab;font-size:12px;-webkit-user-select:none;user-select:none;height:22px;display:flex;justify-content:space-between}.pivot-field-panel__field-item:hover{background:#f0f4ff}.pivot-field-panel__field-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#28364e}.pivot-field-panel__field-type{color:#8998b5;font-size:10px;flex-shrink:0}.pivot-field-panel__zones{flex:1;display:flex;flex-direction:column;gap:16px;overflow-y:hidden;min-height:0}.pivot-field-panel__footer{display:flex;align-items:center;justify-content:space-between;width:100%}.pivot-value-field-option-modal{pointer-events:none}.pivot-value-field-option-modal .moz-popup-backdrop{display:none}.pivot-value-field-option-modal .moz-popup{box-shadow:0 2px 8px #0000001f;border:1px solid #bac6d4}.pivot-value-field-option-modal .moz-popup .moz-popup-body{padding:9px 16px!important}.pivot-value-field-option-modal .moz-popup .moz-popup-body .pivot-value-field-option-item{margin:4px 0;display:grid;grid-template-columns:45% 55%;align-items:center}.pivot-value-field-option-modal .moz-popup .moz-popup-body .pivot-value-field-option-item span{font-size:13px;color:#28364e}.pivot-context-menu-aggregate[data-v-1e5abe10]{display:flex;font-weight:500;justify-content:space-between;align-items:center;padding:.5rem .875rem;gap:16px;font-size:.8125rem;line-height:100%;-webkit-user-select:none;user-select:none;white-space:nowrap}.pivot-context-menu-aggregate--compact[data-v-1e5abe10]{padding:.25rem .875rem;font-size:.75rem}.pivot-context-menu-aggregate__label[data-v-1e5abe10]{color:#6a7184;font-size:.75rem;flex-shrink:0}.pivot-context-menu-aggregate__value[data-v-1e5abe10]{font-weight:600;color:#28364e;text-align:right}.moz-chart-controller[data-v-8e3c5832]{display:flex;justify-content:space-between;padding:10px 12px;background-color:#f5f7fc;border-bottom:1px solid #bac6d4;-webkit-user-select:none;user-select:none}.moz-chart-input-wrapper[data-v-8e3c5832]{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.moz-chart-select[data-v-8e3c5832]{height:fit-content}.moz-actions[data-v-8e3c5832]{display:flex;align-items:center;gap:5px;flex-shrink:0;height:26px}.moz-chart-button[data-v-8e3c5832]{cursor:pointer;padding:3px!important}.moz-spacer[data-v-8e3c5832]{width:1px;height:10px;background-color:#bac6d4}.moz-multiple-chart[data-v-3a931d9e]{overflow-y:auto;flex:1;display:flex;flex-wrap:wrap;align-content:flex-start;gap:10px;padding:10px}.moz-multiple-chart-item[data-v-3a931d9e]{position:relative;width:325px;height:50px;border:1px solid #cad4e5;border-radius:4px;cursor:pointer}.moz-multiple-chart-item[data-v-3a931d9e]:hover{border-color:#4568e0}.moz-multiple-chart-item>span[data-v-3a931d9e]{position:absolute;left:10px;top:-6px;padding:0 4px;font-size:12px;background-color:#fff;line-height:100%;color:#28364e;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:90%;z-index:1}.moz-multiple-chart-item.total-item[data-v-3a931d9e]{border-width:2px}.moz-multiple-chart-item.total-item>span[data-v-3a931d9e]{font-weight:700}.moz-pivot-chart[data-v-2c5a902b]{display:flex;flex-direction:column;width:100%;height:100%;background:#fff;border:1px solid #bbc6d9;box-sizing:border-box}.moz-pivot-chart__detail[data-v-2c5a902b]{flex:1;display:flex;flex-direction:column;min-height:0;position:relative}.moz-detail-chart-title[data-v-2c5a902b]{position:absolute;font-size:12px;font-weight:500;right:23px;top:15px;z-index:1;border-radius:99px;background-color:var(--background-100, rgba(248, 248, 253, 1));border:1px solid var(--border-700, rgba(186, 198, 212, 1));padding:5px 10px;display:flex;align-items:center;gap:6px;line-height:100%;color:#28364e;pointer-events:none}.moz-pivot-vue-wrapper{overflow:hidden;display:flex;flex-direction:column;position:relative}.moz-pivot-vue-body{width:100%;height:100%;overflow:hidden;position:relative;display:flex;flex-direction:column}.moz-pivot-vue-container{flex:1;overflow:hidden;position:relative}.moz-pivot-empty-wrapper{width:100%;height:100%;display:flex;align-items:center;justify-content:center}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 셀 에디터 커스터마이징을 위한 렌더리스 컴포넌트.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```vue
|
|
6
|
+
* <MozGridVue :fields="fields" :data="data" :editable="true">
|
|
7
|
+
* <CellEditor field="price" #default="{ value, onCommit, onCancel }">
|
|
8
|
+
* <NumberInput
|
|
9
|
+
* :model-value="value"
|
|
10
|
+
* @update:model-value="onCommit"
|
|
11
|
+
* @keydown.escape="onCancel"
|
|
12
|
+
* />
|
|
13
|
+
* </CellEditor>
|
|
14
|
+
* </MozGridVue>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const CellEditor: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
18
|
+
field: {
|
|
19
|
+
type: StringConstructor;
|
|
20
|
+
required: true;
|
|
21
|
+
};
|
|
22
|
+
}>, () => null, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
23
|
+
field: {
|
|
24
|
+
type: StringConstructor;
|
|
25
|
+
required: true;
|
|
26
|
+
};
|
|
27
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 셀 커스터마이징을 위한 렌더리스 컴포넌트.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```vue
|
|
6
|
+
* <MozGridVue :fields="fields" :data="data">
|
|
7
|
+
* <CellTemplate field="status" #default="{ value, rowData }">
|
|
8
|
+
* <span :class="value === 'active' ? 'text-green' : 'text-red'">
|
|
9
|
+
* {{ value }}
|
|
10
|
+
* </span>
|
|
11
|
+
* </CellTemplate>
|
|
12
|
+
* </MozGridVue>
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare const CellTemplate: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
16
|
+
/** 대상 필드 ID */
|
|
17
|
+
field: {
|
|
18
|
+
type: StringConstructor;
|
|
19
|
+
required: true;
|
|
20
|
+
};
|
|
21
|
+
}>, () => null, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
22
|
+
/** 대상 필드 ID */
|
|
23
|
+
field: {
|
|
24
|
+
type: StringConstructor;
|
|
25
|
+
required: true;
|
|
26
|
+
};
|
|
27
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 마스터-디테일 행을 위한 렌더리스 컴포넌트.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```vue
|
|
6
|
+
* <MozGridVue :fields="fields" :data="data">
|
|
7
|
+
* <DetailTemplate #default="{ parentData, dataIndex }">
|
|
8
|
+
* <div class="p-4">
|
|
9
|
+
* <h3>{{ parentData.name }} 상세</h3>
|
|
10
|
+
* <!-- 중첩 그리드 등 -->
|
|
11
|
+
* </div>
|
|
12
|
+
* </DetailTemplate>
|
|
13
|
+
* </MozGridVue>
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare const DetailTemplate: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
17
|
+
/** 최소 높이 (px) */
|
|
18
|
+
minHeight: {
|
|
19
|
+
type: NumberConstructor;
|
|
20
|
+
default: number;
|
|
21
|
+
};
|
|
22
|
+
/** 최대 높이 (px) */
|
|
23
|
+
maxHeight: {
|
|
24
|
+
type: NumberConstructor;
|
|
25
|
+
};
|
|
26
|
+
/** 하나만 확장 */
|
|
27
|
+
singleExpand: {
|
|
28
|
+
type: BooleanConstructor;
|
|
29
|
+
default: boolean;
|
|
30
|
+
};
|
|
31
|
+
/** 디테일 DOM 캐싱 */
|
|
32
|
+
keepDetailRows: {
|
|
33
|
+
type: BooleanConstructor;
|
|
34
|
+
default: boolean;
|
|
35
|
+
};
|
|
36
|
+
}>, () => null, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
37
|
+
/** 최소 높이 (px) */
|
|
38
|
+
minHeight: {
|
|
39
|
+
type: NumberConstructor;
|
|
40
|
+
default: number;
|
|
41
|
+
};
|
|
42
|
+
/** 최대 높이 (px) */
|
|
43
|
+
maxHeight: {
|
|
44
|
+
type: NumberConstructor;
|
|
45
|
+
};
|
|
46
|
+
/** 하나만 확장 */
|
|
47
|
+
singleExpand: {
|
|
48
|
+
type: BooleanConstructor;
|
|
49
|
+
default: boolean;
|
|
50
|
+
};
|
|
51
|
+
/** 디테일 DOM 캐싱 */
|
|
52
|
+
keepDetailRows: {
|
|
53
|
+
type: BooleanConstructor;
|
|
54
|
+
default: boolean;
|
|
55
|
+
};
|
|
56
|
+
}>> & Readonly<{}>, {
|
|
57
|
+
minHeight: number;
|
|
58
|
+
singleExpand: boolean;
|
|
59
|
+
keepDetailRows: boolean;
|
|
60
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 그룹 헤더 커스터마이징을 위한 렌더리스 컴포넌트.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```vue
|
|
6
|
+
* <MozGridVue :fields="fields" :data="data">
|
|
7
|
+
* <GroupTemplate #default="{ groupKey, groupValue, count, isExpanded }">
|
|
8
|
+
* <div class="flex items-center gap-2">
|
|
9
|
+
* <span>{{ isExpanded ? '▼' : '▶' }}</span>
|
|
10
|
+
* <strong>{{ groupKey }}: {{ groupValue }}</strong>
|
|
11
|
+
* <span class="text-gray-500">({{ count }}건)</span>
|
|
12
|
+
* </div>
|
|
13
|
+
* </GroupTemplate>
|
|
14
|
+
* </MozGridVue>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const GroupTemplate: import('vue').DefineComponent<{}, () => null, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 헤더 커스터마이징을 위한 렌더리스 컴포넌트.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```vue
|
|
6
|
+
* <MozGridVue :fields="fields" :data="data">
|
|
7
|
+
* <HeaderTemplate field="status" #default="{ header }">
|
|
8
|
+
* <div class="flex items-center gap-1">
|
|
9
|
+
* <IconStatus /> {{ header }}
|
|
10
|
+
* </div>
|
|
11
|
+
* </HeaderTemplate>
|
|
12
|
+
* </MozGridVue>
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare const HeaderTemplate: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
16
|
+
field: {
|
|
17
|
+
type: StringConstructor;
|
|
18
|
+
required: true;
|
|
19
|
+
};
|
|
20
|
+
}>, () => null, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
21
|
+
field: {
|
|
22
|
+
type: StringConstructor;
|
|
23
|
+
required: true;
|
|
24
|
+
};
|
|
25
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { InjectionKey, Ref } from 'vue';
|
|
2
|
+
import { PureSheet } from '../../../moz-ui-grid-core/src/index.ts';
|
|
3
|
+
import { VueRenderer } from '../bridge/VueRenderer';
|
|
4
|
+
import { TemplateRegistry } from './slots';
|
|
5
|
+
import { UseGridFilterReturn } from '../legacy/composables/useGridFilter';
|
|
6
|
+
import { UseGridSortReturn } from '../legacy/composables/useGridSort';
|
|
7
|
+
import { UseGridCustomCellReturn } from '../legacy/composables/useGridCustomCell';
|
|
8
|
+
import { UseGridBulkEditorReturn } from '../legacy/composables/useGridBulkEditor';
|
|
9
|
+
/** PureSheet 인스턴스 injection key */
|
|
10
|
+
export declare const GRID_INSTANCE_KEY: InjectionKey<Ref<PureSheet | null>>;
|
|
11
|
+
/** 그리드 컨테이너 HTMLElement injection key */
|
|
12
|
+
export declare const GRID_CONTAINER_KEY: InjectionKey<Ref<HTMLElement | undefined>>;
|
|
13
|
+
/** VueRenderer injection key */
|
|
14
|
+
export declare const GRID_RENDERER_KEY: InjectionKey<VueRenderer>;
|
|
15
|
+
/** 템플릿 레지스트리 injection key */
|
|
16
|
+
export declare const GRID_TEMPLATE_REGISTRY_KEY: InjectionKey<TemplateRegistry>;
|
|
17
|
+
/** 필터 모듈 injection key */
|
|
18
|
+
export declare const GRID_FILTER_MODULE_KEY: InjectionKey<UseGridFilterReturn>;
|
|
19
|
+
/** 정렬 모듈 injection key */
|
|
20
|
+
export declare const GRID_SORT_MODULE_KEY: InjectionKey<UseGridSortReturn>;
|
|
21
|
+
/** 조건부 스타일 모듈 injection key */
|
|
22
|
+
export declare const GRID_CUSTOM_CELL_MODULE_KEY: InjectionKey<UseGridCustomCellReturn>;
|
|
23
|
+
/** 일괄 편집 모듈 injection key */
|
|
24
|
+
export declare const GRID_BULK_EDITOR_MODULE_KEY: InjectionKey<UseGridBulkEditorReturn>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Component, Slot } from 'vue';
|
|
2
|
+
/** 셀 템플릿 슬롯 props */
|
|
3
|
+
export interface CellSlotProps {
|
|
4
|
+
value: unknown;
|
|
5
|
+
rowData: Record<string, unknown>;
|
|
6
|
+
columnId: string;
|
|
7
|
+
rowId?: string | number;
|
|
8
|
+
}
|
|
9
|
+
/** 헤더 템플릿 슬롯 props */
|
|
10
|
+
export interface HeaderSlotProps {
|
|
11
|
+
columnId: string;
|
|
12
|
+
header: string;
|
|
13
|
+
}
|
|
14
|
+
/** 에디터 슬롯 props */
|
|
15
|
+
export interface EditorSlotProps {
|
|
16
|
+
value: unknown;
|
|
17
|
+
rowData: Record<string, unknown>;
|
|
18
|
+
columnId: string;
|
|
19
|
+
onCommit: (newValue: unknown) => void;
|
|
20
|
+
onCancel: () => void;
|
|
21
|
+
}
|
|
22
|
+
/** 디테일 슬롯 props */
|
|
23
|
+
export interface DetailSlotProps {
|
|
24
|
+
parentData: Record<string, unknown>;
|
|
25
|
+
dataIndex: number;
|
|
26
|
+
}
|
|
27
|
+
/** 그룹 슬롯 props */
|
|
28
|
+
export interface GroupSlotProps {
|
|
29
|
+
groupKey: string;
|
|
30
|
+
groupValue: unknown;
|
|
31
|
+
level: number;
|
|
32
|
+
count: number;
|
|
33
|
+
isExpanded: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** 템플릿 등록 항목 */
|
|
36
|
+
export interface TemplateEntry {
|
|
37
|
+
type: 'cell' | 'header' | 'editor' | 'detail' | 'group';
|
|
38
|
+
fieldId?: string;
|
|
39
|
+
slot?: Slot;
|
|
40
|
+
component?: Component;
|
|
41
|
+
props?: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
/** 템플릿 레지스트리 */
|
|
44
|
+
export interface TemplateRegistry {
|
|
45
|
+
register(entry: TemplateEntry): void;
|
|
46
|
+
unregister(type: TemplateEntry['type'], fieldId?: string): void;
|
|
47
|
+
get(type: TemplateEntry['type'], fieldId?: string): TemplateEntry | undefined;
|
|
48
|
+
getAll(type: TemplateEntry['type']): TemplateEntry[];
|
|
49
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});let e=!1;const o=new Map,s=(e,o)=>`moz_excel_dl_lock:${e||"none"}:${o||"unknown"}`,t=e=>{const s=o.get(e);return!!s&&(!(s.expiresAt&&Date.now()>s.expiresAt)||(o.delete(e),!1))},n=(e,s,t=3e5)=>{const n={key:e,sessionId:s,expiresAt:Date.now()+t};o.set(e,n)},r=e=>{o.delete(e)},l=()=>{e||(e=!0)},c=(e,o)=>`moz_excel_sessions:${e||"none"}:${o||"unknown"}`,i={getUserLockKey:s,isLocked:t,lock:n,unlock:r,initExcelGuard:l};exports.default=i,exports.getAllSessions=(e,o)=>{const s=c(e,o);try{const e=localStorage.getItem(s);return e?JSON.parse(e):{}}catch{return{}}},exports.getSessionsKey=c,exports.getUserLockKey=s,exports.initExcelGuard=l,exports.isLocked=t,exports.lock=n,exports.removeSession=(e,o,s)=>{},exports.setSession=(e,o,s,t,n="download")=>{},exports.unlock=r,exports.updateSessionFileName=(e,o,s,t)=>{};
|