# πΊοΈ νλ©΄ κ΄λ¦¬ μμ€ν - μ΅μ’ 그리λ λ§μ΄κ·Έλ μ΄μ λ‘λλ§΅ ## π― μ΅μ’ λͺ©ν > **"Tailwind CSS 12μ»¬λΌ κ·Έλ¦¬λ κΈ°λ°μ μ νλ μμ λ μμ€ν "** > > - β ν½μ κΈ°λ° width μμ μ κ±° > - β μ»¬λΌ μ€ν¬(1-12)μΌλ‘λ§ λλΉ μ μ΄ > - β ν(Row) κΈ°λ° λ μ΄μμ ꡬ쑰 > - β μ ννλ λμμΈ ν¨ν΄ μ 곡 --- ## π νμ¬ μμ€ν vs μ μμ€ν ### Before (νμ¬) ```typescript // ν½μ κΈ°λ° μ λ μμΉ μμ€ν interface ComponentData { position: { x: number; y: number }; // ν½μ μ’ν size: { width: number; height: number }; // ν½μ ν¬κΈ° } // μ¬μ©μ μ λ ₯ // β μ: 850px μ λ ₯ κ°λ₯ (μμ λ‘μ§λ§ μΌκ΄μ± μμ) ``` ### After (μ μμ€ν ) ```typescript // ν κΈ°λ° κ·Έλ¦¬λ μμ€ν interface ComponentData { gridRowIndex: number; // λͺ λ²μ§Έ νμΈκ° gridColumnSpan: ColumnSpanPreset; // λλΉ (μ»¬λΌ μ) gridColumnStart?: number; // μμ μμΉ (μ ν) size: { height: number }; // λμ΄λ§ ν½μ μ§μ } // μ¬μ©μ μ ν ; // β μ: "half" μ ν β μ νν 50% λλΉ (μΌκ΄μ± 보μ₯) ``` --- ## ποΈ μ μμ€ν ꡬ쑰 ### 1. νλ©΄ κ΅¬μ± λ°©μ ``` νλ©΄ (Screen) ββ ν 1 (Row 1) [12 μ»¬λΌ κ·Έλ¦¬λ] β ββ μ»΄ν¬λνΈ A (3 컬λΌ) β ββ μ»΄ν¬λνΈ B (9 컬λΌ) β ββ [μλ λ°°μΉ] β ββ ν 2 (Row 2) [12 μ»¬λΌ κ·Έλ¦¬λ] β ββ μ»΄ν¬λνΈ C (4 컬λΌ) β ββ μ»΄ν¬λνΈ D (4 컬λΌ) β ββ μ»΄ν¬λνΈ E (4 컬λΌ) β ββ [μλ λ°°μΉ] β ββ ν 3 (Row 3) [12 μ»¬λΌ κ·Έλ¦¬λ] ββ μ»΄ν¬λνΈ F (12 μ»¬λΌ - μ 체) ``` ### 2. νμ©λλ μ»¬λΌ μ€ν¬ | ν리μ | μ»¬λΌ μ | λ°±λΆμ¨ | μ©λ | | --------------- | ------- | ------ | --------------------------- | | `full` | 12 | 100% | μ 체 λλΉ (ν μ΄λΈ, μ λͺ© λ±) | | `threeQuarters` | 9 | 75% | μ λ ₯ νλ | | `twoThirds` | 8 | 67% | ν° μ»΄ν¬λνΈ | | `half` | 6 | 50% | 2λΆν λ μ΄μμ | | `third` | 4 | 33% | 3λΆν λ μ΄μμ | | `quarter` | 3 | 25% | λΌλ²¨, 4λΆν | | `label` | 3 | 25% | νΌ λΌλ²¨ μ μ© | | `input` | 9 | 75% | νΌ μ λ ₯ μ μ© | | `small` | 2 | 17% | μμ΄μ½, 체ν¬λ°μ€ | | `medium` | 4 | 33% | λ³΄ν΅ ν¬κΈ° | | `large` | 8 | 67% | ν° μ»΄ν¬λνΈ | ### 3. μ¬μ©μ μν¬νλ‘μ° ``` 1. μ ν μΆκ° β 2. νμ μ»΄ν¬λνΈ λλκ·Έ & λλ‘ β 3. μ»΄ν¬λνΈ μ ν β μ»¬λΌ μ€ν¬ μ ν β 4. νμμ μμ μμΉ μ‘°μ (κ³ κΈ μ€μ ) β 5. ν κ°κ²©, μ λ ¬ λ± μ€μ ``` --- ## π ꡬν λ¨κ³ (4μ£Ό κ³ν) ### Week 1: κΈ°λ° κ΅¬μΆ **Day 1-2: νμ μμ€ν ** - [ ] `Size` μΈν°νμ΄μ€μμ `width` μ κ±° - [ ] `BaseComponent`μ `gridColumnSpan`, `gridRowIndex` μΆκ° - [ ] `ColumnSpanPreset` νμ λ° μμ μ μ - [ ] `LayoutRow` μΈν°νμ΄μ€ μ μ **Day 3-4: ν΅μ¬ UI μ»΄ν¬λνΈ** - [ ] `PropertiesPanel` - width μ λ ₯ β μ»¬λΌ μ€ν¬ μ ν UIλ‘ λ³κ²½ - [ ] μκ°μ 그리λ ν리뷰 μΆκ° (12μ»¬λΌ λ―Έλ 그리λ) - [ ] `RowSettingsPanel` μ κ· μμ± (ν μ€μ ) - [ ] `ComponentGridPanel` μ κ· μμ± (μ»΄ν¬λνΈ λλΉ μ€μ ) **Day 5: λ λλ§ λ‘μ§** - [ ] `LayoutRowRenderer` μ κ· μμ± - [ ] `ContainerComponent` - `gridColumn` κ³μ° λ‘μ§ μμ - [ ] `RealtimePreview` - 그리λ ν΄λμ€ μ μ© **Day 6-7: λ§μ΄κ·Έλ μ΄μ μ€λΉ** - [ ] `widthToColumnSpan.ts` μ νΈλ¦¬ν° μμ± - [ ] κΈ°μ‘΄ λ°μ΄ν° λ³ν ν¨μ μμ± - [ ] Y μ’ν β ν μΈλ±μ€ λ³ν λ‘μ§ ### Week 2: λ μ΄μμ μμ€ν **Day 1-2: GridLayoutBuilder** - [ ] `GridLayoutBuilder` λ©μΈ μ»΄ν¬λνΈ - [ ] ν μΆκ°/μμ /μμ λ³κ²½ κΈ°λ₯ - [ ] ν μ ν λ° νμ΄λΌμ΄νΈ **Day 3-4: λλκ·Έμ€λλ‘** - [ ] μ»΄ν¬λνΈλ₯Ό νμ λλ‘νλ κΈ°λ₯ - [ ] ν λ΄μμ μ»΄ν¬λνΈ μμ λ³κ²½ - [ ] ν κ° μ»΄ν¬λνΈ μ΄λ - [ ] λλ‘ κ°μ΄λλΌμΈ νμ **Day 5-7: StyleEditor μ 리** - [ ] `StyleEditor`μμ width μ΅μ μμ μ κ±° - [ ] `ScreenDesigner`μμ width κ΄λ ¨ λ‘μ§ μ κ±° - [ ] λμ΄ μ€μ λ§ λ¨κΈ°κΈ° ### Week 3: ν νλ¦Ώ λ° ν¨ν΄ **Day 1-3: ν νλ¦Ώ μμ€ν ** - [ ] `TemplateComponent` νμ μμ - [ ] κΈ°λ³Έ νΌ ν νλ¦Ώ μ λ°μ΄νΈ - [ ] κ²μ + ν μ΄λΈ ν νλ¦Ώ - [ ] λμ보λ ν νλ¦Ώ - [ ] λ§μ€ν°-λν μΌ ν νλ¦Ώ **Day 4-5: λ μ΄μμ ν¨ν΄** - [ ] μ ννλ λ μ΄μμ ν¨ν΄ μ μ - [ ] ν¨ν΄ μ ν UI - [ ] ν¨ν΄ μ μ© λ‘μ§ - [ ] λΉ λ₯Έ ν¨ν΄ μ½μ λ²νΌ **Day 6-7: λ°μν κΈ°λ° (μ ν)** - [ ] λΈλ μ΄ν¬ν¬μΈνΈλ³ μ»¬λΌ μ€ν¬ μ€μ - [ ] λ°μν νΈμ§ UI - [ ] λ°μν ν리뷰 ### Week 4: λ§μ΄κ·Έλ μ΄μ λ° μμ ν **Day 1-2: μλ λ§μ΄κ·Έλ μ΄μ ** - [ ] νλ©΄ λ‘λ μ μλ λ³ν λ‘μ§ - [ ] λ§μ΄κ·Έλ μ΄μ λ‘κ·Έ λ° κ²μ¦ - [ ] μλ¬ μ²λ¦¬ λ° fallback **Day 3-4: ν΅ν© ν μ€νΈ** - [ ] μ μ»΄ν¬λνΈ μμ± ν μ€νΈ - [ ] κΈ°μ‘΄ νλ©΄ λ‘λ ν μ€νΈ - [ ] ν νλ¦Ώ μ μ© ν μ€νΈ - [ ] λλκ·Έμ€λλ‘ ν μ€νΈ - [ ] μμ± νΈμ§ ν μ€νΈ **Day 5: Tailwind μ€μ ** - [ ] `tailwind.config.js` safelist μΆκ° - [ ] λΆνμν μ νΈλ¦¬ν° μ κ±° - [ ] λΉλ ν μ€νΈ **Day 6-7: λ¬Έμν λ° λ°°ν¬** - [ ] μ¬μ©μ κ°μ΄λ μμ± - [ ] κ°λ°μ λ¬Έμ μ λ°μ΄νΈ - [ ] λ¦΄λ¦¬μ¦ λ ΈνΈ μμ± - [ ] μ μ§μ λ°°ν¬ --- ## π μμ /μμ± νμΌ μ 체 λͺ©λ‘ ### π μ κ· μμ± νμΌ (15κ°) 1. `frontend/types/grid-system.ts` - 그리λ μμ€ν νμ 2. `frontend/lib/constants/columnSpans.ts` - μ»¬λΌ μ€ν¬ μμ 3. `frontend/lib/utils/widthToColumnSpan.ts` - λ§μ΄κ·Έλ μ΄μ μ νΈ 4. `frontend/lib/utils/gridLayoutUtils.ts` - 그리λ λ μ΄μμ ν¬νΌ 5. `frontend/components/screen/GridLayoutBuilder.tsx` - λ©μΈ λΉλ 6. `frontend/components/screen/LayoutRowRenderer.tsx` - ν λ λλ¬ 7. `frontend/components/screen/AddRowButton.tsx` - ν μΆκ° λ²νΌ 8. `frontend/components/screen/GridGuides.tsx` - 그리λ κ°μ΄λλΌμΈ 9. `frontend/components/screen/GridDropZone.tsx` - λλ‘μ‘΄ 10. `frontend/components/screen/panels/RowSettingsPanel.tsx` - ν μ€μ 11. `frontend/components/screen/panels/ComponentGridPanel.tsx` - μ»΄ν¬λνΈ λλΉ 12. `frontend/components/screen/panels/ResponsivePanel.tsx` - λ°μν μ€μ 13. `frontend/lib/templates/layoutPatterns.ts` - λ μ΄μμ ν¨ν΄ 14. `frontend/hooks/useGridLayout.ts` - 그리λ λ μ΄μμ ν 15. `frontend/hooks/useRowManagement.ts` - ν κ΄λ¦¬ ν ### βοΈ μμ νμΌ (20κ°) 1. `frontend/types/screen-management.ts` - Sizeμμ width μ κ±° 2. `frontend/components/screen/panels/PropertiesPanel.tsx` - UI λν μμ 3. `frontend/components/screen/StyleEditor.tsx` - width μ΅μ μ κ±° 4. `frontend/components/screen/ScreenDesigner.tsx` - μ 체 λ‘μ§ μμ 5. `frontend/components/screen/RealtimePreviewDynamic.tsx` - 그리λ ν΄λμ€ 6. `frontend/components/screen/InteractiveScreenViewerDynamic.tsx` - 그리λ ν΄λμ€ 7. `frontend/components/screen/layout/ContainerComponent.tsx` - λ λλ§ μμ 8. `frontend/components/screen/layout/ColumnComponent.tsx` - λ λλ§ μμ 9. `frontend/components/screen/layout/RowComponent.tsx` - λ λλ§ μμ 10. `frontend/components/screen/panels/TemplatesPanel.tsx` - ν νλ¦Ώ μμ 11. `frontend/components/screen/panels/DataTableConfigPanel.tsx` - λͺ¨λ¬ ν¬κΈ° μ μ§ 12. `frontend/components/screen/panels/DetailSettingsPanel.tsx` - κ²ν νμ 13. `frontend/components/screen/panels/ComponentsPanel.tsx` - μ»΄ν¬λνΈ μμ± 14. `frontend/components/screen/panels/LayoutsPanel.tsx` - λ μ΄μμ μ μ© 15. `frontend/components/screen/templates/DataTableTemplate.tsx` - ν νλ¦Ώ μμ 16. `frontend/lib/api/screen.ts` - λ§μ΄κ·Έλ μ΄μ λ‘μ§ μΆκ° 17. `tailwind.config.js` - safelist μΆκ° 18. `frontend/components/screen/FloatingPanel.tsx` - κ²ν (ν¨λ width μ μ§) 19. `frontend/components/screen/SaveModal.tsx` - κ²ν 20. `frontend/components/screen/EditModal.tsx` - κ²ν --- ## π¨ ν΅μ¬ UI λ³κ²½μ¬ν ### 1. μ»΄ν¬λνΈ λλΉ μ€μ (Before β After) **Before**: ```tsx setWidth(e.target.value)} /> // μ¬μ©μκ° μ무 μ«μλ μ λ ₯ κ°λ₯ (850, 1234 λ±) ``` **After**: ```tsx {/* μκ°μ ν리뷰 */}
6 / 12 컬λΌ
``` ### 2. ν(Row) κ΄λ¦¬ UI (μ κ·) ```tsx { /* κ° νμ μ€μ κ°λ₯ν μ΅μ */ }