@things-factory/figure-service 10.1.210 → 10.1.213
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 +1 -1
- package/dist-server/service/figure/event-subscriber.js +2 -2
- package/dist-server/service/figure/event-subscriber.js.map +1 -1
- package/dist-server/service/figure/figure-format.js +1 -1
- package/dist-server/service/figure/figure-format.js.map +1 -1
- package/dist-server/service/figure/figure-mutation.d.ts +5 -5
- package/dist-server/service/figure/figure-mutation.js +6 -6
- package/dist-server/service/figure/figure-mutation.js.map +1 -1
- package/dist-server/service/figure/figure-query.d.ts +3 -3
- package/dist-server/service/figure/figure-query.js +4 -4
- package/dist-server/service/figure/figure-query.js.map +1 -1
- package/dist-server/service/figure/figure-rename.d.ts +4 -4
- package/dist-server/service/figure/figure-rename.js +2 -2
- package/dist-server/service/figure/figure-rename.js.map +1 -1
- package/dist-server/service/figure/figure-tools.js +9 -9
- package/dist-server/service/figure/figure-tools.js.map +1 -1
- package/dist-server/service/figure/figure-type.d.ts +2 -2
- package/dist-server/service/figure/figure-type.js +2 -2
- package/dist-server/service/figure/figure-type.js.map +1 -1
- package/dist-server/service/figure/figure.d.ts +2 -2
- package/dist-server/service/figure/figure.js +1 -1
- package/dist-server/service/figure/figure.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/recipes/belt-surface/guide.ko.md +1 -1
- package/recipes/roller-row/facts.md +1 -1
- package/recipes/roller-row/guide.ko.md +1 -1
- package/recipes/sliding-door/facts.md +1 -1
- package/recipes/sliding-door/guide.ko.md +1 -1
- package/server/service/figure/catalog-db.test.ts +1 -1
- package/server/service/figure/event-subscriber.ts +2 -2
- package/server/service/figure/figure-blueprint-query.test.ts +3 -3
- package/server/service/figure/figure-format.test.ts +7 -7
- package/server/service/figure/figure-format.ts +1 -1
- package/server/service/figure/figure-llm-smoke.test.ts +1 -1
- package/server/service/figure/figure-mutation.ts +6 -6
- package/server/service/figure/figure-propose-steps.test.ts +2 -2
- package/server/service/figure/figure-query.ts +4 -4
- package/server/service/figure/figure-rename-db.test.ts +2 -2
- package/server/service/figure/figure-rename.test.ts +3 -3
- package/server/service/figure/figure-rename.ts +6 -6
- package/server/service/figure/figure-subject.test.ts +1 -1
- package/server/service/figure/figure-tools.test.ts +19 -19
- package/server/service/figure/figure-tools.ts +9 -9
- package/server/service/figure/figure-type.ts +2 -2
- package/server/service/figure/figure.ts +2 -2
- package/translations/ko.json +31 -31
|
@@ -20,7 +20,7 @@ import { Domain, longTextColumn } from '@things-factory/shell'
|
|
|
20
20
|
*
|
|
21
21
|
* `Board` 를 준용한다. 다른 점만 주석으로 적는다.
|
|
22
22
|
*
|
|
23
|
-
* ## 무엇을 담나 —
|
|
23
|
+
* ## 무엇을 담나 — 피규어 자산이다, 씬 모델이 아니다
|
|
24
24
|
*
|
|
25
25
|
* 형식은 `@hatiolab/figure-model` 이 정한다(`figure-asset-1`). 씬 컴포넌트 트리를 담지 않는다.
|
|
26
26
|
* 컴파일한 것도 저장하지 않는다 — 원본에서 파생되므로 소비하는 쪽이 커널로 컴파일한다. 저장하면 원본과 갈린다.
|
|
@@ -124,7 +124,7 @@ export class Figure {
|
|
|
124
124
|
/**
|
|
125
125
|
* 분류 하나. **팔레트에서 묶어 보이는 기준이다.**
|
|
126
126
|
*
|
|
127
|
-
*
|
|
127
|
+
* 피규어 하나에 하나뿐이다 — 팔레트는 목록을 한 벌로 나눠 보여 주므로, 한 피규어가 두 묶음에
|
|
128
128
|
* 동시에 있으면 저작자가 같은 것을 두 번 만난다.
|
|
129
129
|
*/
|
|
130
130
|
@Column({ nullable: true })
|
package/translations/ko.json
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
{
|
|
2
|
-
"error.figure-proposal-failed": "
|
|
2
|
+
"error.figure-proposal-failed": "피규어를 만들지 못했습니다.",
|
|
3
3
|
"error.figure-release-does-not-compile": "{type} 의 발행판({version})이 지금 컴파일되지 않습니다. 저작 화면에서 열어 수정한 후 다시 발행해야 보드에 나옵니다.",
|
|
4
4
|
"figure.gate.parts-off-placement-face.how": "'{part}' 부품을 Y 로 {mm}mm 옮겨 그 면을 평면에 맞추거나, 장착면을 다른 면으로 다시 정하세요.",
|
|
5
5
|
"figure.gate.parts-off-placement-face.message": "장착면으로 정한 '{part}' 부품의 면이 놓이는 평면에서 {mm}mm 떨어져 있습니다.",
|
|
6
|
-
"figure.gate.parts-off-placement-face.why": "
|
|
6
|
+
"figure.gate.parts-off-placement-face.why": "피규어는 그 면으로 놓인다고 선언돼 있습니다. 닿지 않으면 도면에서 그만큼 떠 보이고, 자리에 놓인 물건도 함께 뜹니다.",
|
|
7
7
|
"figure.gate.parts-split-on-resize.how": "{parts} 부품을 올려 둔 부품의 면에 붙이거나, 반응형 탭의 「위치」에서 「여기에 고정」을 누르면 크기를 바꿔도 제자리에 있습니다.",
|
|
8
8
|
"figure.gate.parts-split-on-resize.message": "크기를 {axes} 로 {factor}배로 하면 {parts} 부품이 나머지에서 떨어집니다.",
|
|
9
|
-
"figure.gate.parts-split-on-resize.why": "다른 크기로 놓으면 그 부품이 공중에 떠 보입니다. 보는 사람에게는 부서진
|
|
10
|
-
"figure.gate.sizing-not-uniform.how": "{parts} 부품이
|
|
11
|
-
"figure.gate.sizing-not-uniform.message": "이
|
|
12
|
-
"figure.gate.sizing-not-uniform.why": "균일한 비율로 확대되는
|
|
9
|
+
"figure.gate.parts-split-on-resize.why": "다른 크기로 놓으면 그 부품이 공중에 떠 보입니다. 보는 사람에게는 부서진 피규어입니다.",
|
|
10
|
+
"figure.gate.sizing-not-uniform.how": "{parts} 부품이 피규어 크기에 비례하도록 반응형 탭의 「위치」에서 「크기에 비례」를 설정해 주세요. 치수가 고정된 부품은 같은 비율로 확대되지 않습니다.",
|
|
11
|
+
"figure.gate.sizing-not-uniform.message": "이 피규어는 한 비율로 커지는데, 크기를 {axes} 로 {factor}배로 하면 {parts} 부품은 같이 커지지 않습니다.",
|
|
12
|
+
"figure.gate.sizing-not-uniform.why": "균일한 비율로 확대되는 피규어는 부품 간 비율이 유지됩니다. 치수나 위치가 고정된 부품은 다른 부품과 정렬이 어긋날 수 있습니다.",
|
|
13
13
|
"figure.gate.placement-face-tilted.how": "평면과 나란한 면을 장착면으로 다시 정하거나, '{part}' 부품을 바로 세우세요.",
|
|
14
14
|
"figure.gate.placement-face-tilted.message": "장착면으로 정한 '{part}' 부품의 면이 놓이는 평면에서 {degrees}° 기울어 있습니다.",
|
|
15
|
-
"figure.gate.placement-face-tilted.why": "기운 면은 평면에 닿을 수 없어서,
|
|
16
|
-
"figure.gate.type-is-placeholder.how": "타입 항목에
|
|
15
|
+
"figure.gate.placement-face-tilted.why": "기운 면은 평면에 닿을 수 없어서, 피규어가 어떤 자세로 놓이는지 정해지지 않습니다.",
|
|
16
|
+
"figure.gate.type-is-placeholder.how": "타입 항목에 피규어 타입을 지정한 후 발행해 주세요.",
|
|
17
17
|
"figure.gate.type-is-placeholder.message": "'{type}' 타입은 처음 저장할 때 붙은 임시 타입입니다.",
|
|
18
|
-
"figure.gate.type-is-placeholder.why": "보드는 이 타입으로
|
|
18
|
+
"figure.gate.type-is-placeholder.why": "보드는 이 타입으로 피규어를 부르고, 발행한 뒤에는 바꿀 수 없습니다.",
|
|
19
19
|
"figure.gate.released-not-compared.message": "직전 발행본과 비교하지 못했습니다. 현재는 발행본 간 비교를 지원하지 않습니다.",
|
|
20
20
|
"figure.gate.released-not-compared.why": "이번 발행이 기존에 배치된 인스턴스와 호환되는지 확인되지 않았습니다.",
|
|
21
|
-
"figure.gate.contract.gone.how": "기존 정의를 복원하거나 새
|
|
21
|
+
"figure.gate.contract.gone.how": "기존 정의를 복원하거나 새 피규어 타입으로 발행해 주세요. 새 타입으로 발행하면 기존에 배치된 피규어는 이전 정의를 유지합니다.",
|
|
22
22
|
"figure.gate.contract.placement-changed.message": "배치 기준이 {before} 에서 {after} 로 바뀌었습니다.",
|
|
23
23
|
"figure.gate.contract.placement-changed.why": "놓인 인스턴스의 높이를 배치 기준이 정합니다. 놓인 것이 모두 함께 옮겨 갑니다.",
|
|
24
|
-
"figure.gate.contract.size-inputs-gone.message": "
|
|
24
|
+
"figure.gate.contract.size-inputs-gone.message": "피규어가 더 이상 도면에서 받은 크기를 따르지 않습니다.",
|
|
25
25
|
"figure.gate.contract.size-inputs-gone.why": "놓인 인스턴스는 도면에서 크기를 맞춰 두었습니다. 이 발행 뒤에는 모두 저작한 크기로 그려집니다.",
|
|
26
|
-
"figure.gate.contract.size-inputs-added.message": "
|
|
26
|
+
"figure.gate.contract.size-inputs-added.message": "피규어가 이제 도면에서 받은 크기를 따릅니다.",
|
|
27
27
|
"figure.gate.contract.size-inputs-added.why": "놓인 인스턴스가 이제 도면의 제 크기를 따릅니다.",
|
|
28
28
|
"figure.gate.contract.size-range-narrowed.message": "{input} 의 크기 범위가 {before} 에서 {after} 로 좁아졌습니다.",
|
|
29
29
|
"figure.gate.contract.size-range-narrowed.why": "새 범위 밖의 크기로 놓인 인스턴스는 그려지지 않습니다. 어떤 크기로 놓였는지는 기록되지 않습니다.",
|
|
@@ -55,11 +55,11 @@
|
|
|
55
55
|
"figure.gate.contract.capability-gone.why": "씬이 이 이름으로 동작을 붙입니다. 놓인 인스턴스가 그 동작을 잃습니다.",
|
|
56
56
|
"figure.gate.contract.capability-added.message": "'{name}' 능력이 새로 생겼습니다.",
|
|
57
57
|
"figure.gate.contract.capability-added.why": "사용 가능한 기능이 추가됩니다. 기존 인스턴스의 상태는 유지됩니다.",
|
|
58
|
-
"figure.gate.contract.size-changed.message": "
|
|
59
|
-
"figure.gate.contract.size-changed.why": "보드는 이 크기의 상자로
|
|
58
|
+
"figure.gate.contract.size-changed.message": "피규어의 크기가 바뀌었습니다: {before} → {after}.",
|
|
59
|
+
"figure.gate.contract.size-changed.why": "보드는 이 크기의 상자로 피규어를 놓습니다. 이 발행본으로 옮기면 상자가 바뀝니다.",
|
|
60
60
|
"figure.gate.contract.motion-range-changed.message": "움직일 때 쓸어 가는 공간이 바뀌었습니다: {before} → {after}.",
|
|
61
|
-
"figure.gate.contract.motion-range-changed.why": "
|
|
62
|
-
"figure.gate.contract.contact-face-changed.message": "
|
|
61
|
+
"figure.gate.contract.motion-range-changed.why": "피규어가 움직이며 닿는 곳입니다. 이 발행본으로 옮기면 닿는 곳이 달라집니다.",
|
|
62
|
+
"figure.gate.contract.contact-face-changed.message": "피규어가 붙는 면이 바뀌었습니다.",
|
|
63
63
|
"figure.gate.contract.contact-face-changed.why": "이 발행본을 적용하면 새로운 접촉면을 기준으로 배치됩니다.",
|
|
64
64
|
"figure.gate.contract.public-input-gone.message": "'{input}' 값은 이제 보드에서 정할 수 없습니다.",
|
|
65
65
|
"figure.gate.contract.public-input-gone.why": "놓인 인스턴스가 준 값은 이 발행본부터 아무 일도 하지 않습니다.",
|
|
@@ -88,25 +88,25 @@
|
|
|
88
88
|
"figure.gate.off-mounting-plane.floor.clear.message": "'{part}' 부품이 바닥에서 {mm}mm 떠 있습니다.",
|
|
89
89
|
"figure.gate.off-mounting-plane.floor.through.message": "'{part}' 부품이 바닥 아래로 {mm}mm 내려가 있습니다.",
|
|
90
90
|
"figure.gate.off-mounting-plane.floor.beyond.message": "모든 부품이 바닥 아래에 있습니다.",
|
|
91
|
-
"figure.gate.off-mounting-plane.floor.why": "보드는 이
|
|
91
|
+
"figure.gate.off-mounting-plane.floor.why": "보드는 이 피규어를 바닥에 세웁니다. 어느 보드에서나 지금 모습 그대로 놓입니다.",
|
|
92
92
|
"figure.gate.off-mounting-plane.floor.beyond.how": "천장에 매다는 설비라면 놓이는 곳을 천장으로 바꿉니다.",
|
|
93
93
|
"figure.gate.off-mounting-plane.ceiling.clear.message": "'{part}' 부품이 천장에서 {mm}mm 아래에 있습니다.",
|
|
94
94
|
"figure.gate.off-mounting-plane.ceiling.through.message": "'{part}' 부품이 천장 위로 {mm}mm 올라가 있습니다.",
|
|
95
95
|
"figure.gate.off-mounting-plane.ceiling.beyond.message": "모든 부품이 천장 위에 있습니다.",
|
|
96
|
-
"figure.gate.off-mounting-plane.ceiling.why": "보드는 이
|
|
96
|
+
"figure.gate.off-mounting-plane.ceiling.why": "보드는 이 피규어를 천장에 매답니다. 어느 보드에서나 지금 모습 그대로 놓입니다.",
|
|
97
97
|
"figure.gate.off-mounting-plane.ceiling.beyond.how": "바닥에 세우는 설비라면 놓이는 곳을 바닥으로 바꿉니다.",
|
|
98
98
|
"figure.gate.off-mounting-plane.wall.clear.message": "'{part}' 부품이 벽에서 {mm}mm 떨어져 있습니다.",
|
|
99
99
|
"figure.gate.off-mounting-plane.wall.through.message": "'{part}' 부품이 벽 안으로 {mm}mm 들어가 있습니다.",
|
|
100
100
|
"figure.gate.off-mounting-plane.wall.beyond.message": "모든 부품이 벽 뒤에 있습니다.",
|
|
101
|
-
"figure.gate.off-mounting-plane.wall.why": "보드는 이
|
|
101
|
+
"figure.gate.off-mounting-plane.wall.why": "보드는 이 피규어를 벽에 붙입니다. 어느 보드에서나 지금 모습 그대로 놓입니다.",
|
|
102
102
|
"figure.gate.off-mounting-plane.wall.beyond.how": "부품을 벽 앞으로 옮기거나 놓이는 곳을 다시 고릅니다.",
|
|
103
103
|
"figure.gate.off-mounting-plane.how": "의도한 것이면 그대로 둡니다. 아니면 그 부품을 장착 평면에 붙이거나, 평면에 닿도록 옮깁니다.",
|
|
104
|
-
"error.figure-namespace-missing": "이 도메인에는 기본
|
|
105
|
-
"error.figure-namespace-invalid": "
|
|
106
|
-
"error.figure-type-malformed": "{type} 은
|
|
104
|
+
"error.figure-namespace-missing": "이 도메인에는 기본 피규어 namespace 가 없습니다. 먼저 namespace 를 추가해 주세요.",
|
|
105
|
+
"error.figure-namespace-invalid": "피규어 namespace 형식이 아닙니다({value}). 영문 소문자·숫자·점·하이픈으로 입력해 주세요. 예: hatiolab.com",
|
|
106
|
+
"error.figure-type-malformed": "{type} 은 피규어 type 이 아닙니다. 소문자로 시작하고 소문자·숫자·하이픈 하나씩만 써서 {min}~{max}자로 정해 주세요.",
|
|
107
107
|
"error.figure-name-malformed": "{type} 은 namespace/type 형식의 정식 이름이 아닙니다.",
|
|
108
108
|
"error.figure-not-released": "이 도메인에 발행판이 없습니다.",
|
|
109
|
-
"error.figure-names-too-many": "
|
|
109
|
+
"error.figure-names-too-many": "피규어 이름은 한 번에 {max}개까지 물을 수 있습니다({count}개).",
|
|
110
110
|
"error.figure-package-size": "패키지에 포함할 수 있는 발행본은 1~{max}개입니다. 현재 {count}개가 지정되어 있습니다.",
|
|
111
111
|
"error.figure-ref-malformed": "{ref} 은 namespace/type@버전 형식의 발행판 참조가 아닙니다.",
|
|
112
112
|
"error.figure-package-release-not-found": "{ref} 은 이 도메인에서 읽을 수 있는 발행판이 아닙니다.",
|
|
@@ -117,20 +117,20 @@
|
|
|
117
117
|
"error.figure-mesh-extension": "보드가 아직 이 파일을 그리지 못합니다: {extensions} 가 필요합니다. 그 압축 없이 내보내 다시 업로드해 주세요.",
|
|
118
118
|
"error.figure-mesh-empty": "파일에 그릴 메시가 없습니다.",
|
|
119
119
|
"error.figure-mesh-too-large": "파일이 {max} MB 보다 큽니다. 보드가 부품 하나에 내려받는 최대 크기입니다. 줄여서 다시 업로드해 주세요.",
|
|
120
|
-
"error.figure-mesh-missing": "이
|
|
120
|
+
"error.figure-mesh-missing": "이 피규어가 쓰는 메시 파일({hash})이 이 도메인에 없습니다. 파일을 다시 업로드해 주세요.",
|
|
121
121
|
"error.figure-package-mesh-missing": "{ref} 가 쓰는 메시 파일({hash})이 이 서버에 없어 묶을 수 없습니다.",
|
|
122
122
|
"figure.gate.contract.data-field-gone.message": "'{id}' 데이터 필드가 없어졌습니다.",
|
|
123
123
|
"figure.gate.contract.data-field-gone.why": "보드는 데이터를 이 ID에 대응합니다. 이 발행 뒤에는 그 데이터가 아무것도 움직이지 않습니다.",
|
|
124
124
|
"figure.gate.contract.data-field-kind-changed.message": "'{id}' 데이터 필드가 {before} 에서 {after} 로 바뀌었습니다.",
|
|
125
125
|
"figure.gate.contract.data-field-kind-changed.why": "대응한 데이터는 이전 종류나 단위로 쓰였습니다. 이 발행 뒤에는 같은 데이터가 거절되거나 다른 뜻이 됩니다.",
|
|
126
126
|
"figure.gate.contract.data-field-narrowed.message": "'{id}' 데이터 필드가 받는 값이 줄었습니다: {before} → {after}.",
|
|
127
|
-
"figure.gate.contract.data-field-narrowed.why": "더 받지 않는 값이 든 데이터는 통째로 거절되고,
|
|
127
|
+
"figure.gate.contract.data-field-narrowed.why": "더 받지 않는 값이 든 데이터는 통째로 거절되고, 피규어는 직전 모습을 유지합니다.",
|
|
128
128
|
"figure.gate.contract.data-field-added.message": "'{id}' 데이터 필드가 새로 생겼습니다.",
|
|
129
129
|
"figure.gate.contract.data-field-added.why": "보드에서 데이터 매핑을 설정하기 전까지 기본값이 적용됩니다.",
|
|
130
130
|
"figure.gate.contract.data-field-label-changed.message": "'{id}' 데이터 필드의 이름이 '{after}' 이름으로 바뀌었습니다.",
|
|
131
131
|
"figure.gate.contract.data-field-label-changed.why": "대응은 ID로 하므로 그대로 동작합니다.",
|
|
132
132
|
"figure.gate.contract.data-field-default-changed.message": "'{id}' 데이터 필드의 기본값이 {before} 에서 {after} 로 바뀌었습니다.",
|
|
133
|
-
"figure.gate.contract.data-field-default-changed.why": "데이터나 저장된 값이 없는
|
|
133
|
+
"figure.gate.contract.data-field-default-changed.why": "데이터나 저장된 값이 없는 피규어는 발행 후 변경된 기본값에 따라 표시됩니다.",
|
|
134
134
|
"figure.gate.contract.data-bindings-changed.message": "데이터가 움직이는 대상(바인딩)이 바뀌었습니다.",
|
|
135
135
|
"figure.gate.contract.data-bindings-changed.why": "이 발행 뒤에는 같은 데이터가 다른 자세, 색, 클립을 만듭니다.",
|
|
136
136
|
"figure.gate.contract.motion-group-gone.message": "'{group}' 동작 그룹이 없어졌습니다.",
|
|
@@ -156,13 +156,13 @@
|
|
|
156
156
|
"figure.proposal.label-create": "{name} 만들기",
|
|
157
157
|
"figure.proposal.label-revise": "{name} 수정",
|
|
158
158
|
"figure.proposal.reason": "명령 {steps}개 · 등급 {grade} · 삼각형 {triangles} · {attempts}번에 만들었다",
|
|
159
|
-
"error.figure-released-not-deletable": "{type} 은 발행한
|
|
160
|
-
"error.figure-namespace-taken": "
|
|
161
|
-
"error.figure-namespace-not-owned": "이 도메인은
|
|
162
|
-
"error.figure-namespace-suspended": "
|
|
159
|
+
"error.figure-released-not-deletable": "{type} 은 발행한 피규어라 지울 수 없습니다.",
|
|
160
|
+
"error.figure-namespace-taken": "피규어 namespace {namespace} 는 이 서버에서 이미 쓰고 있습니다.",
|
|
161
|
+
"error.figure-namespace-not-owned": "이 도메인은 피규어 namespace {namespace} 를 갖고 있지 않습니다.",
|
|
162
|
+
"error.figure-namespace-suspended": "피규어 namespace {namespace} 는 쉬는 중입니다.",
|
|
163
163
|
"error.figure-namespace-default-suspended": "기본 namespace {namespace} 는 쉬게 할 수 없습니다. 먼저 다른 namespace 를 기본으로 정해 주세요.",
|
|
164
164
|
"error.figure-namespace-state": "{state} 는 namespace 상태가 아닙니다. active 나 suspended 를 쓰세요.",
|
|
165
|
-
"error.figure-public-unreleased": "{type} 은 아직 발행하지 않았습니다. 발행한
|
|
165
|
+
"error.figure-public-unreleased": "{type} 은 아직 발행하지 않았습니다. 발행한 피규어만 공개할 수 있습니다.",
|
|
166
166
|
"error.figure-category-fixed": "분류 {category}은(는) 최초 지정 후 변경할 수 없습니다.",
|
|
167
167
|
"error.figure-category-unknown": "{category}은(는) 지원하지 않는 분류입니다. {allowed} 중 하나를 선택해 주세요.",
|
|
168
168
|
"error.figure-category-missing": "{type}의 분류가 지정되지 않았습니다. 발행하기 전에 {allowed} 중 하나를 선택해 주세요."
|