@krds.ui/angular 0.0.0-stage → 0.1.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 (102) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -2
  3. package/fesm2022/krds.ui-angular.mjs +11456 -0
  4. package/fesm2022/krds.ui-angular.mjs.map +1 -0
  5. package/fonts/PretendardGOV-Bold.subset.woff2 +0 -0
  6. package/fonts/PretendardGOV-Medium.subset.woff2 +0 -0
  7. package/fonts/PretendardGOV-Regular.subset.woff2 +0 -0
  8. package/img/component/icon/head_ico_font_sample.svg +3 -0
  9. package/img/component/icon/head_ico_font_sample_white.svg +3 -0
  10. package/img/component/icon/ico_all.svg +3 -0
  11. package/img/component/icon/ico_angle.svg +3 -0
  12. package/img/component/icon/ico_angle_disabled.svg +3 -0
  13. package/img/component/icon/ico_angle_disabled_inverse.svg +3 -0
  14. package/img/component/icon/ico_angle_inverse.svg +3 -0
  15. package/img/component/icon/ico_arrow_dropdown.svg +3 -0
  16. package/img/component/icon/ico_blog.svg +6 -0
  17. package/img/component/icon/ico_bread_home.svg +3 -0
  18. package/img/component/icon/ico_calendar.svg +3 -0
  19. package/img/component/icon/ico_call.svg +3 -0
  20. package/img/component/icon/ico_checkbox.svg +5 -0
  21. package/img/component/icon/ico_checkbox_checked.svg +5 -0
  22. package/img/component/icon/ico_close.svg +3 -0
  23. package/img/component/icon/ico_complete_fill.svg +4 -0
  24. package/img/component/icon/ico_delete.svg +3 -0
  25. package/img/component/icon/ico_delete_fill.svg +4 -0
  26. package/img/component/icon/ico_download.svg +3 -0
  27. package/img/component/icon/ico_ellipsis.svg +3 -0
  28. package/img/component/icon/ico_email.svg +3 -0
  29. package/img/component/icon/ico_error_fill.svg +4 -0
  30. package/img/component/icon/ico_expand.svg +3 -0
  31. package/img/component/icon/ico_facebook.svg +3 -0
  32. package/img/component/icon/ico_faq.svg +3 -0
  33. package/img/component/icon/ico_file.svg +3 -0
  34. package/img/component/icon/ico_file_figma.svg +13 -0
  35. package/img/component/icon/ico_file_html.svg +13 -0
  36. package/img/component/icon/ico_file_hwp.svg +13 -0
  37. package/img/component/icon/ico_file_pdf.svg +13 -0
  38. package/img/component/icon/ico_file_sketch.svg +13 -0
  39. package/img/component/icon/ico_file_xd.svg +16 -0
  40. package/img/component/icon/ico_filter.svg +5 -0
  41. package/img/component/icon/ico_flag.svg +29 -0
  42. package/img/component/icon/ico_flow_arrow.svg +3 -0
  43. package/img/component/icon/ico_foldable.svg +3 -0
  44. package/img/component/icon/ico_global.svg +3 -0
  45. package/img/component/icon/ico_go.svg +3 -0
  46. package/img/component/icon/ico_go_top.svg +5 -0
  47. package/img/component/icon/ico_help.svg +4 -0
  48. package/img/component/icon/ico_help_fill.svg +4 -0
  49. package/img/component/icon/ico_information.svg +5 -0
  50. package/img/component/icon/ico_information_fill.svg +4 -0
  51. package/img/component/icon/ico_information_fill_high_contrast.svg +5 -0
  52. package/img/component/icon/ico_instagram.svg +3 -0
  53. package/img/component/icon/ico_join.svg +3 -0
  54. package/img/component/icon/ico_like.svg +3 -0
  55. package/img/component/icon/ico_login.svg +3 -0
  56. package/img/component/icon/ico_login_certify_go.svg +4 -0
  57. package/img/component/icon/ico_login_certify_type_01.svg +3 -0
  58. package/img/component/icon/ico_login_certify_type_02.svg +3 -0
  59. package/img/component/icon/ico_login_certify_type_03.svg +3 -0
  60. package/img/component/icon/ico_login_certify_type_04.svg +5 -0
  61. package/img/component/icon/ico_login_certify_type_05.svg +3 -0
  62. package/img/component/icon/ico_login_certify_type_06.svg +3 -0
  63. package/img/component/icon/ico_logo_krds.svg +10 -0
  64. package/img/component/icon/ico_logo_krds_high_contrast.svg +10 -0
  65. package/img/component/icon/ico_logout.svg +3 -0
  66. package/img/component/icon/ico_minus.svg +3 -0
  67. package/img/component/icon/ico_more.svg +3 -0
  68. package/img/component/icon/ico_my.svg +3 -0
  69. package/img/component/icon/ico_notice_fill.svg +5 -0
  70. package/img/component/icon/ico_notice_fill_blue.svg +5 -0
  71. package/img/component/icon/ico_notice_fill_high_contrast.svg +5 -0
  72. package/img/component/icon/ico_play.svg +3 -0
  73. package/img/component/icon/ico_plus.svg +3 -0
  74. package/img/component/icon/ico_print.svg +3 -0
  75. package/img/component/icon/ico_pw_visible_off.svg +3 -0
  76. package/img/component/icon/ico_pw_visible_on.svg +5 -0
  77. package/img/component/icon/ico_reset.svg +3 -0
  78. package/img/component/icon/ico_sch.svg +3 -0
  79. package/img/component/icon/ico_sch_plus.svg +3 -0
  80. package/img/component/icon/ico_scrap.svg +3 -0
  81. package/img/component/icon/ico_setting.svg +3 -0
  82. package/img/component/icon/ico_share.svg +3 -0
  83. package/img/component/icon/ico_sns_x.svg +3 -0
  84. package/img/component/icon/ico_step_done.svg +3 -0
  85. package/img/component/icon/ico_stop.svg +3 -0
  86. package/img/component/icon/ico_success_fill.svg +4 -0
  87. package/img/component/icon/ico_swiper_play.svg +3 -0
  88. package/img/component/icon/ico_swiper_stop.svg +3 -0
  89. package/img/component/icon/ico_switch_off.svg +6 -0
  90. package/img/component/icon/ico_switch_on.svg +5 -0
  91. package/img/component/icon/ico_tooltip.svg +3 -0
  92. package/img/component/icon/ico_upload.svg +3 -0
  93. package/img/component/icon/ico_urgent_badge_danger.svg +5 -0
  94. package/img/component/icon/ico_urgent_badge_info.svg +7 -0
  95. package/img/component/icon/ico_urgent_badge_ok.svg +5 -0
  96. package/img/component/icon/ico_view_mode.svg +3 -0
  97. package/img/component/icon/ico_volume.svg +3 -0
  98. package/img/component/icon/ico_warning_fill.svg +9 -0
  99. package/img/component/icon/ico_youtube.svg +3 -0
  100. package/package.json +51 -3
  101. package/style.css +1 -0
  102. package/types/krds.ui-angular.d.ts +3088 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Initializer Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,82 @@
1
- # Temporary Holding Version
1
+ # KRDS Angular
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [KRDS(대한민국 정부 디자인 시스템)](https://www.krds.go.kr/html/site/index.html)를 Angular로 구현한 컴포넌트 라이브러리입니다. Vue 버전인 [@krds.ui/vue](https://github.com/Initializer-org/krds-vue)와 같은 KRDS 스타일을 씁니다.
4
+
5
+ 문서와 예제: https://angular.krds.initializer.org
6
+
7
+ > 초기 개발 단계입니다. 아직 npm에 배포하지 않았습니다. KRDS 공식 분류의 컴포넌트를 모두 옮겼고(아래 [컴포넌트](#컴포넌트)), 스타일시트에는 KRDS 컴포넌트 CSS가 모두 들어 있습니다.
8
+
9
+ ## 빠른 시작
10
+
11
+ ```bash
12
+ pnpm add @krds.ui/angular
13
+ ```
14
+
15
+ `angular.json`의 `styles`에 스타일시트를 추가합니다.
16
+
17
+ ```json
18
+ "styles": ["@krds.ui/angular/style.css"]
19
+ ```
20
+
21
+ ```ts
22
+ import { Component } from '@angular/core'
23
+ import { KrdsButton } from '@krds.ui/angular'
24
+
25
+ @Component({
26
+ selector: 'app-root',
27
+ imports: [KrdsButton],
28
+ template: `<button krdsButton variant="secondary" size="large">확인</button>`
29
+ })
30
+ export class App {}
31
+ ```
32
+
33
+ Angular `^22.2.0`이 필요합니다.
34
+
35
+ 스타일시트는 KRDS 전체 CSS라 압축 전 약 620kB(전송 약 45kB)입니다. `ng new`의 기본 번들 예산(`initial` 경고 500kB)에서 경고가 나오면 `angular.json`의 `budgets`에서 `maximumWarning`을 `1mb`로 올리세요.
36
+
37
+ ## 컴포넌트
38
+
39
+ [KRDS 공식 컴포넌트 목록](https://www.krds.go.kr/html/site/component/component_summary.html)의 분류 단위로 옮깁니다. 분류와 순서는 [krds-vue 문서](https://krds.initializer.org/components/)와 같습니다.
40
+
41
+ - [x] 액션: 링크 `a[krdsLink]`, 버튼 `button[krdsButton]`, 플로팅 버튼 `<krds-floating-button>`
42
+ - [x] 선택: 라디오 버튼 `<krds-radio>`, 체크박스 `<krds-checkbox>`, 셀렉트 `select[krdsSelect]`, 태그 `<krds-tag>`·`a[krdsTag]`, 토글 스위치 `<krds-toggle-switch>`, 묶음 `[krdsCheckArea]`·`[krdsTagGroup]`
43
+ - [x] 입력: 날짜 입력 필드 `<krds-date-input>`, 텍스트 영역 `textarea[krdsInput]`·글자 수 `<krds-textarea>`, 텍스트 입력 필드 `input[krdsInput]`, 파일 업로드 `<krds-file-upload>`, 폼 그룹 `<krds-form-group>` (부가 컴포넌트에서 앞당김)
44
+ - [x] 피드백: 단계 표시기 `ol[krdsStepIndicator]`·`li[krdsStep]`, 스피너 `<krds-spinner>` (입력 필드 로딩은 폼 그룹 `loading`)
45
+ - [x] 레이아웃 및 표현: 구조화 목록 `ul[krdsStructuredList]`, 긴급 공지 `<krds-critical-alerts>`, 디스클로저 `<krds-disclosure>`, 모달 `<krds-modal>`, 배지 `[krdsBadge]`, 아코디언 `[krdsAccordion]`·`<krds-accordion-item>`, 이미지 `img[krdsImage]`·`figure[krdsFigure]`, 캐러셀 `<krds-carousel>`·`li[krdsSlide]`, 탭 `<krds-tabs>`, 표 `<krds-table>`, 텍스트 목록 `[krdsTextList]`
46
+ - [x] 탐색: 건너뛰기 링크 `[krdsSkipLink]`, 메인 메뉴 `<krds-main-menu>`(PC·모바일), 브레드크럼 `nav[krdsBreadcrumb]`, 사이드 메뉴 `nav[krdsSideNavigation]`, 콘텐츠 내 탐색 `<krds-in-page-navigation>`, 페이지네이션 `nav[krdsPagination]`, 새 창 링크 `a[krdsExternal]`
47
+ - [x] 아이덴티티: 공식 배너 `[krdsMasthead]`, 운영기관 식별자 `[krdsIdentifier]`, 헤더 `header[krdsHeader]`, 푸터 `footer[krdsFooter]`
48
+ - [x] 도움: 패널 `<krds-panel>`, 맥락적 도움말 `<krds-contextual-help>`, 코치마크 `<krds-coach-mark>`, 툴팁 `<krds-tooltip>`, 음성 지원 `button[krdsTts]`
49
+ - [x] 설정: 언어 변경 `<krds-language-switcher>`, 화면 크기 조정 `<krds-resize>`, 드롭다운 `[krdsDropdown]`
50
+ - [x] 콘텐츠: 접근 가능한 미디어 `figure[krdsMedia]`, 숨긴 콘텐츠 `class="sr-only"` (KRDS CSS 클래스라 디렉티브 없이 `[class.sr-only]="조건"`으로 씀)
51
+ - [x] 모바일: 범위슬라이드 `<krds-range-slider>`, 수량 토글 `<krds-quantity-toggle>`, 토스트 `<krds-toast>`·`KrdsToastService`, 스낵바 `<krds-snackbar>`·`KrdsSnackbarService`, 탭바 `nav[krdsTabBar]` (스플래시 스크린은 krds-vue처럼 제공하지 않음: 각 플랫폼의 기본 기능 영역)
52
+ - [x] 부가 컴포넌트: 레이아웃 `[krdsLayout]`, 폼 그룹 `<krds-form-group>`(입력 분류에서 추가). 아이콘과 버튼 묶음은 KRDS 클래스를 그대로 씀: `<i class="svg-icon ico-help" aria-hidden="true"></i>`, `<div class="btn-group">`
53
+
54
+ 폼 컴포넌트는 기본 입력 요소를 그대로 씁니다. 텍스트 입력 필드·텍스트 영역은 `krdsInput`, 셀렉트는 `krdsSelect`, 체크박스·라디오·토글 스위치 안의 input은 `krdsControl`로 표시하면, 감싸는 컴포넌트가 KRDS 마크업과 label·도움말 연결(`aria-describedby`, 오류 상태의 `aria-invalid`)을 맡습니다. 값과 검증은 기본 요소 그대로라 `[(ngModel)]`, reactive forms, Signal Forms(`[formField]`), `required` 같은 기본 속성이 그대로 동작합니다.
55
+
56
+ ```html
57
+ <krds-form-group label="이메일" hint="이메일 형식이 올바르지 않습니다" state="error">
58
+ <input krdsInput type="email" [formField]="signupForm.email" />
59
+ </krds-form-group>
60
+
61
+ <krds-checkbox description="부가 설명">
62
+ <input type="checkbox" krdsControl [(ngModel)]="agree" />
63
+ 개인정보 수집에 동의합니다
64
+ </krds-checkbox>
65
+ ```
66
+
67
+ ## 개발
68
+
69
+ ```bash
70
+ pnpm install
71
+ pnpm test # 실제 브라우저(Chromium)에서 단위 테스트와 axe-core 접근성 검사 (처음 한 번 pnpm exec playwright install chromium)
72
+ pnpm build # dist/krds-angular에 패키지 생성
73
+ pnpm lint
74
+ pnpm format
75
+ pnpm docs:dev # 문서 사이트(VitePress) 개발 서버, 예제는 docs/components/demos/*.ts
76
+ pnpm docs:check # 문서 예제 템플릿 타입 검사 (ngc)
77
+ pnpm docs:build && pnpm docs:test # 문서 빌드 후 모든 페이지의 예제 렌더링·axe-core 검사
78
+ ```
79
+
80
+ ## 라이선스
81
+
82
+ MIT © [Initializer Team](https://github.com/Initializer-org)