@maxgrid/export-font-sc 0.0.0-stage → 1.3.2
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/LICENSE.md +219 -0
- package/NOTICE.md +21 -0
- package/README.md +46 -2
- package/dist/check.d.ts +7 -0
- package/dist/iife.d.ts +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +100 -0
- package/dist/loader.d.ts +46 -0
- package/dist/maxgrid.export-font-sc.min.js +1 -0
- package/fonts/NotoSansSC[wght].ttf +0 -0
- package/fonts/OFL.txt +93 -0
- package/package.json +34 -3
package/LICENSE.md
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# 맥스그리드 소프트웨어 사용권 계약(약관)
|
|
2
|
+
|
|
3
|
+
> 시행일: 2026년 11월 4일 · 문의: desk@maxmine.com
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 소프트웨어 사용권 계약
|
|
8
|
+
|
|
9
|
+
주식회사 맥스마인(이하 "회사")과 주문서에 기재된 고객(이하 "고객")은 회사의 데이터 그리드 소프트웨어 "맥스그리드(MaxGrid)"(이하 "제품")의 사용에 관하여 다음과 같이 계약합니다. 회사의 상호·대표자·사업자등록번호·주소·통신판매업 신고번호는 표지와 주문서에 기재합니다.
|
|
10
|
+
|
|
11
|
+
### 제1조 (목적)
|
|
12
|
+
|
|
13
|
+
이 계약은 회사가 고객에게 제품의 사용권을 부여하고, 고객이 이에 대한 대금을 지급하며, 양 당사자가 그 사용과 지원에 관한 권리와 의무를 지는 데 필요한 사항을 정합니다.
|
|
14
|
+
|
|
15
|
+
### 제2조 (정의)
|
|
16
|
+
|
|
17
|
+
1. **제품**: 회사가 "맥스그리드" 또는 "MaxGrid"라는 이름으로 제공하는 소프트웨어, 즉 자바스크립트 라이브러리, 프레임워크 래퍼(React, Vue, Angular), CSS, 타입 선언, 라이선스 키 검증 코드와 관련 문서를 말합니다. 제품의 기능은 에디션에 따라 달라지지 않으며, 에디션은 **사용 목적과 운영 환경, 지원 수준**으로 구분합니다(제4조의2).
|
|
18
|
+
2. **버전**: 회사가 제품에 붙여 배포하는 번호 단위입니다. 주문서에 기재된 지원 기간 중에 배포된 모든 버전을 "허용 버전"이라고 합니다.
|
|
19
|
+
3. **도메인**: 인터넷 주소의 호스트 이름(예: `example.com`)을 말하며, `www.`가 붙은 같은 사이트 주소(예: `www.example.com`)를 포함합니다. 그 외 하위 도메인(예: `a.example.com`)은 별도의 도메인으로 봅니다.
|
|
20
|
+
4. **시스템**: 도메인이 없는 사내망·폐쇄망 환경의 하나의 독립된 업무 시스템을 말합니다. 주문서에 시스템 이름을 기재한 하나의 시스템은 도메인 1개로 봅니다.
|
|
21
|
+
5. **운영 환경**: 최종 사용자에게 서비스되는 실제 환경을 말합니다. 개발·테스트·스테이징 환경은 운영 환경이 아닙니다.
|
|
22
|
+
6. **라이선스 키**: 회사가 발급하는 서명된 문자열 또는 파일로, 고객명, 허용 도메인(또는 시스템 이름), 허용 프레임워크 유형, 제품 구분, 허용 버전의 한도(최대 허용 릴리스 날짜)를 담고 있습니다.
|
|
23
|
+
7. **평가 모드**: 유효한 라이선스 키가 없거나 키와 맞지 않는 도메인에서 제품이 워터마크와 콘솔 경고를 표시하며 동작하는 상태를 말합니다.
|
|
24
|
+
8. **지원**: 제9조에 정한 온라인 기술 지원과 새 버전 사용권을 말합니다.
|
|
25
|
+
9. **주문서**: 고객이 구매한 사용권의 종류, 도메인 또는 시스템, 수량, 지원 기간, 대금을 적은 서면 또는 전자문서를 말합니다.
|
|
26
|
+
10. **프레임워크 유형**: 제품이 제공하는 사용 방식의 구분으로 JavaScript(프레임워크 없음), React, Vue, Angular의 네 가지를 말합니다. 하나의 사용권은 주문서에 기재된 프레임워크 유형 1개에만 적용됩니다.
|
|
27
|
+
|
|
28
|
+
### 제3조 (계약의 구성과 우선순위)
|
|
29
|
+
|
|
30
|
+
1. 이 계약은 이 약관, 주문서, 별표로 구성됩니다.
|
|
31
|
+
2. 내용이 충돌하면 주문서, 별표, 이 약관의 순서로 우선합니다.
|
|
32
|
+
3. 고객이 별도로 제시한 발주 조건이나 표준 약관은 회사가 서면으로 동의하지 않는 한 이 계약에 적용되지 않습니다.
|
|
33
|
+
|
|
34
|
+
### 제4조 (사용권의 부여)
|
|
35
|
+
|
|
36
|
+
1. 회사는 고객에게 주문서에 기재된 도메인 또는 시스템의 운영 환경에서 제품을 사용할 수 있는 **비독점적, 양도할 수 없는, 기간의 제한이 없는(영구) 사용권**을 부여합니다.
|
|
37
|
+
2. 사용권은 **허용 버전**에 대해 영구적입니다. 지원 기간이 끝난 뒤에 배포된 버전은 제9조에 따라 지원을 갱신해야 사용할 수 있습니다. 이미 받은 허용 버전은 지원이 끝난 뒤에도 계속 사용할 수 있습니다.
|
|
38
|
+
3. 고객은 주문서에 기재되지 않은 도메인 또는 시스템의 운영 환경에서 제품을 사용할 수 없습니다. 도메인을 추가하려면 추가 주문서가 필요합니다.
|
|
39
|
+
4. Developer Edition과 Trial Edition은 제4조의2에 정한 조건에 따라 무료로 사용할 수 있습니다.
|
|
40
|
+
|
|
41
|
+
### 제4조의2 (에디션)
|
|
42
|
+
|
|
43
|
+
제품의 기능은 모든 에디션에서 같습니다. 에디션은 사용 목적, 운영 환경, 지원 수준으로 구분합니다.
|
|
44
|
+
|
|
45
|
+
1. **Developer Edition(무료)**: 개인 학습, 학생 프로젝트, 교육기관 수업, 포트폴리오, 기능 테스트, 데모 제작을 위한 비상업적 사용에 한해 `localhost`, `127.0.0.1`, `[::1]`, `*.localhost`에서만 사용할 수 있습니다. 온라인 샌드박스와 공개 호스팅 사이트는 포함하지 않습니다. 프레임워크 유형의 제한은 없습니다. 상업 서비스 운영, 고객사 시스템 납품, 기업 내부 업무 시스템에서의 사용, 운영 환경 라이선스 발급, 공식 기술 지원은 포함하지 않습니다.
|
|
46
|
+
2. **Trial Edition(무료)**: 기업과 SI 사업자가 도입 전에 검증하기 위해 신청 즉시 자동으로 발급되는 키로 모든 프레임워크 유형을 **30일간** 실제 개발·테스트 환경에서 모든 기능을 사용할 수 있습니다. 운영 환경에서는 사용 기간 또는 워터마크로 제한될 수 있으며 기본 기술 지원은 없습니다.
|
|
47
|
+
3. **Commercial Edition(유료)**: 주문서에 기재된 고객사 또는 프로젝트의 운영 도메인 1개(또는 시스템 1식)에 대한 영구 사용권이며, 개발 환경 사용, 개발자 수·사용자 수 제한 없음, **프레임워크 유형 1개**(주문서에 기재, 같은 도메인에서 다른 유형이 필요하면 추가 주문서로 할인된 가격에 구매), 구매 후 1년간 업데이트와 기본 기술 지원을 포함합니다. 서버 수는 제한하지 않으며 대규모 분산 배포는 별도 협의할 수 있습니다.
|
|
48
|
+
4. **Enterprise Edition(별도 계약)**: Commercial Edition의 사용권에 더해 **모든 프레임워크 유형 사용**, 우선 기술 지원, 장기 버전 지원, 폐쇄망 라이선스, 다수 개발 환경, 전용 문의 채널, 별도 계약에 따른 현장 지원과 장기 유지보수를 계약 조건에 따라 제공합니다.
|
|
49
|
+
5. **SI 프로젝트 라이선스**: SI 사업자는 최종 고객의 운영 시스템별로 Commercial Edition을 구매합니다. 라이선스는 최종 고객의 도메인 또는 시스템에 귀속되며, 연간 구매 수량에 따른 할인은 주문서에 따릅니다.
|
|
50
|
+
|
|
51
|
+
### 제5조 (도메인과 시스템의 판정)
|
|
52
|
+
|
|
53
|
+
1. 도메인 1개의 사용권은 해당 호스트 이름과 `www.`가 붙은 같은 사이트 주소에 적용되며, 다른 하위 도메인에는 적용되지 않습니다(하위 도메인은 별도의 도메인으로 구매해야 합니다).
|
|
54
|
+
2. 같은 등록 도메인 아래의 개발·테스트·스테이징 서브도메인, `localhost`, `*.localhost`, `*.test`, `*.local`, 사설 IP 주소에서 개발과 검증을 위해 제품을 사용하는 것은 별도의 대금이 필요하지 않습니다.
|
|
55
|
+
3. 고객의 고객이 **자신의 도메인**(CNAME 등)으로 서비스를 받도록 제품을 제공하는 경우에는 그 도메인이 각각 별개로 계산됩니다. 이 경우와 제품 자체를 SDK·구성 요소로 재판매·재배포하는 경우는 별도 계약(SaaS·OEM)이 필요합니다.
|
|
56
|
+
4. SI 사업자가 최종 고객의 시스템에 제품을 납품할 때는 최종 고객의 도메인 또는 시스템을 기준으로 주문서를 작성합니다.
|
|
57
|
+
5. **주문서에 기재된 도메인(또는 시스템)은 변경할 수 없습니다.** 다만 회사의 입력·발급 오류는 정정합니다. 사이트 이전 등으로 도메인이 바뀌면 새 도메인에 대한 주문서가 필요합니다. 구매 전에 도메인을 확인하는 단계를 두며, 고객은 이를 확인하고 주문해야 합니다.
|
|
58
|
+
6. 도메인 수의 판정에 다툼이 있으면 회사가 주문서와 이 조의 기준에 따라 판단하되, 고객은 서면으로 이의를 제기할 수 있습니다.
|
|
59
|
+
7. **와일드카드(`*.example.com`)** 도메인은 주문서에 등록 도메인과 함께 기재한 경우에만 적용되며, 등록 도메인 바로 아래 하위 호스트 중 **주 도메인과 같은 서비스로 연결된 호스트**에만 사용할 수 있습니다. 하위 호스트의 A 레코드가 주 도메인과 다르거나, CNAME이 가리키는 최종 대상이 주 도메인의 서비스와 다른 경우(다른 서버·다른 서비스·고객의 고객 도메인 연결 포함)는 와일드카드에 포함되지 않고 별도의 도메인으로 계산합니다. 같은 서비스를 로드밸런서·CDN 등으로 여러 주소에 나누어 운영하는 경우는 같은 서비스로 봅니다.
|
|
60
|
+
|
|
61
|
+
### 제6조 (허용되는 사용)
|
|
62
|
+
|
|
63
|
+
고객은 다음을 할 수 있습니다.
|
|
64
|
+
|
|
65
|
+
1. 고객이 개발하는 애플리케이션에 제품을 포함해 최종 사용자에게 배포하는 것(최종 사용자 수의 제한은 없습니다)
|
|
66
|
+
2. 업무상 필요한 범위에서 제품의 사본을 만들어 백업하거나 개발·테스트 환경에 설치하는 것
|
|
67
|
+
3. 제품을 자신의 애플리케이션에 맞게 설정하고 확장 지점(옵션, 이벤트, 어댑터)을 통해 기능을 더하는 것
|
|
68
|
+
|
|
69
|
+
### 제7조 (제한 사항)
|
|
70
|
+
|
|
71
|
+
고객은 다음을 해서는 안 됩니다. 다만 관련 법령이 명시적으로 허용하는 범위는 예외입니다.
|
|
72
|
+
|
|
73
|
+
1. 제품 또는 그 일부를 독립된 제품, SDK, 구성 요소로 판매·대여·재배포하거나 제품과 경쟁하는 제품을 만드는 데 사용하는 것
|
|
74
|
+
2. 라이선스 키를 제3자와 공유하거나 허용된 도메인·시스템 밖에서 사용하는 것
|
|
75
|
+
3. 평가 모드, 워터마크, 라이선스 검증, 저작권 고지를 제거·우회·변조하는 것
|
|
76
|
+
4. 제품의 소스 코드를 역공학하거나 비공개 부분을 추출·공개하는 것
|
|
77
|
+
5. 제품에서 얻은 키 발급 정보나 검증 로직을 이용해 라이선스 키를 만들어 내는 것
|
|
78
|
+
6. 법령과 제3자의 권리를 침해하는 방식으로 제품을 사용하는 것
|
|
79
|
+
|
|
80
|
+
### 제8조 (라이선스 키와 평가 모드)
|
|
81
|
+
|
|
82
|
+
1. 회사는 대금 확인 후 주문서에 맞는 라이선스 키를 이메일 등으로 발급합니다.
|
|
83
|
+
2. 라이선스 키가 없거나 키에 기재된 도메인 또는 시스템과 맞지 않으면 제품은 **평가 모드**로 동작합니다. 평가 모드에서도 제품의 기능이 차단되지 않으며 워터마크와 경고만 표시됩니다. 이는 고객 서비스의 중단을 막기 위한 설계이며, 평가 모드에서의 운영 사용은 제4조의 위반이 될 수 있습니다.
|
|
84
|
+
3. 라이선스 키의 검증은 **고객의 환경에서 제품 안에서만 수행**되고 회사의 서버와 통신하지 않습니다. 회사는 제품을 통해 고객의 데이터나 사용 정보를 수집하지 않습니다.
|
|
85
|
+
4. **Developer Edition**은 개발 환경(`localhost` 등)에서는 키 없이 동작하고, 그 밖의 도메인에서는 평가 모드로 동작합니다. 회사가 발급하는 Developer 키는 발급일부터 1년간 유효하며, 만료 전후에 포털에서 다시 받을 수 있습니다. **Trial Edition**의 키에는 사용 기한이 들어 있으며 기한이 지나면 평가 모드로 동작합니다.
|
|
86
|
+
5. 고객은 라이선스 키를 안전하게 관리해야 하며, 분실·유출을 알게 되면 지체 없이 회사에 알려야 합니다. 회사는 새 키를 발급할 수 있습니다.
|
|
87
|
+
|
|
88
|
+
### 제9조 (지원과 업데이트)
|
|
89
|
+
|
|
90
|
+
1. 회사는 주문서의 구매일부터 **1년간** 다음을 제공합니다.
|
|
91
|
+
- 회사가 운영하는 **지원 게시판**을 통한 온라인 기술 지원(영업일 기준 3일 이내 1차 응답을 목표로 하나 보증하지는 않습니다). 이메일, 전화, 원격 지원은 포함하지 않습니다. 반복되는 질문은 회사가 FAQ로 정리해 공개합니다.
|
|
92
|
+
- 허용 버전의 버그 수정을 우선 처리하고 새 버전의 사용권 제공
|
|
93
|
+
2. 지원에는 고객 애플리케이션의 코드 작성, 대리 개발, 컨설팅, 현장 지원, 제3자 소프트웨어의 문제 해결이 포함되지 않습니다. 필요한 경우 별도 계약으로 진행합니다.
|
|
94
|
+
3. 지원 기간이 끝난 뒤 고객은 갱신을 신청할 수 있으며 갱신비는 동일 도메인에서 한 번의 주문으로 함께 갱신하는 프레임워크 유형의 **개수**에 따라 합계가 정해지며, 어떤 유형을 고르든 같습니다. 합계는 1개 **396,000원**, 2개 **594,000원**, 3개 **712,800원**, 4개 **772,200원**(부가세 포함)입니다. 회사가 인정한 SI 파트너는 각 합계에서 **20%** 할인된 금액(316,800원, 475,200원, 570,240원, 617,760원)입니다. 지원 기간이 끝나고 90일이 지난 뒤에 갱신하면 각 합계의 1.5배(일반 1개 594,000원)입니다. 갱신하지 않아도 이미 받은 허용 버전은 계속 사용할 수 있고, 갱신하지 않은 것은 새 버전의 사용권과 기술 지원이 끝난다는 뜻일 뿐입니다.
|
|
95
|
+
4. 보안 취약점의 수정 버전은 **지원 기간 중인(라이선스 키의 최대 허용 릴리스 날짜가 수정 버전의 빌드 날짜 이후인) 고객**에게 제공합니다. 치명적인 취약점은 지원 기간과 관계없이 모든 고객이 피해를 막을 수 있도록 영향 범위와 임시 회피 방법을 공지합니다. 지원이 끝난 고객이 수정 버전을 쓰려면 제3항에 따라 갱신해야 합니다.
|
|
96
|
+
5. 회사는 제품의 일부 기능을 폐기하거나 변경할 수 있으며, 호환되지 않는 변경은 주 버전을 올리고 사전에 문서로 알립니다.
|
|
97
|
+
6. 허용 버전은 라이선스 키에 담긴 최대 허용 릴리스 날짜까지 빌드된 버전입니다. 그 날짜 뒤에 빌드된 버전은 평가 모드(제8조)로 동작하므로, 운영 환경에서는 버전을 고정해 사용하는 것을 권장합니다.
|
|
98
|
+
|
|
99
|
+
### 제10조 (대금과 지급)
|
|
100
|
+
|
|
101
|
+
1. 대금은 주문서에 기재하며 **부가가치세를 포함한 금액**입니다. 주문서와 영수증에는 공급가액과 부가가치세를 구분해 적습니다.
|
|
102
|
+
2. 대금은 **전자결제**(회사가 지정한 결제대행사를 통한 카드·간편결제·계좌이체 등)로만 지급합니다. 회사는 결제 수단에 따라 신용카드 매출전표 또는 현금영수증을 발급하며, 전자결제 건에는 세금계산서를 발행하지 않습니다. 다만 결제대행사를 통하지 않고 입금한 대금(Enterprise·수동 계약 등)에는 고객이 요청하면 **전자세금계산서를 수동으로 발행**합니다.
|
|
103
|
+
3. 대금 지급이 지연되면 라이선스 키의 발급과 지원이 보류될 수 있습니다.
|
|
104
|
+
4. 대금은 주문서에 정한 도메인·지원 기간의 사용권에 대한 대가이며, 고객이 제품을 사용하지 않더라도 환불되지 않습니다. 다만 제11조는 예외입니다.
|
|
105
|
+
|
|
106
|
+
### 제11조 (취소와 환불)
|
|
107
|
+
|
|
108
|
+
1. 라이선스 키가 발급되기 전에는 고객은 주문을 취소하고 지급한 대금 전액을 환불받을 수 있습니다.
|
|
109
|
+
2. 라이선스 키가 발급된 뒤에는 환불되지 않습니다. 다만 제품이 문서에 명시된 핵심 기능을 제공하지 못해 사용 목적을 달성할 수 없고 회사가 30일 안에 이를 고치지 못하면 고객은 계약을 해지하고 미사용 기간에 해당하는 대금의 환불을 요청할 수 있습니다.
|
|
110
|
+
|
|
111
|
+
### 제12조 (지식재산권)
|
|
112
|
+
|
|
113
|
+
1. 제품과 문서, 로고, 이름에 관한 저작권, 상표권 등 모든 지식재산권은 회사에 귀속됩니다. 이 계약은 사용권만 부여하며 어떤 권리도 고객에게 양도하지 않습니다.
|
|
114
|
+
2. 고객이 제품 위에 개발한 애플리케이션과 고객의 데이터에 관한 권리는 고객에게 있습니다.
|
|
115
|
+
3. 고객이 회사에 제안한 개선 의견은 회사가 자유롭게 사용할 수 있으며, 회사는 이에 대해 대가를 지급하지 않습니다.
|
|
116
|
+
|
|
117
|
+
### 제13조 (고객의 데이터와 개인정보)
|
|
118
|
+
|
|
119
|
+
1. 제품은 고객의 화면 데이터를 회사로 전송하지 않습니다.
|
|
120
|
+
2. 지원 게시판의 글과 답변은 **다른 고객이 볼 수 있도록 공개될 수 있습니다.** 고객은 개인정보, 라이선스 키, 영업비밀, 고객 데이터를 글과 첨부(화면 캡처, 코드 일부, 로그)에서 사전에 가려야 합니다. 회사는 지원 목적으로만 이 자료를 사용하며, 비공개로 올릴 수 있는 방법을 제공할 수 있습니다.
|
|
121
|
+
3. 회사는 라이선스 발급을 위해 필요한 최소한의 정보(고객명, 담당자 이메일, 도메인)를 처리합니다.
|
|
122
|
+
4. 고객이 회사가 운영하는 배포 서버(`cdn.maxmine.com`, `grid.maxmine.com/cdn/` 등)에서 제품 파일을 불러오는 경우 회사는 서비스 운영, 보안, 라이선스 준수 확인을 위해 접속 기록(IP 주소, 요청 시각, 참조 주소)을 처리·보관할 수 있습니다.
|
|
123
|
+
|
|
124
|
+
### 제14조 (보증과 면책)
|
|
125
|
+
|
|
126
|
+
1. 회사는 제품이 배포 시점의 문서와 실질적으로 일치하도록 제공하기 위해 노력합니다.
|
|
127
|
+
2. 제품은 위 보증을 제외하고 **현재 상태 그대로** 제공되며, 회사는 특정 목적에의 적합성, 오류가 없음, 중단 없는 동작, 모든 환경과의 호환성을 보증하지 않습니다.
|
|
128
|
+
3. 회사는 제품이 제3자의 저작권·특허권 등을 침해한다는 청구를 받았을 때 고객이 제때 통지하고 방어에 협조하면 회사의 비용으로 방어하고 확정된 배상액을 부담하며, 필요하면 제품을 수정·교체하거나 사용권을 환불합니다. 다만 고객이 제품을 변경했거나 제품을 다른 소프트웨어와 결합해서 생긴 침해는 제외합니다.
|
|
129
|
+
|
|
130
|
+
### 제15조 (책임의 제한)
|
|
131
|
+
|
|
132
|
+
1. 회사는 이 계약과 관련해 발생한 간접손해, 특별손해, 결과적 손해, 영업 이익이나 데이터의 손실에 대해 책임지지 않습니다.
|
|
133
|
+
2. 회사의 이 계약상 총 책임은 해당 사건과 관련해 고객이 회사에 지급한 대금을 한도로 합니다.
|
|
134
|
+
3. 위 제한은 회사의 **고의 또는 중대한 과실**이 있는 경우, 관련 법령이 책임의 제한을 허용하지 않는 경우에는 적용되지 않습니다.
|
|
135
|
+
|
|
136
|
+
### 제16조 (비밀 유지)
|
|
137
|
+
|
|
138
|
+
양 당사자는 상대방이 비밀로 표시했거나 성질상 비밀인 정보(라이선스 키, 미공개 로드맵, 가격, 지원 중 알게 된 기술 정보)를 계약 목적 외에 사용하거나 제3자에게 공개하지 않습니다. 법령이나 법원·수사기관의 요구에 따른 공개는 예외로 하며 사전에 알립니다. 이 의무는 계약이 끝난 뒤 3년 동안 유지됩니다.
|
|
139
|
+
|
|
140
|
+
### 제17조 (계약 기간과 해지)
|
|
141
|
+
|
|
142
|
+
1. 이 계약은 주문서 체결일부터 효력이 생기며, 사용권은 영구입니다. 지원은 제9조의 기간 동안 제공됩니다.
|
|
143
|
+
2. 일방이 이 계약을 중대하게 위반하면 상대방은 30일 이상의 기간을 정해 시정을 요구하고, 그 기간 안에 시정되지 않으면 계약을 해지할 수 있습니다.
|
|
144
|
+
3. 고객이 제5조·제7조를 위반해 사용권의 범위를 넘어 사용한 경우 회사는 위 절차에 따라 사용권을 해지할 수 있으며, 고객은 위반한 만큼의 추가 대금을 지급해야 합니다.
|
|
145
|
+
4. 해지되면 고객은 제품과 라이선스 키의 사용을 중단하고 사본을 삭제해야 합니다. 해지 사유가 회사에 있는 경우에는 미사용 지원 기간에 해당하는 대금을 환불합니다. 이미 지급한 대금은 그 밖에는 환불되지 않습니다.
|
|
146
|
+
5. 제12조, 제14조~제16조, 제21조, 제22조는 계약이 끝난 뒤에도 효력이 유지됩니다.
|
|
147
|
+
|
|
148
|
+
### 제18조 (준수 확인)
|
|
149
|
+
|
|
150
|
+
고객은 회사의 합리적인 서면 요청이 있으면 주문서와 맞게 제품을 사용하고 있는지 서면으로 확인해 줍니다. 회사는 고객의 영업에 지장을 주지 않는 범위에서 연 1회까지 요청할 수 있으며, 현장 감사는 고객의 동의가 있어야 합니다.
|
|
151
|
+
|
|
152
|
+
### 제19조 (제3자 소프트웨어)
|
|
153
|
+
|
|
154
|
+
제품에는 제3자의 오픈소스 소프트웨어가 포함될 수 있습니다. 해당 소프트웨어는 각자의 라이선스를 따르며, 그 목록과 고지는 제품에 포함된 고지 파일(NOTICE)에 기재합니다.
|
|
155
|
+
|
|
156
|
+
### 제20조 (양도)
|
|
157
|
+
|
|
158
|
+
고객은 회사의 사전 서면 동의 없이 이 계약상의 지위나 사용권을 양도할 수 없습니다. 다만 고객의 합병·분할·영업양도로 사업을 승계하는 자에게는 사전에 알리고 승계인이 이 계약에 구속되는 조건으로 이전할 수 있습니다. 회사는 계약상 지위를 양수인에게 이전할 수 있으며 이를 고객에게 알립니다.
|
|
159
|
+
|
|
160
|
+
### 제21조 (불가항력)
|
|
161
|
+
|
|
162
|
+
천재지변, 전쟁, 감염병, 정전, 통신 장애, 정부의 조치 등 당사자가 통제할 수 없는 사유로 의무를 이행하지 못한 경우 그 기간 동안 책임을 지지 않습니다. 금전 지급 의무는 예외입니다.
|
|
163
|
+
|
|
164
|
+
### 제22조 (준거법과 분쟁 해결)
|
|
165
|
+
|
|
166
|
+
1. 이 계약은 대한민국 법을 따릅니다.
|
|
167
|
+
2. 분쟁은 먼저 협의로 해결하고, 협의가 되지 않으면 서울중앙지방법원을 제1심의 전속 관할 법원으로 합니다.
|
|
168
|
+
|
|
169
|
+
### 제23조 (기타)
|
|
170
|
+
|
|
171
|
+
1. 이 약관은 변경될 수 있으며, 변경된 약관은 변경 이후에 체결하는 주문에만 적용됩니다. 이미 체결한 주문서에는 체결 당시의 약관이 적용됩니다.
|
|
172
|
+
2. 회사에 대한 통지와 문의는 desk@maxmine.com 또는 02-866-4105로 하며, 고객에 대한 통지는 주문서에 적은 이메일 또는 주소로 하며, 이메일은 발송 후 2영업일이 지나면 도달한 것으로 봅니다.
|
|
173
|
+
3. 이 계약의 일부가 무효여도 나머지는 효력이 유지됩니다.
|
|
174
|
+
4. 이 계약은 이 주제에 관한 양 당사자의 완전한 합의이며, 이전의 구두·서면 합의를 대체합니다.
|
|
175
|
+
5. 영문 번역본이 있는 경우 한국어본이 우선합니다.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 별표 1. 주문서 양식
|
|
180
|
+
|
|
181
|
+
| 항목 | 내용 |
|
|
182
|
+
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
183
|
+
| 공급자 | 주식회사 맥스마인, 대표 이재영, 사업자등록번호 119-86-25269, 서울특별시 금천구 범안로 1126, 809호, 통신판매업 신고번호 2012-서울금천-0824, 담당자 연락처 |
|
|
184
|
+
| 고객 | 상호, 사업자등록번호, 대표자, 주소, 담당자(이름·이메일·연락처) |
|
|
185
|
+
| 제품·버전 | 맥스그리드, 프레임워크 유형(아래 항목), 최초 허용 버전 |
|
|
186
|
+
| 프레임워크 유형 | JavaScript / React / Vue / Angular 중 1개 (추가 유형은 추가 주문, Enterprise는 전체) |
|
|
187
|
+
| 사용권 종류 | 영구 사용권(도메인 단위) |
|
|
188
|
+
| 도메인 또는 시스템 | `example.com`(`www.` 포함, 다른 하위 도메인은 별도) / 시스템 이름(폐쇄망) — 수량 [ ] |
|
|
189
|
+
| 지원 기간 | 구매일부터 1년 (기간: [시작일] ~ [종료일]) |
|
|
190
|
+
| 대금 | 단가 × 수량 = 합계(부가세 포함), 공급가액과 부가세 구분 표기 |
|
|
191
|
+
| 지급 조건 | 전자결제(카드·간편결제·계좌이체)는 매출전표·현금영수증으로 증빙, 결제대행사를 거치지 않은 입금은 요청 시 전자세금계산서 수동 발행 |
|
|
192
|
+
| 라이선스 키 발급 | 발급 방식(이메일)과 담당자 |
|
|
193
|
+
| 견적 유효 기간 | 발행일부터 30일 |
|
|
194
|
+
| 특약 | 얼리어답터 할인, 추가 도메인 할인 등 |
|
|
195
|
+
| 서명 | 양 당사자의 서명 또는 전자서명 |
|
|
196
|
+
|
|
197
|
+
## 별표 2. 도메인 판정 예시
|
|
198
|
+
|
|
199
|
+
| 상황 | 도메인 수 | 근거 |
|
|
200
|
+
| ------------------------------------------------------------- | ---------------------------------------- | --------------------- |
|
|
201
|
+
| `example.com`, `www.example.com`을 운영 | 1개 | 제5조 1항 |
|
|
202
|
+
| `example.com`과 `app.example.com`을 운영 | 2개 | 제5조 1항 |
|
|
203
|
+
| `*.example.com` 구매, `a`·`b.example.com`이 같은 서비스 | 1개(와일드카드) | 제5조 7항 |
|
|
204
|
+
| `*.example.com` 구매, `shop.example.com`만 다른 서버 A 레코드 | 와일드카드 1개 + `shop`은 별도 1개 | 제5조 7항 |
|
|
205
|
+
| `example.com` 운영 + `stg.example.com`, `localhost`에서 개발 | 1개 | 제5조 2항 |
|
|
206
|
+
| `a.com`과 `b.com`을 운영 | 2개 | 서로 다른 등록 도메인 |
|
|
207
|
+
| 고객사가 자기 도메인(`portal.client.com`)으로 서비스 | 별도 계약 | 제5조 3항 |
|
|
208
|
+
| 도메인 없이 사내 인트라넷 시스템 1식 | 1개(시스템) | 제2조 4항 |
|
|
209
|
+
| SI사가 고객 3곳에 납품 | 3개 | 제5조 4항 |
|
|
210
|
+
| 같은 도메인에서 React와 Angular를 모두 사용 | 주문서 2건(첫 유형 정가, 추가 유형 할인) | 제4조의2 3항 |
|
|
211
|
+
|
|
212
|
+
## 별표 3. 지원 범위
|
|
213
|
+
|
|
214
|
+
| 포함 | 제외 |
|
|
215
|
+
| ---------------------------------------- | ------------------------------------- |
|
|
216
|
+
| 지원 게시판을 통한 온라인 기술 지원, FAQ | 이메일·전화·원격·현장 지원 |
|
|
217
|
+
| 허용 버전의 버그 수정 | 고객 코드 작성, 대리 개발 |
|
|
218
|
+
| 새 버전 사용권 | 제3자 소프트웨어 문제, 서버 환경 구성 |
|
|
219
|
+
| 사용법과 문서 안내 | 교육, 컨설팅 |
|
package/NOTICE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Third-party notice / 서드파티 고지
|
|
2
|
+
|
|
3
|
+
이 패키지의 `fonts/`는 아래 폰트를 **가공하지 않은 원본 그대로** 담고 있어요. 서브셋·형식 변환·이름 변경을 하지 않았어요.
|
|
4
|
+
The `fonts/` folder contains the font below **unmodified**: no subsetting, conversion or renaming.
|
|
5
|
+
|
|
6
|
+
| | |
|
|
7
|
+
| ------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
8
|
+
| Font / 폰트 | Noto Sans SC (variable, wght 100–900) |
|
|
9
|
+
| File / 파일 | `fonts/NotoSansSC[wght].ttf` (17,772,300 bytes) |
|
|
10
|
+
| SHA-256 | `a3041811a78c361b1de50f953c805e0244951c21c5bd412f7232ef0d899af0da` |
|
|
11
|
+
| Version / 버전 | 2.004 |
|
|
12
|
+
| Copyright | (c) 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source' |
|
|
13
|
+
| License / 라이선스 | SIL Open Font License 1.1 — `fonts/OFL.txt` (원문 그대로 / verbatim) |
|
|
14
|
+
| Source / 출처 | https://github.com/google/fonts/tree/main/ofl/notosanssc (upstream: https://github.com/notofonts/noto-cjk) |
|
|
15
|
+
| Retrieved / 받은 날 | 2026-11-12 |
|
|
16
|
+
|
|
17
|
+
- 폰트는 OFL 1.1을 따르고, 이 패키지의 코드(`dist/`)는 `LICENSE.md`를 따라요. OFL은 폰트 자체를 다른 라이선스로 배포하는 것을 허용하지 않아요.
|
|
18
|
+
The font stays under OFL 1.1; only the loader code in `dist/` follows `LICENSE.md`. OFL does not allow releasing the font itself under another license.
|
|
19
|
+
- 폰트 파일 자체를 단독으로 판매하지 않아요. / The font is not sold by itself.
|
|
20
|
+
- `@maxgrid/export`는 PDF를 만들 때 쓰인 글자의 글리프만 PDF 안에 임베드해요(PDF 문서는 OFL의 적용 대상이 아니에요). 임베드한 폰트에는 `MXGRID+EmbeddedFont`라는 자체 이름을 붙이고 'Source'라는 예약 이름을 쓰지 않아요.
|
|
21
|
+
`@maxgrid/export` embeds only the glyphs it uses inside the PDF. The embedded font is named `MXGRID+EmbeddedFont` and never uses the Reserved Font Name 'Source'.
|
package/README.md
CHANGED
|
@@ -1,3 +1,47 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @maxgrid/export-font-sc
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
한국어 · [English](#english)
|
|
4
|
+
|
|
5
|
+
`@maxgrid/export`로 PDF를 만들 때 쓰는 **간체 중국어 폰트(Noto Sans SC 원본, SIL OFL 1.1)** 예요. 폰트는 가공하지 않은 원본 파일 그대로이고, 중국어 간체 글자가 있는 PDF를 만들 때만 읽어요.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @maxgrid/export @maxgrid/export-font-sc
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { downloadPdf } from '@maxgrid/export';
|
|
13
|
+
import { simplifiedChineseFont } from '@maxgrid/export-font-sc';
|
|
14
|
+
|
|
15
|
+
await downloadPdf('订单.pdf', api, { font: simplifiedChineseFont });
|
|
16
|
+
// 한글과 간체가 섞인 표는 폰트를 이어서 줘요(앞의 폰트에 없는 글자만 뒤의 폰트를 써요)
|
|
17
|
+
// await downloadPdf('주문.pdf', api, { font: [koreanFont, simplifiedChineseFont] });
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- 폰트 파일은 약 17.8MB이고 `simplifiedChineseFont.load()`가 처음 불릴 때 한 번만 읽어요. PDF에는 쓰인 글자의 글리프만 들어가서 결과 파일은 작아요.
|
|
21
|
+
- 가변 폰트(wght 100–900)라서 보통은 400, 굵게는 700으로 쓰여요.
|
|
22
|
+
- 다른 주소에서 받으려면 `createSimplifiedChineseFont({ url })`를 써요. 스크립트 태그로 쓸 때는 `dist/maxgrid.export-font-sc.min.js`를 올리면 전역 `MaxGridExportFontSc`가 생기고, `@maxgrid/export`가 알아서 찾아요(폰트는 `../fonts/` 폴더에서 받아요).
|
|
23
|
+
- 이 폰트에는 한글이 없어요. 한글도 같이 나오는 표는 `@maxgrid/export-font-ko`와 함께 `font: [koreanFont, simplifiedChineseFont]`로 써요.
|
|
24
|
+
- ESM 전용이에요. 번들러(Vite, webpack)에서는 `font: simplifiedChineseFont`를 직접 넘기세요.
|
|
25
|
+
- 폰트 라이선스와 출처는 `NOTICE.md`, 라이선스 원문은 `fonts/OFL.txt`예요. 패키지 코드는 `LICENSE.md`, 폰트는 OFL을 따라요.
|
|
26
|
+
- 문서: https://grid.maxmine.com
|
|
27
|
+
|
|
28
|
+
## English
|
|
29
|
+
|
|
30
|
+
The **Simplified Chinese font (the unmodified Noto Sans SC, SIL OFL 1.1)** for PDFs built with `@maxgrid/export`. The font is the original file, read only when a PDF with Simplified Chinese text is built.
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import { downloadPdf } from '@maxgrid/export';
|
|
34
|
+
import { simplifiedChineseFont } from '@maxgrid/export-font-sc';
|
|
35
|
+
|
|
36
|
+
await downloadPdf('orders.pdf', api, { font: simplifiedChineseFont });
|
|
37
|
+
// A table with both Korean and Simplified Chinese: chain the fonts (a later font is used only for glyphs the earlier one lacks)
|
|
38
|
+
// await downloadPdf('orders.pdf', api, { font: [koreanFont, simplifiedChineseFont] });
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- The file is about 17.8 MB and is read once, the first time `simplifiedChineseFont.load()` is called. The PDF embeds only the glyphs it uses, so it stays small.
|
|
42
|
+
- It is a variable font (wght 100–900): regular text uses 400 and bold uses 700.
|
|
43
|
+
- Use `createSimplifiedChineseFont({ url })` to load it from another address. With a script tag, load `dist/maxgrid.export-font-sc.min.js`; it creates the global `MaxGridExportFontSc`, which `@maxgrid/export` finds by itself (the font comes from the `../fonts/` folder).
|
|
44
|
+
- This font has no Hangul. For a table with Korean too, chain it with `@maxgrid/export-font-ko`: `font: [koreanFont, simplifiedChineseFont]`.
|
|
45
|
+
- ESM only. In a bundled app (Vite, webpack) pass `font: simplifiedChineseFont` yourself.
|
|
46
|
+
- See `NOTICE.md` for the license and source and `fonts/OFL.txt` for the license text. The package code follows `LICENSE.md`; the font follows the OFL.
|
|
47
|
+
- Docs: https://grid.maxmine.com
|
package/dist/check.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** 패키지에 든 폰트 파일(원본 그대로)의 크기와 SHA-256. NOTICE.md와 같은 값이다(시험이 맞춰 본다). */
|
|
2
|
+
export declare const FONT_CHECK: {
|
|
3
|
+
readonly bytes: 17772300;
|
|
4
|
+
readonly sha256: "a3041811a78c361b1de50f953c805e0244951c21c5bd412f7232ef0d899af0da";
|
|
5
|
+
};
|
|
6
|
+
/** 파일 이름(Google Fonts 배포 이름 그대로). */
|
|
7
|
+
export declare const FONT_FILE = "NotoSansSC[wght].ttf";
|
package/dist/iife.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type SimplifiedChineseFont, type SimplifiedChineseFontOptions } from './loader';
|
|
2
|
+
export type { SimplifiedChineseFont, SimplifiedChineseFontOptions } from './loader';
|
|
3
|
+
/** 패키지 안 폰트 파일 이름(Google Fonts 배포 이름 그대로). */
|
|
4
|
+
export declare const SIMPLIFIED_CHINESE_FONT_FILE = "NotoSansSC[wght].ttf";
|
|
5
|
+
/** 폰트 정보. 파일은 원본 그대로이며 이 값은 안내용이다. */
|
|
6
|
+
export declare const simplifiedChineseFontInfo: {
|
|
7
|
+
readonly family: "Noto Sans SC";
|
|
8
|
+
readonly version: "2.004";
|
|
9
|
+
readonly license: "OFL-1.1";
|
|
10
|
+
/** 가변 축: 100~900. PDF에서는 400을 보통, 700을 굵게로 쓴다. */
|
|
11
|
+
readonly axes: {
|
|
12
|
+
readonly wght: readonly [100, 900];
|
|
13
|
+
};
|
|
14
|
+
readonly source: "https://github.com/google/fonts/tree/main/ofl/notosanssc";
|
|
15
|
+
readonly bytes: 17772300;
|
|
16
|
+
readonly sha256: "a3041811a78c361b1de50f953c805e0244951c21c5bd412f7232ef0d899af0da";
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* 간체 중국어 폰트 원본을 만든다. 파일은 `load()`가 처음 불릴 때만 읽는다. Node에서는 `file:` 주소를 파일로
|
|
20
|
+
* 읽고, 브라우저에서는 `fetch`한다. 읽는 데 실패하면 기억하지 않아 다시 부를 수 있다.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createSimplifiedChineseFont(options?: SimplifiedChineseFontOptions): SimplifiedChineseFont;
|
|
23
|
+
/** 패키지 안의 폰트를 쓰는 기본 원본. `exportPdf(api, { font: simplifiedChineseFont })`. */
|
|
24
|
+
export declare const simplifiedChineseFont: SimplifiedChineseFont;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// src/check.ts
|
|
2
|
+
var e = {
|
|
3
|
+
bytes: 17772300,
|
|
4
|
+
sha256: "a3041811a78c361b1de50f953c805e0244951c21c5bd412f7232ef0d899af0da"
|
|
5
|
+
}, t = "NotoSansSC[wght].ttf", n = "간체 중국어 폰트", r = 65536, i = "node:fs/promises";
|
|
6
|
+
async function a(e) {
|
|
7
|
+
return (await import(
|
|
8
|
+
/* @vite-ignore */
|
|
9
|
+
/* webpackIgnore: true */
|
|
10
|
+
i
|
|
11
|
+
)).readFile(e);
|
|
12
|
+
}
|
|
13
|
+
async function o(e, t, n, r) {
|
|
14
|
+
let i = await fetch(e, { signal: t });
|
|
15
|
+
if (!i.ok) throw Error(String(i.status));
|
|
16
|
+
if (!n || !i.body || typeof TransformStream > "u") return new Uint8Array(await i.arrayBuffer());
|
|
17
|
+
let a = r || Number(i.headers.get("content-length")) || 0, o = 0, s = n, c = new TransformStream({ transform(e, t) {
|
|
18
|
+
o += e.length;
|
|
19
|
+
try {
|
|
20
|
+
s?.({
|
|
21
|
+
loaded: o,
|
|
22
|
+
total: a
|
|
23
|
+
});
|
|
24
|
+
} catch {
|
|
25
|
+
s = void 0;
|
|
26
|
+
}
|
|
27
|
+
t.enqueue(e);
|
|
28
|
+
} });
|
|
29
|
+
return new Uint8Array(await new Response(i.body.pipeThrough(c)).arrayBuffer());
|
|
30
|
+
}
|
|
31
|
+
function s(e) {
|
|
32
|
+
if (!(e.length >= 4 && new DataView(e.buffer, e.byteOffset).getUint32(0) === r)) throw Error("TrueType 파일이 아닙니다");
|
|
33
|
+
return e;
|
|
34
|
+
}
|
|
35
|
+
var c = () => globalThis.crypto?.subtle;
|
|
36
|
+
async function l(e, t) {
|
|
37
|
+
if (e.length !== t.bytes) throw Error(`크기가 다릅니다: 받은 ${e.length}, 기대 ${t.bytes}바이트`);
|
|
38
|
+
let n = c();
|
|
39
|
+
if (n) {
|
|
40
|
+
let r = new Uint8Array(await n.digest("SHA-256", e)), i = Array.from(r, (e) => e.toString(16).padStart(2, "0")).join("");
|
|
41
|
+
if (i !== t.sha256.toLowerCase()) throw Error(`SHA-256이 다릅니다: 기대 ${t.sha256.slice(0, 8)}, 받은 ${i.slice(0, 8)}`);
|
|
42
|
+
}
|
|
43
|
+
return e;
|
|
44
|
+
}
|
|
45
|
+
async function u(e, t, r, i, c) {
|
|
46
|
+
let u = [];
|
|
47
|
+
for (let d of e) try {
|
|
48
|
+
let e = d.protocol === "file:" ? await a(d) : await o(d, t, r, i);
|
|
49
|
+
return s(e), c ? await l(e, c) : e;
|
|
50
|
+
} catch (e) {
|
|
51
|
+
if (t?.aborted) throw e;
|
|
52
|
+
u.push(`${n}를 받지 못했습니다(${e instanceof Error ? e.message : e}): ${d.href}`);
|
|
53
|
+
}
|
|
54
|
+
throw Error(u.join(" / "));
|
|
55
|
+
}
|
|
56
|
+
function d(e, t, r) {
|
|
57
|
+
let i = null, a, o = { load() {
|
|
58
|
+
if (i) return i;
|
|
59
|
+
let s = a?.deref();
|
|
60
|
+
if (s) return Promise.resolve(s);
|
|
61
|
+
let l;
|
|
62
|
+
try {
|
|
63
|
+
if (l = e.url === void 0 ? t() : [new URL(String(e.url), f())], !l?.length) throw Error();
|
|
64
|
+
} catch {
|
|
65
|
+
return Promise.reject(/* @__PURE__ */ Error(`${n} 주소가 없거나 올바르지 않아요(상대 주소는 기준 주소가 필요해요): ${e.url ?? ""}`));
|
|
66
|
+
}
|
|
67
|
+
let { integrity: d } = e, p = d === !1 ? void 0 : d ? {
|
|
68
|
+
bytes: d.size,
|
|
69
|
+
sha256: d.sha256
|
|
70
|
+
} : e.url === void 0 ? r : void 0, m = u(l, e.signal, e.onProgress, p?.bytes ?? 0, p);
|
|
71
|
+
return i = m, m.then((e) => {
|
|
72
|
+
i === m && (i = null, o.verified = p ? c() ? "sha256" : "size" : void 0, typeof WeakRef == "function" && (a = new WeakRef(e)));
|
|
73
|
+
}, () => {
|
|
74
|
+
i === m && (i = null);
|
|
75
|
+
}), m;
|
|
76
|
+
} };
|
|
77
|
+
return o;
|
|
78
|
+
}
|
|
79
|
+
function f() {
|
|
80
|
+
return typeof location > "u" ? void 0 : location.href;
|
|
81
|
+
}
|
|
82
|
+
// src/index.ts
|
|
83
|
+
var p = t, m = {
|
|
84
|
+
family: "Noto Sans SC",
|
|
85
|
+
version: "2.004",
|
|
86
|
+
license: "OFL-1.1",
|
|
87
|
+
axes: { wght: [100, 900] },
|
|
88
|
+
source: "https://github.com/google/fonts/tree/main/ofl/notosanssc",
|
|
89
|
+
bytes: e.bytes,
|
|
90
|
+
sha256: e.sha256
|
|
91
|
+
};
|
|
92
|
+
function h() {
|
|
93
|
+
return new URL("../fonts/NotoSansSC%5Bwght%5D.ttf", "" + import.meta.url);
|
|
94
|
+
}
|
|
95
|
+
function g(t = {}) {
|
|
96
|
+
return d(t, () => [h()], e);
|
|
97
|
+
}
|
|
98
|
+
var _ = g();
|
|
99
|
+
export { p as SIMPLIFIED_CHINESE_FONT_FILE, g as createSimplifiedChineseFont, _ as simplifiedChineseFont, m as simplifiedChineseFontInfo };
|
|
100
|
+
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface SimplifiedChineseFontOptions {
|
|
2
|
+
/** 폰트 파일 주소. 생략하면 패키지 안의 파일을 쓴다(CDN이면 `.../fonts/NotoSansSC%5Bwght%5D.ttf`). 주소를 주면 `integrity`를 따로 주지 않는 한 크기·해시 검사는 하지 않는다. */
|
|
3
|
+
url?: string | URL;
|
|
4
|
+
/**
|
|
5
|
+
* 받은 파일 검사. 생략하면 기본 주소(패키지 안 파일)만 우리 원본의 크기·SHA-256으로 검사한다. `false`면 검사하지 않고,
|
|
6
|
+
* `{ size, sha256 }`이면 주소와 상관없이 그 값으로 검사한다(직접 호스팅한 다른 빌드를 쓸 때).
|
|
7
|
+
*/
|
|
8
|
+
integrity?: false | {
|
|
9
|
+
size: number;
|
|
10
|
+
sha256: string;
|
|
11
|
+
};
|
|
12
|
+
/** 불러오기를 멈춘다. */
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
/**
|
|
15
|
+
* 받는 동안 진행 상황을 알린다(`fetch`가 스트림을 줄 때만 부른다. Node에서 파일을 읽을 때는 부르지 않는다). `total`은 기본
|
|
16
|
+
* 폰트 파일의 크기이고, `url`을 직접 줬으면 응답의 `Content-Length`(없으면 0)이다. 결과 바이트는 `onProgress` 유무와 상관없이 같다.
|
|
17
|
+
*/
|
|
18
|
+
onProgress?: (progress: {
|
|
19
|
+
loaded: number;
|
|
20
|
+
total: number;
|
|
21
|
+
}) => void;
|
|
22
|
+
}
|
|
23
|
+
/** `@maxgrid/export`의 `font` 옵션에 그대로 넘기는 폰트 원본. */
|
|
24
|
+
export interface SimplifiedChineseFont {
|
|
25
|
+
/**
|
|
26
|
+
* 폰트 파일 바이트. 부르는 동안과 쓰는 쪽이 들고 있는 동안만 기억한다(다 쓰면 메모리를 돌려주고, 다음에는 브라우저 캐시에서
|
|
27
|
+
* 다시 받는다). 17.8MB를 페이지가 끝날 때까지 붙들고 있지 않는다.
|
|
28
|
+
*/
|
|
29
|
+
load(): Promise<Uint8Array>;
|
|
30
|
+
/**
|
|
31
|
+
* 마지막으로 성공한 불러오기에서 확인한 수준: `'sha256'`(크기와 해시), `'size'`(해시를 못 쓰는 환경 — `http:` 페이지처럼
|
|
32
|
+
* `crypto.subtle`이 없을 때 — 이라 크기만), 검사하지 않았으면 `undefined`.
|
|
33
|
+
*/
|
|
34
|
+
readonly verified?: 'sha256' | 'size';
|
|
35
|
+
}
|
|
36
|
+
/** 받은 파일이 우리가 싣은 원본인지 확인하는 값. */
|
|
37
|
+
export interface FontCheck {
|
|
38
|
+
bytes: number;
|
|
39
|
+
sha256: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 간체 중국어 폰트 원본을 만든다. 파일은 `load()`가 불릴 때 읽는다. Node에서는 `file:` 주소를 파일로 읽고, 브라우저에서는
|
|
43
|
+
* `fetch`한다(주소 후보가 여럿이면 앞에서부터 시도한다). 읽는 중에는 같은 약속을 돌려주고, 끝난 뒤에는 쓰는 쪽이 들고 있는
|
|
44
|
+
* 동안만 기억한다(`WeakRef`). 실패는 기억하지 않아 다시 부를 수 있다.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createLoader(options: SimplifiedChineseFontOptions, defaultUrls: () => readonly URL[] | undefined, check?: FontCheck): SimplifiedChineseFont;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(){var e={bytes:17772300,sha256:`a3041811a78c361b1de50f953c805e0244951c21c5bd412f7232ef0d899af0da`},t=`간체 중국어 폰트`,n=65536,r=`node:fs/promises`;async function i(e){return(await import(r)).readFile(e)}async function a(e,t,n,r){let i=await fetch(e,{signal:t});if(!i.ok)throw Error(String(i.status));if(!n||!i.body||typeof TransformStream>`u`)return new Uint8Array(await i.arrayBuffer());let a=r||Number(i.headers.get(`content-length`))||0,o=0,s=n,c=new TransformStream({transform(e,t){o+=e.length;try{s?.({loaded:o,total:a})}catch{s=void 0}t.enqueue(e)}});return new Uint8Array(await new Response(i.body.pipeThrough(c)).arrayBuffer())}function o(e){if(!(e.length>=4&&new DataView(e.buffer,e.byteOffset).getUint32(0)===n))throw Error(`TrueType 파일이 아닙니다`);return e}var s=()=>globalThis.crypto?.subtle;async function c(e,t){if(e.length!==t.bytes)throw Error(`크기가 다릅니다: 받은 ${e.length}, 기대 ${t.bytes}바이트`);let n=s();if(n){let r=new Uint8Array(await n.digest(`SHA-256`,e)),i=Array.from(r,e=>e.toString(16).padStart(2,`0`)).join(``);if(i!==t.sha256.toLowerCase())throw Error(`SHA-256이 다릅니다: 기대 ${t.sha256.slice(0,8)}, 받은 ${i.slice(0,8)}`)}return e}async function l(e,n,r,s,l){let u=[];for(let d of e)try{let e=d.protocol===`file:`?await i(d):await a(d,n,r,s);return o(e),l?await c(e,l):e}catch(e){if(n?.aborted)throw e;u.push(`${t}를 받지 못했습니다(${e instanceof Error?e.message:e}): ${d.href}`)}throw Error(u.join(` / `))}function u(e,n,r){let i=null,a,o={load(){if(i)return i;let c=a?.deref();if(c)return Promise.resolve(c);let u;try{if(u=e.url===void 0?n():[new URL(String(e.url),d())],!u?.length)throw Error()}catch{return Promise.reject(Error(`${t} 주소가 없거나 올바르지 않아요(상대 주소는 기준 주소가 필요해요): ${e.url??``}`))}let{integrity:f}=e,p=f===!1?void 0:f?{bytes:f.size,sha256:f.sha256}:e.url===void 0?r:void 0,m=l(u,e.signal,e.onProgress,p?.bytes??0,p);return i=m,m.then(e=>{i===m&&(i=null,o.verified=p?s()?`sha256`:`size`:void 0,typeof WeakRef==`function`&&(a=new WeakRef(e)))},()=>{i===m&&(i=null)}),m}};return o}function d(){return typeof location>`u`?void 0:location.href}var f=typeof document<`u`&&document.currentScript?.src||``,p=`fonts/NotoSansSC%5Bwght%5D.ttf`,m=()=>{if(!f)return;let{origin:e,pathname:t}=new URL(f),n=/^https:\/\/(grid|cdn)\.maxmine\.com\/(cdn|maxgrid)\//.test(e+t),r=new URL((t.includes(`/dist/`)?`../`:`./`)+p,f).href,i=`https://cdn.jsdelivr.net/npm/@maxgrid/export-font-sc@1.3.2/${p}`;return[...new Set(n?[i]:[r,i])].map(e=>new URL(e))},h={};globalThis.MaxGridExportFontSc=Object.assign(u(h,m,e),{config:h})})();
|
|
Binary file
|
package/fonts/OFL.txt
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
https://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
package/package.json
CHANGED
|
@@ -1,6 +1,37 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maxgrid/export-font-sc",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "1.3.2",
|
|
4
|
+
"description": "PDF 내보내기용 간체 중국어 폰트(Noto Sans SC 원본, SIL OFL 1.1). 필요할 때만 불러오는 선택 설치 패키지.",
|
|
5
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
|
+
"homepage": "https://grid.maxmine.com",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"unpkg": "./dist/maxgrid.export-font-sc.min.js",
|
|
13
|
+
"jsdelivr": "./dist/maxgrid.export-font-sc.min.js",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./maxgrid.export-font-sc.min.js": "./dist/maxgrid.export-font-sc.min.js",
|
|
20
|
+
"./fonts/*": "./fonts/*",
|
|
21
|
+
"./package.json": "./package.json"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"!dist/**/*.map",
|
|
26
|
+
"fonts",
|
|
27
|
+
"NOTICE.md"
|
|
28
|
+
],
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "vite build && node scripts/build-iife.mjs && tsc -p tsconfig.build.json && node ../../tooling/strip-sourcemap-comment.mjs dist",
|
|
34
|
+
"test": "vitest run --passWithNoTests",
|
|
35
|
+
"typecheck": "tsc --noEmit"
|
|
36
|
+
}
|
|
6
37
|
}
|