@hjmds/design-contracts 1.28.0 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth-screen.d.ts +6 -0
- package/dist/auth-screen.d.ts.map +1 -1
- package/dist/auth-screen.js +4 -1
- package/dist/auth-screen.js.map +1 -1
- package/dist/catalog.d.ts +308 -0
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +42 -0
- package/dist/catalog.js.map +1 -1
- package/dist/component-definitions.d.ts +22 -0
- package/dist/component-definitions.d.ts.map +1 -1
- package/dist/component-definitions.js +23 -0
- package/dist/component-definitions.js.map +1 -1
- package/dist/component-recipes.d.ts.map +1 -1
- package/dist/component-recipes.js +5 -2
- package/dist/component-recipes.js.map +1 -1
- package/dist/screen-patterns.d.ts +94 -1
- package/dist/screen-patterns.d.ts.map +1 -1
- package/dist/screen-patterns.js +51 -0
- package/dist/screen-patterns.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/docs/generated/component-maturity.md +26 -4
- package/docs/generated/renderer-evidence.json +3229 -1051
- package/docs/generated/renderer-evidence.md +47 -3
- package/docs/generated/showcase-manifest.json +1057 -1
- package/docs/screen-patterns.md +8 -1
- package/docs/usage/SELECTION.md +1 -0
- package/docs/usage/components/auth-screen-layout.md +22 -5
- package/docs/usage/components/chat-screen.md +1 -0
- package/docs/usage/components/comment-thread-screen.md +2 -0
- package/docs/usage/components/dialog.md +1 -0
- package/docs/usage/components/editor-screen.md +1 -0
- package/docs/usage/components/field.md +1 -0
- package/docs/usage/components/list-detail-screen.md +1 -0
- package/docs/usage/components/list.md +20 -0
- package/docs/usage/components/onboarding-screen.md +1 -0
- package/docs/usage/components/screen-layout.md +25 -0
- package/docs/usage/components/search-field.md +1 -0
- package/docs/usage/components/search-screen.md +3 -1
- package/docs/usage/components/sheet.md +1 -0
- package/docs/usage/components/skeleton.md +2 -1
- package/docs/usage/components/text-area.md +1 -0
- package/package.json +1 -1
package/dist/auth-screen.d.ts
CHANGED
|
@@ -59,6 +59,12 @@ export type AuthScreenHeroDescriptor = Readonly<{
|
|
|
59
59
|
/** 정책 링크 한 개. 목적지와 문구는 제품 소유다. */
|
|
60
60
|
export type AuthScreenPolicyLinkDescriptor = Readonly<{
|
|
61
61
|
label: string;
|
|
62
|
+
/**
|
|
63
|
+
* Supplementary announcement after the label, e.g. the product's localized "opens in browser" (Web aria-describedby
|
|
64
|
+
* text / RN accessibilityHint). The visible label stays the link's name; spint dropped its hint when it adopted
|
|
65
|
+
* AuthScreenFooter because the links had no slot for it (2026-10-17).
|
|
66
|
+
*/
|
|
67
|
+
accessibilityHint?: string;
|
|
62
68
|
}>;
|
|
63
69
|
export declare const authScreenDefaults: {
|
|
64
70
|
readonly density: "regular";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-screen.d.ts","sourceRoot":"","sources":["../src/auth-screen.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C;;;OAGG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,YAAY,EAAE,sBAAsB,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,kCAAkC;AAClC,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-screen.d.ts","sourceRoot":"","sources":["../src/auth-screen.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C;;;OAGG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,YAAY,EAAE,sBAAsB,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,kCAAkC;AAClC,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;CAGoB,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;IAI3B,yDAAyD;;;IAGzD;;;;;OAKG;;;;;;;;;;;;;;;;;;;;QAMD,gDAAgD;;;;;;;IAGlD,+CAA+C;;;;;;;IAG/C;;;;;;OAMG;;;;;;;;;;;;;;;IAQH,qDAAqD;;;;;;;;;;;;;;;;;;;;;;;;CAuB7C,CAAC;AAIX,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAUnF;AAQD,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAU3F;AAED,iEAAiE;AACjE,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,SAAS,8BAA8B,EAAE,GAAG,IAAI,CAQpG;AAED,wBAAgB,2BAA2B,CACzC,UAAU,GAAE,oBAAyB,GACpC,4BAA4B,CAe9B;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;CAkBM,CAAC"}
|
package/dist/auth-screen.js
CHANGED
|
@@ -106,8 +106,11 @@ export function validateAuthScreenPolicyLinks(links) {
|
|
|
106
106
|
if (!Array.isArray(links) || links.length === 0) {
|
|
107
107
|
throw new TypeError("AuthScreen footer needs at least one policy link");
|
|
108
108
|
}
|
|
109
|
-
for (const link of links)
|
|
109
|
+
for (const link of links) {
|
|
110
110
|
assertNonEmpty(link?.label, "policy link label");
|
|
111
|
+
if (link.accessibilityHint !== undefined)
|
|
112
|
+
assertNonEmpty(link.accessibilityHint, "policy link accessibilityHint");
|
|
113
|
+
}
|
|
111
114
|
}
|
|
112
115
|
export function resolveAuthScreenDescriptor(descriptor = {}) {
|
|
113
116
|
validateAuthScreenDescriptor(descriptor);
|
package/dist/auth-screen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-screen.js","sourceRoot":"","sources":["../src/auth-screen.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport { authProviderButtonRecipe } from \"./provider-button.js\";\nimport { control, layout, radius, spacing, typography } from \"./foundations.js\";\n\n/**\n * 로그인 화면의 골격이다. 제품이 화면을 다시 조립하지 않게 **배치만** 소유한다.\n *\n * 왜 골격인가: 계정이 있는 제품들이 같은 화면을 각자 만들었고, 같은 실수를 각자 했다.\n * 번뚝은 로고·태그라인·설명 두 줄·동의 고지·정책 링크를 위에서부터 쌓아 제공자 버튼을\n * 화면 밖으로 밀어냈고(2026-09-19 iPhone 17 Pro 실측), 그 배치를 따라한 다른 제품도 같은\n * 순서로 쌓였다. 간격과 최대 폭은 제품마다 다를 이유가 없는데 제품마다 다시 정해졌다.\n *\n * 그래서 **두 영역**만 강제한다. 위 영역(`hero` + `main`)은 남는 세로 공간을 전부 차지하고\n * 그 안에서 가운데 정렬한다. 아래 영역(`footer`)은 바닥에 붙는다. 세 영역 이상으로 나누지\n * 않는 이유는, 셋이 되는 순간 어느 것이 주 행동인지가 배치로 드러나지 않아서다.\n *\n * **HJM이 소유하는 것**: 영역 구분, 간격, 최대 폭, 가운데 정렬, 내용이 길어질 때의 스크롤 전환.\n * **제품이 소유하는 것**: 마크 자산, 모든 문구, 제공자 목록과 순서, 정책 링크의 목적지,\n * 그리고 `main`에 무엇을 넣을지(제공자 버튼만, 또는 가입 재개·심사자 입력 같은 제품 덩어리).\n *\n * 이 계약은 화면을 **그리지 않는다.** `AuthProviderButton`·`BottomInfo`·`Agreement`처럼 이미\n * 있는 컴포넌트를 제품이 슬롯에 넣는다. 화면 전체를 한 컴포넌트로 받으면 제품마다 다른\n * 부분(다에리의 중단 거래 복구, 번뚝의 심사자 폼)을 전부 슬롯으로 되돌려 받아야 해서,\n * 결국 이름만 붙은 Stack이 된다.\n */\nexport type AuthScreenDensity = \"compact\" | \"regular\";\n\nexport type AuthScreenDescriptor = Readonly<{\n /**\n * 세로 공간이 좁은 기기에서 간격을 줄인다. 제품이 화면 높이를 보고 고르며, HJM은\n * 기기 종류를 추측하지 않는다(같은 폭이라도 키보드가 올라오면 좁아진다).\n */\n density?: AuthScreenDensity;\n /** 아래 영역(동의 고지·정책 링크)을 둘지. 계정 생성이 없는 화면은 없을 수 있다. */\n hasFooter?: boolean;\n}>;\n\nexport type ResolvedAuthScreenDescriptor = Readonly<{\n density: AuthScreenDensity;\n hasFooter: boolean;\n /** 위 영역 안쪽 간격(마크→제목→설명→주 행동). */\n heroGap: number;\n /** 위 영역과 주 행동 사이. */\n mainGap: number;\n /** 아래 영역을 띄우는 최소 간격. 화면이 길면 그 이상 벌어진다. */\n footerGap: number;\n paddingInline: number;\n paddingBlock: number;\n maxWidth: number;\n /** 히어로 제목의 글자 단계. `AuthScreenHero`가 이 값으로 그린다. */\n titleVariant: AuthScreenTitleVariant;\n}>;\n\nexport type AuthScreenTitleVariant = \"heading\" | \"titleLarge\";\n\n/**\n * 히어로 문구. 문자열은 전부 제품 소유이고, 글자 단계·색·간격은 `authScreenRecipe.hero`가 소유한다.\n * 마크 자산은 렌더러의 `mark` 슬롯으로 받는다.\n */\nexport type AuthScreenHeroDescriptor = Readonly<{\n title: string;\n eyebrow?: string;\n description?: string;\n /** 문서 구조상의 제목 단계. 로그인 화면이 라우트의 첫 제목이므로 기본은 1이다. */\n headingLevel?: 1 | 2 | 3;\n}>;\n\n/** 정책 링크 한 개. 목적지와 문구는 제품 소유다. */\nexport type AuthScreenPolicyLinkDescriptor = Readonly<{ label: string }>;\n\nexport const authScreenDefaults = {\n density: \"regular\",\n hasFooter: true,\n} as const satisfies Required<AuthScreenDescriptor>;\n\n/**\n * 최대 폭 26rem(416)은 `Container`의 reading(720)보다 좁다. 제공자 버튼이 노트북 폭만큼\n * 길어지면 누를 곳이 아니라 띠로 보이기 때문이고, 이 화면의 내용은 버튼 한 줄기뿐이라\n * 읽기 폭을 쓸 이유가 없다.\n */\nexport const authScreenRecipe = {\n slots: [\"root\", \"hero\", \"mark\", \"eyebrow\", \"title\", \"description\", \"main\", \"footer\", \"notice\", \"links\"] as const,\n defaults: authScreenDefaults,\n maxWidth: 416,\n /** 마크는 아이콘(48)보다 크고 일러스트(120+)보다 작다 — 제품을 알아볼 최소 크기다. */\n markSize: 72,\n markRadius: radius.lg,\n /**\n * 히어로 제목은 LS의 태그라인(24)이다. 2026-10-17 사용자 피드백(\"굵기랑 크기 줄여\"): 예제가\n * 화면 첫 제목용 `Top large`(display 32/40)를 히어로에 넣어 402 폭에서 두 줄로 화면을 눌렀다.\n * 로그인 슬로건은 화면 제목이 아니라 제공자 버튼을 소개하는 한 줄이라 display 단계를 쓰지\n * 않고, 굵기는 제목 단계의 medium(500)을 그대로 따른다. compact는 한 단계 낮춘다(densities).\n */\n title: typography.heading,\n description: typography.body,\n hero: {\n eyebrow: { textVariant: \"label\", tone: \"brand\", gapBelow: spacing.xxs },\n title: { tone: \"primary\" },\n /** LS 설명은 보조 글자색이다 — 본문색이면 태그라인과 같은 무게로 읽힌다. */\n description: { textVariant: \"body\", tone: \"muted\", gapAbove: spacing.xs },\n },\n /** 정책 링크는 글자 높이만큼만 누를 수 있으면 44pt 기준에 못 미친다. */\n footerMinTouchTarget: control.minTouchTarget,\n footerText: typography.caption,\n /**\n * 동의 고지와 정책 링크(LS §3: 고지 `caption` 흐린 색, 링크와 gap `xxs`, 링크 `caption` 브랜드색·밑줄,\n * \"개인정보 처리방침 · 이용약관\"). 2026-10-17 사용자 피드백(\"간격 줄여\"): 예제가 ghost Button 두 개를\n * Stack gap 16으로 놓아 버튼 안쪽 여백 12+12가 더해져 글자 사이가 40~42로 벌어졌다. 보이는 간격은\n * `linkGap` + 구분점 + `linkGap` 하나로 정하고, 44 터치 높이는 보이지 않는 히트 영역(Web 높이·가상\n * 요소, Native minHeight·hitSlop)으로 채운다 — 보이는 여백으로 터치 영역을 만들면 간격이 다시 커진다.\n */\n footer: {\n notice: { textVariant: \"caption\", tone: \"muted\" },\n noticeGap: spacing.xxs,\n link: { textVariant: \"caption\", tone: \"brand\", underline: true },\n linkGap: spacing.xs,\n separator: \"·\",\n },\n /** 제공자 버튼 높이는 Provider 계약이 소유한다 — 여기서 다시 정하지 않는다. */\n providerMinHeight: authProviderButtonRecipe.minHeight,\n // 2026-10-01: the action card stays mounted during login so its dimensions and background survive the loader.\n mainCard: { padding: spacing.md, radius: radius.lg },\n densities: {\n regular: {\n heroGap: spacing.md,\n mainGap: spacing.xl,\n footerGap: spacing.xl,\n paddingInline: layout.pagePadding.regular,\n paddingBlock: spacing.xxxl,\n titleVariant: \"heading\",\n },\n compact: {\n heroGap: spacing.xs,\n mainGap: spacing.md,\n footerGap: spacing.md,\n paddingInline: layout.pagePadding.compact,\n paddingBlock: spacing.lg,\n // 세로가 좁은 화면에서는 제목도 한 단계 낮춰 제공자 버튼을 첫 화면에 남긴다.\n titleVariant: \"titleLarge\",\n },\n },\n} as const;\n\nconst densities = new Set<AuthScreenDensity>([\"compact\", \"regular\"]);\n\nexport function validateAuthScreenDescriptor(descriptor: AuthScreenDescriptor): void {\n if (descriptor === null || typeof descriptor !== \"object\") {\n throw new TypeError(\"AuthScreen descriptor must be an object\");\n }\n if (descriptor.density !== undefined && !densities.has(descriptor.density)) {\n throw new TypeError(`Unsupported AuthScreen density: ${String(descriptor.density)}`);\n }\n if (descriptor.hasFooter !== undefined && typeof descriptor.hasFooter !== \"boolean\") {\n throw new TypeError(\"AuthScreen hasFooter must be a boolean\");\n }\n}\n\nfunction assertNonEmpty(value: unknown, field: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`AuthScreen ${field} must not be empty`);\n }\n}\n\nexport function validateAuthScreenHeroDescriptor(descriptor: AuthScreenHeroDescriptor): void {\n if (descriptor === null || typeof descriptor !== \"object\") {\n throw new TypeError(\"AuthScreen hero must be an object\");\n }\n assertNonEmpty(descriptor.title, \"hero title\");\n if (descriptor.eyebrow !== undefined) assertNonEmpty(descriptor.eyebrow, \"hero eyebrow\");\n if (descriptor.description !== undefined) assertNonEmpty(descriptor.description, \"hero description\");\n if (descriptor.headingLevel !== undefined && ![1, 2, 3].includes(descriptor.headingLevel)) {\n throw new TypeError(`Unsupported AuthScreen hero headingLevel: ${String(descriptor.headingLevel)}`);\n }\n}\n\n/** LS-04: 약관·개인정보처리방침 링크는 로그인 전에 같은 화면에 있어야 하므로 빈 목록을 받지 않는다. */\nexport function validateAuthScreenPolicyLinks(links: readonly AuthScreenPolicyLinkDescriptor[]): void {\n if (!Array.isArray(links) || links.length === 0) {\n throw new TypeError(\"AuthScreen footer needs at least one policy link\");\n }\n for (const link of links) assertNonEmpty(link?.label, \"policy link label\");\n}\n\nexport function resolveAuthScreenDescriptor(\n descriptor: AuthScreenDescriptor = {},\n): ResolvedAuthScreenDescriptor {\n validateAuthScreenDescriptor(descriptor);\n const density = descriptor.density ?? authScreenDefaults.density;\n const scale = authScreenRecipe.densities[density];\n return {\n density,\n hasFooter: descriptor.hasFooter ?? authScreenDefaults.hasFooter,\n heroGap: scale.heroGap,\n mainGap: scale.mainGap,\n footerGap: scale.footerGap,\n paddingInline: scale.paddingInline,\n paddingBlock: scale.paddingBlock,\n maxWidth: authScreenRecipe.maxWidth,\n titleVariant: scale.titleVariant,\n };\n}\n\nexport const authScreenBehavior = {\n controlled: [],\n inputs: [\"density\", \"hasFooter\"],\n events: [],\n stateAxes: {},\n web: { roles: [\"main\"], keyboard: [], focus: \"none\" },\n native: { roles: [], states: [], actions: [] },\n scenarios: [\n \"the-hero-and-the-main-action-stay-one-vertically-centred-block\",\n \"the-footer-sits-at-the-bottom-and-never-overlaps-the-main-action\",\n \"content-taller-than-the-viewport-scrolls-instead-of-pushing-the-footer-off-screen\",\n \"the-product-owns-every-string-and-the-mark-asset-while-the-layout-stays-here\",\n \"provider-button-height-comes-from-the-provider-contract-not-from-this-one\",\n \"compact-density-shrinks-gaps-without-changing-the-two-region-structure\",\n \"policy-links-in-the-footer-keep-the-minimum-touch-target\",\n \"the-hero-title-uses-the-recipe-title-step-not-a-display-heading\",\n \"policy-links-are-separated-by-one-recipe-gap-and-a-dot-while-the-touch-area-stays-invisible\",\n ],\n} as const satisfies BehaviorContract;\n"]}
|
|
1
|
+
{"version":3,"file":"auth-screen.js","sourceRoot":"","sources":["../src/auth-screen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA4EhF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,IAAI;CACkC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAU;IAChH,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,GAAG;IACb,yDAAyD;IACzD,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,MAAM,CAAC,EAAE;IACrB;;;;;OAKG;IACH,KAAK,EAAE,UAAU,CAAC,OAAO;IACzB,WAAW,EAAE,UAAU,CAAC,IAAI;IAC5B,IAAI,EAAE;QACJ,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE;QACvE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1B,gDAAgD;QAChD,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;KAC1E;IACD,+CAA+C;IAC/C,oBAAoB,EAAE,OAAO,CAAC,cAAc;IAC5C,UAAU,EAAE,UAAU,CAAC,OAAO;IAC9B;;;;;;OAMG;IACH,MAAM,EAAE;QACN,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;QACjD,SAAS,EAAE,OAAO,CAAC,GAAG;QACtB,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;QAChE,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,SAAS,EAAE,GAAG;KACf;IACD,qDAAqD;IACrD,iBAAiB,EAAE,wBAAwB,CAAC,SAAS;IACrD,8GAA8G;IAC9G,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;IACpD,SAAS,EAAE;QACT,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC,EAAE;YACnB,OAAO,EAAE,OAAO,CAAC,EAAE;YACnB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO;YACzC,YAAY,EAAE,OAAO,CAAC,IAAI;YAC1B,YAAY,EAAE,SAAS;SACxB;QACD,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC,EAAE;YACnB,OAAO,EAAE,OAAO,CAAC,EAAE;YACnB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO;YACzC,YAAY,EAAE,OAAO,CAAC,EAAE;YACxB,8CAA8C;YAC9C,YAAY,EAAE,YAAY;SAC3B;KACF;CACO,CAAC;AAEX,MAAM,SAAS,GAAG,IAAI,GAAG,CAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAErE,MAAM,UAAU,4BAA4B,CAAC,UAAgC;IAC3E,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,SAAS,CAAC,mCAAmC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpF,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,SAAS,CAAC,cAAc,KAAK,oBAAoB,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,UAAoC;IACnF,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC3D,CAAC;IACD,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS;QAAE,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACzF,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS;QAAE,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IACrG,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1F,MAAM,IAAI,SAAS,CAAC,6CAA6C,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,6BAA6B,CAAC,KAAgD;IAC5F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;YAAE,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAC;IACpH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,aAAmC,EAAE;IAErC,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC;IACjE,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO;QACL,OAAO;QACP,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,kBAAkB,CAAC,SAAS;QAC/D,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;QACnC,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,EAAE;IACb,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IACrD,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAC9C,SAAS,EAAE;QACT,gEAAgE;QAChE,kEAAkE;QAClE,mFAAmF;QACnF,8EAA8E;QAC9E,2EAA2E;QAC3E,wEAAwE;QACxE,0DAA0D;QAC1D,iEAAiE;QACjE,6FAA6F;KAC9F;CACkC,CAAC","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport { authProviderButtonRecipe } from \"./provider-button.js\";\nimport { control, layout, radius, spacing, typography } from \"./foundations.js\";\n\n/**\n * 로그인 화면의 골격이다. 제품이 화면을 다시 조립하지 않게 **배치만** 소유한다.\n *\n * 왜 골격인가: 계정이 있는 제품들이 같은 화면을 각자 만들었고, 같은 실수를 각자 했다.\n * 번뚝은 로고·태그라인·설명 두 줄·동의 고지·정책 링크를 위에서부터 쌓아 제공자 버튼을\n * 화면 밖으로 밀어냈고(2026-09-19 iPhone 17 Pro 실측), 그 배치를 따라한 다른 제품도 같은\n * 순서로 쌓였다. 간격과 최대 폭은 제품마다 다를 이유가 없는데 제품마다 다시 정해졌다.\n *\n * 그래서 **두 영역**만 강제한다. 위 영역(`hero` + `main`)은 남는 세로 공간을 전부 차지하고\n * 그 안에서 가운데 정렬한다. 아래 영역(`footer`)은 바닥에 붙는다. 세 영역 이상으로 나누지\n * 않는 이유는, 셋이 되는 순간 어느 것이 주 행동인지가 배치로 드러나지 않아서다.\n *\n * **HJM이 소유하는 것**: 영역 구분, 간격, 최대 폭, 가운데 정렬, 내용이 길어질 때의 스크롤 전환.\n * **제품이 소유하는 것**: 마크 자산, 모든 문구, 제공자 목록과 순서, 정책 링크의 목적지,\n * 그리고 `main`에 무엇을 넣을지(제공자 버튼만, 또는 가입 재개·심사자 입력 같은 제품 덩어리).\n *\n * 이 계약은 화면을 **그리지 않는다.** `AuthProviderButton`·`BottomInfo`·`Agreement`처럼 이미\n * 있는 컴포넌트를 제품이 슬롯에 넣는다. 화면 전체를 한 컴포넌트로 받으면 제품마다 다른\n * 부분(다에리의 중단 거래 복구, 번뚝의 심사자 폼)을 전부 슬롯으로 되돌려 받아야 해서,\n * 결국 이름만 붙은 Stack이 된다.\n */\nexport type AuthScreenDensity = \"compact\" | \"regular\";\n\nexport type AuthScreenDescriptor = Readonly<{\n /**\n * 세로 공간이 좁은 기기에서 간격을 줄인다. 제품이 화면 높이를 보고 고르며, HJM은\n * 기기 종류를 추측하지 않는다(같은 폭이라도 키보드가 올라오면 좁아진다).\n */\n density?: AuthScreenDensity;\n /** 아래 영역(동의 고지·정책 링크)을 둘지. 계정 생성이 없는 화면은 없을 수 있다. */\n hasFooter?: boolean;\n}>;\n\nexport type ResolvedAuthScreenDescriptor = Readonly<{\n density: AuthScreenDensity;\n hasFooter: boolean;\n /** 위 영역 안쪽 간격(마크→제목→설명→주 행동). */\n heroGap: number;\n /** 위 영역과 주 행동 사이. */\n mainGap: number;\n /** 아래 영역을 띄우는 최소 간격. 화면이 길면 그 이상 벌어진다. */\n footerGap: number;\n paddingInline: number;\n paddingBlock: number;\n maxWidth: number;\n /** 히어로 제목의 글자 단계. `AuthScreenHero`가 이 값으로 그린다. */\n titleVariant: AuthScreenTitleVariant;\n}>;\n\nexport type AuthScreenTitleVariant = \"heading\" | \"titleLarge\";\n\n/**\n * 히어로 문구. 문자열은 전부 제품 소유이고, 글자 단계·색·간격은 `authScreenRecipe.hero`가 소유한다.\n * 마크 자산은 렌더러의 `mark` 슬롯으로 받는다.\n */\nexport type AuthScreenHeroDescriptor = Readonly<{\n title: string;\n eyebrow?: string;\n description?: string;\n /** 문서 구조상의 제목 단계. 로그인 화면이 라우트의 첫 제목이므로 기본은 1이다. */\n headingLevel?: 1 | 2 | 3;\n}>;\n\n/** 정책 링크 한 개. 목적지와 문구는 제품 소유다. */\nexport type AuthScreenPolicyLinkDescriptor = Readonly<{\n label: string;\n /**\n * Supplementary announcement after the label, e.g. the product's localized \"opens in browser\" (Web aria-describedby\n * text / RN accessibilityHint). The visible label stays the link's name; spint dropped its hint when it adopted\n * AuthScreenFooter because the links had no slot for it (2026-10-17).\n */\n accessibilityHint?: string;\n}>;\n\nexport const authScreenDefaults = {\n density: \"regular\",\n hasFooter: true,\n} as const satisfies Required<AuthScreenDescriptor>;\n\n/**\n * 최대 폭 26rem(416)은 `Container`의 reading(720)보다 좁다. 제공자 버튼이 노트북 폭만큼\n * 길어지면 누를 곳이 아니라 띠로 보이기 때문이고, 이 화면의 내용은 버튼 한 줄기뿐이라\n * 읽기 폭을 쓸 이유가 없다.\n */\nexport const authScreenRecipe = {\n slots: [\"root\", \"hero\", \"mark\", \"eyebrow\", \"title\", \"description\", \"main\", \"footer\", \"notice\", \"links\"] as const,\n defaults: authScreenDefaults,\n maxWidth: 416,\n /** 마크는 아이콘(48)보다 크고 일러스트(120+)보다 작다 — 제품을 알아볼 최소 크기다. */\n markSize: 72,\n markRadius: radius.lg,\n /**\n * 히어로 제목은 LS의 태그라인(24)이다. 2026-10-17 사용자 피드백(\"굵기랑 크기 줄여\"): 예제가\n * 화면 첫 제목용 `Top large`(display 32/40)를 히어로에 넣어 402 폭에서 두 줄로 화면을 눌렀다.\n * 로그인 슬로건은 화면 제목이 아니라 제공자 버튼을 소개하는 한 줄이라 display 단계를 쓰지\n * 않고, 굵기는 제목 단계의 medium(500)을 그대로 따른다. compact는 한 단계 낮춘다(densities).\n */\n title: typography.heading,\n description: typography.body,\n hero: {\n eyebrow: { textVariant: \"label\", tone: \"brand\", gapBelow: spacing.xxs },\n title: { tone: \"primary\" },\n /** LS 설명은 보조 글자색이다 — 본문색이면 태그라인과 같은 무게로 읽힌다. */\n description: { textVariant: \"body\", tone: \"muted\", gapAbove: spacing.xs },\n },\n /** 정책 링크는 글자 높이만큼만 누를 수 있으면 44pt 기준에 못 미친다. */\n footerMinTouchTarget: control.minTouchTarget,\n footerText: typography.caption,\n /**\n * 동의 고지와 정책 링크(LS §3: 고지 `caption` 흐린 색, 링크와 gap `xxs`, 링크 `caption` 브랜드색·밑줄,\n * \"개인정보 처리방침 · 이용약관\"). 2026-10-17 사용자 피드백(\"간격 줄여\"): 예제가 ghost Button 두 개를\n * Stack gap 16으로 놓아 버튼 안쪽 여백 12+12가 더해져 글자 사이가 40~42로 벌어졌다. 보이는 간격은\n * `linkGap` + 구분점 + `linkGap` 하나로 정하고, 44 터치 높이는 보이지 않는 히트 영역(Web 높이·가상\n * 요소, Native minHeight·hitSlop)으로 채운다 — 보이는 여백으로 터치 영역을 만들면 간격이 다시 커진다.\n */\n footer: {\n notice: { textVariant: \"caption\", tone: \"muted\" },\n noticeGap: spacing.xxs,\n link: { textVariant: \"caption\", tone: \"brand\", underline: true },\n linkGap: spacing.xs,\n separator: \"·\",\n },\n /** 제공자 버튼 높이는 Provider 계약이 소유한다 — 여기서 다시 정하지 않는다. */\n providerMinHeight: authProviderButtonRecipe.minHeight,\n // 2026-10-01: the action card stays mounted during login so its dimensions and background survive the loader.\n mainCard: { padding: spacing.md, radius: radius.lg },\n densities: {\n regular: {\n heroGap: spacing.md,\n mainGap: spacing.xl,\n footerGap: spacing.xl,\n paddingInline: layout.pagePadding.regular,\n paddingBlock: spacing.xxxl,\n titleVariant: \"heading\",\n },\n compact: {\n heroGap: spacing.xs,\n mainGap: spacing.md,\n footerGap: spacing.md,\n paddingInline: layout.pagePadding.compact,\n paddingBlock: spacing.lg,\n // 세로가 좁은 화면에서는 제목도 한 단계 낮춰 제공자 버튼을 첫 화면에 남긴다.\n titleVariant: \"titleLarge\",\n },\n },\n} as const;\n\nconst densities = new Set<AuthScreenDensity>([\"compact\", \"regular\"]);\n\nexport function validateAuthScreenDescriptor(descriptor: AuthScreenDescriptor): void {\n if (descriptor === null || typeof descriptor !== \"object\") {\n throw new TypeError(\"AuthScreen descriptor must be an object\");\n }\n if (descriptor.density !== undefined && !densities.has(descriptor.density)) {\n throw new TypeError(`Unsupported AuthScreen density: ${String(descriptor.density)}`);\n }\n if (descriptor.hasFooter !== undefined && typeof descriptor.hasFooter !== \"boolean\") {\n throw new TypeError(\"AuthScreen hasFooter must be a boolean\");\n }\n}\n\nfunction assertNonEmpty(value: unknown, field: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`AuthScreen ${field} must not be empty`);\n }\n}\n\nexport function validateAuthScreenHeroDescriptor(descriptor: AuthScreenHeroDescriptor): void {\n if (descriptor === null || typeof descriptor !== \"object\") {\n throw new TypeError(\"AuthScreen hero must be an object\");\n }\n assertNonEmpty(descriptor.title, \"hero title\");\n if (descriptor.eyebrow !== undefined) assertNonEmpty(descriptor.eyebrow, \"hero eyebrow\");\n if (descriptor.description !== undefined) assertNonEmpty(descriptor.description, \"hero description\");\n if (descriptor.headingLevel !== undefined && ![1, 2, 3].includes(descriptor.headingLevel)) {\n throw new TypeError(`Unsupported AuthScreen hero headingLevel: ${String(descriptor.headingLevel)}`);\n }\n}\n\n/** LS-04: 약관·개인정보처리방침 링크는 로그인 전에 같은 화면에 있어야 하므로 빈 목록을 받지 않는다. */\nexport function validateAuthScreenPolicyLinks(links: readonly AuthScreenPolicyLinkDescriptor[]): void {\n if (!Array.isArray(links) || links.length === 0) {\n throw new TypeError(\"AuthScreen footer needs at least one policy link\");\n }\n for (const link of links) {\n assertNonEmpty(link?.label, \"policy link label\");\n if (link.accessibilityHint !== undefined) assertNonEmpty(link.accessibilityHint, \"policy link accessibilityHint\");\n }\n}\n\nexport function resolveAuthScreenDescriptor(\n descriptor: AuthScreenDescriptor = {},\n): ResolvedAuthScreenDescriptor {\n validateAuthScreenDescriptor(descriptor);\n const density = descriptor.density ?? authScreenDefaults.density;\n const scale = authScreenRecipe.densities[density];\n return {\n density,\n hasFooter: descriptor.hasFooter ?? authScreenDefaults.hasFooter,\n heroGap: scale.heroGap,\n mainGap: scale.mainGap,\n footerGap: scale.footerGap,\n paddingInline: scale.paddingInline,\n paddingBlock: scale.paddingBlock,\n maxWidth: authScreenRecipe.maxWidth,\n titleVariant: scale.titleVariant,\n };\n}\n\nexport const authScreenBehavior = {\n controlled: [],\n inputs: [\"density\", \"hasFooter\"],\n events: [],\n stateAxes: {},\n web: { roles: [\"main\"], keyboard: [], focus: \"none\" },\n native: { roles: [], states: [], actions: [] },\n scenarios: [\n \"the-hero-and-the-main-action-stay-one-vertically-centred-block\",\n \"the-footer-sits-at-the-bottom-and-never-overlaps-the-main-action\",\n \"content-taller-than-the-viewport-scrolls-instead-of-pushing-the-footer-off-screen\",\n \"the-product-owns-every-string-and-the-mark-asset-while-the-layout-stays-here\",\n \"provider-button-height-comes-from-the-provider-contract-not-from-this-one\",\n \"compact-density-shrinks-gaps-without-changing-the-two-region-structure\",\n \"policy-links-in-the-footer-keep-the-minimum-touch-target\",\n \"the-hero-title-uses-the-recipe-title-step-not-a-display-heading\",\n \"policy-links-are-separated-by-one-recipe-gap-and-a-dot-while-the-touch-area-stays-invisible\",\n ],\n} as const satisfies BehaviorContract;\n"]}
|
package/dist/catalog.d.ts
CHANGED
|
@@ -1296,6 +1296,226 @@ export declare const componentCatalog: readonly [{
|
|
|
1296
1296
|
readonly category: "utility";
|
|
1297
1297
|
readonly platform: "web";
|
|
1298
1298
|
readonly status: "stable";
|
|
1299
|
+
}, {
|
|
1300
|
+
readonly recipe: "screenPatternRecipe";
|
|
1301
|
+
readonly surfaceStatus: {
|
|
1302
|
+
readonly web: "beta";
|
|
1303
|
+
readonly native: "beta";
|
|
1304
|
+
};
|
|
1305
|
+
readonly name: "ScreenLayout";
|
|
1306
|
+
readonly category: "layout";
|
|
1307
|
+
readonly platform: "adaptive";
|
|
1308
|
+
readonly status: "beta";
|
|
1309
|
+
}, {
|
|
1310
|
+
readonly recipe: "screenPatternRecipe";
|
|
1311
|
+
readonly surfaceStatus: {
|
|
1312
|
+
readonly web: "beta";
|
|
1313
|
+
readonly native: "beta";
|
|
1314
|
+
};
|
|
1315
|
+
readonly name: "CompositionLayout";
|
|
1316
|
+
readonly category: "layout";
|
|
1317
|
+
readonly platform: "adaptive";
|
|
1318
|
+
readonly status: "beta";
|
|
1319
|
+
}, {
|
|
1320
|
+
readonly recipe: "screenPatternRecipe";
|
|
1321
|
+
readonly surfaceStatus: {
|
|
1322
|
+
readonly web: "beta";
|
|
1323
|
+
readonly native: "beta";
|
|
1324
|
+
};
|
|
1325
|
+
readonly name: "SettingsScreen";
|
|
1326
|
+
readonly category: "layout";
|
|
1327
|
+
readonly platform: "adaptive";
|
|
1328
|
+
readonly status: "beta";
|
|
1329
|
+
}, {
|
|
1330
|
+
readonly recipe: "searchScreenRecipe";
|
|
1331
|
+
readonly surfaceStatus: {
|
|
1332
|
+
readonly web: "beta";
|
|
1333
|
+
readonly native: "beta";
|
|
1334
|
+
};
|
|
1335
|
+
readonly name: "SearchScreen";
|
|
1336
|
+
readonly category: "layout";
|
|
1337
|
+
readonly platform: "adaptive";
|
|
1338
|
+
readonly status: "beta";
|
|
1339
|
+
}, {
|
|
1340
|
+
readonly recipe: "screenPatternRecipe";
|
|
1341
|
+
readonly surfaceStatus: {
|
|
1342
|
+
readonly web: "beta";
|
|
1343
|
+
readonly native: "beta";
|
|
1344
|
+
};
|
|
1345
|
+
readonly name: "EditorScreen";
|
|
1346
|
+
readonly category: "layout";
|
|
1347
|
+
readonly platform: "adaptive";
|
|
1348
|
+
readonly status: "beta";
|
|
1349
|
+
}, {
|
|
1350
|
+
readonly recipe: "screenPatternRecipe";
|
|
1351
|
+
readonly surfaceStatus: {
|
|
1352
|
+
readonly web: "beta";
|
|
1353
|
+
readonly native: "beta";
|
|
1354
|
+
};
|
|
1355
|
+
readonly name: "PermissionScreen";
|
|
1356
|
+
readonly category: "layout";
|
|
1357
|
+
readonly platform: "adaptive";
|
|
1358
|
+
readonly status: "beta";
|
|
1359
|
+
}, {
|
|
1360
|
+
readonly recipe: "screenPatternRecipe";
|
|
1361
|
+
readonly surfaceStatus: {
|
|
1362
|
+
readonly web: "beta";
|
|
1363
|
+
readonly native: "beta";
|
|
1364
|
+
};
|
|
1365
|
+
readonly name: "OnboardingScreen";
|
|
1366
|
+
readonly category: "layout";
|
|
1367
|
+
readonly platform: "adaptive";
|
|
1368
|
+
readonly status: "beta";
|
|
1369
|
+
}, {
|
|
1370
|
+
readonly recipe: "screenPatternRecipe";
|
|
1371
|
+
readonly surfaceStatus: {
|
|
1372
|
+
readonly web: "beta";
|
|
1373
|
+
readonly native: "beta";
|
|
1374
|
+
};
|
|
1375
|
+
readonly name: "ModerationScreen";
|
|
1376
|
+
readonly category: "layout";
|
|
1377
|
+
readonly platform: "adaptive";
|
|
1378
|
+
readonly status: "beta";
|
|
1379
|
+
}, {
|
|
1380
|
+
readonly recipe: "screenPatternRecipe";
|
|
1381
|
+
readonly surfaceStatus: {
|
|
1382
|
+
readonly web: "beta";
|
|
1383
|
+
readonly native: "beta";
|
|
1384
|
+
};
|
|
1385
|
+
readonly name: "ChatScreen";
|
|
1386
|
+
readonly category: "layout";
|
|
1387
|
+
readonly platform: "adaptive";
|
|
1388
|
+
readonly status: "beta";
|
|
1389
|
+
}, {
|
|
1390
|
+
readonly recipe: "screenPatternRecipe";
|
|
1391
|
+
readonly surfaceStatus: {
|
|
1392
|
+
readonly web: "beta";
|
|
1393
|
+
readonly native: "beta";
|
|
1394
|
+
};
|
|
1395
|
+
readonly name: "NotificationInboxScreen";
|
|
1396
|
+
readonly category: "layout";
|
|
1397
|
+
readonly platform: "adaptive";
|
|
1398
|
+
readonly status: "beta";
|
|
1399
|
+
}, {
|
|
1400
|
+
readonly recipe: "commentThreadRecipe";
|
|
1401
|
+
readonly surfaceStatus: {
|
|
1402
|
+
readonly web: "beta";
|
|
1403
|
+
readonly native: "beta";
|
|
1404
|
+
};
|
|
1405
|
+
readonly name: "CommentThreadScreen";
|
|
1406
|
+
readonly category: "layout";
|
|
1407
|
+
readonly platform: "adaptive";
|
|
1408
|
+
readonly status: "beta";
|
|
1409
|
+
}, {
|
|
1410
|
+
readonly recipe: "screenPatternRecipe";
|
|
1411
|
+
readonly surfaceStatus: {
|
|
1412
|
+
readonly web: "beta";
|
|
1413
|
+
readonly native: "beta";
|
|
1414
|
+
};
|
|
1415
|
+
readonly name: "ListDetailScreen";
|
|
1416
|
+
readonly category: "layout";
|
|
1417
|
+
readonly platform: "adaptive";
|
|
1418
|
+
readonly status: "beta";
|
|
1419
|
+
}, {
|
|
1420
|
+
readonly recipe: "screenPatternRecipe";
|
|
1421
|
+
readonly surfaceStatus: {
|
|
1422
|
+
readonly web: "beta";
|
|
1423
|
+
readonly native: "beta";
|
|
1424
|
+
};
|
|
1425
|
+
readonly name: "MediaSelectionScreen";
|
|
1426
|
+
readonly category: "layout";
|
|
1427
|
+
readonly platform: "adaptive";
|
|
1428
|
+
readonly status: "beta";
|
|
1429
|
+
}, {
|
|
1430
|
+
readonly recipe: "screenPatternRecipe";
|
|
1431
|
+
readonly surfaceStatus: {
|
|
1432
|
+
readonly web: "beta";
|
|
1433
|
+
readonly native: "beta";
|
|
1434
|
+
};
|
|
1435
|
+
readonly name: "ProfileScreen";
|
|
1436
|
+
readonly category: "layout";
|
|
1437
|
+
readonly platform: "adaptive";
|
|
1438
|
+
readonly status: "beta";
|
|
1439
|
+
}, {
|
|
1440
|
+
readonly recipe: "chatMessageRecipe";
|
|
1441
|
+
readonly surfaceStatus: {
|
|
1442
|
+
readonly web: "beta";
|
|
1443
|
+
readonly native: "beta";
|
|
1444
|
+
};
|
|
1445
|
+
readonly name: "ChatMessage";
|
|
1446
|
+
readonly category: "data-display";
|
|
1447
|
+
readonly platform: "adaptive";
|
|
1448
|
+
readonly status: "beta";
|
|
1449
|
+
}, {
|
|
1450
|
+
readonly recipe: "notificationRowRecipe";
|
|
1451
|
+
readonly surfaceStatus: {
|
|
1452
|
+
readonly web: "beta";
|
|
1453
|
+
readonly native: "beta";
|
|
1454
|
+
};
|
|
1455
|
+
readonly name: "NotificationRow";
|
|
1456
|
+
readonly category: "data-display";
|
|
1457
|
+
readonly platform: "adaptive";
|
|
1458
|
+
readonly status: "beta";
|
|
1459
|
+
}, {
|
|
1460
|
+
readonly recipe: "listRowRecipe";
|
|
1461
|
+
readonly surfaceStatus: {
|
|
1462
|
+
readonly web: "beta";
|
|
1463
|
+
readonly native: "beta";
|
|
1464
|
+
};
|
|
1465
|
+
readonly name: "NotificationItem";
|
|
1466
|
+
readonly category: "data-display";
|
|
1467
|
+
readonly platform: "adaptive";
|
|
1468
|
+
readonly status: "beta";
|
|
1469
|
+
}, {
|
|
1470
|
+
readonly recipe: "commentThreadRecipe";
|
|
1471
|
+
readonly surfaceStatus: {
|
|
1472
|
+
readonly web: "beta";
|
|
1473
|
+
readonly native: "beta";
|
|
1474
|
+
};
|
|
1475
|
+
readonly name: "CommentThreadRow";
|
|
1476
|
+
readonly category: "data-display";
|
|
1477
|
+
readonly platform: "adaptive";
|
|
1478
|
+
readonly status: "beta";
|
|
1479
|
+
}, {
|
|
1480
|
+
readonly recipe: "profileSummaryRecipe";
|
|
1481
|
+
readonly surfaceStatus: {
|
|
1482
|
+
readonly web: "beta";
|
|
1483
|
+
readonly native: "beta";
|
|
1484
|
+
};
|
|
1485
|
+
readonly name: "ProfileSummary";
|
|
1486
|
+
readonly category: "data-display";
|
|
1487
|
+
readonly platform: "adaptive";
|
|
1488
|
+
readonly status: "beta";
|
|
1489
|
+
}, {
|
|
1490
|
+
readonly recipe: "iconTileRecipe";
|
|
1491
|
+
readonly surfaceStatus: {
|
|
1492
|
+
readonly web: "beta";
|
|
1493
|
+
readonly native: "beta";
|
|
1494
|
+
};
|
|
1495
|
+
readonly name: "IconTile";
|
|
1496
|
+
readonly category: "data-display";
|
|
1497
|
+
readonly platform: "adaptive";
|
|
1498
|
+
readonly status: "beta";
|
|
1499
|
+
}, {
|
|
1500
|
+
readonly recipe: "composerQuickInsertRecipe";
|
|
1501
|
+
readonly surfaceStatus: {
|
|
1502
|
+
readonly web: "beta";
|
|
1503
|
+
readonly native: "beta";
|
|
1504
|
+
};
|
|
1505
|
+
readonly name: "MessageComposer";
|
|
1506
|
+
readonly category: "input";
|
|
1507
|
+
readonly platform: "adaptive";
|
|
1508
|
+
readonly status: "beta";
|
|
1509
|
+
}, {
|
|
1510
|
+
readonly recipe: "sheetRecipe";
|
|
1511
|
+
readonly surfaceStatus: {
|
|
1512
|
+
readonly web: "beta";
|
|
1513
|
+
readonly native: "beta";
|
|
1514
|
+
};
|
|
1515
|
+
readonly name: "PhotoSourceSheet";
|
|
1516
|
+
readonly category: "overlay";
|
|
1517
|
+
readonly platform: "adaptive";
|
|
1518
|
+
readonly status: "beta";
|
|
1299
1519
|
}];
|
|
1300
1520
|
export type ComponentName = (typeof componentCatalog)[number]["name"];
|
|
1301
1521
|
export declare function summarizeComponentRoadmap(entries?: readonly ComponentCatalogEntry[]): Readonly<Record<ComponentRoadmapState, number>>;
|
|
@@ -8652,6 +8872,94 @@ export declare const recipeRegistry: {
|
|
|
8652
8872
|
readonly position: "absolute";
|
|
8653
8873
|
readonly whiteSpace: "nowrap";
|
|
8654
8874
|
};
|
|
8875
|
+
readonly screenPatternRecipe: {
|
|
8876
|
+
readonly maxWidth: 720;
|
|
8877
|
+
readonly padding: 16;
|
|
8878
|
+
readonly sectionGap: 24;
|
|
8879
|
+
readonly itemGap: 12;
|
|
8880
|
+
readonly stateGap: 16;
|
|
8881
|
+
readonly headerMinWidth: number;
|
|
8882
|
+
readonly messageMaxWidth: "84%";
|
|
8883
|
+
readonly attachmentSize: 80;
|
|
8884
|
+
readonly attachmentRemoveSize: 24;
|
|
8885
|
+
readonly reactionHoldMs: 450;
|
|
8886
|
+
readonly reactionMoveTolerance: 10;
|
|
8887
|
+
readonly reactionMenuWidth: 320;
|
|
8888
|
+
readonly replySwipeDistance: 60;
|
|
8889
|
+
readonly composerMinLines: 1;
|
|
8890
|
+
readonly composerMaxLines: 5;
|
|
8891
|
+
};
|
|
8892
|
+
readonly searchScreenRecipe: {
|
|
8893
|
+
readonly debounceMs: 300;
|
|
8894
|
+
readonly recentVisible: 5;
|
|
8895
|
+
readonly suggestionVisible: 6;
|
|
8896
|
+
readonly loadingRows: 4;
|
|
8897
|
+
readonly sectionGap: 24;
|
|
8898
|
+
readonly headerGap: 12;
|
|
8899
|
+
readonly chipGap: 8;
|
|
8900
|
+
};
|
|
8901
|
+
readonly chatMessageRecipe: {
|
|
8902
|
+
readonly avatarSize: 32;
|
|
8903
|
+
readonly avatarGap: 8;
|
|
8904
|
+
readonly authorGap: 4;
|
|
8905
|
+
readonly metaGap: 4;
|
|
8906
|
+
readonly bubbleRadius: 14;
|
|
8907
|
+
readonly bubblePaddingInline: 10;
|
|
8908
|
+
readonly bubblePaddingBlock: 6;
|
|
8909
|
+
readonly runGap: 6;
|
|
8910
|
+
readonly groupGap: 12;
|
|
8911
|
+
readonly tailWidth: 7;
|
|
8912
|
+
readonly tailHeight: 10;
|
|
8913
|
+
readonly tailCornerRadius: 4;
|
|
8914
|
+
readonly jumpToLatestGap: 8;
|
|
8915
|
+
readonly timelineInset: 10;
|
|
8916
|
+
readonly mediaWidth: 210;
|
|
8917
|
+
readonly mediaGap: 2;
|
|
8918
|
+
};
|
|
8919
|
+
readonly commentThreadRecipe: {
|
|
8920
|
+
readonly avatarSize: 32;
|
|
8921
|
+
readonly replyAvatarSize: 24;
|
|
8922
|
+
readonly avatarGap: 8;
|
|
8923
|
+
readonly lineGap: 2;
|
|
8924
|
+
readonly rowGap: 12;
|
|
8925
|
+
readonly replyIndent: number;
|
|
8926
|
+
readonly likeColumnWidth: 44;
|
|
8927
|
+
readonly mediaMaxWidth: 160;
|
|
8928
|
+
readonly mediaRadius: 12;
|
|
8929
|
+
readonly menuGlyphSize: 20;
|
|
8930
|
+
readonly actionAnchor: {
|
|
8931
|
+
readonly authorTextVariant: "caption";
|
|
8932
|
+
readonly inlineTextVariant: "body";
|
|
8933
|
+
};
|
|
8934
|
+
};
|
|
8935
|
+
readonly notificationRowRecipe: {
|
|
8936
|
+
readonly gap: 12;
|
|
8937
|
+
readonly contentGap: 4;
|
|
8938
|
+
readonly avatarSize: 44;
|
|
8939
|
+
readonly avatarBadgeSize: 20;
|
|
8940
|
+
readonly thumbnailSize: 44;
|
|
8941
|
+
readonly unreadSize: 6;
|
|
8942
|
+
readonly previewLines: 2;
|
|
8943
|
+
readonly paddingBlock: 12;
|
|
8944
|
+
readonly paddingInline: 16;
|
|
8945
|
+
};
|
|
8946
|
+
readonly profileSummaryRecipe: Readonly<{
|
|
8947
|
+
avatarSize: 72;
|
|
8948
|
+
}>;
|
|
8949
|
+
readonly iconTileRecipe: Readonly<{
|
|
8950
|
+
iconSize: 64;
|
|
8951
|
+
labelMaxWidth: 72;
|
|
8952
|
+
multilineLabelMaxWidth: 84;
|
|
8953
|
+
multilineLabelMinHeight: 44;
|
|
8954
|
+
ghostOpacity: 0.55;
|
|
8955
|
+
gap: 6;
|
|
8956
|
+
iconRadius: "22%";
|
|
8957
|
+
}>;
|
|
8958
|
+
readonly composerQuickInsertRecipe: {
|
|
8959
|
+
readonly itemSize: 44;
|
|
8960
|
+
readonly emojiSize: 26;
|
|
8961
|
+
readonly gap: 8;
|
|
8962
|
+
};
|
|
8655
8963
|
};
|
|
8656
8964
|
export type RecipeName = keyof typeof recipeRegistry;
|
|
8657
8965
|
//# 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":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmGjB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4GjB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,cAAc,CAAC"}
|
package/dist/catalog.js
CHANGED
|
@@ -204,6 +204,38 @@ export const componentCatalog = [
|
|
|
204
204
|
{ name: "SkipNav", category: "utility", platform: "web", status: "stable", ...surfaceMaturity("stable", "unsupported"), aliases: ["SkipLink"], recipe: "skipNavRecipe", behavior: "skipNav" },
|
|
205
205
|
// Hidden copy is validated as an accessible node; visual long-copy overflow is inapplicable by design.
|
|
206
206
|
{ name: "VisuallyHidden", category: "utility", platform: "web", status: "stable", ...surfaceMaturity("stable", "unsupported"), recipe: "visuallyHiddenRecipe", aliases: ["ScreenReaderOnly", "SrOnly"], ...evidenceNeeded("Chakra와 React Aria가 별도 접근성 primitive로 제공하는 문제를 Web에서 채택했습니다. Native는 중복 invisible node 대신 host accessibilityLabel/accessibilityHint를 사용하므로 의도적으로 지원하지 않습니다.") },
|
|
207
|
+
/*
|
|
208
|
+
2026-10-17 screen compositions registered. These screen compositions ship from the renderers' ./screens and ./screen-flows
|
|
209
|
+
subpaths and products use them as the common screen structure (2026-10-15 user rule), but they were
|
|
210
|
+
classified as supplemental to keep the catalog frozen. The consumer checker resolves imported symbols
|
|
211
|
+
only against canonical catalog ids, so 606 of 690 unresolved-symbol findings across six products (88%)
|
|
212
|
+
were these names (STANDARD_SCOPE_REVIEW_2026-10 §1.2). The freeze ended on 2026-10-17
|
|
213
|
+
(docs/stable-promotion.md), so they register as canonical rows. They start as beta on both surfaces:
|
|
214
|
+
the default proof and the claimed environment scenarios live in the renderer evidence manifests, and
|
|
215
|
+
any scenario still missing there is beta promotion debt, not a stable claim.
|
|
216
|
+
*/
|
|
217
|
+
{ name: "ScreenLayout", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
218
|
+
{ name: "CompositionLayout", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
219
|
+
{ name: "SettingsScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
220
|
+
{ name: "SearchScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "searchScreenRecipe" },
|
|
221
|
+
{ name: "EditorScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
222
|
+
{ name: "PermissionScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
223
|
+
{ name: "OnboardingScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
224
|
+
{ name: "ModerationScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
225
|
+
{ name: "ChatScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
226
|
+
{ name: "NotificationInboxScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
227
|
+
{ name: "CommentThreadScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "commentThreadRecipe" },
|
|
228
|
+
{ name: "ListDetailScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
229
|
+
{ name: "MediaSelectionScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
230
|
+
{ name: "ProfileScreen", category: "layout", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "screenPatternRecipe" },
|
|
231
|
+
{ name: "ChatMessage", category: "data-display", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "chatMessageRecipe" },
|
|
232
|
+
{ name: "NotificationRow", category: "data-display", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "notificationRowRecipe" },
|
|
233
|
+
{ name: "NotificationItem", category: "data-display", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "listRowRecipe" },
|
|
234
|
+
{ name: "CommentThreadRow", category: "data-display", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "commentThreadRecipe" },
|
|
235
|
+
{ name: "ProfileSummary", category: "data-display", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "profileSummaryRecipe" },
|
|
236
|
+
{ name: "IconTile", category: "data-display", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "iconTileRecipe" },
|
|
237
|
+
{ name: "MessageComposer", category: "input", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "composerQuickInsertRecipe" },
|
|
238
|
+
{ name: "PhotoSourceSheet", category: "overlay", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "sheetRecipe" },
|
|
207
239
|
];
|
|
208
240
|
export function summarizeComponentRoadmap(entries = componentCatalog) {
|
|
209
241
|
return entries.reduce((summary, entry) => {
|
|
@@ -221,6 +253,7 @@ export function summarizeComponentRoadmap(entries = componentCatalog) {
|
|
|
221
253
|
import { accordionRecipe, alertDialogRecipe, avatarRecipe, badgeRecipe, bottomNavigationRecipe, bottomCtaRecipe, anchorRecipe, agreementRecipe, topRecipe, authProviderButtonRecipe, authScreenRecipe, headingRecipe, toggleGroupRecipe, tagsInputRecipe, skipNavRecipe, bottomInfoRecipe, sidebarRecipe, textFormatRecipe, collapsibleRecipe, menubarRecipe, assetRecipe, breadcrumbRecipe, aspectRatioRecipe, containerRecipe, calendarRecipe, cardRecipe, buttonRecipe, carouselRecipe, chipRecipe, comboboxRecipe, descriptionListRecipe, counterBadgeRecipe, dialogRecipe, dataTableRecipe, chartRecipe, 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";
|
|
222
254
|
import { floatingActionButtonRecipe } from "./floating-action-button.js";
|
|
223
255
|
import { gridRecipe } from "./grid.js";
|
|
256
|
+
import { screenPatternRecipe, searchScreenRecipe, chatMessageRecipe, commentThreadRecipe, notificationRowRecipe, profileSummaryRecipe, iconTileRecipe, composerQuickInsertRecipe } from "./screen-patterns.js";
|
|
224
257
|
/** One typed registry prevents catalog recipe names from drifting into strings. */
|
|
225
258
|
export const recipeRegistry = {
|
|
226
259
|
imageChoiceRecipe,
|
|
@@ -321,5 +354,14 @@ export const recipeRegistry = {
|
|
|
321
354
|
treeRecipe,
|
|
322
355
|
uploadItemRecipe,
|
|
323
356
|
visuallyHiddenRecipe,
|
|
357
|
+
// Screen composition recipes (2026-10-17): registered so the screen catalog rows can bind their own values.
|
|
358
|
+
screenPatternRecipe,
|
|
359
|
+
searchScreenRecipe,
|
|
360
|
+
chatMessageRecipe,
|
|
361
|
+
commentThreadRecipe,
|
|
362
|
+
notificationRowRecipe,
|
|
363
|
+
profileSummaryRecipe,
|
|
364
|
+
iconTileRecipe,
|
|
365
|
+
composerQuickInsertRecipe,
|
|
324
366
|
};
|
|
325
367
|
//# sourceMappingURL=catalog.js.map
|