@apt.today/react-seoul-icons 1.1.0 → 1.2.1
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 +133 -358
- package/dist/index.d.mts +111 -112
- package/dist/index.d.ts +111 -112
- package/dist/index.js +1361 -975
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1356 -956
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -10,29 +10,18 @@
|
|
|
10
10
|
|
|
11
11
|
대한민국 광역자치단체(시/도) 및 기초자치단체(시/군/구) 로고 아이콘을 React 컴포넌트로 제공하는 라이브러리입니다.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
[데모 페이지](https://myriky.github.io/apt-today-react-seoul-icons/)
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
### 시도 (광역시/도)
|
|
15
|
+
### 데모 사이트 배포
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
| 서울특별시 | `11` | `Seoul` |
|
|
22
|
-
| 부산광역시 | `26` | `Busan` |
|
|
23
|
-
| 대구광역시 | `27` | `Daegu` |
|
|
24
|
-
| 인천광역시 | `28` | `Incheon` |
|
|
25
|
-
| 울산광역시 | `31` | `Ulsan` |
|
|
26
|
-
| 경기도 | `41` | `Gyeonggi` |
|
|
17
|
+
데모는 **main 브랜치에 push될 때마다** [GitHub Actions](.github/workflows/deploy.yml)가 예제 앱을 빌드해 자동으로 갱신합니다.
|
|
18
|
+
처음 한 번 저장소 **Settings → Pages**에서 Source를 **GitHub Actions**로 선택해두면, 이후 main에 머지·푸시할 때마다 데모가 자동 배포됩니다.
|
|
27
19
|
|
|
28
|
-
|
|
20
|
+
로컬에서 수동 배포하려면 (Pages 소스가 gh-pages 브랜치인 경우):
|
|
29
21
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- **대구광역시**: 수성구
|
|
34
|
-
- **인천광역시**: 연수구
|
|
35
|
-
- **울산광역시**: 남구
|
|
22
|
+
```bash
|
|
23
|
+
cd example && yarn deploy
|
|
24
|
+
```
|
|
36
25
|
|
|
37
26
|
## 설치
|
|
38
27
|
|
|
@@ -40,410 +29,202 @@
|
|
|
40
29
|
npm install @apt.today/react-seoul-icons
|
|
41
30
|
```
|
|
42
31
|
|
|
43
|
-
또는
|
|
44
|
-
|
|
45
32
|
```bash
|
|
46
33
|
yarn add @apt.today/react-seoul-icons
|
|
47
34
|
```
|
|
48
35
|
|
|
49
36
|
## 사용법
|
|
50
37
|
|
|
51
|
-
###
|
|
38
|
+
### 컴포넌트 직접 사용
|
|
39
|
+
|
|
40
|
+
아이콘을 직접 import해서 React 컴포넌트로 사용합니다.
|
|
52
41
|
|
|
53
42
|
```tsx
|
|
54
|
-
import {
|
|
55
|
-
Seoul,
|
|
56
|
-
GangnamGu,
|
|
57
|
-
JongnoGu,
|
|
58
|
-
MapoGu,
|
|
59
|
-
} from "@apt.today/react-seoul-icons";
|
|
43
|
+
import { GangnamGu, Seoul, MapoGu } from "@apt.today/react-seoul-icons";
|
|
60
44
|
|
|
61
45
|
function App() {
|
|
62
46
|
return (
|
|
63
47
|
<div>
|
|
64
48
|
<Seoul width={64} height={64} />
|
|
65
49
|
<GangnamGu className="w-12 h-12" />
|
|
66
|
-
<
|
|
67
|
-
<MapoGu width={48} height={48} />
|
|
50
|
+
<MapoGu style={{ width: 48, height: 48 }} />
|
|
68
51
|
</div>
|
|
69
52
|
);
|
|
70
53
|
}
|
|
71
54
|
```
|
|
72
55
|
|
|
73
|
-
###
|
|
74
|
-
|
|
75
|
-
```tsx
|
|
76
|
-
import {
|
|
77
|
-
Seoul,
|
|
78
|
-
Busan,
|
|
79
|
-
Incheon,
|
|
80
|
-
Gyeonggi,
|
|
81
|
-
getSidoIcon,
|
|
82
|
-
} from "@apt.today/react-seoul-icons";
|
|
56
|
+
### 유틸리티로 동적 조회
|
|
83
57
|
|
|
84
|
-
|
|
85
|
-
// 직접 Import
|
|
86
|
-
return <Seoul width={64} height={64} />;
|
|
87
|
-
|
|
88
|
-
// 또는 코드로 가져오기
|
|
89
|
-
const SeoulIcon = getSidoIcon(11);
|
|
90
|
-
return SeoulIcon && <SeoulIcon width={64} height={64} />;
|
|
91
|
-
}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### 시군구 아이콘 사용
|
|
58
|
+
코드나 이름으로 아이콘을 동적으로 가져올 때는 `utils`를 사용합니다.
|
|
95
59
|
|
|
96
60
|
```tsx
|
|
97
|
-
import {
|
|
61
|
+
import { utils } from "@apt.today/react-seoul-icons";
|
|
98
62
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
63
|
+
// 코드로 아이콘 가져오기 (시도 2자리 / 시군구 5자리 자동 판별)
|
|
64
|
+
const SeoulIcon = utils.getIcon(11); // 서울특별시
|
|
65
|
+
const GangnamIcon = utils.getIcon(11680); // 강남구
|
|
102
66
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
67
|
+
// 이름으로 아이콘 검색
|
|
68
|
+
const Icon = utils.findByName("강남구");
|
|
69
|
+
const Icon2 = utils.findByName("강남");
|
|
70
|
+
const Icon3 = utils.findByName("서울특별시 강남구");
|
|
71
|
+
const Icon4 = utils.findByName("서울 강남구");
|
|
106
72
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
{GangnamIcon && <GangnamIcon width={48} height={48} />}
|
|
110
|
-
{seoulDistricts.map((d) => (
|
|
111
|
-
<d.component key={d.code} width={32} height={32} />
|
|
112
|
-
))}
|
|
113
|
-
</div>
|
|
114
|
-
);
|
|
115
|
-
}
|
|
73
|
+
// 중복 이름(중구 등)은 region 옵션으로 구분
|
|
74
|
+
const JungGu = utils.findByName("중구", { region: "서울" });
|
|
116
75
|
```
|
|
117
76
|
|
|
118
|
-
###
|
|
77
|
+
### 지역별 목록 조회
|
|
119
78
|
|
|
120
79
|
```tsx
|
|
121
|
-
import
|
|
80
|
+
import { utils } from "@apt.today/react-seoul-icons";
|
|
122
81
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
<SeoulIcons.Seoul width={64} />
|
|
127
|
-
<SeoulIcons.GangnamGu width={48} />
|
|
128
|
-
<SeoulIcons.JongnoGu className="w-12 h-12" />
|
|
129
|
-
</div>
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### 동적 아이콘 렌더링 (컴포넌트 이름 기반)
|
|
82
|
+
// 시도별 시군구 목록
|
|
83
|
+
const seoulIcons = utils.getByRegion(11); // 코드로
|
|
84
|
+
const gyeonggiIcons = utils.getByRegion("경기"); // 이름으로
|
|
135
85
|
|
|
136
|
-
|
|
137
|
-
|
|
86
|
+
// 전체 시도 목록
|
|
87
|
+
const regions = utils.getAllRegions();
|
|
138
88
|
|
|
139
|
-
|
|
89
|
+
// 전체 시군구 목록
|
|
90
|
+
const allIcons = utils.getAll();
|
|
140
91
|
|
|
141
|
-
function
|
|
92
|
+
function DistrictList() {
|
|
142
93
|
return (
|
|
143
|
-
<div className="
|
|
144
|
-
{
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
94
|
+
<div className="grid grid-cols-5 gap-4">
|
|
95
|
+
{seoulIcons.map((icon) => (
|
|
96
|
+
<div key={icon.code} className="flex flex-col items-center">
|
|
97
|
+
<icon.component className="w-12 h-12" />
|
|
98
|
+
<span>{icon.name}</span>
|
|
99
|
+
</div>
|
|
100
|
+
))}
|
|
150
101
|
</div>
|
|
151
102
|
);
|
|
152
103
|
}
|
|
153
104
|
```
|
|
154
105
|
|
|
155
|
-
###
|
|
106
|
+
### API 응답에서 동적으로 사용
|
|
156
107
|
|
|
157
108
|
```tsx
|
|
158
|
-
import {
|
|
109
|
+
import { utils } from "@apt.today/react-seoul-icons";
|
|
159
110
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const GangnamIcon = getSigunguIcon(11680);
|
|
167
|
-
const HaeundaeIcon = getSigunguIcon(26350);
|
|
111
|
+
// 행정구역 코드를 받은 경우
|
|
112
|
+
function DistrictIcon({ code }: { code: number }) {
|
|
113
|
+
const Icon = utils.getIcon(code);
|
|
114
|
+
if (!Icon) return null;
|
|
115
|
+
return <Icon width={48} height={48} />;
|
|
116
|
+
}
|
|
168
117
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
);
|
|
118
|
+
// 지역명을 받은 경우
|
|
119
|
+
function DistrictIconByName({ name }: { name: string }) {
|
|
120
|
+
const Icon = utils.findByName(name);
|
|
121
|
+
if (!Icon) return null;
|
|
122
|
+
return <Icon width={48} height={48} />;
|
|
175
123
|
}
|
|
176
124
|
```
|
|
177
125
|
|
|
178
|
-
|
|
126
|
+
## API
|
|
179
127
|
|
|
180
|
-
|
|
181
|
-
import { getSigunguIconByName } from "@apt.today/react-seoul-icons";
|
|
182
|
-
|
|
183
|
-
// 다양한 형식 지원
|
|
184
|
-
const Icon1 = getSigunguIconByName("강남구"); // ✅
|
|
185
|
-
const Icon2 = getSigunguIconByName("강남"); // ✅
|
|
186
|
-
const Icon3 = getSigunguIconByName("서울특별시 강남구"); // ✅
|
|
187
|
-
|
|
188
|
-
// 중복되는 이름(남구 등)은 sidoCode 옵션 필요
|
|
189
|
-
const UlsanNam = getSigunguIconByName("남구", { sidoCode: 31 }); // ✅ 울산 남구
|
|
190
|
-
```
|
|
128
|
+
### 아이콘 컴포넌트
|
|
191
129
|
|
|
192
|
-
|
|
130
|
+
모든 아이콘 컴포넌트는 `React.SVGProps<SVGSVGElement>`를 지원합니다.
|
|
193
131
|
|
|
194
132
|
```tsx
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
getSigunguBySido,
|
|
199
|
-
} from "@apt.today/react-seoul-icons";
|
|
200
|
-
|
|
201
|
-
// 모든 시도 정보
|
|
202
|
-
const allSido = getAllSidoInfo();
|
|
203
|
-
|
|
204
|
-
// 모든 시군구 정보
|
|
205
|
-
const allSigungu = getAllSigunguInfo();
|
|
206
|
-
|
|
207
|
-
// 특정 시도의 시군구만 가져오기
|
|
208
|
-
const seoulDistricts = getSigunguBySido(11);
|
|
209
|
-
const gyeonggiCities = getSigunguBySido(41);
|
|
210
|
-
|
|
211
|
-
function App() {
|
|
212
|
-
return (
|
|
213
|
-
<div>
|
|
214
|
-
{seoulDistricts.map((district) => (
|
|
215
|
-
<div key={district.code}>
|
|
216
|
-
<district.component width={48} height={48} />
|
|
217
|
-
<span>{district.name}</span>
|
|
218
|
-
<code>{district.code}</code>
|
|
219
|
-
</div>
|
|
220
|
-
))}
|
|
221
|
-
</div>
|
|
222
|
-
);
|
|
223
|
-
}
|
|
133
|
+
<GangnamGu width={48} height={48} />
|
|
134
|
+
<GangnamGu className="w-12 h-12" />
|
|
135
|
+
<GangnamGu style={{ width: 48 }} />
|
|
224
136
|
```
|
|
225
137
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
### 시도 관련 함수
|
|
229
|
-
|
|
230
|
-
| 함수 | 설명 | 반환 타입 |
|
|
231
|
-
| ------------------- | --------------------------- | ----------------------- |
|
|
232
|
-
| `getSidoIcon(code)` | 시도 코드로 아이콘 가져오기 | `Component \| null` |
|
|
233
|
-
| `getSidoInfo(code)` | 시도 코드로 정보 가져오기 | `SidoInfo \| undefined` |
|
|
234
|
-
| `getAllSidoInfo()` | 모든 시도 정보 가져오기 | `SidoInfo[]` |
|
|
235
|
-
|
|
236
|
-
### 시군구 관련 함수
|
|
138
|
+
### utils
|
|
237
139
|
|
|
238
|
-
|
|
|
239
|
-
|
|
|
240
|
-
| `
|
|
241
|
-
| `
|
|
242
|
-
| `
|
|
243
|
-
| `
|
|
244
|
-
| `
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
|
249
|
-
| ------------------------------- | ------------------------------- | --------------------------- |
|
|
250
|
-
| `getIconByCode(code)` | 행정구역 코드로 아이콘 가져오기 | `Component \| undefined` |
|
|
251
|
-
| `getIconByName(name, options?)` | 이름으로 아이콘 가져오기 | `Component \| undefined` |
|
|
252
|
-
| `getDistrictInfo(code)` | 행정구역 코드로 정보 가져오기 | `DistrictInfo \| undefined` |
|
|
253
|
-
| `getNameByCode(code)` | 행정구역 코드로 이름 가져오기 | `string \| undefined` |
|
|
254
|
-
| `getAllDistrictInfo()` | 모든 지역 정보 가져오기 | `readonly DistrictInfo[]` |
|
|
255
|
-
| `getDistrictsByRegion(region)` | 특정 시/도의 지역 정보 | `DistrictInfo[]` |
|
|
256
|
-
| `getAllCodes()` | 모든 행정구역 코드 목록 | `number[]` |
|
|
257
|
-
| `isValidCode(code)` | 유효한 코드인지 확인 | `boolean` |
|
|
140
|
+
| 메서드 | 설명 | 반환 타입 |
|
|
141
|
+
| --- | --- | --- |
|
|
142
|
+
| `utils.getIcon(code)` | 시도/시군구 코드로 아이콘 가져오기 | `IconComponent \| null` |
|
|
143
|
+
| `utils.findByName(name, options?)` | 이름으로 아이콘 검색 | `IconComponent \| null` |
|
|
144
|
+
| `utils.getInfo(code)` | 코드로 상세 정보 가져오기 | `IconInfo \| RegionInfo \| null` |
|
|
145
|
+
| `utils.getByRegion(codeOrName)` | 특정 시도의 시군구 목록 | `IconInfo[]` |
|
|
146
|
+
| `utils.getAllRegions()` | 모든 시도 정보 | `RegionInfo[]` |
|
|
147
|
+
| `utils.getAvailableRegions()` | 아이콘이 있는 시도만 | `RegionInfo[]` |
|
|
148
|
+
| `utils.getRegionsWithIcons()` | 시군구가 있는 시도만 | `RegionInfo[]` |
|
|
149
|
+
| `utils.getAll()` | 모든 시군구 아이콘 정보 | `IconInfo[]` |
|
|
150
|
+
| `utils.isValid(code)` | 유효한 코드인지 확인 | `boolean` |
|
|
258
151
|
|
|
259
152
|
### 타입
|
|
260
153
|
|
|
261
154
|
```tsx
|
|
262
|
-
import type {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
shortName: string; // 짧은 이름 (예: "서울")
|
|
277
|
-
englishName: string; // 영문 이름 (예: "Seoul")
|
|
278
|
-
component: Component | null;
|
|
155
|
+
import type { IconComponent, IconInfo, RegionInfo } from "@apt.today/react-seoul-icons";
|
|
156
|
+
|
|
157
|
+
// IconComponent
|
|
158
|
+
type IconComponent = React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
159
|
+
|
|
160
|
+
// IconInfo - 시군구 아이콘 정보
|
|
161
|
+
interface IconInfo {
|
|
162
|
+
code: number; // 시군구 코드 (예: 11680)
|
|
163
|
+
regionCode: number; // 소속 시도 코드 (예: 11)
|
|
164
|
+
regionName: string; // 소속 시도명 (예: "서울특별시")
|
|
165
|
+
name: string; // 이름 (예: "강남구")
|
|
166
|
+
shortName: string; // 단축명 (예: "강남")
|
|
167
|
+
componentName: string; // 컴포넌트명 (예: "GangnamGu")
|
|
168
|
+
component: IconComponent;
|
|
279
169
|
}
|
|
280
|
-
```
|
|
281
170
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
shortName: string; // 짧은 이름 (예: "강남")
|
|
290
|
-
component: Component;
|
|
171
|
+
// RegionInfo - 시도 정보
|
|
172
|
+
interface RegionInfo {
|
|
173
|
+
code: number; // 시도 코드 (예: 11)
|
|
174
|
+
name: string; // 전체 이름 (예: "서울특별시")
|
|
175
|
+
shortName: string; // 단축명 (예: "서울")
|
|
176
|
+
englishName: string; // 영문명 (예: "Seoul")
|
|
177
|
+
component: IconComponent | null;
|
|
291
178
|
}
|
|
292
179
|
```
|
|
293
180
|
|
|
294
|
-
## 행정구역
|
|
295
|
-
|
|
296
|
-
### 시도 코드
|
|
297
|
-
|
|
298
|
-
| 코드 | 시도 | 컴포넌트명 |
|
|
299
|
-
| ---- | ---------- | ---------- |
|
|
300
|
-
| `11` | 서울특별시 | `Seoul` |
|
|
301
|
-
| `26` | 부산광역시 | `Busan` |
|
|
302
|
-
| `27` | 대구광역시 | `Daegu` |
|
|
303
|
-
| `28` | 인천광역시 | `Incheon` |
|
|
304
|
-
| `31` | 울산광역시 | `Ulsan` |
|
|
305
|
-
| `41` | 경기도 | `Gyeonggi` |
|
|
306
|
-
|
|
307
|
-
### 서울특별시 시군구 (25개)
|
|
308
|
-
|
|
309
|
-
| 코드 | 행정구 | 컴포넌트명 |
|
|
310
|
-
| ------- | -------- | ---------------- |
|
|
311
|
-
| `11110` | 종로구 | `JongnoGu` |
|
|
312
|
-
| `11140` | 중구 | `JungGu` |
|
|
313
|
-
| `11170` | 용산구 | `YongsanGu` |
|
|
314
|
-
| `11200` | 성동구 | `SeongdongGu` |
|
|
315
|
-
| `11215` | 광진구 | `GwangjinGu` |
|
|
316
|
-
| `11230` | 동대문구 | `DongdaemunGu` |
|
|
317
|
-
| `11260` | 중랑구 | `JungnangGu` |
|
|
318
|
-
| `11290` | 성북구 | `SeongbukGu` |
|
|
319
|
-
| `11305` | 강북구 | `GangbukGu` |
|
|
320
|
-
| `11320` | 도봉구 | `DobongGu` |
|
|
321
|
-
| `11350` | 노원구 | `NowonGu` |
|
|
322
|
-
| `11380` | 은평구 | `EunpyeongGu` |
|
|
323
|
-
| `11410` | 서대문구 | `SeodaemunGu` |
|
|
324
|
-
| `11440` | 마포구 | `MapoGu` |
|
|
325
|
-
| `11470` | 양천구 | `YangcheonGu` |
|
|
326
|
-
| `11500` | 강서구 | `GangseoGu` |
|
|
327
|
-
| `11530` | 구로구 | `GuroGu` |
|
|
328
|
-
| `11545` | 금천구 | `GeumcheonGu` |
|
|
329
|
-
| `11560` | 영등포구 | `YeongdeungpoGu` |
|
|
330
|
-
| `11590` | 동작구 | `DongjakGu` |
|
|
331
|
-
| `11620` | 관악구 | `GwanakGu` |
|
|
332
|
-
| `11650` | 서초구 | `SeochoGu` |
|
|
333
|
-
| `11680` | 강남구 | `GangnamGu` |
|
|
334
|
-
| `11710` | 송파구 | `SongpaGu` |
|
|
335
|
-
| `11740` | 강동구 | `GangdongGu` |
|
|
336
|
-
|
|
337
|
-
### 경기도 시군구 (13개)
|
|
338
|
-
|
|
339
|
-
| 코드 | 시군구 | 컴포넌트명 |
|
|
340
|
-
| ------- | -------- | --------------- |
|
|
341
|
-
| `41110` | 수원시 | `SuwonSi` |
|
|
342
|
-
| `41130` | 성남시 | `SeongnamSi` |
|
|
343
|
-
| `41170` | 안양시 | `AnyangSi` |
|
|
344
|
-
| `41210` | 광명시 | `GwangmyeongSi` |
|
|
345
|
-
| `41280` | 고양시 | `GoyangSi` |
|
|
346
|
-
| `41290` | 과천시 | `GwacheonSi` |
|
|
347
|
-
| `41310` | 구리시 | `GuriSi` |
|
|
348
|
-
| `41360` | 남양주시 | `NamyangjuSi` |
|
|
349
|
-
| `41430` | 의왕시 | `UiwangSi` |
|
|
350
|
-
| `41450` | 하남시 | `HanamSi` |
|
|
351
|
-
| `41460` | 용인시 | `YonginSi` |
|
|
352
|
-
| `41570` | 김포시 | `GimpoSi` |
|
|
353
|
-
| `41590` | 화성시 | `HwaseongSi` |
|
|
354
|
-
|
|
355
|
-
### 부산광역시 시군구
|
|
356
|
-
|
|
357
|
-
| 코드 | 시군구 | 컴포넌트명 |
|
|
358
|
-
| ------- | -------- | ------------ |
|
|
359
|
-
| `26350` | 해운대구 | `HaeundaeGu` |
|
|
360
|
-
|
|
361
|
-
### 대구광역시 시군구
|
|
362
|
-
|
|
363
|
-
| 코드 | 시군구 | 컴포넌트명 |
|
|
364
|
-
| ------- | ------ | ----------- |
|
|
365
|
-
| `27260` | 수성구 | `SuseongGu` |
|
|
366
|
-
|
|
367
|
-
### 인천광역시 시군구
|
|
368
|
-
|
|
369
|
-
| 코드 | 시군구 | 컴포넌트명 |
|
|
370
|
-
| ------- | ------ | ---------- |
|
|
371
|
-
| `28185` | 연수구 | `YeonsuGu` |
|
|
372
|
-
|
|
373
|
-
### 울산광역시 시군구
|
|
374
|
-
|
|
375
|
-
| 코드 | 시군구 | 컴포넌트명 |
|
|
376
|
-
| ------- | ------ | ---------- |
|
|
377
|
-
| `31140` | 남구 | `NamGu` |
|
|
378
|
-
|
|
379
|
-
## Props
|
|
380
|
-
|
|
381
|
-
모든 컴포넌트는 SVG 요소의 표준 props를 지원합니다:
|
|
382
|
-
|
|
383
|
-
```tsx
|
|
384
|
-
interface IconProps extends React.SVGProps<SVGSVGElement> {}
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
일반적으로 사용되는 props:
|
|
388
|
-
|
|
389
|
-
- `className`: CSS 클래스명
|
|
390
|
-
- `style`: 인라인 스타일
|
|
391
|
-
- `width`: 너비
|
|
392
|
-
- `height`: 높이
|
|
393
|
-
- `fill`: 색상 (일부 아이콘은 고정 색상)
|
|
394
|
-
- `onClick`: 클릭 이벤트 핸들러
|
|
395
|
-
|
|
396
|
-
## 예제
|
|
181
|
+
## 지원 행정구역
|
|
397
182
|
|
|
398
|
-
###
|
|
183
|
+
### 시도 (광역시/도)
|
|
399
184
|
|
|
400
|
-
|
|
401
|
-
|
|
185
|
+
| 시도 | 코드 | 컴포넌트명 |
|
|
186
|
+
| --- | --- | --- |
|
|
187
|
+
| 서울특별시 | `11` | `Seoul` |
|
|
188
|
+
| 부산광역시 | `26` | `Busan` |
|
|
189
|
+
| 대구광역시 | `27` | `Daegu` |
|
|
190
|
+
| 인천광역시 | `28` | `Incheon` |
|
|
191
|
+
| 울산광역시 | `31` | `Ulsan` |
|
|
192
|
+
| 경기도 | `41` | `Gyeonggi` |
|
|
402
193
|
|
|
403
|
-
|
|
404
|
-
return <GangnamGu className="w-16 h-16 text-blue-500 hover:text-blue-700" />;
|
|
405
|
-
}
|
|
406
|
-
```
|
|
194
|
+
### 시군구
|
|
407
195
|
|
|
408
|
-
|
|
196
|
+
- **서울특별시**: 25개 자치구 (강남구, 종로구, 마포구 등)
|
|
197
|
+
- **경기도**: 14개 시 (수원시, 고양시, 용인시, 화성시, 성남시, 안양시, 광명시, 과천시, 구리시, 남양주시, 하남시, 의왕시, 김포시, 파주시)
|
|
198
|
+
- **부산광역시**: 해운대구
|
|
199
|
+
- **대구광역시**: 수성구
|
|
200
|
+
- **인천광역시**: 연수구
|
|
201
|
+
- **울산광역시**: 남구
|
|
409
202
|
|
|
410
|
-
|
|
411
|
-
import { getSidoIcon, getSigunguIcon } from "@apt.today/react-seoul-icons";
|
|
203
|
+
## v1에서 마이그레이션
|
|
412
204
|
|
|
413
|
-
|
|
414
|
-
function DistrictIcon({ code }: { code: number }) {
|
|
415
|
-
const Icon = getSigunguIcon(code);
|
|
416
|
-
if (!Icon) return null;
|
|
417
|
-
return <Icon width={48} height={48} />;
|
|
418
|
-
}
|
|
205
|
+
v2에서는 API가 `utils` 네임스페이스로 통합되었습니다.
|
|
419
206
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
207
|
+
| v1 | v2 |
|
|
208
|
+
| --- | --- |
|
|
209
|
+
| `getSidoIcon(11)` | `utils.getIcon(11)` |
|
|
210
|
+
| `getSigunguIcon(11680)` | `utils.getIcon(11680)` |
|
|
211
|
+
| `getIconByCode(11680)` | `utils.getIcon(11680)` |
|
|
212
|
+
| `getIconByName("강남구")` | `utils.findByName("강남구")` |
|
|
213
|
+
| `getSigunguIconByName("강남구")` | `utils.findByName("강남구")` |
|
|
214
|
+
| `getAllDistrictInfo()` | `utils.getAll()` |
|
|
215
|
+
| `getAllSigunguInfo()` | `utils.getAll()` |
|
|
216
|
+
| `getDistrictsByRegion("서울")` | `utils.getByRegion("서울")` |
|
|
217
|
+
| `getSigunguBySido(11)` | `utils.getByRegion(11)` |
|
|
218
|
+
| `getAllSidoInfo()` | `utils.getAllRegions()` |
|
|
219
|
+
| `type SidoInfo` | `type RegionInfo` |
|
|
220
|
+
| `type SigunguInfo` | `type IconInfo` |
|
|
221
|
+
| `type DistrictInfo` | `type IconInfo` |
|
|
427
222
|
|
|
428
|
-
|
|
223
|
+
아이콘 컴포넌트의 직접 import는 변경 없이 동일합니다:
|
|
429
224
|
|
|
430
225
|
```tsx
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
function DistrictList() {
|
|
434
|
-
const seoulDistricts = getSigunguBySido(11);
|
|
435
|
-
|
|
436
|
-
return (
|
|
437
|
-
<div className="grid grid-cols-5 gap-4">
|
|
438
|
-
{seoulDistricts.map((district) => (
|
|
439
|
-
<div key={district.code} className="flex flex-col items-center">
|
|
440
|
-
<district.component className="w-12 h-12" />
|
|
441
|
-
<span>{district.name}</span>
|
|
442
|
-
</div>
|
|
443
|
-
))}
|
|
444
|
-
</div>
|
|
445
|
-
);
|
|
446
|
-
}
|
|
226
|
+
// v1과 v2 모두 동일
|
|
227
|
+
import { GangnamGu, Seoul } from "@apt.today/react-seoul-icons";
|
|
447
228
|
```
|
|
448
229
|
|
|
449
230
|
## 라이선스
|
|
@@ -456,7 +237,7 @@ function DistrictList() {
|
|
|
456
237
|
|
|
457
238
|
본 라이브러리의 소스 코드는 MIT 라이선스를 따릅니다.
|
|
458
239
|
|
|
459
|
-
자세한 내용은 [LICENSE](./LICENSE) 파일을
|
|
240
|
+
자세한 내용은 [LICENSE](./LICENSE) 파일을 참고하세요.
|
|
460
241
|
|
|
461
242
|
## About apt.today
|
|
462
243
|
|
|
@@ -464,12 +245,6 @@ function DistrictList() {
|
|
|
464
245
|
|
|
465
246
|
**apt.today**는 부동산 정보를 제공하는 서비스로, 전국 지자체별 고시공고문, 모집공고문, 토지거래허가내역을 비롯한 다양한 아파트 관련 정보를 확인 할 수 있는 플랫폼입니다.
|
|
466
247
|
|
|
467
|
-
본 아이콘 라이브러리는 apt.today 서비스에서 각 행정구역의 데이터를 시각적으로 표현하기 위해 개발되었으며, 누구나 자유롭게 사용할 수 있도록 오픈소스로 공개되었습니다.
|
|
468
|
-
|
|
469
|
-
### 관련 프로젝트
|
|
470
|
-
|
|
471
|
-
- 🏢 [apt.today](https://apt.today) - 손 쉽게 찾는 부동산 정보, 오늘의 아파트
|
|
472
|
-
|
|
473
248
|
## 기여
|
|
474
249
|
|
|
475
250
|
이슈 제보 및 풀 리퀘스트는 언제나 환영합니다!
|