@hjmds/design-contracts 0.8.2 → 0.9.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/LICENSE +21 -0
- package/README.md +17 -10
- package/dist/aspect-ratio.d.ts +31 -0
- package/dist/aspect-ratio.d.ts.map +1 -0
- package/dist/aspect-ratio.js +42 -0
- package/dist/aspect-ratio.js.map +1 -0
- package/dist/base-recipes.d.ts +1 -1
- package/dist/base-recipes.js +1 -1
- package/dist/base-recipes.js.map +1 -1
- package/dist/catalog.d.ts +102 -10
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +11 -5
- package/dist/catalog.js.map +1 -1
- package/dist/colors.d.ts +5 -1
- package/dist/colors.d.ts.map +1 -1
- package/dist/colors.js +7 -3
- package/dist/colors.js.map +1 -1
- package/dist/component-definitions.d.ts +3 -0
- package/dist/component-definitions.d.ts.map +1 -1
- package/dist/component-definitions.js +3 -0
- package/dist/component-definitions.js.map +1 -1
- package/dist/container.d.ts +40 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +43 -0
- package/dist/container.js.map +1 -0
- package/dist/icon-button-recipe.d.ts +1 -1
- package/dist/icon-button-recipe.js +1 -1
- package/dist/icon-button-recipe.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/recipes.d.ts +3 -0
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +3 -0
- package/dist/recipes.js.map +1 -1
- package/dist/semantic-colors.d.ts +5 -0
- package/dist/semantic-colors.d.ts.map +1 -1
- package/dist/semantic-colors.js +1 -0
- package/dist/semantic-colors.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/visually-hidden.d.ts +21 -0
- package/dist/visually-hidden.d.ts.map +1 -0
- package/dist/visually-hidden.js +20 -0
- package/dist/visually-hidden.js.map +1 -0
- package/docs/architecture.md +3 -2
- package/docs/aspect-ratio.md +25 -0
- package/docs/consumer-policy.md +177 -0
- package/docs/container.md +24 -0
- package/docs/cross-platform-core-normalization.md +24 -7
- package/docs/generated/component-maturity.md +11 -8
- package/docs/generated/renderer-evidence.json +257 -25
- package/docs/generated/renderer-evidence.md +16 -11
- package/docs/generated/showcase-manifest.json +141 -9
- package/docs/identity.md +5 -2
- package/docs/library-gap-analysis.md +65 -0
- package/docs/migration-0.6.md +4 -0
- package/docs/migration-0.9.1.md +15 -0
- package/docs/stable-core.md +26 -0
- package/docs/visually-hidden.md +20 -0
- package/package.json +25 -2
- package/docs/consumer-release-gate.md +0 -90
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 HJM Design System contributors
|
|
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
|
@@ -13,8 +13,14 @@ DOM event, focus trap 또는 navigation adapter를 렌더링하지 않고, 두
|
|
|
13
13
|
|
|
14
14
|
상세 원칙은 [`docs/identity.md`](./docs/identity.md), 계층·지원 단계·확장 계획은
|
|
15
15
|
[`docs/architecture.md`](./docs/architecture.md)에 정리되어 있습니다.
|
|
16
|
+
소비 앱의 의무, 성숙도별 채택 조건, 제품 어댑터와 예외 절차는
|
|
17
|
+
[`docs/consumer-policy.md`](./docs/consumer-policy.md)가 규정합니다.
|
|
18
|
+
정책 원문은 package export `@hjmds/design-contracts/consumer-policy.md`에도 포함되어 다음
|
|
19
|
+
patch release부터 독립 소비자 tooling이 설치된 package bytes에서 직접 검증할 수 있습니다.
|
|
16
20
|
외부 라이브러리에서 어떤 문제 분해 원칙만 가져오고 무엇을 복제하지 않는지는
|
|
17
21
|
[`docs/library-reference-decisions.md`](./docs/library-reference-decisions.md)에 기록합니다.
|
|
22
|
+
이번 공백 분석에서 추가한 `Container`, `AspectRatio`, `VisuallyHidden`의 선정 근거는
|
|
23
|
+
[`docs/library-gap-analysis.md`](./docs/library-gap-analysis.md)에 기록합니다.
|
|
18
24
|
Toast의 queue·announcement·timer 수명주기는 [`docs/toast.md`](./docs/toast.md)에 별도로
|
|
19
25
|
고정되어 있습니다.
|
|
20
26
|
|
|
@@ -65,14 +71,14 @@ artifact로 제출합니다.
|
|
|
65
71
|
- semantic color reference와 플랫폼 독립 resolver
|
|
66
72
|
- button, surface, field 및 확장 컴포넌트의 typed recipe
|
|
67
73
|
- shared/adaptive/web/native 범위와 stable/beta/planned/deprecated 상태를 담은 component catalog
|
|
68
|
-
-
|
|
74
|
+
- HJM 조직 surface용 기본 그라디언트와 접근성 계약 테스트
|
|
69
75
|
|
|
70
76
|
renderer 및 소비 앱 계층이 소유하는 것:
|
|
71
77
|
|
|
72
78
|
- React DOM 또는 React Native 컴포넌트와 이벤트 타입 (`@hjmds/react`, `@hjmds/react-native`)
|
|
73
79
|
- 제품별 저장 키와 사용자 설정 영속화
|
|
74
80
|
- 아이콘 라이브러리, 폰트 로딩, 애니메이션 구현
|
|
75
|
-
- 제품 전용
|
|
81
|
+
- 제품 전용 컴포넌트, 브랜드 표현과 의미 매핑
|
|
76
82
|
|
|
77
83
|
예를 들어 야구 팀 색상, 경기 상태, 스코어보드, 라인업, 야구장과 같은 야구 도메인
|
|
78
84
|
UI는 Yajalal이 소유합니다. 다른 제품의 기능 상태 역시 각 제품이 범용 `AccentTone`에
|
|
@@ -181,20 +187,21 @@ const successText = resolveColorReference(
|
|
|
181
187
|
나타내는 일반 의미 역할입니다.
|
|
182
188
|
- 저장 키, CSS 변수 이름, KBO 구단/경기 상태 같은 제품 의미는 각 앱에 남습니다.
|
|
183
189
|
|
|
184
|
-
##
|
|
190
|
+
## npm registry에서 설치
|
|
185
191
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
192
|
+
소비 저장소는 세 public package 중 필요한 contracts와 renderer를 npm registry에서
|
|
193
|
+
설치합니다. contracts와 renderer는 fixed release train이므로 같은 정확한 SemVer를
|
|
194
|
+
사용합니다.
|
|
189
195
|
|
|
190
196
|
```bash
|
|
191
|
-
pnpm add
|
|
197
|
+
pnpm add --save-exact @hjmds/design-contracts@<version> @hjmds/react@<version>
|
|
198
|
+
# React Native는 두 번째 package를 @hjmds/react-native로 바꿉니다.
|
|
192
199
|
```
|
|
193
200
|
|
|
194
201
|
`<version>`은 설치할 fixed release의 정확한 SemVer로 바꿉니다.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
202
|
+
Git tag와 release commit은 출처 추적용이며 package-manager dependency로 사용하지 않습니다.
|
|
203
|
+
과거 Git-path 소비자를 옮기는 절차는 역사 문서인
|
|
204
|
+
[`docs/migration-0.6.md`](./docs/migration-0.6.md)에만 남깁니다.
|
|
198
205
|
|
|
199
206
|
## 개발
|
|
200
207
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type AspectRatioPreset = "square" | "portrait" | "landscape" | "wide";
|
|
2
|
+
export type AspectRatioValue = AspectRatioPreset | number;
|
|
3
|
+
export type AspectRatioDescriptor = Readonly<{
|
|
4
|
+
ratio?: AspectRatioValue;
|
|
5
|
+
}>;
|
|
6
|
+
export type ResolvedAspectRatioDescriptor = Readonly<{
|
|
7
|
+
ratio: number;
|
|
8
|
+
source: AspectRatioPreset | "custom";
|
|
9
|
+
}>;
|
|
10
|
+
export declare const aspectRatioDefaults: {
|
|
11
|
+
readonly ratio: "wide";
|
|
12
|
+
};
|
|
13
|
+
export declare const aspectRatioRecipe: {
|
|
14
|
+
readonly slots: readonly ["root", "content"];
|
|
15
|
+
readonly defaults: {
|
|
16
|
+
readonly ratio: "wide";
|
|
17
|
+
};
|
|
18
|
+
readonly ratios: {
|
|
19
|
+
readonly square: 1;
|
|
20
|
+
readonly portrait: number;
|
|
21
|
+
readonly landscape: number;
|
|
22
|
+
readonly wide: number;
|
|
23
|
+
};
|
|
24
|
+
readonly sizing: {
|
|
25
|
+
readonly inline: "fill";
|
|
26
|
+
readonly block: "derive-from-ratio";
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export declare function validateAspectRatioValue(value: AspectRatioValue): void;
|
|
30
|
+
export declare function resolveAspectRatioDescriptor(descriptor?: AspectRatioDescriptor): ResolvedAspectRatioDescriptor;
|
|
31
|
+
//# sourceMappingURL=aspect-ratio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspect-ratio.d.ts","sourceRoot":"","sources":["../src/aspect-ratio.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;AAC7E,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,6BAA6B,GAAG,QAAQ,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,GAAG,QAAQ,CAAC;CACtC,CAAC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;CAEoB,CAAC;AAErD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;CAapB,CAAC;AASX,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAUtE;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,GAAE,qBAA0B,GACrC,6BAA6B,CAK/B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const aspectRatioDefaults = {
|
|
2
|
+
ratio: "wide",
|
|
3
|
+
};
|
|
4
|
+
export const aspectRatioRecipe = {
|
|
5
|
+
slots: ["root", "content"],
|
|
6
|
+
defaults: aspectRatioDefaults,
|
|
7
|
+
ratios: {
|
|
8
|
+
square: 1,
|
|
9
|
+
portrait: 3 / 4,
|
|
10
|
+
landscape: 4 / 3,
|
|
11
|
+
wide: 16 / 9,
|
|
12
|
+
},
|
|
13
|
+
sizing: {
|
|
14
|
+
inline: "fill",
|
|
15
|
+
block: "derive-from-ratio",
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
const presets = new Set([
|
|
19
|
+
"square",
|
|
20
|
+
"portrait",
|
|
21
|
+
"landscape",
|
|
22
|
+
"wide",
|
|
23
|
+
]);
|
|
24
|
+
export function validateAspectRatioValue(value) {
|
|
25
|
+
if (typeof value === "number") {
|
|
26
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
27
|
+
throw new RangeError("AspectRatio ratio must be a positive finite number");
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (!presets.has(value)) {
|
|
32
|
+
throw new TypeError(`Unsupported AspectRatio preset: ${String(value)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function resolveAspectRatioDescriptor(descriptor = {}) {
|
|
36
|
+
const value = descriptor.ratio ?? aspectRatioDefaults.ratio;
|
|
37
|
+
validateAspectRatioValue(value);
|
|
38
|
+
if (typeof value === "number")
|
|
39
|
+
return { ratio: value, source: "custom" };
|
|
40
|
+
return { ratio: aspectRatioRecipe.ratios[value], source: value };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=aspect-ratio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspect-ratio.js","sourceRoot":"","sources":["../src/aspect-ratio.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,MAAM;CACqC,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAU;IACnC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE;QACN,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC,GAAG,CAAC;QACf,SAAS,EAAE,CAAC,GAAG,CAAC;QAChB,IAAI,EAAE,EAAE,GAAG,CAAC;KACb;IACD,MAAM,EAAE;QACN,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,mBAAmB;KAC3B;CACO,CAAC;AAEX,MAAM,OAAO,GAAG,IAAI,GAAG,CAAoB;IACzC,QAAQ;IACR,UAAU;IACV,WAAW;IACX,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,UAAU,wBAAwB,CAAC,KAAuB;IAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,mCAAmC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,aAAoC,EAAE;IAEtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,mBAAmB,CAAC,KAAK,CAAC;IAC5D,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACzE,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC","sourcesContent":["export type AspectRatioPreset = \"square\" | \"portrait\" | \"landscape\" | \"wide\";\nexport type AspectRatioValue = AspectRatioPreset | number;\n\nexport type AspectRatioDescriptor = Readonly<{\n ratio?: AspectRatioValue;\n}>;\n\nexport type ResolvedAspectRatioDescriptor = Readonly<{\n ratio: number;\n source: AspectRatioPreset | \"custom\";\n}>;\n\nexport const aspectRatioDefaults = {\n ratio: \"wide\",\n} as const satisfies Required<AspectRatioDescriptor>;\n\nexport const aspectRatioRecipe = {\n slots: [\"root\", \"content\"] as const,\n defaults: aspectRatioDefaults,\n ratios: {\n square: 1,\n portrait: 3 / 4,\n landscape: 4 / 3,\n wide: 16 / 9,\n },\n sizing: {\n inline: \"fill\",\n block: \"derive-from-ratio\",\n },\n} as const;\n\nconst presets = new Set<AspectRatioPreset>([\n \"square\",\n \"portrait\",\n \"landscape\",\n \"wide\",\n]);\n\nexport function validateAspectRatioValue(value: AspectRatioValue): void {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError(\"AspectRatio ratio must be a positive finite number\");\n }\n return;\n }\n if (!presets.has(value)) {\n throw new TypeError(`Unsupported AspectRatio preset: ${String(value)}`);\n }\n}\n\nexport function resolveAspectRatioDescriptor(\n descriptor: AspectRatioDescriptor = {},\n): ResolvedAspectRatioDescriptor {\n const value = descriptor.ratio ?? aspectRatioDefaults.ratio;\n validateAspectRatioValue(value);\n if (typeof value === \"number\") return { ratio: value, source: \"custom\" };\n return { ratio: aspectRatioRecipe.ratios[value], source: value };\n}\n"]}
|
package/dist/base-recipes.d.ts
CHANGED
package/dist/base-recipes.js
CHANGED
|
@@ -5,7 +5,7 @@ export const buttonRecipe = {
|
|
|
5
5
|
defaults: { tone: "primary", size: "medium" },
|
|
6
6
|
tones: {
|
|
7
7
|
primary: { background: "primary", content: "onPrimary", border: null },
|
|
8
|
-
secondary: { background: "surfaceAlt", content: "text", border: "
|
|
8
|
+
secondary: { background: "surfaceAlt", content: "text", border: "textSub" },
|
|
9
9
|
ghost: { background: null, content: "textMuted", border: null },
|
|
10
10
|
danger: { background: "dangerFill", content: "onDanger", border: null },
|
|
11
11
|
link: { background: null, content: "contentBrand", border: null },
|
package/dist/base-recipes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-recipes.js","sourceRoot":"","sources":["../src/base-recipes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWpF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAU;IACnE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAW;IACtD,KAAK,EAAE;QACL,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;QACtE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"base-recipes.js","sourceRoot":"","sources":["../src/base-recipes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWpF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAU;IACnE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAW;IACtD,KAAK,EAAE;QACL,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;QACtE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;QAC3E,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;QAC/D,MAAM,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;QACvE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE;KAClE;IACD,KAAK,EAAE;QACL,KAAK,EAAE;YACL,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK;YACpC,iBAAiB,EAAE,OAAO,CAAC,EAAE;YAC7B,WAAW,EAAE,OAAO;SACrB;QACD,MAAM,EAAE;YACN,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;YACnC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM;YACrC,iBAAiB,EAAE,OAAO,CAAC,EAAE;YAC7B,WAAW,EAAE,MAAM;SACpB;QACD,KAAK,EAAE;YACL,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK;YACpC,iBAAiB,EAAE,OAAO,CAAC,EAAE;YAC7B,WAAW,EAAE,WAAW;SACzB;KACF;IACD,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;CAsB1C,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE;QACP,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,KAAK;KACpB;IACD,MAAM,EAAE;QACN,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,KAAK;KACpB;IACD,MAAM,EAAE;QACN,UAAU,EAAE,eAAe;QAC3B,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,KAAK;KACpB;IACD,MAAM,EAAE;QACN,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,IAAI;KACnB;CAUF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE;QACL,MAAM;QACN,OAAO;QACP,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,MAAM;QACN,OAAO;KACC;IACV,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAW;IAC1D,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAClC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC5B;IACD,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,MAAM;KACb;IACD,MAAM,EAAE;QACN,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QAC7B,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;QACnC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;KAC9B;IACD,SAAS,EAAE,OAAO,CAAC,cAAc;IACjC,kBAAkB,EAAE,EAAE;IACtB,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,CAAC;IACjB,eAAe,EAAE,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC,EAAE;IAC7B,eAAe,EAAE,OAAO,CAAC,EAAE;IAC3B,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE;QACL,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,GAAG,EAAE,OAAO,CAAC,EAAE;KAChB;IACD,OAAO,EAAE;QACP,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,OAAO;QACpB,GAAG,EAAE,CAAC;KACP;IACD,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IACnC,eAAe,EAAE,GAAG;CAgCrB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,KAAK;CAMhB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE;IACjC,KAAK,EAAE,MAAM;CAId,CAAC","sourcesContent":["import type { ThemeColors } from \"./colors.js\";\nimport { control, fontWeight, radius, spacing, typography } from \"./foundations.js\";\nimport type { FontWeightValue, TextVariant } from \"./foundations.js\";\n\nexport type ButtonTone = \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"link\";\nexport type ButtonSize = keyof typeof control.buttonHeight;\nexport type SurfaceTone = \"default\" | \"raised\" | \"accent\" | \"subtle\";\nexport type SurfacePadding = \"none\" | keyof typeof spacing;\nexport type SurfaceRadius = keyof typeof radius;\nexport type FieldVariant = \"surface\" | \"inset\";\nexport type FieldShape = \"medium\" | \"large\" | \"full\";\n\n/** Small renderer entry point for the three foundational visual recipes. */\nexport const buttonRecipe = {\n slots: [\"root\", \"leading\", \"label\", \"trailing\", \"spinner\"] as const,\n defaults: { tone: \"primary\", size: \"medium\" } as const,\n tones: {\n primary: { background: \"primary\", content: \"onPrimary\", border: null },\n secondary: { background: \"surfaceAlt\", content: \"text\", border: \"textSub\" },\n ghost: { background: null, content: \"textMuted\", border: null },\n danger: { background: \"dangerFill\", content: \"onDanger\", border: null },\n link: { background: null, content: \"contentBrand\", border: null },\n },\n sizes: {\n small: {\n height: control.buttonHeight.small,\n hitSlop: control.buttonHitSlop.small,\n paddingHorizontal: spacing.sm,\n textVariant: \"label\",\n },\n medium: {\n height: control.buttonHeight.medium,\n hitSlop: control.buttonHitSlop.medium,\n paddingHorizontal: spacing.md,\n textVariant: \"body\",\n },\n large: {\n height: control.buttonHeight.large,\n hitSlop: control.buttonHitSlop.large,\n paddingHorizontal: spacing.lg,\n textVariant: \"bodyLarge\",\n },\n },\n opacity: { disabled: 0.5, pressed: 0.86 },\n} as const satisfies {\n slots: readonly string[];\n defaults: { tone: ButtonTone; size: ButtonSize };\n tones: Record<\n ButtonTone,\n {\n background: keyof ThemeColors | null;\n content: keyof ThemeColors;\n border: keyof ThemeColors | null;\n }\n >;\n sizes: Record<\n ButtonSize,\n {\n height: number;\n hitSlop: number;\n paddingHorizontal: number;\n textVariant: TextVariant;\n }\n >;\n opacity: { disabled: number; pressed: number };\n};\n\nexport const surfaceRecipe = {\n default: {\n background: \"surface\",\n border: \"border\",\n borderAlpha: 1,\n elevated: false,\n borderAlways: false,\n },\n raised: {\n background: \"bg\",\n border: \"border\",\n borderAlpha: 1,\n elevated: true,\n borderAlways: false,\n },\n accent: {\n background: \"surfaceAccent\",\n border: \"primary\",\n borderAlpha: 0.3,\n elevated: false,\n borderAlways: false,\n },\n subtle: {\n background: \"bg\",\n border: \"border\",\n borderAlpha: 1,\n elevated: false,\n borderAlways: true,\n },\n} as const satisfies Record<\n SurfaceTone,\n {\n background: keyof ThemeColors;\n border: keyof ThemeColors;\n borderAlpha: number;\n elevated: boolean;\n borderAlways: boolean;\n }\n>;\n\nexport const fieldRecipe = {\n slots: [\n \"root\",\n \"label\",\n \"control\",\n \"leading\",\n \"input\",\n \"trailing\",\n \"hint\",\n \"error\",\n ] as const,\n defaults: { variant: \"surface\", shape: \"medium\" } as const,\n variants: {\n surface: { background: \"surface\" },\n inset: { background: \"bg\" },\n },\n shapes: {\n medium: \"md\",\n large: \"lg\",\n full: \"full\",\n },\n states: {\n idle: { border: \"textMuted\" },\n focused: { border: \"contentBrand\" },\n invalid: { border: \"danger\" },\n },\n minHeight: control.minTouchTarget,\n multilineMinHeight: 80,\n borderWidth: 1,\n focusRingWidth: 2,\n focusRingOffset: 2,\n paddingHorizontal: spacing.md,\n paddingVertical: spacing.sm,\n textVariant: \"body\",\n label: {\n color: \"textBody\",\n textVariant: \"body\",\n fontWeight: fontWeight.semibold,\n gap: spacing.xs,\n },\n support: {\n hintColor: \"textMuted\",\n errorColor: \"danger\",\n textVariant: \"label\",\n gap: 6,\n },\n placeholder: { color: \"textMuted\" },\n disabledOpacity: 0.6,\n} as const satisfies {\n slots: readonly string[];\n defaults: { variant: FieldVariant; shape: FieldShape };\n variants: Record<FieldVariant, { background: keyof ThemeColors }>;\n shapes: Record<FieldShape, keyof typeof radius>;\n states: Record<\n \"idle\" | \"focused\" | \"invalid\",\n { border: keyof ThemeColors }\n >;\n minHeight: number;\n multilineMinHeight: number;\n borderWidth: number;\n focusRingWidth: number;\n focusRingOffset: number;\n paddingHorizontal: number;\n paddingVertical: number;\n textVariant: keyof typeof typography;\n label: {\n color: keyof ThemeColors;\n textVariant: keyof typeof typography;\n fontWeight: FontWeightValue;\n gap: number;\n };\n support: {\n hintColor: keyof ThemeColors;\n errorColor: keyof ThemeColors;\n textVariant: keyof typeof typography;\n gap: number;\n };\n placeholder: { color: keyof ThemeColors };\n disabledOpacity: number;\n};\n\n/**\n * Renderer-neutral Surface geometry. Tone colors stay in `surfaceRecipe` for\n * compatibility; these axes make the previously implicit Web/Native defaults\n * explicit without changing that public recipe shape.\n */\nexport const surfaceDefaults = {\n tone: \"default\",\n padding: \"none\",\n radius: \"lg\",\n bordered: false,\n} as const satisfies {\n tone: SurfaceTone;\n padding: SurfacePadding;\n radius: SurfaceRadius;\n bordered: boolean;\n};\n\nexport const surfaceGeometry = {\n paddings: { none: 0, ...spacing },\n radii: radius,\n} as const satisfies {\n paddings: Record<SurfacePadding, number>;\n radii: Record<SurfaceRadius, number>;\n};\n"]}
|
package/dist/catalog.d.ts
CHANGED
|
@@ -78,8 +78,8 @@ export declare const componentCatalog: readonly [{
|
|
|
78
78
|
}, {
|
|
79
79
|
readonly recipe: "surfaceRecipe";
|
|
80
80
|
readonly surfaceStatus: {
|
|
81
|
-
readonly web: "
|
|
82
|
-
readonly native: "
|
|
81
|
+
readonly web: "stable";
|
|
82
|
+
readonly native: "stable";
|
|
83
83
|
};
|
|
84
84
|
readonly name: "Surface";
|
|
85
85
|
readonly category: "layout";
|
|
@@ -116,6 +116,34 @@ export declare const componentCatalog: readonly [{
|
|
|
116
116
|
readonly category: "layout";
|
|
117
117
|
readonly platform: "shared";
|
|
118
118
|
readonly status: "beta";
|
|
119
|
+
}, {
|
|
120
|
+
readonly roadmap: {
|
|
121
|
+
readonly state: "evidence-needed";
|
|
122
|
+
readonly summary: string;
|
|
123
|
+
};
|
|
124
|
+
readonly recipe: "containerRecipe";
|
|
125
|
+
readonly surfaceStatus: {
|
|
126
|
+
readonly web: "beta";
|
|
127
|
+
readonly native: "beta";
|
|
128
|
+
};
|
|
129
|
+
readonly name: "Container";
|
|
130
|
+
readonly category: "layout";
|
|
131
|
+
readonly platform: "shared";
|
|
132
|
+
readonly status: "beta";
|
|
133
|
+
}, {
|
|
134
|
+
readonly roadmap: {
|
|
135
|
+
readonly state: "evidence-needed";
|
|
136
|
+
readonly summary: string;
|
|
137
|
+
};
|
|
138
|
+
readonly recipe: "aspectRatioRecipe";
|
|
139
|
+
readonly surfaceStatus: {
|
|
140
|
+
readonly web: "beta";
|
|
141
|
+
readonly native: "beta";
|
|
142
|
+
};
|
|
143
|
+
readonly name: "AspectRatio";
|
|
144
|
+
readonly category: "layout";
|
|
145
|
+
readonly platform: "shared";
|
|
146
|
+
readonly status: "beta";
|
|
119
147
|
}, {
|
|
120
148
|
readonly roadmap: {
|
|
121
149
|
readonly state: "evidence-needed";
|
|
@@ -178,8 +206,8 @@ export declare const componentCatalog: readonly [{
|
|
|
178
206
|
}, {
|
|
179
207
|
readonly recipe: "buttonRecipe";
|
|
180
208
|
readonly surfaceStatus: {
|
|
181
|
-
readonly web: "
|
|
182
|
-
readonly native: "
|
|
209
|
+
readonly web: "stable";
|
|
210
|
+
readonly native: "stable";
|
|
183
211
|
};
|
|
184
212
|
readonly name: "Button";
|
|
185
213
|
readonly category: "action";
|
|
@@ -236,8 +264,8 @@ export declare const componentCatalog: readonly [{
|
|
|
236
264
|
readonly recipe: "fieldRecipe";
|
|
237
265
|
readonly behavior: "field";
|
|
238
266
|
readonly surfaceStatus: {
|
|
239
|
-
readonly web: "
|
|
240
|
-
readonly native: "
|
|
267
|
+
readonly web: "stable";
|
|
268
|
+
readonly native: "stable";
|
|
241
269
|
};
|
|
242
270
|
readonly name: "Field";
|
|
243
271
|
readonly category: "input";
|
|
@@ -257,8 +285,8 @@ export declare const componentCatalog: readonly [{
|
|
|
257
285
|
}, {
|
|
258
286
|
readonly recipe: "fieldRecipe";
|
|
259
287
|
readonly surfaceStatus: {
|
|
260
|
-
readonly web: "
|
|
261
|
-
readonly native: "
|
|
288
|
+
readonly web: "stable";
|
|
289
|
+
readonly native: "stable";
|
|
262
290
|
};
|
|
263
291
|
readonly name: "TextArea";
|
|
264
292
|
readonly category: "input";
|
|
@@ -1207,6 +1235,21 @@ export declare const componentCatalog: readonly [{
|
|
|
1207
1235
|
readonly category: "utility";
|
|
1208
1236
|
readonly platform: "web";
|
|
1209
1237
|
readonly status: "planned";
|
|
1238
|
+
}, {
|
|
1239
|
+
readonly roadmap: {
|
|
1240
|
+
readonly state: "evidence-needed";
|
|
1241
|
+
readonly summary: string;
|
|
1242
|
+
};
|
|
1243
|
+
readonly recipe: "visuallyHiddenRecipe";
|
|
1244
|
+
readonly aliases: readonly ["ScreenReaderOnly", "SrOnly"];
|
|
1245
|
+
readonly surfaceStatus: {
|
|
1246
|
+
readonly web: "beta";
|
|
1247
|
+
readonly native: "unsupported";
|
|
1248
|
+
};
|
|
1249
|
+
readonly name: "VisuallyHidden";
|
|
1250
|
+
readonly category: "utility";
|
|
1251
|
+
readonly platform: "web";
|
|
1252
|
+
readonly status: "beta";
|
|
1210
1253
|
}];
|
|
1211
1254
|
export type ComponentName = (typeof componentCatalog)[number]["name"];
|
|
1212
1255
|
export declare function summarizeComponentRoadmap(entries?: readonly ComponentCatalogEntry[]): Readonly<Record<ComponentRoadmapState, number>>;
|
|
@@ -1922,6 +1965,41 @@ export declare const recipeRegistry: {
|
|
|
1922
1965
|
readonly decorative: true;
|
|
1923
1966
|
};
|
|
1924
1967
|
};
|
|
1968
|
+
readonly aspectRatioRecipe: {
|
|
1969
|
+
readonly slots: readonly ["root", "content"];
|
|
1970
|
+
readonly defaults: {
|
|
1971
|
+
readonly ratio: "wide";
|
|
1972
|
+
};
|
|
1973
|
+
readonly ratios: {
|
|
1974
|
+
readonly square: 1;
|
|
1975
|
+
readonly portrait: number;
|
|
1976
|
+
readonly landscape: number;
|
|
1977
|
+
readonly wide: number;
|
|
1978
|
+
};
|
|
1979
|
+
readonly sizing: {
|
|
1980
|
+
readonly inline: "fill";
|
|
1981
|
+
readonly block: "derive-from-ratio";
|
|
1982
|
+
};
|
|
1983
|
+
};
|
|
1984
|
+
readonly containerRecipe: {
|
|
1985
|
+
readonly slots: readonly ["root"];
|
|
1986
|
+
readonly defaults: {
|
|
1987
|
+
readonly size: "content";
|
|
1988
|
+
readonly gutter: "regular";
|
|
1989
|
+
};
|
|
1990
|
+
readonly maxWidths: {
|
|
1991
|
+
readonly reading: 720;
|
|
1992
|
+
readonly content: 1200;
|
|
1993
|
+
readonly full: null;
|
|
1994
|
+
};
|
|
1995
|
+
readonly gutters: {
|
|
1996
|
+
readonly none: 0;
|
|
1997
|
+
readonly compact: 16;
|
|
1998
|
+
readonly regular: 20;
|
|
1999
|
+
readonly spacious: 24;
|
|
2000
|
+
};
|
|
2001
|
+
readonly alignment: "inline-center";
|
|
2002
|
+
};
|
|
1925
2003
|
readonly calendarRecipe: {
|
|
1926
2004
|
readonly slots: readonly ["root", "header", "monthLabel", "previousMonth", "nextMonth", "weekdayRow", "weekdayLabel", "grid", "week", "day", "dayLabel", "content"];
|
|
1927
2005
|
readonly defaults: {
|
|
@@ -2062,7 +2140,7 @@ export declare const recipeRegistry: {
|
|
|
2062
2140
|
readonly secondary: {
|
|
2063
2141
|
readonly background: "surfaceAlt";
|
|
2064
2142
|
readonly content: "text";
|
|
2065
|
-
readonly border: "
|
|
2143
|
+
readonly border: "textSub";
|
|
2066
2144
|
};
|
|
2067
2145
|
readonly ghost: {
|
|
2068
2146
|
readonly background: null;
|
|
@@ -3265,7 +3343,7 @@ export declare const recipeRegistry: {
|
|
|
3265
3343
|
}>;
|
|
3266
3344
|
readonly border: Readonly<{
|
|
3267
3345
|
source: "theme";
|
|
3268
|
-
key: "
|
|
3346
|
+
key: "textSub";
|
|
3269
3347
|
alpha?: number;
|
|
3270
3348
|
}>;
|
|
3271
3349
|
};
|
|
@@ -7153,6 +7231,20 @@ export declare const recipeRegistry: {
|
|
|
7153
7231
|
readonly disabledOpacity: 0.5;
|
|
7154
7232
|
};
|
|
7155
7233
|
};
|
|
7234
|
+
readonly visuallyHiddenRecipe: {
|
|
7235
|
+
readonly slots: readonly ["root"];
|
|
7236
|
+
readonly geometry: {
|
|
7237
|
+
readonly width: 1;
|
|
7238
|
+
readonly height: 1;
|
|
7239
|
+
readonly margin: -1;
|
|
7240
|
+
readonly border: 0;
|
|
7241
|
+
readonly padding: 0;
|
|
7242
|
+
};
|
|
7243
|
+
readonly clipping: "inset(50%)";
|
|
7244
|
+
readonly overflow: "hidden";
|
|
7245
|
+
readonly position: "absolute";
|
|
7246
|
+
readonly whiteSpace: "nowrap";
|
|
7247
|
+
};
|
|
7156
7248
|
};
|
|
7157
7249
|
export type RecipeName = keyof typeof recipeRegistry;
|
|
7158
7250
|
//# sourceMappingURL=catalog.d.ts.map
|
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,cAAc,GACd,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;AAC3E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAChD,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,aAAa,CAAC;AACrE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAC7C,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,CACjD,CAAC;AACF,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,UAAU,GACV,iBAAiB,GACjB,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAE5D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,iFAAiF;IACjF,MAAM,EAAE,eAAe,CAAC;IACxB;;;;OAIG;IACH,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,qFAAqF;IACrF,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;IAC/C,kFAAkF;IAClF,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAwBH;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,gBAAgB,GACxB,sBAAsB,CAKxB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EjB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,cAAc,CAAC"}
|
package/dist/catalog.js
CHANGED
|
@@ -37,22 +37,24 @@ export function getComponentSurfaceStatus(entry, surface) {
|
|
|
37
37
|
export const componentCatalog = [
|
|
38
38
|
{ name: "Text", category: "foundation", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "textRecipe" },
|
|
39
39
|
{ name: "Icon", category: "foundation", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "iconRecipe" },
|
|
40
|
-
{ name: "Surface", category: "layout", platform: "shared", status: "stable", ...surfaceMaturity("
|
|
40
|
+
{ name: "Surface", category: "layout", platform: "shared", status: "stable", ...surfaceMaturity("stable", "stable"), recipe: "surfaceRecipe" },
|
|
41
41
|
{ name: "Divider", category: "layout", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "dividerRecipe" },
|
|
42
42
|
{ name: "Section", category: "layout", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "sectionRecipe" },
|
|
43
43
|
{ name: "Stack", category: "layout", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "stackRecipe", aliases: ["Flex", "Space", "Inline"] },
|
|
44
|
+
{ name: "Container", category: "layout", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "containerRecipe", ...evidenceNeeded("Radix·Chakra·MUI·Mantine의 layout inventory를 비교해 공통 content-width primitive로 채택했습니다. Web/RN renderer와 환경 행렬 증거를 연결했고 실제 제품의 넓은 화면 채택 뒤 stable을 검토합니다.") },
|
|
45
|
+
{ name: "AspectRatio", category: "layout", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "aspectRatioRecipe", ...evidenceNeeded("Radix·Chakra·Mantine·Carbon에서 반복되는 media geometry 문제를 shared primitive로 채택했습니다. 제품이 object-fit을 소유하고 renderer는 비율만 보장합니다.") },
|
|
44
46
|
{ name: "Grid", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "gridRecipe", ...evidenceNeeded("공통 window class·responsive value·row-major geometry 계약과 공식 Web/RN default renderer 증거가 연결됐습니다. 안정화에는 환경별·제품 사용 증거가 더 필요합니다.") },
|
|
45
47
|
{ name: "Layout", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), aliases: ["AppShell"], recipe: "layoutRecipe", behavior: "layout", ...evidenceNeeded("공통 descriptor를 소비하는 Web landmark·skip-link renderer와 Native ordered-region renderer가 기본 실행 증거를 제공합니다. 실제 product shell·보조기기 증거가 쌓이면 stable을 검토합니다.") },
|
|
46
48
|
{ name: "Masonry", category: "layout", platform: "adaptive", status: "planned", ...surfaceMaturity("planned", "planned"), ...evidenceNeeded("실제 waterfall 피드가 생기면 측정·패킹의 renderer 경계를 검증합니다.") },
|
|
47
49
|
{ name: "Splitter", category: "layout", platform: "web", status: "planned", ...surfaceMaturity("planned", "unsupported"), aliases: ["SplitPane"], recipe: "splitterRecipe", behavior: "splitter", ...contractReady("분할 크기·키보드 조절 계약은 준비됐고 Web vertical slice를 기다립니다.") },
|
|
48
|
-
{ name: "Button", category: "action", platform: "shared", status: "stable", ...surfaceMaturity("
|
|
50
|
+
{ name: "Button", category: "action", platform: "shared", status: "stable", ...surfaceMaturity("stable", "stable"), recipe: "buttonRecipe" },
|
|
49
51
|
{ name: "IconButton", category: "action", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "iconButtonRecipe" },
|
|
50
52
|
{ name: "Link", category: "action", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "linkRecipe", behavior: "link" },
|
|
51
53
|
{ name: "BottomCTA", category: "action", platform: "native", status: "beta", ...surfaceMaturity("unsupported", "beta"), recipe: "bottomCtaRecipe" },
|
|
52
54
|
{ name: "FloatingActionButton", category: "action", platform: "adaptive", status: "planned", ...surfaceMaturity("planned", "planned"), recipe: "floatingActionButtonRecipe", behavior: "floatingActionButton", aliases: ["FloatButton", "FAB"], ...contractReady("배치·확장 action·안전 영역 계약은 준비됐고 제품 적용을 기다립니다.") },
|
|
53
|
-
{ name: "Field", category: "input", platform: "shared", status: "stable", ...surfaceMaturity("
|
|
55
|
+
{ name: "Field", category: "input", platform: "shared", status: "stable", ...surfaceMaturity("stable", "stable"), recipe: "fieldRecipe", behavior: "field" },
|
|
54
56
|
{ name: "SearchField", category: "input", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "searchFieldRecipe", behavior: "searchField" },
|
|
55
|
-
{ name: "TextArea", category: "input", platform: "shared", status: "stable", ...surfaceMaturity("
|
|
57
|
+
{ name: "TextArea", category: "input", platform: "shared", status: "stable", ...surfaceMaturity("stable", "stable"), recipe: "fieldRecipe" },
|
|
56
58
|
{ name: "PasswordField", category: "input", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), aliases: ["Input.Password"], recipe: "passwordFieldRecipe", behavior: "passwordField", ...evidenceNeeded("Web·Native renderer와 기본 실행·Storybook 증거가 연결됐습니다. 실제 로그인·가입 흐름과 암호 관리자 증거가 쌓이면 stable을 검토합니다.") },
|
|
57
59
|
{ name: "OtpField", category: "input", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), aliases: ["Input.OTP"], recipe: "otpFieldRecipe", behavior: "otpField", ...evidenceNeeded("하나의 접근 가능한 입력을 유지하는 Web·Native renderer와 기본 실행·Storybook 증거가 연결됐습니다. 실제 인증 흐름과 보조기기 증거가 더 필요합니다.") },
|
|
58
60
|
{ name: "Checkbox", category: "input", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "selectionControlRecipe", behavior: "checkbox" },
|
|
@@ -126,6 +128,7 @@ export const componentCatalog = [
|
|
|
126
128
|
{ name: "BorderBeam", category: "utility", platform: "web", status: "planned", ...surfaceMaturity("planned", "unsupported"), ...declined("장식으로 브랜드를 증명하지 않는다는 정체성과 충돌하고, reduced motion에서 남는 것이 없으며, 없어도 화면의 뜻이 같다") },
|
|
127
129
|
{ name: "DesignSystemProvider", category: "provider", platform: "shared", status: "beta", ...surfaceMaturity("beta", "beta"), aliases: ["ConfigProvider"], nonVisualEvidence: "provider-adapter", ...evidenceNeeded("두 실제 제품의 Web/RN Context adapter가 environment+palette와 parent axis 상속을 소비합니다. 추가 제품 릴리스 증거가 쌓이면 stable을 검토합니다.") },
|
|
128
130
|
{ name: "Utility", category: "utility", platform: "web", status: "planned", ...surfaceMaturity("planned", "unsupported"), aliases: ["Util"], ...declined("antd Util은 theme.useToken()으로 토큰을 읽는 법을 설명하는 문서 페이지다. 이 패키지는 토큰을 정적 export로 주므로 그 문제가 발생하지 않는다") },
|
|
131
|
+
{ name: "VisuallyHidden", category: "utility", platform: "web", status: "beta", ...surfaceMaturity("beta", "unsupported"), recipe: "visuallyHiddenRecipe", aliases: ["ScreenReaderOnly", "SrOnly"], ...evidenceNeeded("Chakra와 React Aria가 별도 접근성 primitive로 제공하는 문제를 Web에서 채택했습니다. Native는 중복 invisible node 대신 host accessibilityLabel/accessibilityHint를 사용하므로 의도적으로 지원하지 않습니다.") },
|
|
129
132
|
];
|
|
130
133
|
export function summarizeComponentRoadmap(entries = componentCatalog) {
|
|
131
134
|
return entries.reduce((summary, entry) => {
|
|
@@ -140,7 +143,7 @@ export function summarizeComponentRoadmap(entries = componentCatalog) {
|
|
|
140
143
|
declined: 0,
|
|
141
144
|
});
|
|
142
145
|
}
|
|
143
|
-
import { accordionRecipe, alertDialogRecipe, avatarRecipe, badgeRecipe, bottomNavigationRecipe, bottomCtaRecipe, breadcrumbRecipe, calendarRecipe, cardRecipe, buttonRecipe, carouselRecipe, chipRecipe, comboboxRecipe, descriptionListRecipe, counterBadgeRecipe, dialogRecipe, dataTableRecipe, datePickerRecipe, dividerRecipe, formRecipe, emptyStateRecipe, fieldRecipe, filePickerRecipe, iconButtonRecipe, iconRecipe, imageRecipe, linkRecipe, listRecipe, listRowRecipe, loadMoreRecipe, menuRecipe, noticeRecipe, paginationRecipe, popoverRecipe, numberFieldRecipe, progressRecipe, resultRecipe, searchFieldRecipe, selectRecipe, selectionGroupRecipe, sectionRecipe, segmentedControlRecipe, selectionControlRecipe, sheetRecipe, sidePanelRecipe, commandPaletteRecipe, layoutRecipe, otpFieldRecipe, passwordFieldRecipe, splitterRecipe, tourRecipe, transferListRecipe, skeletonRecipe, sliderRecipe, spinnerRecipe, stackRecipe, statisticRecipe, stepsRecipe, surfaceRecipe, switchRecipe, tabsRecipe, tagRecipe, textRecipe, timelineRecipe, toastRecipe, tooltipRecipe, topBarRecipe, treeRecipe, uploadItemRecipe, } from "./recipes.js";
|
|
146
|
+
import { accordionRecipe, alertDialogRecipe, avatarRecipe, badgeRecipe, bottomNavigationRecipe, bottomCtaRecipe, breadcrumbRecipe, aspectRatioRecipe, containerRecipe, calendarRecipe, cardRecipe, buttonRecipe, carouselRecipe, chipRecipe, comboboxRecipe, descriptionListRecipe, counterBadgeRecipe, dialogRecipe, dataTableRecipe, datePickerRecipe, dividerRecipe, formRecipe, emptyStateRecipe, fieldRecipe, filePickerRecipe, iconButtonRecipe, iconRecipe, imageRecipe, linkRecipe, listRecipe, listRowRecipe, loadMoreRecipe, menuRecipe, noticeRecipe, paginationRecipe, popoverRecipe, numberFieldRecipe, progressRecipe, resultRecipe, searchFieldRecipe, selectRecipe, selectionGroupRecipe, sectionRecipe, segmentedControlRecipe, selectionControlRecipe, sheetRecipe, sidePanelRecipe, commandPaletteRecipe, layoutRecipe, otpFieldRecipe, passwordFieldRecipe, splitterRecipe, tourRecipe, transferListRecipe, skeletonRecipe, sliderRecipe, spinnerRecipe, stackRecipe, statisticRecipe, stepsRecipe, surfaceRecipe, switchRecipe, tabsRecipe, tagRecipe, textRecipe, timelineRecipe, toastRecipe, tooltipRecipe, topBarRecipe, treeRecipe, uploadItemRecipe, visuallyHiddenRecipe, } from "./recipes.js";
|
|
144
147
|
import { floatingActionButtonRecipe } from "./floating-action-button.js";
|
|
145
148
|
import { gridRecipe } from "./grid.js";
|
|
146
149
|
/** One typed registry prevents catalog recipe names from drifting into strings. */
|
|
@@ -152,6 +155,8 @@ export const recipeRegistry = {
|
|
|
152
155
|
bottomNavigationRecipe,
|
|
153
156
|
bottomCtaRecipe,
|
|
154
157
|
breadcrumbRecipe,
|
|
158
|
+
aspectRatioRecipe,
|
|
159
|
+
containerRecipe,
|
|
155
160
|
calendarRecipe,
|
|
156
161
|
cardRecipe,
|
|
157
162
|
buttonRecipe,
|
|
@@ -216,5 +221,6 @@ export const recipeRegistry = {
|
|
|
216
221
|
topBarRecipe,
|
|
217
222
|
treeRecipe,
|
|
218
223
|
uploadItemRecipe,
|
|
224
|
+
visuallyHiddenRecipe,
|
|
219
225
|
};
|
|
220
226
|
//# sourceMappingURL=catalog.js.map
|