open-grid 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +366 -0
  3. package/dist/OpenGrid-CAodJLLm.cjs +90 -0
  4. package/dist/OpenGrid-CAodJLLm.cjs.map +1 -0
  5. package/dist/OpenGrid-CfZy3e7Q.js +4376 -0
  6. package/dist/OpenGrid-CfZy3e7Q.js.map +1 -0
  7. package/dist/open-grid-base.css +1595 -0
  8. package/dist/open-grid-react.cjs +2 -0
  9. package/dist/open-grid-react.cjs.map +1 -0
  10. package/dist/open-grid-react.js +91 -0
  11. package/dist/open-grid-react.js.map +1 -0
  12. package/dist/open-grid-themes.css +630 -0
  13. package/dist/open-grid-vue.cjs +2 -0
  14. package/dist/open-grid-vue.cjs.map +1 -0
  15. package/dist/open-grid-vue.js +84 -0
  16. package/dist/open-grid-vue.js.map +1 -0
  17. package/dist/open-grid.cjs +7 -0
  18. package/dist/open-grid.cjs.map +1 -0
  19. package/dist/open-grid.js +311 -0
  20. package/dist/open-grid.js.map +1 -0
  21. package/dist/types/bench/perf.d.ts +16 -0
  22. package/dist/types/core/CellEditManager.d.ts +46 -0
  23. package/dist/types/core/CellEventHandler.d.ts +28 -0
  24. package/dist/types/core/CellTypeRegistry.d.ts +5 -0
  25. package/dist/types/core/ColumnLayout.d.ts +41 -0
  26. package/dist/types/core/ContextMenu.d.ts +33 -0
  27. package/dist/types/core/DataLayer.d.ts +65 -0
  28. package/dist/types/core/EventEmitter.d.ts +11 -0
  29. package/dist/types/core/ExportManager.d.ts +28 -0
  30. package/dist/types/core/FilterPanel.d.ts +20 -0
  31. package/dist/types/core/FilterSelect.d.ts +96 -0
  32. package/dist/types/core/FindBarManager.d.ts +26 -0
  33. package/dist/types/core/FooterManager.d.ts +16 -0
  34. package/dist/types/core/FormulaEngine.d.ts +10 -0
  35. package/dist/types/core/GridRenderer.d.ts +42 -0
  36. package/dist/types/core/GroupEngine.d.ts +47 -0
  37. package/dist/types/core/GroupTreeManager.d.ts +43 -0
  38. package/dist/types/core/KeyboardManager.d.ts +26 -0
  39. package/dist/types/core/MaskingEngine.d.ts +25 -0
  40. package/dist/types/core/MathUtils.d.ts +26 -0
  41. package/dist/types/core/MergeEngine.d.ts +35 -0
  42. package/dist/types/core/OGDecimal.d.ts +49 -0
  43. package/dist/types/core/OpenGrid.d.ts +213 -0
  44. package/dist/types/core/OrgChart.d.ts +35 -0
  45. package/dist/types/core/Pagination.d.ts +34 -0
  46. package/dist/types/core/PivotEngine.d.ts +20 -0
  47. package/dist/types/core/RowDragDrop.d.ts +18 -0
  48. package/dist/types/core/RowManager.d.ts +30 -0
  49. package/dist/types/core/SortFilterManager.d.ts +36 -0
  50. package/dist/types/core/TreeEngine.d.ts +34 -0
  51. package/dist/types/core/TriggerManager.d.ts +10 -0
  52. package/dist/types/core/VirtualScroll.d.ts +31 -0
  53. package/dist/types/core/WorksheetManager.d.ts +24 -0
  54. package/dist/types/core/XmlConverter.d.ts +88 -0
  55. package/dist/types/core/editors/CellEditor.d.ts +55 -0
  56. package/dist/types/core/editors/DateEditor.d.ts +15 -0
  57. package/dist/types/core/editors/SelectEditor.d.ts +21 -0
  58. package/dist/types/core/renderers/CellRenderer.d.ts +138 -0
  59. package/dist/types/core/types.d.ts +497 -0
  60. package/dist/types/index.d.ts +9 -0
  61. package/dist/types/react/OpenGrid.d.ts +34 -0
  62. package/dist/types/react/index.d.ts +2 -0
  63. package/dist/types/vue/OpenGrid.vue.d.ts +80 -0
  64. package/dist/types/vue/index.d.ts +2 -0
  65. package/dist/types/vue/types.d.ts +28 -0
  66. package/dist/xlsx.min-Bx-LxWOf.cjs +138 -0
  67. package/dist/xlsx.min-Bx-LxWOf.cjs.map +1 -0
  68. package/dist/xlsx.min-Wavxcamn.js +11907 -0
  69. package/dist/xlsx.min-Wavxcamn.js.map +1 -0
  70. package/package.json +102 -0
@@ -0,0 +1,630 @@
1
+ /* ============================================================
2
+ OPEN_GRID — 12가지 테마 정의
3
+ 사용법: <div data-og-theme="ocean"> 또는 grid.setTheme('ocean')
4
+ ============================================================ */
5
+
6
+ /* ──────────────────────────────────────────────────────────
7
+ 1. default (Light Blue — 기본)
8
+ ────────────────────────────────────────────────────────── */
9
+ [data-og-theme="default"],
10
+ :root {
11
+ --og-primary: #1976d2;
12
+ --og-primary-light: #e3f2fd;
13
+ --og-primary-dark: #1565c0;
14
+ --og-header-bg: #f5f5f5;
15
+ --og-header-color: #333333;
16
+ --og-header-hover-bg: #ebebeb;
17
+ --og-header-sort-color: #1976d2;
18
+ --og-row-bg: #ffffff;
19
+ --og-row-alt-bg: #fafafa;
20
+ --og-row-hover-bg: #e3f2fd;
21
+ --og-row-color: #212121;
22
+ --og-row-selected-bg: #bbdefb;
23
+ --og-row-selected-color: #0d47a1;
24
+ --og-row-added-bg: #e8f5e9;
25
+ --og-row-added-color: #1b5e20;
26
+ --og-row-edited-bg: #fff8e1;
27
+ --og-row-edited-color: #e65100;
28
+ --og-row-removed-bg: #ffebee;
29
+ --og-row-removed-color: #b71c1c;
30
+ --og-group-bg: #e8eaf6;
31
+ --og-group-color: #283593;
32
+ --og-group-border: #c5cae9;
33
+ --og-tree-toggle-color: #555555;
34
+ --og-tree-line-color: #d0d0d0;
35
+ --og-tree-folder-color: #f9a825;
36
+ --og-tree-file-color: #78909c;
37
+ --og-tree-indent-guide: #e0e0e0;
38
+ --og-merge-bg: #fff9c4;
39
+ --og-merge-border: #f9a825;
40
+ --og-border-color: #e0e0e0;
41
+ --og-focus-border: #1976d2;
42
+ --og-pagination-bg: #ffffff;
43
+ --og-pagination-btn-bg: #ffffff;
44
+ --og-pagination-btn-color:#333333;
45
+ --og-input-bg: #ffffff;
46
+ --og-input-color: #212121;
47
+ --og-input-border: #1976d2;
48
+ --og-filter-bg: #ffffff;
49
+ --og-filter-color: #212121;
50
+ }
51
+
52
+ /* ──────────────────────────────────────────────────────────
53
+ 2. dark (다크)
54
+ ────────────────────────────────────────────────────────── */
55
+ [data-og-theme="dark"] {
56
+ --og-primary: #90caf9;
57
+ --og-primary-light: #1a237e;
58
+ --og-primary-dark: #42a5f5;
59
+ --og-header-bg: #1e1e1e;
60
+ --og-header-color: #e0e0e0;
61
+ --og-header-hover-bg: #2a2a2a;
62
+ --og-header-sort-color: #90caf9;
63
+ --og-row-bg: #2d2d2d;
64
+ --og-row-alt-bg: #252525;
65
+ --og-row-hover-bg: #3a3a5c;
66
+ --og-row-color: #e0e0e0;
67
+ --og-row-selected-bg: #283593;
68
+ --og-row-selected-color: #e3f2fd;
69
+ --og-row-added-bg: #1b5e20;
70
+ --og-row-added-color: #a5d6a7;
71
+ --og-row-edited-bg: #4e342e;
72
+ --og-row-edited-color: #ffcc80;
73
+ --og-row-removed-bg: #b71c1c;
74
+ --og-row-removed-color: #ffcdd2;
75
+ --og-group-bg: #1a237e;
76
+ --og-group-color: #c5cae9;
77
+ --og-group-border: #283593;
78
+ --og-tree-toggle-color: #90caf9;
79
+ --og-tree-line-color: #555555;
80
+ --og-tree-folder-color: #ffca28; /* 열림: bright amber */
81
+ --og-tree-folder-closed-color: #546e7a; /* 닫힘: dark blue-gray */
82
+ --og-tree-file-color: #90a4ae;
83
+ --og-tree-indent-guide: #555555;
84
+ --og-merge-bg: #3e2723;
85
+ --og-merge-border: #ff8f00;
86
+ --og-border-color: #444444;
87
+ --og-focus-border: #90caf9;
88
+ --og-pagination-bg: #1e1e1e;
89
+ --og-pagination-btn-bg: #2d2d2d;
90
+ --og-pagination-btn-color:#e0e0e0;
91
+ --og-input-bg: #1e1e1e;
92
+ --og-input-color: #e0e0e0;
93
+ --og-input-border: #90caf9;
94
+ --og-filter-bg: #2d2d2d;
95
+ --og-filter-color: #e0e0e0;
96
+ }
97
+ [data-og-theme="dark"] .og-empty-message { color: #757575; }
98
+ [data-og-theme="dark"] .og-loading-mask { background: rgba(30,30,30,0.75); }
99
+ [data-og-theme="dark"] { --og-spinner-track: rgba(255,255,255,0.15); }
100
+
101
+ /* ──────────────────────────────────────────────────────────
102
+ 3. ocean (오션 — 깊은 파란 계열)
103
+ ────────────────────────────────────────────────────────── */
104
+ [data-og-theme="ocean"] {
105
+ --og-primary: #0288d1;
106
+ --og-primary-light: #e1f5fe;
107
+ --og-primary-dark: #0277bd;
108
+ --og-header-bg: #e1f5fe;
109
+ --og-header-color: #01579b;
110
+ --og-header-hover-bg: #b3e5fc;
111
+ --og-header-sort-color: #0277bd;
112
+ --og-row-bg: #ffffff;
113
+ --og-row-alt-bg: #f0f9ff;
114
+ --og-row-hover-bg: #b3e5fc;
115
+ --og-row-color: #01579b;
116
+ --og-row-selected-bg: #0288d1;
117
+ --og-row-selected-color: #ffffff;
118
+ --og-row-added-bg: #e0f2f1;
119
+ --og-row-added-color: #004d40;
120
+ --og-row-edited-bg: #fff8e1;
121
+ --og-row-edited-color: #e65100;
122
+ --og-row-removed-bg: #fce4ec;
123
+ --og-row-removed-color: #880e4f;
124
+ --og-group-bg: #b3e5fc;
125
+ --og-group-color: #01579b;
126
+ --og-group-border: #81d4fa;
127
+ --og-tree-toggle-color: #0288d1;
128
+ --og-tree-line-color: #b3e5fc;
129
+ --og-tree-indent-guide: #b3e5fc;
130
+ --og-merge-bg: #e0f7fa;
131
+ --og-merge-border: #00acc1;
132
+ --og-border-color: #b3e5fc;
133
+ --og-focus-border: #0288d1;
134
+ --og-pagination-bg: #e1f5fe;
135
+ --og-pagination-btn-bg: #ffffff;
136
+ --og-pagination-btn-color:#01579b;
137
+ --og-input-bg: #ffffff;
138
+ --og-input-color: #01579b;
139
+ --og-input-border: #0288d1;
140
+ --og-filter-bg: #e1f5fe;
141
+ --og-filter-color: #01579b;
142
+ }
143
+
144
+ /* ──────────────────────────────────────────────────────────
145
+ 4. forest (포레스트 — 녹색 계열)
146
+ ────────────────────────────────────────────────────────── */
147
+ [data-og-theme="forest"] {
148
+ --og-primary: #388e3c;
149
+ --og-primary-light: #e8f5e9;
150
+ --og-primary-dark: #2e7d32;
151
+ --og-header-bg: #e8f5e9;
152
+ --og-header-color: #1b5e20;
153
+ --og-header-hover-bg: #c8e6c9;
154
+ --og-header-sort-color: #2e7d32;
155
+ --og-row-bg: #ffffff;
156
+ --og-row-alt-bg: #f1f8f1;
157
+ --og-row-hover-bg: #c8e6c9;
158
+ --og-row-color: #1b5e20;
159
+ --og-row-selected-bg: #388e3c;
160
+ --og-row-selected-color: #ffffff;
161
+ --og-row-added-bg: #dcedc8;
162
+ --og-row-added-color: #33691e;
163
+ --og-row-edited-bg: #fff9c4;
164
+ --og-row-edited-color: #f57f17;
165
+ --og-row-removed-bg: #ffebee;
166
+ --og-row-removed-color: #c62828;
167
+ --og-group-bg: #c8e6c9;
168
+ --og-group-color: #1b5e20;
169
+ --og-group-border: #a5d6a7;
170
+ --og-tree-toggle-color: #388e3c;
171
+ --og-tree-line-color: #c8e6c9;
172
+ --og-tree-indent-guide: #c8e6c9;
173
+ --og-merge-bg: #f9fbe7;
174
+ --og-merge-border: #aed581;
175
+ --og-border-color: #c8e6c9;
176
+ --og-focus-border: #388e3c;
177
+ --og-pagination-bg: #e8f5e9;
178
+ --og-pagination-btn-bg: #ffffff;
179
+ --og-pagination-btn-color:#1b5e20;
180
+ --og-input-bg: #ffffff;
181
+ --og-input-color: #1b5e20;
182
+ --og-input-border: #388e3c;
183
+ --og-filter-bg: #e8f5e9;
184
+ --og-filter-color: #1b5e20;
185
+ }
186
+
187
+ /* ──────────────────────────────────────────────────────────
188
+ 5. sunset (선셋 — 주황/따뜻한 계열)
189
+ ────────────────────────────────────────────────────────── */
190
+ [data-og-theme="sunset"] {
191
+ --og-primary: #f4511e;
192
+ --og-primary-light: #fbe9e7;
193
+ --og-primary-dark: #d84315;
194
+ --og-header-bg: #fbe9e7;
195
+ --og-header-color: #bf360c;
196
+ --og-header-hover-bg: #ffccbc;
197
+ --og-header-sort-color: #d84315;
198
+ --og-row-bg: #fffdf9;
199
+ --og-row-alt-bg: #fff8f5;
200
+ --og-row-hover-bg: #ffe0b2;
201
+ --og-row-color: #4e2a12;
202
+ --og-row-selected-bg: #f4511e;
203
+ --og-row-selected-color: #ffffff;
204
+ --og-row-added-bg: #f9fbe7;
205
+ --og-row-added-color: #558b2f;
206
+ --og-row-edited-bg: #fff8e1;
207
+ --og-row-edited-color: #e65100;
208
+ --og-row-removed-bg: #fce4ec;
209
+ --og-row-removed-color: #880e4f;
210
+ --og-group-bg: #ffe0b2;
211
+ --og-group-color: #bf360c;
212
+ --og-group-border: #ffcc80;
213
+ --og-tree-toggle-color: #f4511e;
214
+ --og-tree-line-color: #ffe0b2;
215
+ --og-tree-indent-guide: #ffe0b2;
216
+ --og-merge-bg: #fff9c4;
217
+ --og-merge-border: #ffa000;
218
+ --og-border-color: #ffccbc;
219
+ --og-focus-border: #f4511e;
220
+ --og-pagination-bg: #fbe9e7;
221
+ --og-pagination-btn-bg: #ffffff;
222
+ --og-pagination-btn-color:#bf360c;
223
+ --og-input-bg: #ffffff;
224
+ --og-input-color: #4e2a12;
225
+ --og-input-border: #f4511e;
226
+ --og-filter-bg: #fbe9e7;
227
+ --og-filter-color: #bf360c;
228
+ }
229
+
230
+ /* ──────────────────────────────────────────────────────────
231
+ 6. purple (퍼플 — 보라 계열)
232
+ ────────────────────────────────────────────────────────── */
233
+ [data-og-theme="purple"] {
234
+ --og-primary: #7b1fa2;
235
+ --og-primary-light: #f3e5f5;
236
+ --og-primary-dark: #6a1b9a;
237
+ --og-header-bg: #f3e5f5;
238
+ --og-header-color: #4a148c;
239
+ --og-header-hover-bg: #e1bee7;
240
+ --og-header-sort-color: #6a1b9a;
241
+ --og-row-bg: #ffffff;
242
+ --og-row-alt-bg: #fdf5ff;
243
+ --og-row-hover-bg: #e1bee7;
244
+ --og-row-color: #311b44;
245
+ --og-row-selected-bg: #7b1fa2;
246
+ --og-row-selected-color: #ffffff;
247
+ --og-row-added-bg: #e8f5e9;
248
+ --og-row-added-color: #1b5e20;
249
+ --og-row-edited-bg: #fff8e1;
250
+ --og-row-edited-color: #e65100;
251
+ --og-row-removed-bg: #ffebee;
252
+ --og-row-removed-color: #b71c1c;
253
+ --og-group-bg: #e1bee7;
254
+ --og-group-color: #4a148c;
255
+ --og-group-border: #ce93d8;
256
+ --og-tree-toggle-color: #7b1fa2;
257
+ --og-tree-line-color: #e1bee7;
258
+ --og-tree-indent-guide: #e1bee7;
259
+ --og-merge-bg: #fce4ec;
260
+ --og-merge-border: #ad1457;
261
+ --og-border-color: #e1bee7;
262
+ --og-focus-border: #7b1fa2;
263
+ --og-pagination-bg: #f3e5f5;
264
+ --og-pagination-btn-bg: #ffffff;
265
+ --og-pagination-btn-color:#4a148c;
266
+ --og-input-bg: #ffffff;
267
+ --og-input-color: #311b44;
268
+ --og-input-border: #7b1fa2;
269
+ --og-filter-bg: #f3e5f5;
270
+ --og-filter-color: #4a148c;
271
+ }
272
+
273
+ /* ──────────────────────────────────────────────────────────
274
+ 7. rose (로즈 — 분홍/핑크 계열)
275
+ ────────────────────────────────────────────────────────── */
276
+ [data-og-theme="rose"] {
277
+ --og-primary: #e91e63;
278
+ --og-primary-light: #fce4ec;
279
+ --og-primary-dark: #c2185b;
280
+ --og-header-bg: #fce4ec;
281
+ --og-header-color: #880e4f;
282
+ --og-header-hover-bg: #f8bbd0;
283
+ --og-header-sort-color: #c2185b;
284
+ --og-row-bg: #ffffff;
285
+ --og-row-alt-bg: #fff5f8;
286
+ --og-row-hover-bg: #f8bbd0;
287
+ --og-row-color: #4a0021;
288
+ --og-row-selected-bg: #e91e63;
289
+ --og-row-selected-color: #ffffff;
290
+ --og-row-added-bg: #e8f5e9;
291
+ --og-row-added-color: #1b5e20;
292
+ --og-row-edited-bg: #fff8e1;
293
+ --og-row-edited-color: #e65100;
294
+ --og-row-removed-bg: #fce4ec;
295
+ --og-row-removed-color: #880e4f;
296
+ --og-group-bg: #f8bbd0;
297
+ --og-group-color: #880e4f;
298
+ --og-group-border: #f48fb1;
299
+ --og-tree-toggle-color: #e91e63;
300
+ --og-tree-line-color: #f8bbd0;
301
+ --og-tree-indent-guide: #f8bbd0;
302
+ --og-merge-bg: #fff3e0;
303
+ --og-merge-border: #fb8c00;
304
+ --og-border-color: #f8bbd0;
305
+ --og-focus-border: #e91e63;
306
+ --og-pagination-bg: #fce4ec;
307
+ --og-pagination-btn-bg: #ffffff;
308
+ --og-pagination-btn-color:#880e4f;
309
+ --og-input-bg: #ffffff;
310
+ --og-input-color: #4a0021;
311
+ --og-input-border: #e91e63;
312
+ --og-filter-bg: #fce4ec;
313
+ --og-filter-color: #880e4f;
314
+ }
315
+
316
+ /* ──────────────────────────────────────────────────────────
317
+ 8. teal (틸 — 청록 계열)
318
+ ────────────────────────────────────────────────────────── */
319
+ [data-og-theme="teal"] {
320
+ --og-primary: #00897b;
321
+ --og-primary-light: #e0f2f1;
322
+ --og-primary-dark: #00695c;
323
+ --og-header-bg: #e0f2f1;
324
+ --og-header-color: #004d40;
325
+ --og-header-hover-bg: #b2dfdb;
326
+ --og-header-sort-color: #00695c;
327
+ --og-row-bg: #ffffff;
328
+ --og-row-alt-bg: #f0faf9;
329
+ --og-row-hover-bg: #b2dfdb;
330
+ --og-row-color: #00251a;
331
+ --og-row-selected-bg: #00897b;
332
+ --og-row-selected-color: #ffffff;
333
+ --og-row-added-bg: #f9fbe7;
334
+ --og-row-added-color: #33691e;
335
+ --og-row-edited-bg: #fff8e1;
336
+ --og-row-edited-color: #e65100;
337
+ --og-row-removed-bg: #ffebee;
338
+ --og-row-removed-color: #b71c1c;
339
+ --og-group-bg: #b2dfdb;
340
+ --og-group-color: #004d40;
341
+ --og-group-border: #80cbc4;
342
+ --og-tree-toggle-color: #00897b;
343
+ --og-tree-line-color: #b2dfdb;
344
+ --og-tree-indent-guide: #b2dfdb;
345
+ --og-merge-bg: #e0f7fa;
346
+ --og-merge-border: #0097a7;
347
+ --og-border-color: #b2dfdb;
348
+ --og-focus-border: #00897b;
349
+ --og-pagination-bg: #e0f2f1;
350
+ --og-pagination-btn-bg: #ffffff;
351
+ --og-pagination-btn-color:#004d40;
352
+ --og-input-bg: #ffffff;
353
+ --og-input-color: #00251a;
354
+ --og-input-border: #00897b;
355
+ --og-filter-bg: #e0f2f1;
356
+ --og-filter-color: #004d40;
357
+ }
358
+
359
+ /* ──────────────────────────────────────────────────────────
360
+ 9. indigo (인디고 — 짙은 남색)
361
+ ────────────────────────────────────────────────────────── */
362
+ [data-og-theme="indigo"] {
363
+ --og-primary: #3949ab;
364
+ --og-primary-light: #e8eaf6;
365
+ --og-primary-dark: #283593;
366
+ --og-header-bg: #e8eaf6;
367
+ --og-header-color: #1a237e;
368
+ --og-header-hover-bg: #c5cae9;
369
+ --og-header-sort-color: #283593;
370
+ --og-row-bg: #ffffff;
371
+ --og-row-alt-bg: #f5f6ff;
372
+ --og-row-hover-bg: #c5cae9;
373
+ --og-row-color: #1a237e;
374
+ --og-row-selected-bg: #3949ab;
375
+ --og-row-selected-color: #ffffff;
376
+ --og-row-added-bg: #e8f5e9;
377
+ --og-row-added-color: #1b5e20;
378
+ --og-row-edited-bg: #fff8e1;
379
+ --og-row-edited-color: #e65100;
380
+ --og-row-removed-bg: #ffebee;
381
+ --og-row-removed-color: #b71c1c;
382
+ --og-group-bg: #c5cae9;
383
+ --og-group-color: #1a237e;
384
+ --og-group-border: #9fa8da;
385
+ --og-tree-toggle-color: #3949ab;
386
+ --og-tree-line-color: #c5cae9;
387
+ --og-tree-indent-guide: #c5cae9;
388
+ --og-merge-bg: #ede7f6;
389
+ --og-merge-border: #7e57c2;
390
+ --og-border-color: #c5cae9;
391
+ --og-focus-border: #3949ab;
392
+ --og-pagination-bg: #e8eaf6;
393
+ --og-pagination-btn-bg: #ffffff;
394
+ --og-pagination-btn-color:#1a237e;
395
+ --og-input-bg: #ffffff;
396
+ --og-input-color: #1a237e;
397
+ --og-input-border: #3949ab;
398
+ --og-filter-bg: #e8eaf6;
399
+ --og-filter-color: #1a237e;
400
+ }
401
+
402
+ /* ──────────────────────────────────────────────────────────
403
+ 10. amber (앰버 — 황금/호박색)
404
+ ────────────────────────────────────────────────────────── */
405
+ [data-og-theme="amber"] {
406
+ --og-primary: #ffa000;
407
+ --og-primary-light: #fff8e1;
408
+ --og-primary-dark: #ff8f00;
409
+ --og-header-bg: #fff8e1;
410
+ --og-header-color: #6d4c00;
411
+ --og-header-hover-bg: #ffecb3;
412
+ --og-header-sort-color: #ff8f00;
413
+ --og-row-bg: #fffdf5;
414
+ --og-row-alt-bg: #fffbee;
415
+ --og-row-hover-bg: #ffecb3;
416
+ --og-row-color: #4e3300;
417
+ --og-row-selected-bg: #ffa000;
418
+ --og-row-selected-color: #ffffff;
419
+ --og-row-added-bg: #e8f5e9;
420
+ --og-row-added-color: #1b5e20;
421
+ --og-row-edited-bg: #ffe082;
422
+ --og-row-edited-color: #5d4037;
423
+ --og-row-removed-bg: #ffebee;
424
+ --og-row-removed-color: #b71c1c;
425
+ --og-group-bg: #ffecb3;
426
+ --og-group-color: #6d4c00;
427
+ --og-group-border: #ffe082;
428
+ --og-tree-toggle-color: #ffa000;
429
+ --og-tree-line-color: #ffecb3;
430
+ --og-tree-indent-guide: #ffecb3;
431
+ --og-merge-bg: #fff3e0;
432
+ --og-merge-border: #fb8c00;
433
+ --og-border-color: #ffecb3;
434
+ --og-focus-border: #ffa000;
435
+ --og-pagination-bg: #fff8e1;
436
+ --og-pagination-btn-bg: #ffffff;
437
+ --og-pagination-btn-color:#6d4c00;
438
+ --og-input-bg: #ffffff;
439
+ --og-input-color: #4e3300;
440
+ --og-input-border: #ffa000;
441
+ --og-filter-bg: #fff8e1;
442
+ --og-filter-color: #6d4c00;
443
+ }
444
+
445
+ /* ──────────────────────────────────────────────────────────
446
+ 11. slate (슬레이트 — 어두운 회색, 다크 변형)
447
+ ────────────────────────────────────────────────────────── */
448
+ [data-og-theme="slate"] {
449
+ --og-primary: #546e7a;
450
+ --og-primary-light: #90a4ae;
451
+ --og-primary-dark: #37474f;
452
+ --og-header-bg: #263238;
453
+ --og-header-color: #eceff1;
454
+ --og-header-hover-bg: #37474f;
455
+ --og-header-sort-color: #80cbc4;
456
+ --og-row-bg: #37474f;
457
+ --og-row-alt-bg: #2e3d44;
458
+ --og-row-hover-bg: #455a64;
459
+ --og-row-color: #eceff1;
460
+ --og-row-selected-bg: #546e7a;
461
+ --og-row-selected-color: #eceff1;
462
+ --og-row-added-bg: #1b5e20;
463
+ --og-row-added-color: #a5d6a7;
464
+ --og-row-edited-bg: #4e342e;
465
+ --og-row-edited-color: #ffcc80;
466
+ --og-row-removed-bg: #b71c1c;
467
+ --og-row-removed-color: #ffcdd2;
468
+ --og-group-bg: #263238;
469
+ --og-group-color: #b0bec5;
470
+ --og-group-border: #37474f;
471
+ --og-tree-toggle-color: #80cbc4;
472
+ --og-tree-line-color: #546e7a;
473
+ --og-tree-indent-guide: #546e7a;
474
+ --og-merge-bg: #3e2723;
475
+ --og-merge-border: #ff8f00;
476
+ --og-border-color: #455a64;
477
+ --og-focus-border: #80cbc4;
478
+ --og-pagination-bg: #263238;
479
+ --og-pagination-btn-bg: #37474f;
480
+ --og-pagination-btn-color:#eceff1;
481
+ --og-input-bg: #263238;
482
+ --og-input-color: #eceff1;
483
+ --og-input-border: #80cbc4;
484
+ --og-filter-bg: #37474f;
485
+ --og-filter-color: #eceff1;
486
+ }
487
+ [data-og-theme="slate"] .og-loading-mask { background: rgba(38,50,56,0.8); }
488
+ [data-og-theme="slate"] { --og-spinner-track: rgba(255,255,255,0.15); }
489
+
490
+ /* ──────────────────────────────────────────────────────────
491
+ 12. crimson (크림슨 — 진한 빨강)
492
+ ────────────────────────────────────────────────────────── */
493
+ [data-og-theme="crimson"] {
494
+ --og-primary: #c62828;
495
+ --og-primary-light: #ffebee;
496
+ --og-primary-dark: #b71c1c;
497
+ --og-header-bg: #ffebee;
498
+ --og-header-color: #7f0000;
499
+ --og-header-hover-bg: #ffcdd2;
500
+ --og-header-sort-color: #b71c1c;
501
+ --og-row-bg: #ffffff;
502
+ --og-row-alt-bg: #fff5f5;
503
+ --og-row-hover-bg: #ffcdd2;
504
+ --og-row-color: #4a0000;
505
+ --og-row-selected-bg: #c62828;
506
+ --og-row-selected-color: #ffffff;
507
+ --og-row-added-bg: #e8f5e9;
508
+ --og-row-added-color: #1b5e20;
509
+ --og-row-edited-bg: #fff8e1;
510
+ --og-row-edited-color: #e65100;
511
+ --og-row-removed-bg: #b71c1c;
512
+ --og-row-removed-color: #ffcdd2;
513
+ --og-group-bg: #ffcdd2;
514
+ --og-group-color: #7f0000;
515
+ --og-group-border: #ef9a9a;
516
+ --og-tree-toggle-color: #c62828;
517
+ --og-tree-line-color: #ffcdd2;
518
+ --og-tree-indent-guide: #ffcdd2;
519
+ --og-merge-bg: #fce4ec;
520
+ --og-merge-border: #ad1457;
521
+ --og-border-color: #ffcdd2;
522
+ --og-focus-border: #c62828;
523
+ --og-pagination-bg: #ffebee;
524
+ --og-pagination-btn-bg: #ffffff;
525
+ --og-pagination-btn-color:#7f0000;
526
+ --og-input-bg: #ffffff;
527
+ --og-input-color: #4a0000;
528
+ --og-input-border: #c62828;
529
+ --og-filter-bg: #ffebee;
530
+ --og-filter-color: #7f0000;
531
+ }
532
+
533
+ /* ──────────────────────────────────────────────────────────
534
+ 13. executive (다크 네이비 + 골드 — 프리미엄/럭셔리)
535
+ ────────────────────────────────────────────────────────── */
536
+ [data-og-theme="executive"] {
537
+ --og-primary: #c9a227;
538
+ --og-primary-light: #1e2d4a;
539
+ --og-primary-dark: #a87d1a;
540
+ --og-header-bg: #0d1b2e;
541
+ --og-header-color: #d4c5a0;
542
+ --og-header-hover-bg: #162338;
543
+ --og-header-sort-color: #c9a227;
544
+ --og-row-bg: #0f2035;
545
+ --og-row-alt-bg: #0b1a2c;
546
+ --og-row-hover-bg: #183047;
547
+ --og-row-color: #cdd5e0;
548
+ --og-row-selected-bg: #2a3d5c;
549
+ --og-row-selected-color: #e8d5a0;
550
+ --og-row-added-bg: #1a3a25;
551
+ --og-row-added-color: #8bc98f;
552
+ --og-row-edited-bg: #3b2c12;
553
+ --og-row-edited-color: #f5c97b;
554
+ --og-row-removed-bg: #3b1515;
555
+ --og-row-removed-color: #e8a0a0;
556
+ --og-group-bg: #162338;
557
+ --og-group-color: #c9a227;
558
+ --og-group-border: #2a3d5c;
559
+ --og-tree-toggle-color: #c9a227;
560
+ --og-tree-line-color: #2a3d5c;
561
+ --og-tree-folder-color: #c9a227;
562
+ --og-tree-folder-closed-color: #5a7a9a;
563
+ --og-tree-file-color: #6b8ba4;
564
+ --og-tree-hover-bg: rgba(201,162,39,0.10);
565
+ --og-tree-indent-guide: #2a3d5c;
566
+ --og-merge-bg: #2a1f0e;
567
+ --og-merge-border: #c9a227;
568
+ --og-border-color: #1e3050;
569
+ --og-focus-border: #c9a227;
570
+ --og-pagination-bg: #0d1b2e;
571
+ --og-pagination-btn-bg: #0f2035;
572
+ --og-pagination-btn-color: #cdd5e0;
573
+ --og-input-bg: #0f2035;
574
+ --og-input-color: #cdd5e0;
575
+ --og-input-border: #c9a227;
576
+ --og-filter-bg: #0d1b2e;
577
+ --og-filter-color: #cdd5e0;
578
+ --og-shadow-sm: 0 1px 4px rgba(0,0,0,0.40), 0 1px 3px rgba(0,0,0,0.30);
579
+ --og-shadow-md: 0 4px 16px rgba(0,0,0,0.55), 0 2px 8px rgba(0,0,0,0.35);
580
+ --og-spinner-track: rgba(255,255,255,0.12);
581
+ }
582
+ [data-og-theme="executive"] .og-empty-message { color: #3a5272; }
583
+ [data-og-theme="executive"] .og-loading-mask { background: rgba(13,27,46,0.80); }
584
+
585
+ /* ──────────────────────────────────────────────────────────
586
+ 14. modern (Tailwind Slate — 클린·미니멀 블루그레이)
587
+ ────────────────────────────────────────────────────────── */
588
+ [data-og-theme="modern"] {
589
+ --og-primary: #2563eb;
590
+ --og-primary-light: #eff6ff;
591
+ --og-primary-dark: #1d4ed8;
592
+ --og-header-bg: #f8fafc;
593
+ --og-header-color: #0f172a;
594
+ --og-header-hover-bg: #f1f5f9;
595
+ --og-header-sort-color: #2563eb;
596
+ --og-row-bg: #ffffff;
597
+ --og-row-alt-bg: #f8fafc;
598
+ --og-row-hover-bg: #eff6ff;
599
+ --og-row-color: #0f172a;
600
+ --og-row-selected-bg: #dbeafe;
601
+ --og-row-selected-color: #1e3a8a;
602
+ --og-row-added-bg: #f0fdf4;
603
+ --og-row-added-color: #14532d;
604
+ --og-row-edited-bg: #fffbeb;
605
+ --og-row-edited-color: #92400e;
606
+ --og-row-removed-bg: #fef2f2;
607
+ --og-row-removed-color: #7f1d1d;
608
+ --og-group-bg: #eff6ff;
609
+ --og-group-color: #1e3a8a;
610
+ --og-group-border: #bfdbfe;
611
+ --og-tree-toggle-color: #2563eb;
612
+ --og-tree-line-color: #e2e8f0;
613
+ --og-tree-folder-color: #f59e0b;
614
+ --og-tree-folder-closed-color: #94a3b8;
615
+ --og-tree-file-color: #94a3b8;
616
+ --og-tree-hover-bg: rgba(37,99,235,0.06);
617
+ --og-tree-indent-guide: #e2e8f0;
618
+ --og-merge-bg: #fefce8;
619
+ --og-merge-border: #eab308;
620
+ --og-border-color: #e2e8f0;
621
+ --og-focus-border: #2563eb;
622
+ --og-pagination-bg: #ffffff;
623
+ --og-pagination-btn-bg: #ffffff;
624
+ --og-pagination-btn-color: #334155;
625
+ --og-input-bg: #ffffff;
626
+ --og-input-color: #0f172a;
627
+ --og-input-border: #2563eb;
628
+ --og-filter-bg: #ffffff;
629
+ --og-filter-color: #0f172a;
630
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("vue"),p=require("./OpenGrid-CAodJLLm.cjs"),h=a.defineComponent({__name:"OpenGrid",props:{data:{default:()=>[]},columns:{},height:{default:400},width:{default:"100%"},editable:{type:Boolean,default:!1},sortable:{type:Boolean,default:!0},filterable:{type:Boolean,default:!0},rowNumber:{type:Boolean,default:!1},checkColumn:{type:Boolean,default:!1},stateColumn:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},frozenColumns:{default:0},theme:{default:"default"},options:{}},emits:["update:data","ready","cell-click","row-click","edit-end","sort-change","filter-change","row-check"],setup(r,{expose:c,emit:u}){const e=r,n=u,d=a.ref(),o=a.shallowRef(null);let i=null;const f=a.computed(()=>({height:typeof e.height=="number"?`${e.height}px`:e.height,width:typeof e.width=="number"?`${e.width}px`:e.width}));return a.onMounted(()=>{if(!d.value)return;const l={columns:e.columns,height:"100%",width:"100%",editable:e.editable,sortable:e.sortable,filterable:e.filterable,rowNumber:e.rowNumber,checkColumn:e.checkColumn,stateColumn:e.stateColumn,draggable:e.draggable,frozenColumns:e.frozenColumns,theme:e.theme,...e.options,onReady:t=>{var s;(s=e.data)!=null&&s.length&&t.setData(e.data),n("ready",t)},onCellClick:t=>n("cell-click",t),onRowClick:t=>n("row-click",t),onEditEnd:t=>n("edit-end",t),onSortChange:t=>n("sort-change",t),onFilterChange:t=>n("filter-change",t),onDataChange:t=>{i=t,n("update:data",t)}};o.value=new p.OpenGrid(d.value,l)}),a.watch(()=>e.data,l=>{!o.value||!l||l!==i&&o.value.setData(l)},{deep:!1}),a.watch(()=>e.theme,l=>{o.value&&l&&o.value.setTheme(l)}),a.watch(()=>e.columns,l=>{o.value&&o.value.applyColumns(l)},{deep:!1}),a.onUnmounted(()=>{var l;(l=o.value)==null||l.destroy(),o.value=null}),c({grid:o}),(l,t)=>(a.openBlock(),a.createElementBlock("div",{ref_key:"containerRef",ref:d,class:"og-vue-wrapper",style:a.normalizeStyle(f.value)},null,4))}}),m=(r,c)=>{const u=r.__vccOpts||r;for(const[e,n]of c)u[e]=n;return u},g=m(h,[["__scopeId","data-v-0a49d4fc"]]);exports.OpenGrid=g;
2
+ //# sourceMappingURL=open-grid-vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-grid-vue.cjs","sources":["../src/vue/OpenGrid.vue"],"sourcesContent":["<template>\n <div ref=\"containerRef\" class=\"og-vue-wrapper\" :style=\"containerStyle\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted, watch, shallowRef, computed } from 'vue';\nimport { OpenGrid } from '../core/OpenGrid.js';\nimport type { GridOptions, OpenGridInstance } from '../core/types.js';\nimport type { OpenGridProps, OpenGridEmits } from './types.js';\nimport '../styles/base.css';\n\nconst props = withDefaults(defineProps<OpenGridProps>(), {\n data: () => [],\n height: 400,\n width: '100%',\n editable: false,\n sortable: true,\n filterable: true,\n rowNumber: false,\n checkColumn: false,\n stateColumn: false,\n draggable: false,\n frozenColumns: 0,\n theme: 'default',\n});\n\nconst emit = defineEmits<OpenGridEmits>();\n\nconst containerRef = ref<HTMLElement>();\nconst gridInstance = shallowRef<OpenGridInstance | null>(null);\n\n// dataChange 루프 방지: 그리드에서 발행한 데이터를 watch가 다시 setData하지 않도록 추적\nlet _lastEmittedData: any[] | null = null;\n\nconst containerStyle = computed(() => ({\n height: typeof props.height === 'number' ? `${props.height}px` : props.height,\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n}));\n\nonMounted(() => {\n if (!containerRef.value) return;\n\n const options: GridOptions = {\n columns: props.columns,\n height: '100%',\n width: '100%',\n editable: props.editable,\n sortable: props.sortable,\n filterable: props.filterable,\n rowNumber: props.rowNumber,\n checkColumn: props.checkColumn,\n stateColumn: props.stateColumn,\n draggable: props.draggable,\n frozenColumns: props.frozenColumns,\n theme: props.theme,\n ...props.options,\n\n onReady: (grid) => {\n if (props.data?.length) grid.setData(props.data);\n emit('ready', grid);\n },\n onCellClick: (e) => emit('cell-click', e),\n onRowClick: (e) => emit('row-click', e),\n onEditEnd: (e) => emit('edit-end', e),\n onSortChange: (e) => emit('sort-change', e),\n onFilterChange: (e) => emit('filter-change', e),\n onDataChange: (data) => {\n _lastEmittedData = data;\n emit('update:data', data);\n },\n };\n\n gridInstance.value = new OpenGrid(containerRef.value, options);\n});\n\n// data prop 변경 감지 → 그리드 갱신 (그리드 자신이 발행한 데이터는 무시하여 루프 방지)\nwatch(() => props.data, (newData) => {\n if (!gridInstance.value || !newData) return;\n if (newData === _lastEmittedData) return;\n gridInstance.value.setData(newData);\n}, { deep: false });\n\n// theme prop 변경 감지 → setTheme 호출\nwatch(() => props.theme, (newTheme) => {\n if (gridInstance.value && newTheme) {\n gridInstance.value.setTheme(newTheme);\n }\n});\n\n// columns 변경 감지\nwatch(() => props.columns, (newCols) => {\n if (gridInstance.value) {\n gridInstance.value.applyColumns(newCols);\n }\n}, { deep: false });\n\nonUnmounted(() => {\n gridInstance.value?.destroy();\n gridInstance.value = null;\n});\n\n// 그리드 인스턴스 외부 노출\ndefineExpose({ grid: gridInstance });\n</script>\n\n<style scoped>\n.og-vue-wrapper {\n display: block;\n box-sizing: border-box;\n}\n</style>\n"],"names":["props","__props","emit","__emit","containerRef","ref","gridInstance","shallowRef","_lastEmittedData","containerStyle","computed","onMounted","options","grid","_a","e","data","OpenGrid","watch","newData","newTheme","newCols","onUnmounted","__expose","_createElementBlock"],"mappings":"6sBAWA,MAAMA,EAAQC,EAeRC,EAAOC,EAEPC,EAAeC,EAAAA,IAAA,EACfC,EAAeC,EAAAA,WAAoC,IAAI,EAG7D,IAAIC,EAAiC,KAErC,MAAMC,EAAiBC,EAAAA,SAAS,KAAO,CACrC,OAAQ,OAAOV,EAAM,QAAW,SAAW,GAAGA,EAAM,MAAM,KAAOA,EAAM,OACvE,MAAO,OAAOA,EAAM,OAAU,SAAW,GAAGA,EAAM,KAAK,KAAOA,EAAM,KAAA,EACpE,EAEFW,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACP,EAAa,MAAO,OAEzB,MAAMQ,EAAuB,CAC3B,QAASZ,EAAM,QACf,OAAQ,OACR,MAAO,OACP,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,WAAYA,EAAM,WAClB,UAAWA,EAAM,UACjB,YAAaA,EAAM,YACnB,YAAaA,EAAM,YACnB,UAAWA,EAAM,UACjB,cAAeA,EAAM,cACrB,MAAOA,EAAM,MACb,GAAGA,EAAM,QAET,QAAUa,GAAS,QACbC,EAAAd,EAAM,OAAN,MAAAc,EAAY,QAAQD,EAAK,QAAQb,EAAM,IAAI,EAC/CE,EAAK,QAASW,CAAI,CACpB,EACA,YAAcE,GAAMb,EAAK,aAAca,CAAC,EACxC,WAAaA,GAAMb,EAAK,YAAaa,CAAC,EACtC,UAAYA,GAAMb,EAAK,WAAYa,CAAC,EACpC,aAAeA,GAAMb,EAAK,cAAea,CAAC,EAC1C,eAAiBA,GAAMb,EAAK,gBAAiBa,CAAC,EAC9C,aAAeC,GAAS,CACtBR,EAAmBQ,EACnBd,EAAK,cAAec,CAAI,CAC1B,CAAA,EAGFV,EAAa,MAAQ,IAAIW,EAAAA,SAASb,EAAa,MAAOQ,CAAO,CAC/D,CAAC,EAGDM,EAAAA,MAAM,IAAMlB,EAAM,KAAOmB,GAAY,CAC/B,CAACb,EAAa,OAAS,CAACa,GACxBA,IAAYX,GAChBF,EAAa,MAAM,QAAQa,CAAO,CACpC,EAAG,CAAE,KAAM,GAAO,EAGlBD,EAAAA,MAAM,IAAMlB,EAAM,MAAQoB,GAAa,CACjCd,EAAa,OAASc,GACxBd,EAAa,MAAM,SAASc,CAAQ,CAExC,CAAC,EAGDF,EAAAA,MAAM,IAAMlB,EAAM,QAAUqB,GAAY,CAClCf,EAAa,OACfA,EAAa,MAAM,aAAae,CAAO,CAE3C,EAAG,CAAE,KAAM,GAAO,EAElBC,EAAAA,YAAY,IAAM,QAChBR,EAAAR,EAAa,QAAb,MAAAQ,EAAoB,UACpBR,EAAa,MAAQ,IACvB,CAAC,EAGDiB,EAAa,CAAE,KAAMjB,EAAc,wBArGjCkB,EAAAA,mBAAyE,MAAA,SAAhE,eAAJ,IAAIpB,EAAe,MAAM,iBAAkB,uBAAOK,EAAA,KAAc,CAAA"}