@hjmds/design-contracts 1.49.0 → 1.50.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/catalog.d.ts CHANGED
@@ -662,14 +662,14 @@ export declare const componentCatalog: readonly [{
662
662
  }, {
663
663
  readonly recipe: "drawingEditorRecipe";
664
664
  readonly surfaceStatus: {
665
- readonly web: "beta";
666
- readonly native: "beta";
665
+ readonly web: "stable";
666
+ readonly native: "stable";
667
667
  };
668
668
  readonly name: "DrawingEditor";
669
669
  readonly label: "손그림 편집기";
670
670
  readonly category: "input";
671
671
  readonly platform: "adaptive";
672
- readonly status: "beta";
672
+ readonly status: "stable";
673
673
  }, {
674
674
  readonly recipe: "colorPickerRecipe";
675
675
  readonly surfaceStatus: {
package/dist/catalog.js CHANGED
@@ -124,7 +124,7 @@ export const componentCatalog = [
124
124
  { name: "DatePicker", label: "날짜 선택", category: "input", platform: "adaptive", status: "stable", ...surfaceMaturity("stable", "stable"), recipe: "datePickerRecipe", behavior: "datePicker" },
125
125
  { name: "DateRangePicker", label: "기간 선택", category: "input", platform: "adaptive", status: "stable", ...surfaceMaturity("stable", "stable"), aliases: ["DateRange"], recipe: "dateRangeRecipe", behavior: "dateRange" },
126
126
  // 2026-10-27: Diairy and Spint used duplicated paint editors; shared UI and history now live here.
127
- { name: "DrawingEditor", label: "손그림 편집기", category: "input", platform: "adaptive", status: "beta", ...surfaceMaturity("beta", "beta"), recipe: "drawingEditorRecipe" },
127
+ { name: "DrawingEditor", label: "손그림 편집기", category: "input", platform: "adaptive", status: "stable", ...surfaceMaturity("stable", "stable"), recipe: "drawingEditorRecipe" },
128
128
  { name: "ColorPicker", label: "색상 선택기", companions: ["ColorSwatchPicker"], category: "input", platform: "adaptive", status: "stable", ...surfaceMaturity("stable", "stable"), recipe: "colorPickerRecipe" },
129
129
  { name: "FilePicker", label: "파일 선택", category: "input", platform: "adaptive", status: "stable", ...surfaceMaturity("stable", "stable"), recipe: "filePickerRecipe", behavior: "filePicker", aliases: ["Upload"], ...evidenceNeeded("Web은 native file input과 dropzone 선택을, Native는 제품 소유 picker adapter 연결을 제공하고 양쪽이 같은 accept·size·count resolver를 사용합니다. 실제 OS picker 동작은 소비 앱 QA에서 확인합니다.") },
130
130
  // Both renderers now focus the product-selected first invalid field; field ordering and validation stay product-owned (docs/form.md).
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import { timePickerRecipe } from \"./time-picker.js\";\nimport { affixRecipe } from \"./affix.js\";\nimport { watermarkRecipe } from \"./watermark.js\";\nimport { drawingEditorRecipe } from \"./drawing-editor.js\";\nimport { colorPickerRecipe } from \"./color-picker.js\";\nimport { masonryRecipe } from \"./masonry.js\";\nimport { imageChoiceRecipe } from \"./image-choice.js\";\nimport { virtualListRecipe } from \"./virtual-list.js\";\nimport { qrCodeRecipe } from \"./qr-code-recipe.js\";\nimport { thinkingOrbRecipe } from \"./thinking-orb-recipe.js\";\nimport type { BehaviorName } from \"./behaviors.js\";\n\nexport type ComponentCategory =\n | \"foundation\"\n | \"layout\"\n | \"action\"\n | \"input\"\n | \"navigation\"\n | \"data-display\"\n | \"feedback\"\n | \"overlay\"\n | \"provider\"\n | \"utility\";\n\nexport type ComponentPlatform = \"shared\" | \"adaptive\" | \"web\" | \"native\";\nexport type ComponentStatus = \"stable\" | \"beta\" | \"planned\" | \"deprecated\";\nexport type ComponentSurface = \"web\" | \"native\";\nexport type ComponentSurfaceStatus = ComponentStatus | \"unsupported\";\nexport type ComponentSurfaceMaturity = Readonly<\n Record<ComponentSurface, ComponentSurfaceStatus>\n>;\nexport type ComponentRoadmapState =\n | \"contract-ready\"\n | \"composed\"\n | \"evidence-needed\"\n | \"prerequisite\"\n | \"declined\";\n\nexport type ComponentRoadmap = Readonly<{\n state: ComponentRoadmapState;\n summary: string;\n /** Canonical components that solve this reference problem together. */\n targets?: readonly string[];\n}>;\n\nexport type ComponentNonVisualEvidence = \"provider-adapter\";\n\nexport type ComponentCatalogEntry = Readonly<{\n name: string;\n category: ComponentCategory;\n platform: ComponentPlatform;\n /** Contract maturity. Renderer maturity is tracked independently per surface. */\n status: ComponentStatus;\n /**\n * Renderer evidence for each surface. Built-in entries always provide this\n * matrix. It stays optional so catalog entries authored against the pre-0.6\n * shape can still be passed to public helpers during migration.\n */\n surfaceStatus?: ComponentSurfaceMaturity;\n /** Search terms and familiar ecosystem names; never an API compatibility promise. */\n aliases?: readonly string[];\n recipe?: RecipeName;\n behavior?: BehaviorName;\n /** Explicit evidence for a mature contract whose value is not a visual recipe. */\n nonVisualEvidence?: ComponentNonVisualEvidence;\n /** Why the row exists at its current maturity and what event moves it forward. */\n roadmap?: ComponentRoadmap;\n /*\n 2026-10-18 registration input consolidated here. Adding one component used to touch eight hand-kept\n registries (ids, Korean labels, evidence claims, Web preview names, Native example index, story groups,\n public API map, platform-only Storybook exceptions); the 22 screen compositions needed 86 files. The\n fields below are the only authored facts those projections need; everything else derives from this row.\n */\n /**\n * Stable kebab-case id. Defaults to the kebab form of `name` (`componentIdOf`). Set it only when a row\n * was renamed after its id shipped, so documentation keys and consumer catalog snapshots survive.\n */\n id?: string;\n /** Purpose-based Korean item name used by both Storybooks (docs/STORYBOOK_NAVIGATION.md §1.3). */\n label?: string;\n /** Public renderer symbols that are named regions or variants of this contract, not rows of their own. */\n companions?: readonly string[];\n /** Optional extensions that reuse this contract without inheriting its maturity (public-component-map.md). */\n extensions?: readonly string[];\n /**\n * 만들지 않기로 **확정한** 항목의 사유. `status`는 구현 성숙도 축이고 이것은\n * \"만들 것인가\"라는 다른 질문이라 직교 필드로 둔다.\n *\n * 이 필드가 필요한 이유: crosswalk의 `targets`가 이 항목들을 가리키고\n * `targets.length > 0`이 테스트로 강제되므로, 흡수할 다른 이름이 없으면 행을 지울 수\n * 없다. 그렇다고 `planned`로 두면 \"아직 안 만들었지만 만들 것\"이라는 거짓을 말한다.\n * 근거는 `docs/<id>.md`에 있고, 그 문서의 존재를 테스트가 강제한다.\n */\n declinedReason?: string;\n}>;\n\n/*\n 2026-09-18 현재 이 상태를 쓰는 행이 없다 — 계약만 준비돼 있던 항목이 모두 renderer나\n 조합으로 닫혔다. `prerequisite`와 같은 이유로 helper는 남긴다: 다음에 계약만 먼저\n 들어오는 컴포넌트가 생기면 바로 쓴다.\n*/\nexport const contractReady = (summary: string) => ({\n roadmap: { state: \"contract-ready\", summary },\n} as const);\n// Compositions live in Showcase patterns and map to their implemented primitives in the\n// reference crosswalk; reserving Planned rows incorrectly counted them as missing work.\n// Promotion uses renderer requirements; adoption notes are not gates (docs/stable-promotion.md).\nconst evidenceNeeded = (summary: string) => ({\n roadmap: { state: \"evidence-needed\", summary },\n} as const);\n/*\n 2026-09-18 현재 사용하는 행이 없다(Cascader가 마지막이었고 조합으로 풀렸다). 상태 값\n 자체는 타입과 문서에 남아 있으므로 helper도 함께 둔다 — 다음에 선행 조건이 실제로 생기면\n 다시 쓰고, 지금은 export로 미사용 오류만 피한다. 상태 값을 지우는 결정은 별도 판단이다.\n*/\nexport const prerequisite = (summary: string, targets: readonly string[]) => ({\n roadmap: { state: \"prerequisite\", summary, targets },\n} as const);\n\nconst surfaceMaturity = <\n const Web extends ComponentSurfaceStatus,\n const Native extends ComponentSurfaceStatus,\n>(web: Web, native: Native) => ({ surfaceStatus: { web, native } } as const);\n\n/**\n * Resolves renderer maturity without conflating it with contract maturity.\n * The fallback preserves custom catalog entries authored before\n * `surfaceStatus`; every built-in entry uses the explicit matrix.\n */\nexport function getComponentSurfaceStatus(\n entry: ComponentCatalogEntry,\n surface: ComponentSurface,\n): ComponentSurfaceStatus {\n if (entry.surfaceStatus) return entry.surfaceStatus[surface];\n if (entry.platform === \"shared\" || entry.platform === \"adaptive\") return entry.status;\n if (entry.platform === surface) return entry.status;\n return \"unsupported\";\n}\n\n/**\n * The catalog is a scope and maturity contract, not an implementation claim.\n * `shared` means API/visual parity. `adaptive` means shared intent with native\n * platform behavior. Web/native entries are intentionally platform-specific.\n */\nexport const componentCatalog = [\n { name: \"Text\", label: \"본문 글자\", companions: [\"StatusText\"], extensions: [\"GravityLetters\"], category: \"foundation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"textRecipe\" },\n // Web semantic element is stable; React Native has no equivalent semantic elements.\n { name: \"TextFormat\", label: \"글자 서식\", category: \"foundation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), aliases: [\"Kbd\", \"Code\", \"Blockquote\"], recipe: \"textFormatRecipe\", behavior: \"textFormat\" },\n { name: \"Heading\", label: \"제목\", category: \"foundation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"headingRecipe\", behavior: \"heading\" },\n { name: \"Icon\", label: \"아이콘\", category: \"foundation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"iconRecipe\" },\n { name: \"Surface\", label: \"배경 영역\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"surfaceRecipe\" },\n // Display promotions use renderer evidence, not product adoption counts (docs/stable-core.md).\n { name: \"Divider\", label: \"구분선\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"dividerRecipe\" },\n { name: \"Section\", label: \"섹션\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"sectionRecipe\" },\n { name: \"Stack\", label: \"가로·세로 배치\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"stackRecipe\", aliases: [\"Flex\", \"Space\", \"Inline\"] },\n { name: \"Container\", label: \"컨테이너\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"containerRecipe\" },\n // Both renderers now pass the required scenario matrix, including long child copy; the product keeps media semantics.\n { name: \"AspectRatio\", label: \"화면 비율\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"aspectRatioRecipe\", ...evidenceNeeded(\"Radix·Chakra·Mantine·Carbon에서 반복되는 media geometry 문제를 shared primitive로 채택했습니다. 제품이 object-fit을 소유하고 renderer는 비율만 보장합니다.\") },\n // Both renderers now exercise long child content in addition to the responsive geometry contract.\n { name: \"Grid\", label: \"격자\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"gridRecipe\", ...evidenceNeeded(\"공통 window class·responsive value·row-major geometry 계약과 공식 Web/RN default renderer 증거가 연결됐습니다. 남은 환경 증거는 generated 보고서에서 추적합니다.\") },\n // Interaction evidence belongs to its declared surface; inventing a Native skip-link only to mirror Web would add unsupported behavior.\n { name: \"Layout\", label: \"화면 기본 구조\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"AppShell\"], recipe: \"layoutRecipe\", behavior: \"layout\", ...evidenceNeeded(\"Web skip-link and renderer scenarios verified.\") },\n { name: \"Top\", label: \"화면 제목과 설명\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"topRecipe\", behavior: \"top\" },\n { name: \"Masonry\", label: \"높이가 다른 카드 배치\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"masonryRecipe\" },\n // Stable after the real Web matrix and focused separator keyboard proof pass; collapse and N-pane stay out of the contract.\n { name: \"Splitter\", label: \"분할 영역 조절\", category: \"layout\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), aliases: [\"SplitPane\"], recipe: \"splitterRecipe\", behavior: \"splitter\", ...evidenceNeeded(\"Web long-copy, environment, accessibility, drag and focused keyboard proofs pass.\") },\n { name: \"Button\", label: \"버튼\", companions: [\"ClipboardButton\", \"ButtonLink\"], extensions: [\"ReactionPicker\", \"InlineConfirm\"], category: \"action\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"buttonRecipe\" },\n { name: \"IconButton\", label: \"아이콘 버튼\", companions: [\"ClipboardIconButton\", \"IconButtonLink\"], extensions: [\"NotificationBell\"], category: \"action\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"iconButtonRecipe\" },\n // Web anchor Enter activation and Native router activation are now asserted at the renderer boundary.\n { name: \"Link\", label: \"링크\", category: \"action\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"linkRecipe\", behavior: \"link\" },\n { name: \"BottomCTA\", label: \"하단 실행 버튼\", category: \"action\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"bottomCtaRecipe\" },\n { name: \"FloatingActionButton\", label: \"플로팅 실행 버튼\", category: \"action\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"floatingActionButtonRecipe\", behavior: \"floatingActionButton\", aliases: [\"FloatButton\", \"FAB\"], ...evidenceNeeded(\"Web/RN의 고정 생성 행동, 스크롤 방향 hook, 실제 높이·safe area 여백을 제공합니다. docs/floating-action-button.md에서 전체 이름·focus 유지와 목록 가림을 검증합니다.\") },\n // Product-owned auth copy stays in slots; both renderer matrices now exercise long hero text.\n { name: \"AuthScreenLayout\", label: \"로그인 화면\", id: \"auth-screen\", companions: [\"AuthScreenHero\", \"AuthScreenFooter\"], category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"SignInLayout\"], recipe: \"authScreenRecipe\", behavior: \"authScreen\", ...evidenceNeeded(\"로그인 화면의 두 영역 골격입니다. 히어로와 주 행동을 세로 중앙에 한 덩어리로 두고 동의 고지·정책 링크를 바닥에 붙입니다. 문구·마크·제공자 목록·링크 목적지는 제품이 슬롯으로 넘기며, 인증 흐름은 이 계약에 없습니다.\") },\n // Enter/Space and Native host press now invoke the explicit product-owned action.\n { name: \"AuthProviderButton\", label: \"소셜 로그인 버튼\", category: \"action\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"SocialLoginButton\"], recipe: \"authProviderButtonRecipe\", behavior: \"authProviderButton\", ...evidenceNeeded(\"Google·Kakao·Naver·Apple 로그인 버튼입니다. 색은 제공자 가이드라인 값이고 테마가 다시 칠하지 않으며, 로고 자산과 문구는 제품이 넘깁니다. 실제 제공자 심사 통과는 제품 소유입니다.\") },\n { name: \"Field\", label: \"입력 필드\", companions: [\"TextField\"], extensions: [\"FieldGroup\", \"DateEntry\", \"GestureSheetInput\"], category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"fieldRecipe\", behavior: \"field\" },\n // Long labels wrap and Web typing/clear plus Native input/clear actions are covered.\n { name: \"SearchField\", label: \"검색 입력\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"searchFieldRecipe\", behavior: \"searchField\" },\n { name: \"TextArea\", label: \"여러 줄 입력\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"fieldRecipe\" },\n // Web Enter/Space and Native host reveal actions are now verified on both renderers.\n { name: \"PasswordField\", label: \"비밀번호 입력\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Input.Password\"], recipe: \"passwordFieldRecipe\", behavior: \"passwordField\" },\n // One accessible text input, numeric sanitization, wrapping label, and input actions are covered per renderer.\n { name: \"OtpField\", label: \"인증번호 입력\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Input.OTP\"], recipe: \"otpFieldRecipe\", behavior: \"otpField\" },\n // Web Space and Native host press now verify the single checkbox state transition.\n { name: \"Checkbox\", label: \"체크박스\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectionControlRecipe\", behavior: \"checkbox\" },\n // Long option labels now have matrix coverage on both renderers.\n { name: \"Radio\", label: \"라디오 버튼\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectionControlRecipe\" },\n // Web Space and Native host press now prove the choice update on each renderer.\n { name: \"CheckboxGroup\", label: \"체크박스 그룹\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectionGroupRecipe\", behavior: \"checkboxGroup\" },\n // Web Space and Native host press now verify the selected option transition.\n { name: \"RadioGroup\", label: \"라디오 버튼 그룹\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectionGroupRecipe\", behavior: \"radioGroup\" },\n // Web Space and Native host press now prove the checked state transition.\n { name: \"Switch\", label: \"스위치\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"switchRecipe\", behavior: \"switch\" },\n // Web Space and Native host press now verify selectable Chip state changes.\n { name: \"Chip\", label: \"선택 칩\", companions: [\"ShortcutRail\"], category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"chipRecipe\", behavior: \"chip\" },\n // Image tile single/multiple selection (2026-10-17 registration: independent radio/checkbox semantics).\n // 2026-10-26: both renderer behavior/environment proofs now support the stable contract (stable-core.md).\n { name: \"ImageChoiceGroup\", label: \"이미지 선택\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"imageChoiceRecipe\" },\n // Web arrow-key selection and Native host press now prove option changes.\n { name: \"SegmentedControl\", label: \"버튼형 선택\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"segmentedControlRecipe\", behavior: \"segmentedControl\" },\n // Web Space and Native host press now verify the pressed-id set transition.\n { name: \"ToggleGroup\", label: \"토글 그룹\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"toggleGroupRecipe\", behavior: \"toggleGroup\", ...evidenceNeeded(\"여러 개를 동시에 켜는 버튼 묶음입니다. 하나만 고르는 자리는 SegmentedControl이 그대로 갖습니다.\") },\n // Both renderer matrices and the surface-specific commit/remove regressions pass; Native intentionally commits on Return, not blur.\n { name: \"TagsInput\", label: \"태그 입력\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"TagField\", \"ChipsInput\"], recipe: \"tagsInputRecipe\", behavior: \"tagsInput\", ...evidenceNeeded(\"자유 입력 다중값 계약입니다. 정책 판정은 공통이며 Web Enter와 Native Return 확정, 위치 기반 삭제 action을 각 renderer에서 검증합니다. Web-only 후보 키 탐색과 2단계 Backspace는 Native 동등 동작으로 주장하지 않습니다.\") },\n // Web ArrowRight and Native adjustable increment now prove the same step transition.\n { name: \"Slider\", label: \"슬라이더\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"sliderRecipe\", behavior: \"slider\", ...evidenceNeeded(\"Web range input과 Native adjustable renderer가 같은 범위·step 계약을 실행합니다.\") },\n // Long labels, Web ArrowUp, and Native adjustable increment now have renderer proofs.\n { name: \"NumberField\", label: \"숫자 입력\", extensions: [\"DurationField\"], category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"numberFieldRecipe\", behavior: \"numberField\" },\n // Long labels and Web arrow/Enter plus Native host option activation now have renderer proofs.\n { name: \"Select\", label: \"목록에서 선택\", companions: [\"NativeSelect\"], category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectRecipe\", behavior: \"select\" },\n // Long labels and Web filter/ArrowDown/Enter plus Native option/after-dismiss actions now have renderer proofs.\n { name: \"Combobox\", label: \"검색형 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"comboboxRecipe\", behavior: \"combobox\", ...evidenceNeeded(\"걸러진 목록에서 고르는 동작을 웹·앱 각각 검증했습니다. 앱은 시트가 닫힌 뒤 선택한 값을 확정하고, 웹 키보드 선택은 별도 상호작용 계약으로 남습니다.\") },\n // Product adoption and device QA follow the consumer release; both renderer contracts now have complete required proofs.\n { name: \"TimePicker\", label: \"시각 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"timePickerRecipe\", behavior: \"timePicker\" },\n { name: \"DatePicker\", label: \"날짜 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"datePickerRecipe\", behavior: \"datePicker\" },\n { name: \"DateRangePicker\", label: \"기간 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"DateRange\"], recipe: \"dateRangeRecipe\", behavior: \"dateRange\" },\n // 2026-10-27: Diairy and Spint used duplicated paint editors; shared UI and history now live here.\n { name: \"DrawingEditor\", label: \"손그림 편집기\", category: \"input\", platform: \"adaptive\", status: \"beta\", ...surfaceMaturity(\"beta\", \"beta\"), recipe: \"drawingEditorRecipe\" },\n { name: \"ColorPicker\", label: \"색상 선택기\", companions: [\"ColorSwatchPicker\"], category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"colorPickerRecipe\" },\n { name: \"FilePicker\", label: \"파일 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"filePickerRecipe\", behavior: \"filePicker\", aliases: [\"Upload\"], ...evidenceNeeded(\"Web은 native file input과 dropzone 선택을, Native는 제품 소유 picker adapter 연결을 제공하고 양쪽이 같은 accept·size·count resolver를 사용합니다. 실제 OS picker 동작은 소비 앱 QA에서 확인합니다.\") },\n // Both renderers now focus the product-selected first invalid field; field ordering and validation stay product-owned (docs/form.md).\n { name: \"Form\", label: \"입력 양식\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"formRecipe\", behavior: \"form\" },\n { name: \"Agreement\", label: \"약관 동의\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"agreementRecipe\", behavior: \"agreement\", ...evidenceNeeded(\"전체 동의는 항목의 합에서 파생하고 필수 항목만 제출 가능 여부를 정합니다. 전문 열기는 동의와 분리된 별도 tab stop입니다. 제품의 문구·링크·법적 검토와 동의 기록은 제품 소유입니다.\") },\n // Both renderer matrices now prove caret insertion, named candidate actions, and long-copy behavior; IME device certification stays consumer QA because this contract does not control composition.\n { name: \"Mentions\", label: \"사용자 언급\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"comboboxRecipe\", behavior: \"combobox\" },\n { name: \"TransferList\", label: \"목록 간 항목 이동\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Transfer\"], recipe: \"transferListRecipe\", behavior: \"transferList\" },\n // Upload/network lifecycle belongs to consuming products; both renderers verify the caller-owned status/action contract.\n { name: \"UploadItem\", label: \"업로드 항목\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"uploadItemRecipe\", behavior: \"uploadItem\" },\n { name: \"Tabs\", label: \"탭\", companions: [\"TabPanel\"], category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"tabsRecipe\", behavior: \"tabs\", ...evidenceNeeded(\"웹은 화살표 키 이동이 비활성 탭을 건너뛰고 활성화 전까지 수동 선택을 유지하며 초점 탭을 보이게 스크롤합니다(동작 줄이기는 즉시 스크롤). 앱은 계약 이름의 activate 동작과 이름 붙은 패널을 노출합니다.\") },\n // Public API/Web are stable; Native long-copy evidence remains open (docs/stable-core.md).\n // Native title text now passes the long-copy scenario matrix, completing its renderer maturity.\n { name: \"TopBar\", label: \"상단 탐색 막대\", companions: [\"NavigationBar\", \"TopBarAction\"], category: \"navigation\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"topBarRecipe\" },\n // Web keyboard and long-copy renderer proofs now pass; Native remains unsupported because its navigation pattern is product-owned.\n { name: \"Sidebar\", label: \"사이드바\", category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), aliases: [\"NavigationRail\", \"SideNav\"], recipe: \"sidebarRecipe\", behavior: \"sidebar\" },\n { name: \"BottomNavigation\", label: \"하단 탐색\", companions: [\"BottomNavigationInsetProvider\"], category: \"navigation\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"bottomNavigationRecipe\", behavior: \"bottomNavigation\", ...evidenceNeeded(\"Web Tab·Enter link와 Native route/reselect host action이 navigator 소유 선택 상태를 보존하고, 긴 목적지 label을 보이는 문구와 접근성 이름에 유지합니다.\") },\n // Product routes and device QA remain consumer-owned; the Web renderer and route-link proofs now pass.\n { name: \"Breadcrumb\", label: \"이동 경로\", category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"breadcrumbRecipe\", behavior: \"breadcrumb\" },\n // Numeric-only rendering has no visible prose slot; four-digit page layout remains in the 320px/2x/RTL proof.\n // Carousel's dot row on its own for a product-owned pager (Utilverse launcher, 2026-10-18); same recipe, no new visuals.\n { name: \"PageIndicator\", label: \"페이지 위치 표시\", category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"carouselRecipe\" },\n { name: \"Pagination\", label: \"페이지 이동\", category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"paginationRecipe\", behavior: \"pagination\" },\n { name: \"LoadMore\", label: \"더 보기\", category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"loadMoreRecipe\", behavior: \"loadMore\", ...evidenceNeeded(\"Web keyboard fallback·viewport observer와 Native onEndReached·retry action에서 requestKey 중복 방지, busy/error/complete 상태와 긴 현지화 문구를 검증했습니다. Native FlatList/device 통합은 소비 앱 QA입니다.\") },\n // This non-interactive progress summary now has long-label matrix coverage on both renderers.\n { name: \"Steps\", label: \"단계 탐색\", extensions: [\"StepPlayer\"], category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"stepsRecipe\", ...evidenceNeeded(\"단일 cursor에서 상태를 파생하는 Web·Native renderer와 기본 실행 증거가 연결됐습니다. 실제 다단계 흐름과 보조기기 증거가 더 필요합니다.\") },\n // The Web interaction, disabled-item handling, long labels, and environment matrix have executable evidence; Native is unsupported by design.\n { name: \"Menubar\", label: \"메뉴 막대\", category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"menubarRecipe\", behavior: \"menubar\" },\n { name: \"ContextMenu\", label: \"상황별 메뉴\", extensions: [\"NativeContextMenu\"], category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"menuRecipe\", behavior: \"contextMenu\" },\n { name: \"Menu\", label: \"메뉴\", extensions: [\"MorphingMenu\"], category: \"navigation\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"menuRecipe\", behavior: \"menu\", aliases: [\"Dropdown\"] },\n { name: \"Anchor\", label: \"문서 내 바로가기\", category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"anchorRecipe\", behavior: \"anchor\" },\n // Visible content is initials or media; accessible names and fallback states have dedicated proofs.\n { name: \"Avatar\", label: \"아바타\", companions: [\"AvatarGroup\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"avatarRecipe\" },\n { name: \"Asset\", label: \"이미지·영상 표시\", companions: [\"AssetGroup\"], extensions: [\"VoiceNote\"], category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Media\", \"Artwork\"], recipe: \"assetRecipe\", behavior: \"asset\", ...evidenceNeeded(\"아이콘·이미지·Lottie·비디오를 한 액자 규칙으로 묶습니다. 재생기는 슬롯으로 받아 이 패키지가 의존하지 않습니다.\") },\n { name: \"Badge\", label: \"배지\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"badgeRecipe\" },\n // This component renders a bounded number or dot, not arbitrary visible prose.\n { name: \"CounterBadge\", label: \"숫자 배지\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"counterBadgeRecipe\" },\n { name: \"Card\", label: \"카드\", companions: [\"QuoteCard\"], extensions: [\"DocumentResource\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"cardRecipe\" },\n // The list's visible rows own variable-length titles, now covered by each renderer's matrix.\n { name: \"List\", label: \"목록\", companions: [\"CollectionRail\", \"ListSeparator\"], extensions: [\"TaskList\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"listRecipe\" },\n { name: \"ListRow\", label: \"목록 행\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"listRowRecipe\" },\n { name: \"VirtualList\", label: \"가상 목록\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Listy\"], recipe: \"virtualListRecipe\" },\n { name: \"Collapsible\", label: \"접기와 펼치기\", companions: [\"CollapsibleMarker\"], extensions: [\"FolderPreview\"], category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Disclosure\"], recipe: \"collapsibleRecipe\", behavior: \"collapsible\" },\n { name: \"Accordion\", label: \"아코디언\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"accordionRecipe\", behavior: \"disclosureGroup\", ...evidenceNeeded(\"묶음 안의 펼침 상태와 제목·내용의 접근성 연결을 웹 키보드와 앱 누르기 회귀 검사로 확인했습니다.\") },\n { name: \"Statistic\", label: \"수치 표시\", companions: [\"StatisticGroup\"], extensions: [\"AnimatedStatistic\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"statisticRecipe\" },\n // Timeline labels are visible prose and now have long-copy matrix coverage on both renderers.\n { name: \"Timeline\", label: \"타임라인\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"timelineRecipe\", ...evidenceNeeded(\"두 제품의 이력 화면이 같은 항목 설명과 웹·앱의 점·연결선 렌더러를 씁니다. 남은 렌더러 증거는 자동 생성 보고서에서 추적합니다.\") },\n // 2026-10-26: the remaining renderer contracts are supported as stable after targeted behavior/environment proof; see stable-core.md.\n { name: \"DataTable\", label: \"데이터 표\", companions: [\"Table\", \"LineScore\", \"MatrixTable\", \"ComparisonTable\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"dataTableRecipe\", behavior: \"dataTable\" },\n // 2026-10-14 user request: chart drawing absorbed from product libraries (docs/chart.md); one family for all chart types.\n { name: \"Chart\", label: \"차트\", companions: [\"LineChart\", \"BarChart\", \"PieChart\", \"RadarChart\", \"ScatterChart\", \"Sparkline\", \"ChartLegend\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"chartRecipe\", behavior: \"chart\" },\n { name: \"Tree\", label: \"트리 목록\", category: \"data-display\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"treeRecipe\", behavior: \"tree\" },\n { name: \"Calendar\", label: \"달력\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"calendarRecipe\", behavior: \"calendar\" },\n { name: \"Carousel\", label: \"캐러셀\", extensions: [\"CarouselMotion\"], category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"carouselRecipe\", behavior: \"carousel\" },\n { name: \"DescriptionList\", label: \"설명 목록\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"descriptionListRecipe\", aliases: [\"Descriptions\"] },\n // Image alt is accessibility copy, not visible renderer text; load and fallback behavior remain covered.\n { name: \"Image\", label: \"이미지\", extensions: [\"GridReveal\", \"ImageViewer\", \"ImageViewerTrigger\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"imageRecipe\", ...evidenceNeeded(\"웹은 불러오기·실패·대체 표시와 프레임워크 연결, 앱은 대체 표시와 최적화 호스트 연결이 기본 실행 증거입니다. 남은 렌더러 증거는 자동 생성 보고서에서 추적합니다.\") },\n { name: \"QRCode\", label: \"큐알 코드\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"qrCodeRecipe\" },\n { name: \"Tag\", label: \"태그\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"tagRecipe\" },\n { name: \"Tour\", label: \"사용 안내 둘러보기\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"tourRecipe\", behavior: \"tour\", aliases: [\"CoachMark\"] },\n { name: \"EmptyState\", label: \"빈 상태\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"emptyStateRecipe\" },\n { name: \"Notice\", label: \"안내 메시지\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"noticeRecipe\" },\n { name: \"Progress\", label: \"진행 표시\", extensions: [\"ScrollProgress\"], category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"progressRecipe\" },\n // Both renderer matrices and installed iOS/Android Skia smoke pass; optional host linkage remains explicit (docs/thinking-orb.md).\n { name: \"ThinkingOrb\", label: \"생각 중 표시\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"thinkingOrbRecipe\" },\n { name: \"Spinner\", companions: [\"PendingContent\"], label: \"로딩 표시\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"spinnerRecipe\" },\n { name: \"Skeleton\", label: \"스켈레톤\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"skeletonRecipe\" },\n // Product adoption is tracked separately from the complete renderer matrix (docs/stable-core.md).\n { name: \"Result\", label: \"결과 안내\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"resultRecipe\" },\n // Product-owned notice copy is an intended visible text slot; both renderers now prove long-copy wrapping.\n { name: \"BottomInfo\", label: \"하단 안내\", category: \"feedback\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"bottomInfoRecipe\", behavior: \"bottomInfo\", ...evidenceNeeded(\"주 행동 아래의 상시 안내 문장입니다. 상태를 알리는 Notice와 달리 tone·아이콘이 없고 사라지지 않습니다.\") },\n // Liquid is an opt-in presentation; Web close/Escape and Native close actions are covered separately.\n { name: \"Toast\", label: \"토스트\", companions: [\"ToastProvider\", \"ToastRegion\"], category: \"feedback\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"toastRecipe\", behavior: \"toast\", aliases: [\"Notification\"] },\n { name: \"Watermark\", label: \"워터마크\", category: \"feedback\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"watermarkRecipe\" },\n { name: \"Dialog\", label: \"대화상자\", companions: [\"OverlayStackProvider\", \"ImmersiveOverlay\"], category: \"overlay\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"dialogRecipe\", behavior: \"dialog\" },\n { name: \"AlertDialog\", label: \"확인 대화상자\", companions: [\"AlertDialogQueueProvider\"], category: \"overlay\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"alertDialogRecipe\", behavior: \"alertDialog\" },\n { name: \"Sheet\", label: \"시트\", extensions: [\"GestureSheet\", \"GestureSheetProvider\", \"SheetPanel\"], category: \"overlay\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"sheetRecipe\", behavior: \"sheet\" },\n { name: \"SidePanel\", label: \"측면 패널\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"sidePanelRecipe\", behavior: \"sidePanel\" },\n { name: \"Popover\", label: \"팝오버\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"popoverRecipe\", behavior: \"popover\" },\n { name: \"Tooltip\", label: \"툴팁\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"tooltipRecipe\", behavior: \"tooltip\" },\n { name: \"CommandPalette\", label: \"명령 검색\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"commandPaletteRecipe\", behavior: \"commandPalette\" },\n { name: \"Affix\", label: \"고정 배치\", category: \"utility\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"affixRecipe\" },\n { name: \"DesignSystemProvider\", label: \"디자인 시스템 설정\", category: \"provider\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"ConfigProvider\"], nonVisualEvidence: \"provider-adapter\" },\n { name: \"SkipNav\", label: \"본문 바로가기\", category: \"utility\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), aliases: [\"SkipLink\"], recipe: \"skipNavRecipe\", behavior: \"skipNav\" },\n // Hidden copy is validated as an accessible node; visual long-copy overflow is inapplicable by design.\n { name: \"VisuallyHidden\", label: \"화면 읽기 도구용 글자\", 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를 사용하므로 의도적으로 지원하지 않습니다.\") },\n /*\n 2026-10-17 screen compositions registered. These screen compositions ship from the renderers' ./screens and ./screen-flows\n subpaths and products use them as the common screen structure (2026-10-15 user rule), but they were\n classified as supplemental to keep the catalog frozen. The consumer checker resolves imported symbols\n only against canonical catalog ids, so 606 of 690 unresolved-symbol findings across six products (88%)\n were these names (STANDARD_SCOPE_REVIEW_2026-10 §1.2). The freeze ended on 2026-10-17\n (docs/stable-promotion.md), so they register as canonical rows. On 2026-10-18 both renderer default\n proofs and applicable environment matrices passed after repairing the host harness, screen body naming\n and fixtures. Stable promises the public contract, not device QA or consumer adoption (docs/stable-core.md).\n */\n { name: \"ScreenLayout\", label: \"화면 골격\", companions: [\"ScreenHost\", \"ScreenRefreshControl\"], category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"CompositionLayout\", label: \"구성 골격\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"SettingsScreen\", label: \"설정 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"SearchScreen\", label: \"검색 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"searchScreenRecipe\" },\n { name: \"EditorScreen\", label: \"편집 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"PermissionScreen\", label: \"권한 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"OnboardingScreen\", label: \"온보딩 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"ModerationScreen\", label: \"신고 화면\", companions: [\"ModerationForm\"], category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"ChatScreen\", label: \"채팅 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"NotificationInboxScreen\", label: \"알림함 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"CommentThreadScreen\", label: \"댓글 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"commentThreadRecipe\" },\n { name: \"ListDetailScreen\", label: \"목록 상세 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n // MediaSelectionCell (2026-10-18): the screen's own item cell, exported so virtualized hosts render the same cell.\n { name: \"MediaSelectionScreen\", label: \"미디어 선택 화면\", companions: [\"MediaSelectionCell\"], category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"ProfileScreen\", label: \"프로필 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n // MediaAlbumPageStatus (2026-10-18): loading/failed page of ChatMessage/CommentThreadRow `mediaAlbum`.\n { name: \"ChatMessage\", label: \"채팅 말풍선\", companions: [\"MediaAlbumPageStatus\"], category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"chatMessageRecipe\" },\n // 2026-10-18 timeline pieces that products drew themselves (BurnTok DM typing row, Utilverse chat time row).\n // 2026-10-26: both renderer proofs cover these public chat primitives (docs/stable-core.md).\n { name: \"TypingIndicator\", label: \"입력 중 표시\", category: \"feedback\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"typingIndicatorRecipe\" },\n { name: \"ChatDateSeparator\", label: \"대화 날짜 구분\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"chatDateSeparatorRecipe\" },\n { name: \"NotificationRow\", label: \"알림 미리보기 행\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"notificationRowRecipe\" },\n { name: \"NotificationItem\", label: \"알림 목록 항목\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"listRowRecipe\" },\n { name: \"CommentThreadRow\", label: \"댓글 행\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"commentThreadRecipe\" },\n { name: \"ProfileSummary\", label: \"프로필 요약\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"profileSummaryRecipe\" },\n { name: \"IconTile\", label: \"아이콘 타일\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"iconTileRecipe\" },\n { name: \"MessageComposer\", label: \"메시지 작성창\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"composerQuickInsertRecipe\" },\n { name: \"PhotoSourceSheet\", label: \"사진 출처 시트\", category: \"overlay\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"sheetRecipe\" },\n] as const satisfies readonly ComponentCatalogEntry[];\n\nexport type ComponentName = (typeof componentCatalog)[number][\"name\"];\n\n/**\n * Kebab id of a catalog row: the explicit `id` override, else the kebab form of `name`\n * (QRCode → qr-code, BottomCTA → bottom-cta). `component-definitions.ts` mirrors this at the type level.\n */\nexport function componentIdOf(entry: Pick<ComponentCatalogEntry, \"name\" | \"id\">): string {\n return entry.id ?? entry.name.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").replace(/([A-Z])([A-Z][a-z])/g, \"$1-$2\").toLowerCase();\n}\n\nexport function summarizeComponentRoadmap(\n entries: readonly ComponentCatalogEntry[] = componentCatalog,\n): Readonly<Record<ComponentRoadmapState, number>> {\n return entries.reduce<Record<ComponentRoadmapState, number>>(\n (summary, entry) => {\n if (entry.roadmap) summary[entry.roadmap.state] += 1;\n return summary;\n },\n {\n \"contract-ready\": 0,\n composed: 0,\n \"evidence-needed\": 0,\n prerequisite: 0,\n declined: 0,\n },\n );\n}\nimport {\n accordionRecipe,\n alertDialogRecipe,\n avatarRecipe,\n badgeRecipe,\n bottomNavigationRecipe,\n bottomCtaRecipe,\n anchorRecipe,\n agreementRecipe,\n topRecipe,\n authProviderButtonRecipe,\n authScreenRecipe,\n headingRecipe,\n toggleGroupRecipe,\n tagsInputRecipe,\n skipNavRecipe,\n bottomInfoRecipe,\n sidebarRecipe,\n textFormatRecipe,\n collapsibleRecipe,\n menubarRecipe,\n assetRecipe,\n breadcrumbRecipe,\n aspectRatioRecipe,\n containerRecipe,\n calendarRecipe,\n cardRecipe,\n buttonRecipe,\n carouselRecipe,\n chipRecipe,\n comboboxRecipe,\n descriptionListRecipe,\n counterBadgeRecipe,\n dialogRecipe,\n dataTableRecipe,\n chartRecipe,\n datePickerRecipe,\n dateRangeRecipe,\n dividerRecipe,\n formRecipe,\n emptyStateRecipe,\n fieldRecipe,\n filePickerRecipe,\n iconButtonRecipe,\n iconRecipe,\n imageRecipe,\n linkRecipe,\n listRecipe,\n listRowRecipe,\n loadMoreRecipe,\n menuRecipe,\n noticeRecipe,\n paginationRecipe,\n popoverRecipe,\n numberFieldRecipe,\n progressRecipe,\n resultRecipe,\n searchFieldRecipe,\n selectRecipe,\n selectionGroupRecipe,\n sectionRecipe,\n segmentedControlRecipe,\n selectionControlRecipe,\n sheetRecipe,\n sidePanelRecipe,\n commandPaletteRecipe,\n layoutRecipe,\n otpFieldRecipe,\n passwordFieldRecipe,\n splitterRecipe,\n tourRecipe,\n transferListRecipe,\n skeletonRecipe,\n sliderRecipe,\n spinnerRecipe,\n stackRecipe,\n statisticRecipe,\n stepsRecipe,\n surfaceRecipe,\n switchRecipe,\n tabsRecipe,\n tagRecipe,\n textRecipe,\n timelineRecipe,\n toastRecipe,\n tooltipRecipe,\n topBarRecipe,\n treeRecipe,\n uploadItemRecipe,\n visuallyHiddenRecipe,\n} from \"./recipes.js\";\nimport { floatingActionButtonRecipe } from \"./floating-action-button.js\";\nimport { gridRecipe } from \"./grid.js\";\nimport { screenPatternRecipe, searchScreenRecipe, chatMessageRecipe, commentThreadRecipe, notificationRowRecipe, profileSummaryRecipe, iconTileRecipe, composerQuickInsertRecipe, typingIndicatorRecipe, chatDateSeparatorRecipe } from \"./screen-patterns.js\";\n\n/** One typed registry prevents catalog recipe names from drifting into strings. */\nexport const recipeRegistry = {\n drawingEditorRecipe,\n timePickerRecipe,\n imageChoiceRecipe,\n affixRecipe,\n watermarkRecipe,\n colorPickerRecipe,\n thinkingOrbRecipe,\n masonryRecipe,\n virtualListRecipe,\n qrCodeRecipe,\n accordionRecipe,\n alertDialogRecipe,\n avatarRecipe,\n badgeRecipe,\n bottomNavigationRecipe,\n bottomCtaRecipe,\n anchorRecipe,\n agreementRecipe,\n topRecipe,\n authProviderButtonRecipe,\n authScreenRecipe,\n headingRecipe,\n toggleGroupRecipe,\n tagsInputRecipe,\n skipNavRecipe,\n bottomInfoRecipe,\n sidebarRecipe,\n textFormatRecipe,\n collapsibleRecipe,\n menubarRecipe,\n assetRecipe,\n breadcrumbRecipe,\n aspectRatioRecipe,\n containerRecipe,\n calendarRecipe,\n cardRecipe,\n buttonRecipe,\n carouselRecipe,\n chipRecipe,\n comboboxRecipe,\n descriptionListRecipe,\n counterBadgeRecipe,\n dialogRecipe,\n dataTableRecipe,\n chartRecipe,\n datePickerRecipe,\n dateRangeRecipe,\n dividerRecipe,\n formRecipe,\n gridRecipe,\n emptyStateRecipe,\n fieldRecipe,\n filePickerRecipe,\n iconButtonRecipe,\n iconRecipe,\n imageRecipe,\n linkRecipe,\n listRecipe,\n listRowRecipe,\n loadMoreRecipe,\n menuRecipe,\n noticeRecipe,\n paginationRecipe,\n popoverRecipe,\n numberFieldRecipe,\n progressRecipe,\n resultRecipe,\n searchFieldRecipe,\n selectRecipe,\n selectionGroupRecipe,\n sectionRecipe,\n segmentedControlRecipe,\n selectionControlRecipe,\n sheetRecipe,\n sidePanelRecipe,\n commandPaletteRecipe,\n layoutRecipe,\n otpFieldRecipe,\n passwordFieldRecipe,\n splitterRecipe,\n floatingActionButtonRecipe,\n tourRecipe,\n transferListRecipe,\n skeletonRecipe,\n sliderRecipe,\n spinnerRecipe,\n stackRecipe,\n statisticRecipe,\n stepsRecipe,\n surfaceRecipe,\n switchRecipe,\n tabsRecipe,\n tagRecipe,\n textRecipe,\n timelineRecipe,\n toastRecipe,\n tooltipRecipe,\n topBarRecipe,\n treeRecipe,\n uploadItemRecipe,\n visuallyHiddenRecipe,\n // Screen composition recipes (2026-10-17): registered so the screen catalog rows can bind their own values.\n screenPatternRecipe,\n searchScreenRecipe,\n chatMessageRecipe,\n commentThreadRecipe,\n notificationRowRecipe,\n profileSummaryRecipe,\n iconTileRecipe,\n composerQuickInsertRecipe,\n typingIndicatorRecipe,\n chatDateSeparatorRecipe,\n} as const;\n\nexport type RecipeName = keyof typeof recipeRegistry;\n"]}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAuF7D;;;;EAIE;AACF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE;CACpC,CAAA,CAAC;AACZ,wFAAwF;AACxF,wFAAwF;AACxF,iGAAiG;AACjG,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE;CACrC,CAAA,CAAC;AACZ;;;;EAIE;AACF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,OAA0B,EAAE,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE;CAC3C,CAAA,CAAC;AAEZ,MAAM,eAAe,GAAG,CAGtB,GAAQ,EAAE,MAAc,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAY,CAAA,CAAC;AAE7E;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAA4B,EAC5B,OAAyB;IAEzB,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IACtF,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IACpD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;IACxN,oFAAoF;IACpF,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC1O,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE;IACpL,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;IAC1J,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;IAC9J,+FAA+F;IAC/F,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;IAC5J,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;IAC3J,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;IACnM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACjK,sHAAsH;IACtH,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,cAAc,CAAC,2HAA2H,CAAC,EAAE;IACtT,kGAAkG;IAClG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,iIAAiI,CAAC,EAAE;IAC7S,wIAAwI;IACxI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,gDAAgD,CAAC,EAAE;IACjR,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC7K,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;IACvK,4HAA4H;IAC5H,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,mFAAmF,CAAC,EAAE;IAC3T,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE;IACzP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE;IAC9P,sGAAsG;IACtG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE;IACzK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACvK,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,GAAG,cAAc,CAAC,0HAA0H,CAAC,EAAE;IAChZ,8FAA8F;IAC9F,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,8HAA8H,CAAC,EAAE;IAC1b,kFAAkF;IAClF,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,0BAA0B,EAAE,QAAQ,EAAE,oBAAoB,EAAE,GAAG,cAAc,CAAC,mHAAmH,CAAC,EAAE;IAClY,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;IACrQ,qFAAqF;IACrF,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE;IAC9L,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE;IAC9J,qFAAqF;IACrF,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,eAAe,EAAE;IACrO,+GAA+G;IAC/G,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;IACjN,mFAAmF;IACnF,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,UAAU,EAAE;IAC5L,iEAAiE;IACjE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE;IACrK,gFAAgF;IAChF,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,QAAQ,EAAE,eAAe,EAAE;IACvM,6EAA6E;IAC7E,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,QAAQ,EAAE,YAAY,EAAE;IACnM,0EAA0E;IAC1E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC7K,4EAA4E;IAC5E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE;IACtM,wGAAwG;IACxG,0GAA0G;IAC1G,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE;IAC3K,0EAA0E;IAC1E,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAC9M,4EAA4E;IAC5E,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC,gEAAgE,CAAC,EAAE;IACrR,oIAAoI;IACpI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,2JAA2J,CAAC,EAAE;IAC/Y,qFAAqF;IACrF,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,oEAAoE,CAAC,EAAE;IACvQ,sFAAsF;IACtF,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE;IAC7N,+FAA+F;IAC/F,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACjN,gHAAgH;IAChH,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,uFAAuF,CAAC,EAAE;IACpS,yHAAyH;IACzH,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC7L,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC7L,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE;IACxN,mGAAmG;IACnG,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC7K,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE;IAC3M,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,yJAAyJ,CAAC,EAAE;IAChY,sIAAsI;IACtI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE;IACzK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,6GAA6G,CAAC,EAAE;IAC5T,oMAAoM;IACpM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;IACxL,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAAE;IAC/N,yHAAyH;IACzH,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE;IACnM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,wHAAwH,CAAC,EAAE;IACjV,2FAA2F;IAC3F,gGAAgG;IAChG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE;IACpN,mIAAmI;IACnI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE;IAChO,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,+BAA+B,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,cAAc,CAAC,sHAAsH,CAAC,EAAE;IAC9Y,uGAAuG;IACvG,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAClM,8GAA8G;IAC9G,yHAAyH;IACzH,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAC7K,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE;IACjM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,gLAAgL,CAAC,EAAE;IAC9X,8FAA8F;IAC9F,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC,0FAA0F,CAAC,EAAE;IACzS,8IAA8I;IAC9I,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE;IACzL,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE;IAClO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE;IAClO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC1L,oGAAoG;IACpG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE;IAC7L,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,oEAAoE,CAAC,EAAE;IACxW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE;IAC7J,+EAA+E;IAC/E,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE;IAC9K,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;IACxN,6FAA6F;IAC7F,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;IACtO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;IACnK,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE;IAClM,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE;IACpS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,cAAc,CAAC,yDAAyD,CAAC,EAAE;IAClR,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE;IAC3O,8FAA8F;IAC9F,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,cAAc,CAAC,2EAA2E,CAAC,EAAE;IACrQ,sIAAsI;IACtI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE;IACrQ,0HAA0H;IAC1H,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;IAC7R,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE;IAClL,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;IACzL,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;IAC5N,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE;IAC/M,yGAAyG;IACzG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,oBAAoB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC,8FAA8F,CAAC,EAAE;IAClV,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE;IAClK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;IACzJ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;IAC1M,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE;IACrK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE;IAC/J,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAClM,mIAAmI;IACnI,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE;IAC1K,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;IAChM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE;IACjK,kGAAkG;IAClG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE;IAC9J,2GAA2G;IAC3G,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,kEAAkE,CAAC,EAAE;IACvR,sGAAsG;IACtG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE;IACxP,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACrK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC5O,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE;IAC9O,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,cAAc,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;IACjP,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE;IAC5L,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE;IACpL,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE;IACnL,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;IAC3M,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE;IAC7J,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,kBAAkB,EAAE;IAC7N,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC/M,uGAAuG;IACvG,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,6JAA6J,CAAC,EAAE;IACjZ;;;;;;;;;MASE;IACF,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,YAAY,EAAE,sBAAsB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC/N,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAChL,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC7K,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE;IAC1K,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC3K,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC/K,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAChL,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC/M,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IACzK,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IACvL,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAClL,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAClL,mHAAmH;IACnH,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC3N,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC7K,uGAAuG;IACvG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE;IACrN,6GAA6G;IAC7G,6FAA6F;IAC7F,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE;IACpL,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,yBAAyB,EAAE;IAC7L,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE;IAC1L,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;IAClL,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;IACpL,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE;IACrL,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE;IACzK,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,2BAA2B,EAAE;IACrL,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE;CACxH,CAAC;AAItD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiD;IAC7E,OAAO,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9H,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,UAA4C,gBAAgB;IAE5D,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACjB,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,CAAC,EACD;QACE,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC;QACX,iBAAiB,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;KACZ,CACF,CAAC;AACJ,CAAC;AACD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,EACX,eAAe,EACf,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,SAAS,EACT,UAAU,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,cAAc,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/P,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,aAAa;IACb,iBAAiB;IACjB,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,YAAY;IACZ,WAAW;IACX,sBAAsB;IACtB,eAAe;IACf,YAAY;IACZ,eAAe;IACf,SAAS;IACT,wBAAwB;IACxB,gBAAgB;IAChB,aAAa;IACb,iBAAiB;IACjB,eAAe;IACf,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAChB,iBAAiB;IACjB,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,cAAc;IACd,UAAU;IACV,YAAY;IACZ,cAAc;IACd,UAAU;IACV,cAAc;IACd,qBAAqB;IACrB,kBAAkB;IAClB,YAAY;IACZ,eAAe;IACf,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,UAAU;IACV,UAAU;IACV,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,gBAAgB;IAChB,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,aAAa;IACb,cAAc;IACd,UAAU;IACV,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,iBAAiB;IACjB,YAAY;IACZ,oBAAoB;IACpB,aAAa;IACb,sBAAsB;IACtB,sBAAsB;IACtB,WAAW;IACX,eAAe;IACf,oBAAoB;IACpB,YAAY;IACZ,cAAc;IACd,mBAAmB;IACnB,cAAc;IACd,0BAA0B;IAC1B,UAAU;IACV,kBAAkB;IAClB,cAAc;IACd,YAAY;IACZ,aAAa;IACb,WAAW;IACX,eAAe;IACf,WAAW;IACX,aAAa;IACb,YAAY;IACZ,UAAU;IACV,SAAS;IACT,UAAU;IACV,cAAc;IACd,WAAW;IACX,aAAa;IACb,YAAY;IACZ,UAAU;IACV,gBAAgB;IAChB,oBAAoB;IACpB,4GAA4G;IAC5G,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,cAAc;IACd,yBAAyB;IACzB,qBAAqB;IACrB,uBAAuB;CACf,CAAC","sourcesContent":["import { timePickerRecipe } from \"./time-picker.js\";\nimport { affixRecipe } from \"./affix.js\";\nimport { watermarkRecipe } from \"./watermark.js\";\nimport { drawingEditorRecipe } from \"./drawing-editor.js\";\nimport { colorPickerRecipe } from \"./color-picker.js\";\nimport { masonryRecipe } from \"./masonry.js\";\nimport { imageChoiceRecipe } from \"./image-choice.js\";\nimport { virtualListRecipe } from \"./virtual-list.js\";\nimport { qrCodeRecipe } from \"./qr-code-recipe.js\";\nimport { thinkingOrbRecipe } from \"./thinking-orb-recipe.js\";\nimport type { BehaviorName } from \"./behaviors.js\";\n\nexport type ComponentCategory =\n | \"foundation\"\n | \"layout\"\n | \"action\"\n | \"input\"\n | \"navigation\"\n | \"data-display\"\n | \"feedback\"\n | \"overlay\"\n | \"provider\"\n | \"utility\";\n\nexport type ComponentPlatform = \"shared\" | \"adaptive\" | \"web\" | \"native\";\nexport type ComponentStatus = \"stable\" | \"beta\" | \"planned\" | \"deprecated\";\nexport type ComponentSurface = \"web\" | \"native\";\nexport type ComponentSurfaceStatus = ComponentStatus | \"unsupported\";\nexport type ComponentSurfaceMaturity = Readonly<\n Record<ComponentSurface, ComponentSurfaceStatus>\n>;\nexport type ComponentRoadmapState =\n | \"contract-ready\"\n | \"composed\"\n | \"evidence-needed\"\n | \"prerequisite\"\n | \"declined\";\n\nexport type ComponentRoadmap = Readonly<{\n state: ComponentRoadmapState;\n summary: string;\n /** Canonical components that solve this reference problem together. */\n targets?: readonly string[];\n}>;\n\nexport type ComponentNonVisualEvidence = \"provider-adapter\";\n\nexport type ComponentCatalogEntry = Readonly<{\n name: string;\n category: ComponentCategory;\n platform: ComponentPlatform;\n /** Contract maturity. Renderer maturity is tracked independently per surface. */\n status: ComponentStatus;\n /**\n * Renderer evidence for each surface. Built-in entries always provide this\n * matrix. It stays optional so catalog entries authored against the pre-0.6\n * shape can still be passed to public helpers during migration.\n */\n surfaceStatus?: ComponentSurfaceMaturity;\n /** Search terms and familiar ecosystem names; never an API compatibility promise. */\n aliases?: readonly string[];\n recipe?: RecipeName;\n behavior?: BehaviorName;\n /** Explicit evidence for a mature contract whose value is not a visual recipe. */\n nonVisualEvidence?: ComponentNonVisualEvidence;\n /** Why the row exists at its current maturity and what event moves it forward. */\n roadmap?: ComponentRoadmap;\n /*\n 2026-10-18 registration input consolidated here. Adding one component used to touch eight hand-kept\n registries (ids, Korean labels, evidence claims, Web preview names, Native example index, story groups,\n public API map, platform-only Storybook exceptions); the 22 screen compositions needed 86 files. The\n fields below are the only authored facts those projections need; everything else derives from this row.\n */\n /**\n * Stable kebab-case id. Defaults to the kebab form of `name` (`componentIdOf`). Set it only when a row\n * was renamed after its id shipped, so documentation keys and consumer catalog snapshots survive.\n */\n id?: string;\n /** Purpose-based Korean item name used by both Storybooks (docs/STORYBOOK_NAVIGATION.md §1.3). */\n label?: string;\n /** Public renderer symbols that are named regions or variants of this contract, not rows of their own. */\n companions?: readonly string[];\n /** Optional extensions that reuse this contract without inheriting its maturity (public-component-map.md). */\n extensions?: readonly string[];\n /**\n * 만들지 않기로 **확정한** 항목의 사유. `status`는 구현 성숙도 축이고 이것은\n * \"만들 것인가\"라는 다른 질문이라 직교 필드로 둔다.\n *\n * 이 필드가 필요한 이유: crosswalk의 `targets`가 이 항목들을 가리키고\n * `targets.length > 0`이 테스트로 강제되므로, 흡수할 다른 이름이 없으면 행을 지울 수\n * 없다. 그렇다고 `planned`로 두면 \"아직 안 만들었지만 만들 것\"이라는 거짓을 말한다.\n * 근거는 `docs/<id>.md`에 있고, 그 문서의 존재를 테스트가 강제한다.\n */\n declinedReason?: string;\n}>;\n\n/*\n 2026-09-18 현재 이 상태를 쓰는 행이 없다 — 계약만 준비돼 있던 항목이 모두 renderer나\n 조합으로 닫혔다. `prerequisite`와 같은 이유로 helper는 남긴다: 다음에 계약만 먼저\n 들어오는 컴포넌트가 생기면 바로 쓴다.\n*/\nexport const contractReady = (summary: string) => ({\n roadmap: { state: \"contract-ready\", summary },\n} as const);\n// Compositions live in Showcase patterns and map to their implemented primitives in the\n// reference crosswalk; reserving Planned rows incorrectly counted them as missing work.\n// Promotion uses renderer requirements; adoption notes are not gates (docs/stable-promotion.md).\nconst evidenceNeeded = (summary: string) => ({\n roadmap: { state: \"evidence-needed\", summary },\n} as const);\n/*\n 2026-09-18 현재 사용하는 행이 없다(Cascader가 마지막이었고 조합으로 풀렸다). 상태 값\n 자체는 타입과 문서에 남아 있으므로 helper도 함께 둔다 — 다음에 선행 조건이 실제로 생기면\n 다시 쓰고, 지금은 export로 미사용 오류만 피한다. 상태 값을 지우는 결정은 별도 판단이다.\n*/\nexport const prerequisite = (summary: string, targets: readonly string[]) => ({\n roadmap: { state: \"prerequisite\", summary, targets },\n} as const);\n\nconst surfaceMaturity = <\n const Web extends ComponentSurfaceStatus,\n const Native extends ComponentSurfaceStatus,\n>(web: Web, native: Native) => ({ surfaceStatus: { web, native } } as const);\n\n/**\n * Resolves renderer maturity without conflating it with contract maturity.\n * The fallback preserves custom catalog entries authored before\n * `surfaceStatus`; every built-in entry uses the explicit matrix.\n */\nexport function getComponentSurfaceStatus(\n entry: ComponentCatalogEntry,\n surface: ComponentSurface,\n): ComponentSurfaceStatus {\n if (entry.surfaceStatus) return entry.surfaceStatus[surface];\n if (entry.platform === \"shared\" || entry.platform === \"adaptive\") return entry.status;\n if (entry.platform === surface) return entry.status;\n return \"unsupported\";\n}\n\n/**\n * The catalog is a scope and maturity contract, not an implementation claim.\n * `shared` means API/visual parity. `adaptive` means shared intent with native\n * platform behavior. Web/native entries are intentionally platform-specific.\n */\nexport const componentCatalog = [\n { name: \"Text\", label: \"본문 글자\", companions: [\"StatusText\"], extensions: [\"GravityLetters\"], category: \"foundation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"textRecipe\" },\n // Web semantic element is stable; React Native has no equivalent semantic elements.\n { name: \"TextFormat\", label: \"글자 서식\", category: \"foundation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), aliases: [\"Kbd\", \"Code\", \"Blockquote\"], recipe: \"textFormatRecipe\", behavior: \"textFormat\" },\n { name: \"Heading\", label: \"제목\", category: \"foundation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"headingRecipe\", behavior: \"heading\" },\n { name: \"Icon\", label: \"아이콘\", category: \"foundation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"iconRecipe\" },\n { name: \"Surface\", label: \"배경 영역\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"surfaceRecipe\" },\n // Display promotions use renderer evidence, not product adoption counts (docs/stable-core.md).\n { name: \"Divider\", label: \"구분선\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"dividerRecipe\" },\n { name: \"Section\", label: \"섹션\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"sectionRecipe\" },\n { name: \"Stack\", label: \"가로·세로 배치\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"stackRecipe\", aliases: [\"Flex\", \"Space\", \"Inline\"] },\n { name: \"Container\", label: \"컨테이너\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"containerRecipe\" },\n // Both renderers now pass the required scenario matrix, including long child copy; the product keeps media semantics.\n { name: \"AspectRatio\", label: \"화면 비율\", category: \"layout\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"aspectRatioRecipe\", ...evidenceNeeded(\"Radix·Chakra·Mantine·Carbon에서 반복되는 media geometry 문제를 shared primitive로 채택했습니다. 제품이 object-fit을 소유하고 renderer는 비율만 보장합니다.\") },\n // Both renderers now exercise long child content in addition to the responsive geometry contract.\n { name: \"Grid\", label: \"격자\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"gridRecipe\", ...evidenceNeeded(\"공통 window class·responsive value·row-major geometry 계약과 공식 Web/RN default renderer 증거가 연결됐습니다. 남은 환경 증거는 generated 보고서에서 추적합니다.\") },\n // Interaction evidence belongs to its declared surface; inventing a Native skip-link only to mirror Web would add unsupported behavior.\n { name: \"Layout\", label: \"화면 기본 구조\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"AppShell\"], recipe: \"layoutRecipe\", behavior: \"layout\", ...evidenceNeeded(\"Web skip-link and renderer scenarios verified.\") },\n { name: \"Top\", label: \"화면 제목과 설명\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"topRecipe\", behavior: \"top\" },\n { name: \"Masonry\", label: \"높이가 다른 카드 배치\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"masonryRecipe\" },\n // Stable after the real Web matrix and focused separator keyboard proof pass; collapse and N-pane stay out of the contract.\n { name: \"Splitter\", label: \"분할 영역 조절\", category: \"layout\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), aliases: [\"SplitPane\"], recipe: \"splitterRecipe\", behavior: \"splitter\", ...evidenceNeeded(\"Web long-copy, environment, accessibility, drag and focused keyboard proofs pass.\") },\n { name: \"Button\", label: \"버튼\", companions: [\"ClipboardButton\", \"ButtonLink\"], extensions: [\"ReactionPicker\", \"InlineConfirm\"], category: \"action\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"buttonRecipe\" },\n { name: \"IconButton\", label: \"아이콘 버튼\", companions: [\"ClipboardIconButton\", \"IconButtonLink\"], extensions: [\"NotificationBell\"], category: \"action\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"iconButtonRecipe\" },\n // Web anchor Enter activation and Native router activation are now asserted at the renderer boundary.\n { name: \"Link\", label: \"링크\", category: \"action\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"linkRecipe\", behavior: \"link\" },\n { name: \"BottomCTA\", label: \"하단 실행 버튼\", category: \"action\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"bottomCtaRecipe\" },\n { name: \"FloatingActionButton\", label: \"플로팅 실행 버튼\", category: \"action\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"floatingActionButtonRecipe\", behavior: \"floatingActionButton\", aliases: [\"FloatButton\", \"FAB\"], ...evidenceNeeded(\"Web/RN의 고정 생성 행동, 스크롤 방향 hook, 실제 높이·safe area 여백을 제공합니다. docs/floating-action-button.md에서 전체 이름·focus 유지와 목록 가림을 검증합니다.\") },\n // Product-owned auth copy stays in slots; both renderer matrices now exercise long hero text.\n { name: \"AuthScreenLayout\", label: \"로그인 화면\", id: \"auth-screen\", companions: [\"AuthScreenHero\", \"AuthScreenFooter\"], category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"SignInLayout\"], recipe: \"authScreenRecipe\", behavior: \"authScreen\", ...evidenceNeeded(\"로그인 화면의 두 영역 골격입니다. 히어로와 주 행동을 세로 중앙에 한 덩어리로 두고 동의 고지·정책 링크를 바닥에 붙입니다. 문구·마크·제공자 목록·링크 목적지는 제품이 슬롯으로 넘기며, 인증 흐름은 이 계약에 없습니다.\") },\n // Enter/Space and Native host press now invoke the explicit product-owned action.\n { name: \"AuthProviderButton\", label: \"소셜 로그인 버튼\", category: \"action\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"SocialLoginButton\"], recipe: \"authProviderButtonRecipe\", behavior: \"authProviderButton\", ...evidenceNeeded(\"Google·Kakao·Naver·Apple 로그인 버튼입니다. 색은 제공자 가이드라인 값이고 테마가 다시 칠하지 않으며, 로고 자산과 문구는 제품이 넘깁니다. 실제 제공자 심사 통과는 제품 소유입니다.\") },\n { name: \"Field\", label: \"입력 필드\", companions: [\"TextField\"], extensions: [\"FieldGroup\", \"DateEntry\", \"GestureSheetInput\"], category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"fieldRecipe\", behavior: \"field\" },\n // Long labels wrap and Web typing/clear plus Native input/clear actions are covered.\n { name: \"SearchField\", label: \"검색 입력\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"searchFieldRecipe\", behavior: \"searchField\" },\n { name: \"TextArea\", label: \"여러 줄 입력\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"fieldRecipe\" },\n // Web Enter/Space and Native host reveal actions are now verified on both renderers.\n { name: \"PasswordField\", label: \"비밀번호 입력\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Input.Password\"], recipe: \"passwordFieldRecipe\", behavior: \"passwordField\" },\n // One accessible text input, numeric sanitization, wrapping label, and input actions are covered per renderer.\n { name: \"OtpField\", label: \"인증번호 입력\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Input.OTP\"], recipe: \"otpFieldRecipe\", behavior: \"otpField\" },\n // Web Space and Native host press now verify the single checkbox state transition.\n { name: \"Checkbox\", label: \"체크박스\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectionControlRecipe\", behavior: \"checkbox\" },\n // Long option labels now have matrix coverage on both renderers.\n { name: \"Radio\", label: \"라디오 버튼\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectionControlRecipe\" },\n // Web Space and Native host press now prove the choice update on each renderer.\n { name: \"CheckboxGroup\", label: \"체크박스 그룹\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectionGroupRecipe\", behavior: \"checkboxGroup\" },\n // Web Space and Native host press now verify the selected option transition.\n { name: \"RadioGroup\", label: \"라디오 버튼 그룹\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectionGroupRecipe\", behavior: \"radioGroup\" },\n // Web Space and Native host press now prove the checked state transition.\n { name: \"Switch\", label: \"스위치\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"switchRecipe\", behavior: \"switch\" },\n // Web Space and Native host press now verify selectable Chip state changes.\n { name: \"Chip\", label: \"선택 칩\", companions: [\"ShortcutRail\"], category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"chipRecipe\", behavior: \"chip\" },\n // Image tile single/multiple selection (2026-10-17 registration: independent radio/checkbox semantics).\n // 2026-10-26: both renderer behavior/environment proofs now support the stable contract (stable-core.md).\n { name: \"ImageChoiceGroup\", label: \"이미지 선택\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"imageChoiceRecipe\" },\n // Web arrow-key selection and Native host press now prove option changes.\n { name: \"SegmentedControl\", label: \"버튼형 선택\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"segmentedControlRecipe\", behavior: \"segmentedControl\" },\n // Web Space and Native host press now verify the pressed-id set transition.\n { name: \"ToggleGroup\", label: \"토글 그룹\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"toggleGroupRecipe\", behavior: \"toggleGroup\", ...evidenceNeeded(\"여러 개를 동시에 켜는 버튼 묶음입니다. 하나만 고르는 자리는 SegmentedControl이 그대로 갖습니다.\") },\n // Both renderer matrices and the surface-specific commit/remove regressions pass; Native intentionally commits on Return, not blur.\n { name: \"TagsInput\", label: \"태그 입력\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"TagField\", \"ChipsInput\"], recipe: \"tagsInputRecipe\", behavior: \"tagsInput\", ...evidenceNeeded(\"자유 입력 다중값 계약입니다. 정책 판정은 공통이며 Web Enter와 Native Return 확정, 위치 기반 삭제 action을 각 renderer에서 검증합니다. Web-only 후보 키 탐색과 2단계 Backspace는 Native 동등 동작으로 주장하지 않습니다.\") },\n // Web ArrowRight and Native adjustable increment now prove the same step transition.\n { name: \"Slider\", label: \"슬라이더\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"sliderRecipe\", behavior: \"slider\", ...evidenceNeeded(\"Web range input과 Native adjustable renderer가 같은 범위·step 계약을 실행합니다.\") },\n // Long labels, Web ArrowUp, and Native adjustable increment now have renderer proofs.\n { name: \"NumberField\", label: \"숫자 입력\", extensions: [\"DurationField\"], category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"numberFieldRecipe\", behavior: \"numberField\" },\n // Long labels and Web arrow/Enter plus Native host option activation now have renderer proofs.\n { name: \"Select\", label: \"목록에서 선택\", companions: [\"NativeSelect\"], category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"selectRecipe\", behavior: \"select\" },\n // Long labels and Web filter/ArrowDown/Enter plus Native option/after-dismiss actions now have renderer proofs.\n { name: \"Combobox\", label: \"검색형 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"comboboxRecipe\", behavior: \"combobox\", ...evidenceNeeded(\"걸러진 목록에서 고르는 동작을 웹·앱 각각 검증했습니다. 앱은 시트가 닫힌 뒤 선택한 값을 확정하고, 웹 키보드 선택은 별도 상호작용 계약으로 남습니다.\") },\n // Product adoption and device QA follow the consumer release; both renderer contracts now have complete required proofs.\n { name: \"TimePicker\", label: \"시각 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"timePickerRecipe\", behavior: \"timePicker\" },\n { name: \"DatePicker\", label: \"날짜 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"datePickerRecipe\", behavior: \"datePicker\" },\n { name: \"DateRangePicker\", label: \"기간 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"DateRange\"], recipe: \"dateRangeRecipe\", behavior: \"dateRange\" },\n // 2026-10-27: Diairy and Spint used duplicated paint editors; shared UI and history now live here.\n { name: \"DrawingEditor\", label: \"손그림 편집기\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"drawingEditorRecipe\" },\n { name: \"ColorPicker\", label: \"색상 선택기\", companions: [\"ColorSwatchPicker\"], category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"colorPickerRecipe\" },\n { name: \"FilePicker\", label: \"파일 선택\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"filePickerRecipe\", behavior: \"filePicker\", aliases: [\"Upload\"], ...evidenceNeeded(\"Web은 native file input과 dropzone 선택을, Native는 제품 소유 picker adapter 연결을 제공하고 양쪽이 같은 accept·size·count resolver를 사용합니다. 실제 OS picker 동작은 소비 앱 QA에서 확인합니다.\") },\n // Both renderers now focus the product-selected first invalid field; field ordering and validation stay product-owned (docs/form.md).\n { name: \"Form\", label: \"입력 양식\", category: \"input\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"formRecipe\", behavior: \"form\" },\n { name: \"Agreement\", label: \"약관 동의\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"agreementRecipe\", behavior: \"agreement\", ...evidenceNeeded(\"전체 동의는 항목의 합에서 파생하고 필수 항목만 제출 가능 여부를 정합니다. 전문 열기는 동의와 분리된 별도 tab stop입니다. 제품의 문구·링크·법적 검토와 동의 기록은 제품 소유입니다.\") },\n // Both renderer matrices now prove caret insertion, named candidate actions, and long-copy behavior; IME device certification stays consumer QA because this contract does not control composition.\n { name: \"Mentions\", label: \"사용자 언급\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"comboboxRecipe\", behavior: \"combobox\" },\n { name: \"TransferList\", label: \"목록 간 항목 이동\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Transfer\"], recipe: \"transferListRecipe\", behavior: \"transferList\" },\n // Upload/network lifecycle belongs to consuming products; both renderers verify the caller-owned status/action contract.\n { name: \"UploadItem\", label: \"업로드 항목\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"uploadItemRecipe\", behavior: \"uploadItem\" },\n { name: \"Tabs\", label: \"탭\", companions: [\"TabPanel\"], category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"tabsRecipe\", behavior: \"tabs\", ...evidenceNeeded(\"웹은 화살표 키 이동이 비활성 탭을 건너뛰고 활성화 전까지 수동 선택을 유지하며 초점 탭을 보이게 스크롤합니다(동작 줄이기는 즉시 스크롤). 앱은 계약 이름의 activate 동작과 이름 붙은 패널을 노출합니다.\") },\n // Public API/Web are stable; Native long-copy evidence remains open (docs/stable-core.md).\n // Native title text now passes the long-copy scenario matrix, completing its renderer maturity.\n { name: \"TopBar\", label: \"상단 탐색 막대\", companions: [\"NavigationBar\", \"TopBarAction\"], category: \"navigation\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"topBarRecipe\" },\n // Web keyboard and long-copy renderer proofs now pass; Native remains unsupported because its navigation pattern is product-owned.\n { name: \"Sidebar\", label: \"사이드바\", category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), aliases: [\"NavigationRail\", \"SideNav\"], recipe: \"sidebarRecipe\", behavior: \"sidebar\" },\n { name: \"BottomNavigation\", label: \"하단 탐색\", companions: [\"BottomNavigationInsetProvider\"], category: \"navigation\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"bottomNavigationRecipe\", behavior: \"bottomNavigation\", ...evidenceNeeded(\"Web Tab·Enter link와 Native route/reselect host action이 navigator 소유 선택 상태를 보존하고, 긴 목적지 label을 보이는 문구와 접근성 이름에 유지합니다.\") },\n // Product routes and device QA remain consumer-owned; the Web renderer and route-link proofs now pass.\n { name: \"Breadcrumb\", label: \"이동 경로\", category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"breadcrumbRecipe\", behavior: \"breadcrumb\" },\n // Numeric-only rendering has no visible prose slot; four-digit page layout remains in the 320px/2x/RTL proof.\n // Carousel's dot row on its own for a product-owned pager (Utilverse launcher, 2026-10-18); same recipe, no new visuals.\n { name: \"PageIndicator\", label: \"페이지 위치 표시\", category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"carouselRecipe\" },\n { name: \"Pagination\", label: \"페이지 이동\", category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"paginationRecipe\", behavior: \"pagination\" },\n { name: \"LoadMore\", label: \"더 보기\", category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"loadMoreRecipe\", behavior: \"loadMore\", ...evidenceNeeded(\"Web keyboard fallback·viewport observer와 Native onEndReached·retry action에서 requestKey 중복 방지, busy/error/complete 상태와 긴 현지화 문구를 검증했습니다. Native FlatList/device 통합은 소비 앱 QA입니다.\") },\n // This non-interactive progress summary now has long-label matrix coverage on both renderers.\n { name: \"Steps\", label: \"단계 탐색\", extensions: [\"StepPlayer\"], category: \"navigation\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"stepsRecipe\", ...evidenceNeeded(\"단일 cursor에서 상태를 파생하는 Web·Native renderer와 기본 실행 증거가 연결됐습니다. 실제 다단계 흐름과 보조기기 증거가 더 필요합니다.\") },\n // The Web interaction, disabled-item handling, long labels, and environment matrix have executable evidence; Native is unsupported by design.\n { name: \"Menubar\", label: \"메뉴 막대\", category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"menubarRecipe\", behavior: \"menubar\" },\n { name: \"ContextMenu\", label: \"상황별 메뉴\", extensions: [\"NativeContextMenu\"], category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"menuRecipe\", behavior: \"contextMenu\" },\n { name: \"Menu\", label: \"메뉴\", extensions: [\"MorphingMenu\"], category: \"navigation\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"menuRecipe\", behavior: \"menu\", aliases: [\"Dropdown\"] },\n { name: \"Anchor\", label: \"문서 내 바로가기\", category: \"navigation\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"anchorRecipe\", behavior: \"anchor\" },\n // Visible content is initials or media; accessible names and fallback states have dedicated proofs.\n { name: \"Avatar\", label: \"아바타\", companions: [\"AvatarGroup\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"avatarRecipe\" },\n { name: \"Asset\", label: \"이미지·영상 표시\", companions: [\"AssetGroup\"], extensions: [\"VoiceNote\"], category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Media\", \"Artwork\"], recipe: \"assetRecipe\", behavior: \"asset\", ...evidenceNeeded(\"아이콘·이미지·Lottie·비디오를 한 액자 규칙으로 묶습니다. 재생기는 슬롯으로 받아 이 패키지가 의존하지 않습니다.\") },\n { name: \"Badge\", label: \"배지\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"badgeRecipe\" },\n // This component renders a bounded number or dot, not arbitrary visible prose.\n { name: \"CounterBadge\", label: \"숫자 배지\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"counterBadgeRecipe\" },\n { name: \"Card\", label: \"카드\", companions: [\"QuoteCard\"], extensions: [\"DocumentResource\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"cardRecipe\" },\n // The list's visible rows own variable-length titles, now covered by each renderer's matrix.\n { name: \"List\", label: \"목록\", companions: [\"CollectionRail\", \"ListSeparator\"], extensions: [\"TaskList\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"listRecipe\" },\n { name: \"ListRow\", label: \"목록 행\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"listRowRecipe\" },\n { name: \"VirtualList\", label: \"가상 목록\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Listy\"], recipe: \"virtualListRecipe\" },\n { name: \"Collapsible\", label: \"접기와 펼치기\", companions: [\"CollapsibleMarker\"], extensions: [\"FolderPreview\"], category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"Disclosure\"], recipe: \"collapsibleRecipe\", behavior: \"collapsible\" },\n { name: \"Accordion\", label: \"아코디언\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"accordionRecipe\", behavior: \"disclosureGroup\", ...evidenceNeeded(\"묶음 안의 펼침 상태와 제목·내용의 접근성 연결을 웹 키보드와 앱 누르기 회귀 검사로 확인했습니다.\") },\n { name: \"Statistic\", label: \"수치 표시\", companions: [\"StatisticGroup\"], extensions: [\"AnimatedStatistic\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"statisticRecipe\" },\n // Timeline labels are visible prose and now have long-copy matrix coverage on both renderers.\n { name: \"Timeline\", label: \"타임라인\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"timelineRecipe\", ...evidenceNeeded(\"두 제품의 이력 화면이 같은 항목 설명과 웹·앱의 점·연결선 렌더러를 씁니다. 남은 렌더러 증거는 자동 생성 보고서에서 추적합니다.\") },\n // 2026-10-26: the remaining renderer contracts are supported as stable after targeted behavior/environment proof; see stable-core.md.\n { name: \"DataTable\", label: \"데이터 표\", companions: [\"Table\", \"LineScore\", \"MatrixTable\", \"ComparisonTable\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"dataTableRecipe\", behavior: \"dataTable\" },\n // 2026-10-14 user request: chart drawing absorbed from product libraries (docs/chart.md); one family for all chart types.\n { name: \"Chart\", label: \"차트\", companions: [\"LineChart\", \"BarChart\", \"PieChart\", \"RadarChart\", \"ScatterChart\", \"Sparkline\", \"ChartLegend\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"chartRecipe\", behavior: \"chart\" },\n { name: \"Tree\", label: \"트리 목록\", category: \"data-display\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"treeRecipe\", behavior: \"tree\" },\n { name: \"Calendar\", label: \"달력\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"calendarRecipe\", behavior: \"calendar\" },\n { name: \"Carousel\", label: \"캐러셀\", extensions: [\"CarouselMotion\"], category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"carouselRecipe\", behavior: \"carousel\" },\n { name: \"DescriptionList\", label: \"설명 목록\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"descriptionListRecipe\", aliases: [\"Descriptions\"] },\n // Image alt is accessibility copy, not visible renderer text; load and fallback behavior remain covered.\n { name: \"Image\", label: \"이미지\", extensions: [\"GridReveal\", \"ImageViewer\", \"ImageViewerTrigger\"], category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"imageRecipe\", ...evidenceNeeded(\"웹은 불러오기·실패·대체 표시와 프레임워크 연결, 앱은 대체 표시와 최적화 호스트 연결이 기본 실행 증거입니다. 남은 렌더러 증거는 자동 생성 보고서에서 추적합니다.\") },\n { name: \"QRCode\", label: \"큐알 코드\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"qrCodeRecipe\" },\n { name: \"Tag\", label: \"태그\", category: \"data-display\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"tagRecipe\" },\n { name: \"Tour\", label: \"사용 안내 둘러보기\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"tourRecipe\", behavior: \"tour\", aliases: [\"CoachMark\"] },\n { name: \"EmptyState\", label: \"빈 상태\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"emptyStateRecipe\" },\n { name: \"Notice\", label: \"안내 메시지\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"noticeRecipe\" },\n { name: \"Progress\", label: \"진행 표시\", extensions: [\"ScrollProgress\"], category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"progressRecipe\" },\n // Both renderer matrices and installed iOS/Android Skia smoke pass; optional host linkage remains explicit (docs/thinking-orb.md).\n { name: \"ThinkingOrb\", label: \"생각 중 표시\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"thinkingOrbRecipe\" },\n { name: \"Spinner\", companions: [\"PendingContent\"], label: \"로딩 표시\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"spinnerRecipe\" },\n { name: \"Skeleton\", label: \"스켈레톤\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"skeletonRecipe\" },\n // Product adoption is tracked separately from the complete renderer matrix (docs/stable-core.md).\n { name: \"Result\", label: \"결과 안내\", category: \"feedback\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"resultRecipe\" },\n // Product-owned notice copy is an intended visible text slot; both renderers now prove long-copy wrapping.\n { name: \"BottomInfo\", label: \"하단 안내\", category: \"feedback\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"bottomInfoRecipe\", behavior: \"bottomInfo\", ...evidenceNeeded(\"주 행동 아래의 상시 안내 문장입니다. 상태를 알리는 Notice와 달리 tone·아이콘이 없고 사라지지 않습니다.\") },\n // Liquid is an opt-in presentation; Web close/Escape and Native close actions are covered separately.\n { name: \"Toast\", label: \"토스트\", companions: [\"ToastProvider\", \"ToastRegion\"], category: \"feedback\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"toastRecipe\", behavior: \"toast\", aliases: [\"Notification\"] },\n { name: \"Watermark\", label: \"워터마크\", category: \"feedback\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"watermarkRecipe\" },\n { name: \"Dialog\", label: \"대화상자\", companions: [\"OverlayStackProvider\", \"ImmersiveOverlay\"], category: \"overlay\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"dialogRecipe\", behavior: \"dialog\" },\n { name: \"AlertDialog\", label: \"확인 대화상자\", companions: [\"AlertDialogQueueProvider\"], category: \"overlay\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"alertDialogRecipe\", behavior: \"alertDialog\" },\n { name: \"Sheet\", label: \"시트\", extensions: [\"GestureSheet\", \"GestureSheetProvider\", \"SheetPanel\"], category: \"overlay\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"sheetRecipe\", behavior: \"sheet\" },\n { name: \"SidePanel\", label: \"측면 패널\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"sidePanelRecipe\", behavior: \"sidePanel\" },\n { name: \"Popover\", label: \"팝오버\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"popoverRecipe\", behavior: \"popover\" },\n { name: \"Tooltip\", label: \"툴팁\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"tooltipRecipe\", behavior: \"tooltip\" },\n { name: \"CommandPalette\", label: \"명령 검색\", category: \"overlay\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"commandPaletteRecipe\", behavior: \"commandPalette\" },\n { name: \"Affix\", label: \"고정 배치\", category: \"utility\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), recipe: \"affixRecipe\" },\n { name: \"DesignSystemProvider\", label: \"디자인 시스템 설정\", category: \"provider\", platform: \"shared\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), aliases: [\"ConfigProvider\"], nonVisualEvidence: \"provider-adapter\" },\n { name: \"SkipNav\", label: \"본문 바로가기\", category: \"utility\", platform: \"web\", status: \"stable\", ...surfaceMaturity(\"stable\", \"unsupported\"), aliases: [\"SkipLink\"], recipe: \"skipNavRecipe\", behavior: \"skipNav\" },\n // Hidden copy is validated as an accessible node; visual long-copy overflow is inapplicable by design.\n { name: \"VisuallyHidden\", label: \"화면 읽기 도구용 글자\", 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를 사용하므로 의도적으로 지원하지 않습니다.\") },\n /*\n 2026-10-17 screen compositions registered. These screen compositions ship from the renderers' ./screens and ./screen-flows\n subpaths and products use them as the common screen structure (2026-10-15 user rule), but they were\n classified as supplemental to keep the catalog frozen. The consumer checker resolves imported symbols\n only against canonical catalog ids, so 606 of 690 unresolved-symbol findings across six products (88%)\n were these names (STANDARD_SCOPE_REVIEW_2026-10 §1.2). The freeze ended on 2026-10-17\n (docs/stable-promotion.md), so they register as canonical rows. On 2026-10-18 both renderer default\n proofs and applicable environment matrices passed after repairing the host harness, screen body naming\n and fixtures. Stable promises the public contract, not device QA or consumer adoption (docs/stable-core.md).\n */\n { name: \"ScreenLayout\", label: \"화면 골격\", companions: [\"ScreenHost\", \"ScreenRefreshControl\"], category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"CompositionLayout\", label: \"구성 골격\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"SettingsScreen\", label: \"설정 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"SearchScreen\", label: \"검색 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"searchScreenRecipe\" },\n { name: \"EditorScreen\", label: \"편집 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"PermissionScreen\", label: \"권한 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"OnboardingScreen\", label: \"온보딩 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"ModerationScreen\", label: \"신고 화면\", companions: [\"ModerationForm\"], category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"ChatScreen\", label: \"채팅 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"NotificationInboxScreen\", label: \"알림함 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"CommentThreadScreen\", label: \"댓글 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"commentThreadRecipe\" },\n { name: \"ListDetailScreen\", label: \"목록 상세 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n // MediaSelectionCell (2026-10-18): the screen's own item cell, exported so virtualized hosts render the same cell.\n { name: \"MediaSelectionScreen\", label: \"미디어 선택 화면\", companions: [\"MediaSelectionCell\"], category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n { name: \"ProfileScreen\", label: \"프로필 화면\", category: \"layout\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"screenPatternRecipe\" },\n // MediaAlbumPageStatus (2026-10-18): loading/failed page of ChatMessage/CommentThreadRow `mediaAlbum`.\n { name: \"ChatMessage\", label: \"채팅 말풍선\", companions: [\"MediaAlbumPageStatus\"], category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"chatMessageRecipe\" },\n // 2026-10-18 timeline pieces that products drew themselves (BurnTok DM typing row, Utilverse chat time row).\n // 2026-10-26: both renderer proofs cover these public chat primitives (docs/stable-core.md).\n { name: \"TypingIndicator\", label: \"입력 중 표시\", category: \"feedback\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"typingIndicatorRecipe\" },\n { name: \"ChatDateSeparator\", label: \"대화 날짜 구분\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"chatDateSeparatorRecipe\" },\n { name: \"NotificationRow\", label: \"알림 미리보기 행\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"notificationRowRecipe\" },\n { name: \"NotificationItem\", label: \"알림 목록 항목\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"listRowRecipe\" },\n { name: \"CommentThreadRow\", label: \"댓글 행\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"commentThreadRecipe\" },\n { name: \"ProfileSummary\", label: \"프로필 요약\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"profileSummaryRecipe\" },\n { name: \"IconTile\", label: \"아이콘 타일\", category: \"data-display\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"iconTileRecipe\" },\n { name: \"MessageComposer\", label: \"메시지 작성창\", category: \"input\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"composerQuickInsertRecipe\" },\n { name: \"PhotoSourceSheet\", label: \"사진 출처 시트\", category: \"overlay\", platform: \"adaptive\", status: \"stable\", ...surfaceMaturity(\"stable\", \"stable\"), recipe: \"sheetRecipe\" },\n] as const satisfies readonly ComponentCatalogEntry[];\n\nexport type ComponentName = (typeof componentCatalog)[number][\"name\"];\n\n/**\n * Kebab id of a catalog row: the explicit `id` override, else the kebab form of `name`\n * (QRCode → qr-code, BottomCTA → bottom-cta). `component-definitions.ts` mirrors this at the type level.\n */\nexport function componentIdOf(entry: Pick<ComponentCatalogEntry, \"name\" | \"id\">): string {\n return entry.id ?? entry.name.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").replace(/([A-Z])([A-Z][a-z])/g, \"$1-$2\").toLowerCase();\n}\n\nexport function summarizeComponentRoadmap(\n entries: readonly ComponentCatalogEntry[] = componentCatalog,\n): Readonly<Record<ComponentRoadmapState, number>> {\n return entries.reduce<Record<ComponentRoadmapState, number>>(\n (summary, entry) => {\n if (entry.roadmap) summary[entry.roadmap.state] += 1;\n return summary;\n },\n {\n \"contract-ready\": 0,\n composed: 0,\n \"evidence-needed\": 0,\n prerequisite: 0,\n declined: 0,\n },\n );\n}\nimport {\n accordionRecipe,\n alertDialogRecipe,\n avatarRecipe,\n badgeRecipe,\n bottomNavigationRecipe,\n bottomCtaRecipe,\n anchorRecipe,\n agreementRecipe,\n topRecipe,\n authProviderButtonRecipe,\n authScreenRecipe,\n headingRecipe,\n toggleGroupRecipe,\n tagsInputRecipe,\n skipNavRecipe,\n bottomInfoRecipe,\n sidebarRecipe,\n textFormatRecipe,\n collapsibleRecipe,\n menubarRecipe,\n assetRecipe,\n breadcrumbRecipe,\n aspectRatioRecipe,\n containerRecipe,\n calendarRecipe,\n cardRecipe,\n buttonRecipe,\n carouselRecipe,\n chipRecipe,\n comboboxRecipe,\n descriptionListRecipe,\n counterBadgeRecipe,\n dialogRecipe,\n dataTableRecipe,\n chartRecipe,\n datePickerRecipe,\n dateRangeRecipe,\n dividerRecipe,\n formRecipe,\n emptyStateRecipe,\n fieldRecipe,\n filePickerRecipe,\n iconButtonRecipe,\n iconRecipe,\n imageRecipe,\n linkRecipe,\n listRecipe,\n listRowRecipe,\n loadMoreRecipe,\n menuRecipe,\n noticeRecipe,\n paginationRecipe,\n popoverRecipe,\n numberFieldRecipe,\n progressRecipe,\n resultRecipe,\n searchFieldRecipe,\n selectRecipe,\n selectionGroupRecipe,\n sectionRecipe,\n segmentedControlRecipe,\n selectionControlRecipe,\n sheetRecipe,\n sidePanelRecipe,\n commandPaletteRecipe,\n layoutRecipe,\n otpFieldRecipe,\n passwordFieldRecipe,\n splitterRecipe,\n tourRecipe,\n transferListRecipe,\n skeletonRecipe,\n sliderRecipe,\n spinnerRecipe,\n stackRecipe,\n statisticRecipe,\n stepsRecipe,\n surfaceRecipe,\n switchRecipe,\n tabsRecipe,\n tagRecipe,\n textRecipe,\n timelineRecipe,\n toastRecipe,\n tooltipRecipe,\n topBarRecipe,\n treeRecipe,\n uploadItemRecipe,\n visuallyHiddenRecipe,\n} from \"./recipes.js\";\nimport { floatingActionButtonRecipe } from \"./floating-action-button.js\";\nimport { gridRecipe } from \"./grid.js\";\nimport { screenPatternRecipe, searchScreenRecipe, chatMessageRecipe, commentThreadRecipe, notificationRowRecipe, profileSummaryRecipe, iconTileRecipe, composerQuickInsertRecipe, typingIndicatorRecipe, chatDateSeparatorRecipe } from \"./screen-patterns.js\";\n\n/** One typed registry prevents catalog recipe names from drifting into strings. */\nexport const recipeRegistry = {\n drawingEditorRecipe,\n timePickerRecipe,\n imageChoiceRecipe,\n affixRecipe,\n watermarkRecipe,\n colorPickerRecipe,\n thinkingOrbRecipe,\n masonryRecipe,\n virtualListRecipe,\n qrCodeRecipe,\n accordionRecipe,\n alertDialogRecipe,\n avatarRecipe,\n badgeRecipe,\n bottomNavigationRecipe,\n bottomCtaRecipe,\n anchorRecipe,\n agreementRecipe,\n topRecipe,\n authProviderButtonRecipe,\n authScreenRecipe,\n headingRecipe,\n toggleGroupRecipe,\n tagsInputRecipe,\n skipNavRecipe,\n bottomInfoRecipe,\n sidebarRecipe,\n textFormatRecipe,\n collapsibleRecipe,\n menubarRecipe,\n assetRecipe,\n breadcrumbRecipe,\n aspectRatioRecipe,\n containerRecipe,\n calendarRecipe,\n cardRecipe,\n buttonRecipe,\n carouselRecipe,\n chipRecipe,\n comboboxRecipe,\n descriptionListRecipe,\n counterBadgeRecipe,\n dialogRecipe,\n dataTableRecipe,\n chartRecipe,\n datePickerRecipe,\n dateRangeRecipe,\n dividerRecipe,\n formRecipe,\n gridRecipe,\n emptyStateRecipe,\n fieldRecipe,\n filePickerRecipe,\n iconButtonRecipe,\n iconRecipe,\n imageRecipe,\n linkRecipe,\n listRecipe,\n listRowRecipe,\n loadMoreRecipe,\n menuRecipe,\n noticeRecipe,\n paginationRecipe,\n popoverRecipe,\n numberFieldRecipe,\n progressRecipe,\n resultRecipe,\n searchFieldRecipe,\n selectRecipe,\n selectionGroupRecipe,\n sectionRecipe,\n segmentedControlRecipe,\n selectionControlRecipe,\n sheetRecipe,\n sidePanelRecipe,\n commandPaletteRecipe,\n layoutRecipe,\n otpFieldRecipe,\n passwordFieldRecipe,\n splitterRecipe,\n floatingActionButtonRecipe,\n tourRecipe,\n transferListRecipe,\n skeletonRecipe,\n sliderRecipe,\n spinnerRecipe,\n stackRecipe,\n statisticRecipe,\n stepsRecipe,\n surfaceRecipe,\n switchRecipe,\n tabsRecipe,\n tagRecipe,\n textRecipe,\n timelineRecipe,\n toastRecipe,\n tooltipRecipe,\n topBarRecipe,\n treeRecipe,\n uploadItemRecipe,\n visuallyHiddenRecipe,\n // Screen composition recipes (2026-10-17): registered so the screen catalog rows can bind their own values.\n screenPatternRecipe,\n searchScreenRecipe,\n chatMessageRecipe,\n commentThreadRecipe,\n notificationRowRecipe,\n profileSummaryRecipe,\n iconTileRecipe,\n composerQuickInsertRecipe,\n typingIndicatorRecipe,\n chatDateSeparatorRecipe,\n} as const;\n\nexport type RecipeName = keyof typeof recipeRegistry;\n"]}
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Package release shown by documentation surfaces. Kept in sync by a test. */
2
- export declare const designSystemVersion: "1.49.0";
2
+ export declare const designSystemVersion: "1.50.0";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Package release shown by documentation surfaces. Kept in sync by a test. */
2
- export const designSystemVersion = "1.49.0";
2
+ export const designSystemVersion = "1.50.0";
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAiB,CAAC","sourcesContent":["/** Package release shown by documentation surfaces. Kept in sync by a test. */\nexport const designSystemVersion = \"1.49.0\" as const;\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAiB,CAAC","sourcesContent":["/** Package release shown by documentation surfaces. Kept in sync by a test. */\nexport const designSystemVersion = \"1.50.0\" as const;\n"]}
@@ -1,7 +1,7 @@
1
1
  # 손그림 편집기 계약
2
2
 
3
3
  2026-10-27 사용자 요청으로 다에리·스핀트의 동일한 그림 편집기를 공통 API로 옮겼다.
4
- `DrawingEditor`는 `EditorScreen`·`ColorPicker`·`Slider`를 합성하는 beta 컴포넌트다.
4
+ `DrawingEditor`는 `EditorScreen`·`ColorPicker`·`Slider`를 합성하는 안정 컴포넌트다.
5
5
 
6
6
  순수 이력·선·지우개·배경·팔레트·배치는 `src/drawing-editor.ts`가 소유한다. Web pointer capture와 Native responder,
7
7
  SVG/Canvas 이미지 추출은 각 renderer에 남는다. 제품 계정·업로드·저장 형식 제한·성공 후 탐색은 포함하지 않는다.
@@ -10,5 +10,4 @@ SVG/Canvas 이미지 추출은 각 renderer에 남는다. 제품 계정·업로
10
10
  저장 실패는 그림을 보존하며 같은 초안으로 다시 시도한다. 한 획을 하나의 이력 단계로 취급하고 새로운 획은 redo 분기를 없앤다.
11
11
  펜과 지우개의 실제 굵기는 같은 슬라이더 값이며 지우개는 항상 현재 배경색을 따른다.
12
12
 
13
- 사용법과 소비 이관은 [DrawingEditor 지침](usage/components/drawing-editor.md)을 따른다. 미게시 개발 후보이며
14
- 구현·표면 테스트·제품 채택과 패키지 게시·실기기 QA는 각각 별도 상태다.
13
+ 사용법과 소비 이관은 [DrawingEditor 지침](usage/components/drawing-editor.md)을 따른다. 구현·표면 테스트·제품 채택과 패키지 게시·실기기 QA는 각각 별도 상태다.
@@ -1,12 +1,12 @@
1
1
  # Component maturity and evidence manifest
2
2
 
3
- > Generated from `@hjmds/design-contracts` 1.49.0. Do not edit this file directly; run `pnpm contracts:sync`.
3
+ > Generated from `@hjmds/design-contracts` 1.50.0. Do not edit this file directly; run `pnpm contracts:sync`.
4
4
 
5
5
  This document is the human-readable projection of the same catalog and Showcase manifest consumed by product CI.
6
6
 
7
- - Contract: stable 131 · beta 1
8
- - Web renderer: stable 131 · beta 1
9
- - Native renderer: stable 114 · beta 1 · unsupported 17
7
+ - Contract: stable 132
8
+ - Web renderer: stable 132
9
+ - Native renderer: stable 115 · unsupported 17
10
10
 
11
11
  | Component | Canonical story ID | Contract | Web | Native | Documentation | Required evidence |
12
12
  | --- | --- | --- | --- | --- | --- | --- |
@@ -54,7 +54,7 @@ This document is the human-readable projection of the same catalog and Showcase
54
54
  | TimePicker | `input/time-picker` | stable | stable | stable | [authored](../time-picker.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions |
55
55
  | DatePicker | `input/date-picker` | stable | stable | stable | [authored](../date-picker.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions |
56
56
  | DateRangePicker | `input/date-range-picker` | stable | stable | stable | generated only | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, large-text, rtl, reduced-motion, accessibility, native-actions |
57
- | DrawingEditor | `input/drawing-editor` | beta | beta | beta | [authored](../drawing-editor.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
57
+ | DrawingEditor | `input/drawing-editor` | stable | stable | stable | [authored](../drawing-editor.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
58
58
  | ColorPicker | `input/color-picker` | stable | stable | stable | [authored](../color-picker.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
59
59
  | FilePicker | `input/file-picker` | stable | stable | stable | [authored](../file-picker.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions |
60
60
  | Form | `input/form` | stable | stable | stable | [authored](../form.md) | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, large-text, rtl, reduced-motion, accessibility, native-actions |
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "designSystemVersion": "1.49.0",
3
+ "designSystemVersion": "1.50.0",
4
4
  "source": "packages/design-contracts/docs/generated/showcase-manifest.json",
5
5
  "surfaces": {
6
6
  "web": {
7
7
  "packageName": "@hjmds/react",
8
- "packageVersion": "1.49.0",
8
+ "packageVersion": "1.50.0",
9
9
  "activeComponents": 132,
10
10
  "claimedComponents": 132,
11
11
  "completeScenarioComponents": 131,
@@ -2420,7 +2420,7 @@
2420
2420
  {
2421
2421
  "componentId": "drawing-editor",
2422
2422
  "name": "DrawingEditor",
2423
- "status": "beta",
2423
+ "status": "stable",
2424
2424
  "claimed": true,
2425
2425
  "subpath": "./drawing-editor",
2426
2426
  "exportNames": [
@@ -7114,7 +7114,7 @@
7114
7114
  },
7115
7115
  "native": {
7116
7116
  "packageName": "@hjmds/react-native",
7117
- "packageVersion": "1.49.0",
7117
+ "packageVersion": "1.50.0",
7118
7118
  "activeComponents": 115,
7119
7119
  "claimedComponents": 115,
7120
7120
  "completeScenarioComponents": 112,
@@ -9408,7 +9408,7 @@
9408
9408
  {
9409
9409
  "componentId": "drawing-editor",
9410
9410
  "name": "DrawingEditor",
9411
- "status": "beta",
9411
+ "status": "stable",
9412
9412
  "claimed": true,
9413
9413
  "subpath": "./drawing-editor",
9414
9414
  "exportNames": [
@@ -1,6 +1,6 @@
1
1
  # Renderer evidence coverage
2
2
 
3
- > Generated for HJM 1.49.0. Do not edit directly; run `pnpm evidence:sync`.
3
+ > Generated for HJM 1.50.0. Do not edit directly; run `pnpm evidence:sync`.
4
4
 
5
5
  This projection joins the canonical surface maturity manifest with first-party renderer claims. Missing scenarios are explicit beta promotion debt; stable surfaces are blocked by CI until none remain.
6
6
 
@@ -53,7 +53,7 @@ This projection joins the canonical surface maturity manifest with first-party r
53
53
  | TimePicker | web | stable | @hjmds/react | ./time-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#time-picker, test/scenario-matrix.browser.test.tsx#time-picker, test/time-picker.browser.test.tsx#time-picker |
54
54
  | DatePicker | web | stable | @hjmds/react | ./date-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#date-picker, test/scenario-matrix.browser.test.tsx#date-picker, test/stable-core.browser.test.tsx#date-picker |
55
55
  | DateRangePicker | web | stable | @hjmds/react | ./date-range | default, dark, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#date-range-picker, test/scenario-matrix.browser.test.tsx#date-range-picker, test/date-range.keyboard.browser.test.tsx#date-range-picker |
56
- | DrawingEditor | web | beta | @hjmds/react | ./drawing-editor | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#drawing-editor, test/scenario-matrix.browser.test.tsx#drawing-editor |
56
+ | DrawingEditor | web | stable | @hjmds/react | ./drawing-editor | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#drawing-editor, test/scenario-matrix.browser.test.tsx#drawing-editor |
57
57
  | ColorPicker | web | stable | @hjmds/react | ./color-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#color-picker, test/scenario-matrix.browser.test.tsx#color-picker, test/web-additions.browser.test.tsx#color-picker |
58
58
  | FilePicker | web | stable | @hjmds/react | ./file-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#file-picker, test/scenario-matrix.browser.test.tsx#file-picker, test/file-picker.keyboard.browser.test.tsx#file-picker |
59
59
  | Form | web | stable | @hjmds/react | ./forms | default, dark, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#form, test/scenario-matrix.browser.test.tsx#form, test/form.keyboard.browser.test.tsx#form |
@@ -183,7 +183,7 @@ This projection joins the canonical surface maturity manifest with first-party r
183
183
  | TimePicker | native | stable | @hjmds/react-native | ./time-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#time-picker, test/scenario-matrix.test.tsx#time-picker, test/time-picker.test.tsx#time-picker |
184
184
  | DatePicker | native | stable | @hjmds/react-native | ./date-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#date-picker, test/scenario-matrix.test.tsx#date-picker, test/stable-core.test.tsx#date-picker |
185
185
  | DateRangePicker | native | stable | @hjmds/react-native | ./date-range | default, dark, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#date-range-picker, test/scenario-matrix.test.tsx#date-range-picker, test/date-range-actions.test.tsx#date-range-picker |
186
- | DrawingEditor | native | beta | @hjmds/react-native | ./drawing-editor | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#drawing-editor, test/scenario-matrix.test.tsx#drawing-editor |
186
+ | DrawingEditor | native | stable | @hjmds/react-native | ./drawing-editor | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#drawing-editor, test/scenario-matrix.test.tsx#drawing-editor |
187
187
  | ColorPicker | native | stable | @hjmds/react-native | ./color-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#color-picker, test/scenario-matrix.test.tsx#color-picker |
188
188
  | FilePicker | native | stable | @hjmds/react-native | ./file-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#file-picker, test/scenario-matrix.test.tsx#file-picker, test/file-picker-host-action.test.tsx#file-picker |
189
189
  | Form | native | stable | @hjmds/react-native | ./forms | default, dark, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#form, test/scenario-matrix.test.tsx#form, test/form.interaction.test.tsx#form |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "designSystemVersion": "1.49.0",
3
+ "designSystemVersion": "1.50.0",
4
4
  "packageName": "@hjmds/design-contracts",
5
5
  "components": [
6
6
  {
@@ -2298,10 +2298,10 @@
2298
2298
  "extensions": [],
2299
2299
  "category": "input",
2300
2300
  "platform": "adaptive",
2301
- "contractStatus": "beta",
2301
+ "contractStatus": "stable",
2302
2302
  "surfaces": {
2303
- "web": "beta",
2304
- "native": "beta"
2303
+ "web": "stable",
2304
+ "native": "stable"
2305
2305
  },
2306
2306
  "requirements": [
2307
2307
  {
@@ -59,7 +59,7 @@ packages or migrate consumer applications.
59
59
  adoption. These are opt-in extensions, not six new canonical components or a stable promotion.
60
60
  The canonical Statistic/Menu/Sheet/KeyboardAvoiding APIs remain available without additional peers.
61
61
  ContextMenu's canonical Native status remains unsupported until the OS adapter has device evidence.
62
- ImageViewer and all native adapters are experimental pending device/assistive-technology checks.
62
+ At this historical 2026-09-30 checkpoint ImageViewer and native adapters were experimental; current support is stated above.
63
63
 
64
64
  ## Entry points and ownership
65
65
 
@@ -1,5 +1,17 @@
1
1
  # Stable Core
2
2
 
3
+ ## 2026-10-27 DrawingEditor와 ShareSheet 승격
4
+
5
+ 남은 실험의 승격 요청에 따라 DrawingEditor 계약과 Web·Native renderer를 stable로 올리고,
6
+ 독립 카탈로그가 아닌 ShareSheet 합성 API도 문서화한 입력·결과 계약의 stable 지원으로 전환한다.
7
+ 두 컴포넌트의 Web·Native 예시를 배포 섹션으로 옮긴다. DrawingEditor 획 입력은 포인터·터치이며
8
+ 키보드 그리기는 제공하지 않는다. ShareSheet의 실제 복사·기기 공유·전송은 제품 또는 OS가 소유한다.
9
+
10
+ 변경 범위 검사는 DrawingEditor·ShareSheet의 contracts 6건, Web 8건, Native 6건과
11
+ DrawingEditor의 어두운 RTL 환경·이름 있는 도구 동작을 각 renderer에서 추가 확인했다.
12
+ 이는 Web 브라우저와 Native host 테스트이며 실제 OS 기기, VoiceOver/TalkBack, 제품 업로드나
13
+ 스토어 반영의 증거는 아니다. 기존 선택형 어댑터의 10월 26일 stable 판정과 어긋난 개별 지침도 맞춘다.
14
+
3
15
  ## 2026-10-26 잔여 실험과 beta 승격
4
16
 
5
17
  사용자의 “다 올려” 지시에 따라 남아 있던 카탈로그 beta와 실험 화면을 승격했다.
@@ -7,7 +7,7 @@
7
7
  [선택 기준](SELECTION.md)으로 그대로 사용·공개 슬롯 확장·공통 API 보완·제품 고유 기능 연결을 고른다. 설치 버전의 지침을 본다: `node_modules/@hjmds/design-contracts/docs/usage/`.
8
8
  이름을 모르면 [쉬운 말로 찾고 비교하기](FINDING.md)에서 일상 표현과 선택 기준·요청 예시로 시작한다.
9
9
  제공 기준은 확인한 기본 API 버전이며 최초 출시 버전이 아니다. 구성·화면은 각 API 지침의 제공 버전을 확인한다.
10
- API 안정성은 1.48.0의 생성 manifest에서 읽은 정규(canonical) API 기준이다. 동반·선택형 확장은 개별 계약을 확인한다.
10
+ API 안정성은 1.50.0의 생성 manifest에서 읽은 정규(canonical) API 기준이다. 동반·선택형 확장은 개별 계약을 확인한다.
11
11
  Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품 반영을 의미하지 않는다.
12
12
  `분류`는 Storybook 제목 `<배포|실험>/<단계>/<분류>/<항목>`의 셋째 마디이고, 토큰·구성·화면은 Storybook 메뉴와 같은 순서다.
13
13
 
@@ -95,7 +95,7 @@ Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품
95
95
  | [DesignSystemProvider](components/design-system-provider.md) | 기반 기능 | 앱 루트에 한 번 둔다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
96
96
  | [Dialog](components/dialog.md) | 오버레이 | 화면 흐름을 잠시 멈추고 사용자의 주의가 필요한 **짧은 작업**에 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
97
97
  | [Divider](components/divider.md) | 레이아웃 | 서로 다른 내용 묶음 사이에 얇은 구분선이 필요할 때 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
98
- | [DrawingEditor](components/drawing-editor.md) | 입력 | 펜·지우개로 그림을 그리고 이미지로 저장하는 전체 편집 화면에 쓴다. | 미게시(1.48.0 이후) | Web · Native | Web beta / Native beta | 실험 |
98
+ | [DrawingEditor](components/drawing-editor.md) | 입력 | 펜·지우개로 그림을 그리고 이미지로 저장하는 전체 편집 화면에 쓴다. | 1.49.0 | Web · Native | Web stable / Native stable | 배포 |
99
99
  | [EditorScreen](components/editor-screen.md) | 레이아웃 | 글쓰기·프로필 수정처럼 한 화면 전체가 편집 흐름일 때 쓴다. | 1.17.1 | Web · Native | Web stable / Native stable | 배포 |
100
100
  | [EffectSurface](components/effect-surface.md) | 시각 효과 | 환영·온보딩·빈 히어로처럼 분위기를 주는 배경이 필요할 때 내용 뒤에 장식 레이어(mesh·glow·grain)를 깐다. | 1.12.1 | Web · Native | 개별 API 계약 참조 | 배포 |
101
101
  | [EmptyState](components/empty-state.md) | 상태와 알림 | 목록이 비었거나 검색 결과가 0건이라 **아직 없음**을 알릴 때 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
@@ -121,9 +121,9 @@ Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품
121
121
  | [InlineEdit](components/inline-edit.md) | 구성/입력과 작성 | 목록·상세의 제목처럼 이미 확정된 짧은 값 하나를 그 자리에서 명시적으로 편집·저장·취소할 때 쓴다. | 1.21.0 | Web · Native | 개별 API 계약 참조 | 배포 |
122
122
  | [KeyboardAvoidanceContext](components/keyboard-avoidance-context.md) | — | 제품이 직접 만든 키보드 대응 영역 안에서 HJM `ScreenLayout`·`Sheet`가 여백을 두 번 주지 않게 할 때 쓴다. | 1.27.0 | Native | 개별 API 계약 참조 | 배포 |
123
123
  | [KeyboardAvoiding](components/keyboard-avoiding.md) | — | 추가 native peer 없이 하단 행동(BottomCTA, 채팅 입력창)이 소프트웨어 키보드에 가려지지 않게 할 때 쓴다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
124
- | [KeyboardDock](components/keyboard-dock.md) | 구성/직접 조작과 모션 | `react-native-keyboard-controller`를 설치한 앱에서 화면 하단에 고정된 행동(BottomCTA, 채팅 입력창)이 키보드와 함께 위아래로 움직이게 할 때 쓴다(Native 전용, 별도 보조 기능. API 성숙도는 실험적 어댑터). 내부는 `KeyboardStickyView`이며, 여백을 바꾸는 대신 키보드 움직임을 따라 translate 한다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
125
- | [KeyboardFormScrollView](components/keyboard-form-scroll-view.md) | 구성/직접 조작과 모션 | 입력 필드가 여러 개인 세로 스크롤 폼(가입, 프로필 수정, 주소 입력)에서 포커스된 필드가 키보드에 가려지지 않게 스크롤해 줄 때 쓴다(Native 전용, 별도 보조 기능. API 성숙도는 실험적 어댑터). 내부는 `react-native-keyboard-controller`의 `KeyboardAwareScrollView`이고, `keyboardShouldPersistTaps="handled"`로 고정돼 키보드가 열린 채 버튼을 눌러도 탭이 전달된다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
126
- | [KeyboardMotionProvider](components/keyboard-motion-provider.md) | 구성/직접 조작과 모션 | `@hjmds/react-native/keyboard-controller` 어댑터(KeyboardDock, KeyboardFormScrollView)를 쓰는 앱의 루트에 **한 번** 설치한다(Native 전용, 별도 보조 기능. API 성숙도는 실험적 어댑터). 내부는 `react-native-keyboard-controller`의 `KeyboardProvider`이며, 어댑터를 준비하려고 OS 키보드를 미리 띄우지 않도록 `preload={false}`로 고정돼 있다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
124
+ | [KeyboardDock](components/keyboard-dock.md) | 구성/직접 조작과 모션 | `react-native-keyboard-controller`를 설치한 앱에서 화면 하단에 고정된 행동(BottomCTA, 채팅 입력창)이 키보드와 함께 위아래로 움직이게 할 때 쓴다(Native 전용, 별도 보조 기능. 문서화한 선택 peer 계약은 stable). 내부는 `KeyboardStickyView`이며, 여백을 바꾸는 대신 키보드 움직임을 따라 translate 한다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
125
+ | [KeyboardFormScrollView](components/keyboard-form-scroll-view.md) | 구성/직접 조작과 모션 | 입력 필드가 여러 개인 세로 스크롤 폼(가입, 프로필 수정, 주소 입력)에서 포커스된 필드가 키보드에 가려지지 않게 스크롤해 줄 때 쓴다(Native 전용, 별도 보조 기능. 문서화한 선택 peer 계약은 stable). 내부는 `react-native-keyboard-controller`의 `KeyboardAwareScrollView`이고, `keyboardShouldPersistTaps="handled"`로 고정돼 키보드가 열린 채 버튼을 눌러도 탭이 전달된다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
126
+ | [KeyboardMotionProvider](components/keyboard-motion-provider.md) | 구성/직접 조작과 모션 | `@hjmds/react-native/keyboard-controller` 어댑터(KeyboardDock, KeyboardFormScrollView)를 쓰는 앱의 루트에 **한 번** 설치한다(Native 전용, 별도 보조 기능. 문서화한 선택 peer 계약은 stable). 내부는 `react-native-keyboard-controller`의 `KeyboardProvider`이며, 어댑터를 준비하려고 OS 키보드를 미리 띄우지 않도록 `preload={false}`로 고정돼 있다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
127
127
  | [Layout](components/layout.md) | 레이아웃 | 앱의 상시 골격(header · sidebar · main · footer)을 한 번 세울 때 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
128
128
  | [Link](components/link.md) | 동작 | 사용자가 복사하거나 새 탭으로 열 수 있는 **목적지**로 이동할 때 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
129
129
  | [List](components/list.md) | 데이터 표시 | 이미 다 불러온, 개수가 많지 않은 행들을 이름 있는 목록 하나로 묶을 때 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
@@ -177,7 +177,7 @@ Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품
177
177
  | [SettingsScreen](components/settings-screen.md) | 레이아웃 | 앱의 설정 화면 전체에 쓴다. | 1.17.1 | Web · Native | Web stable / Native stable | 배포 |
178
178
  | [SharedTransitionElement](components/shared-transition-element.md) | 구성/직접 조작과 모션 | 목록의 카드(사진·썸네일)를 눌러 상세 화면으로 갈 때, 같은 요소가 두 화면 사이에서 확대·축소되어 이어지는 공유 요소 전환에 쓴다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
179
179
  | [SharedTransitionScreen](components/shared-transition-screen.md) | 구성/직접 조작과 모션 | `createHjmTransitionStack()`으로 만든 stack에서 공유 요소 전환을 쓸 때, **각 라우트 본문**을 감싼다. | 1.12.1 | Native | 개별 API 계약 참조 | 배포 |
180
- | [ShareSheet](components/share-sheet.md) | 오버레이 | 링크 하나를 **앱 안의 받는 사람에게 보내거나(선택), 링크를 복사하거나, 기기 공유 시트로 내보내는** 공유 시트에 쓴다. | 미게시(1.47.0 이후) | Web · Native | 개별 API 계약 참조 | 실험 |
180
+ | [ShareSheet](components/share-sheet.md) | 오버레이 | 링크 하나를 **앱 안의 받는 사람에게 보내거나(선택), 링크를 복사하거나, 기기 공유 시트로 내보내는** 공유 시트에 쓴다. | 1.48.0 | Web · Native | 개별 API 계약 참조 | 배포 |
181
181
  | [Sheet](components/sheet.md) | 오버레이 | 현재 화면 위에 모달로 띄우는 보조 작업 패널에 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
182
182
  | [ShortcutRecorder](components/shortcut-recorder.md) | 구성/직접 조작과 모션 | Web 앱에서 사용자가 수정키+키 조합을 눌러 기록하고, 확인 뒤 실제 단축키로 등록하게 할 때 쓴다. | 1.21.0 | Web | 개별 API 계약 참조 | 배포 |
183
183
  | [Sidebar](components/sidebar.md) | 탐색 | 데스크톱 Web의 세로 내비게이션에 쓴다. | 1.12.1 | Web | Web stable / Native unsupported | 배포 |
@@ -12,7 +12,7 @@
12
12
 
13
13
  Web에서 제품이 소유한 영역(카드·목록 행·캔버스)의 우클릭·길게 누르기·Shift+F10에 명령 목록을
14
14
  띄울 때 쓴다. 같은 명령은 화면의 다른 경로(버튼·Menu)에도 있어야 한다. Native는 추가 의존성 없는
15
- canonical `ContextMenu`(`@hjmds/react-native/context-menu`, 미게시, 2026-10-16)가 채팅 길게 누르기 메뉴와 같은
15
+ canonical `ContextMenu`(`@hjmds/react-native/context-menu`, 2026-10-16 도입)가 채팅 길게 누르기 메뉴와 같은
16
16
  모양(배경 어둡게 + 누른 위치 근처 카드, 행 높이 48, 아이콘 24 칸, 위험 항목 빨간 글자)으로 연다. 대화 목록·댓글처럼
17
17
  행을 길게 눌러 여는 동작 목록은 이것을 쓴다. OS 고유 메뉴가 꼭 필요할 때만 선택 어댑터 `NativeContextMenu`를 쓴다.
18
18
 
@@ -148,7 +148,7 @@ import { Pressable } from "react-native";
148
148
  | 메뉴 접근성 이름 | `accessibilityLabel`(필수) | 없음(자식 요소가 이름을 가짐) |
149
149
  | 항목 `textValue`·`shortcut` | 있음 | 없음 |
150
150
  | 열림 알림 | 없음 | `onOpenChange(open)` |
151
- | 성숙도 | stable | 실험적 어댑터(기기 증거 전까지 canonical unsupported) |
151
+ | 성숙도 | stable | 선택형 어댑터 stable (canonical ContextMenu와 별도) |
152
152
 
153
153
  Web 활성 항목은 실제 마우스 이동으로만 바꾸며(1.15.0 변경), 늦은 경계 이벤트만으로 키보드 선택을 덮지 않는다. 클릭·키보드 실행·포커스 복귀와
154
154
  Native OS 어댑터는 기존 계약을 유지한다. 고정 대기 시간이 아니라 입력 의도로 구분한다.
@@ -1,12 +1,14 @@
1
1
  # DrawingEditor
2
2
 
3
3
  - 단계: 컴포넌트
4
- - 상태: 실험
4
+ - 상태: 배포
5
5
  - 지원: Web · Native
6
- - 적용: 미게시(1.48.0 이후)
6
+ - 적용: 1.49.0
7
7
  - 검토일: 2026-10-27
8
8
  - 근거: 다에리와 스핀트의 프로필 손그림 편집기가 복제돼 도구·이력·레이아웃이 갈라지는 것을 막으라는 사용자 요청
9
- - 스토리북: `실험/컴포넌트/입력/손그림 편집기`
9
+ - 스토리북: `배포/컴포넌트/입력/손그림 편집기`
10
+
11
+ 1.49.0에는 beta로 처음 게시됐으며 stable 판정은 1.50.0부터 적용된다.
10
12
 
11
13
  ## 언제 쓰나
12
14
 
@@ -117,7 +119,7 @@ Web는 pointer capture와 `touch-action: none`을 사용한다. 첫 터치/포
117
119
 
118
120
  다에리 Native·Web, 스핀트 Native가 이 컴포넌트를 소비한다. 제품의 중복 캔버스·도구·이력 구현과 그 전용 계약 테스트는 제거하고
119
121
  공통 계약/renderer 테스트로 옮긴다. 제품 테스트는 계정·업로드 실패·탐색 연결을 계속 확인한다.
120
- 소스 연결 개발에서만 제공되는 후보이며 npm 게시·스토어 반영·실기기 검증과 구분한다.
122
+ 공개 패키지 설치, 제품 채택과 실기기 검증은 각각 확인한다. 캔버스 획 입력은 포인터·터치 전용이며 키보드로 그리는 기능은 제공하지 않는다.
121
123
 
122
124
  ## 플랫폼 차이
123
125
 
@@ -11,7 +11,7 @@
11
11
  ## 언제 쓰나
12
12
 
13
13
  `react-native-keyboard-controller`를 설치한 앱에서 화면 하단에 고정된 행동(BottomCTA, 채팅 입력창)이
14
- 키보드와 함께 위아래로 움직이게 할 때 쓴다(Native 전용, 별도 보조 기능. API 성숙도는 실험적 어댑터). 내부는 `KeyboardStickyView`이며,
14
+ 키보드와 함께 위아래로 움직이게 할 때 쓴다(Native 전용, 별도 보조 기능. 문서화한 선택 peer 계약은 stable). 내부는 `KeyboardStickyView`이며,
15
15
  여백을 바꾸는 대신 키보드 움직임을 따라 translate 한다.
16
16
 
17
17
  ## 쓰지 않을 때
@@ -107,4 +107,4 @@ const keyboardOpen = useKeyboardState((state) => state.isVisible);
107
107
 
108
108
  - sticky 좌표는 창 기준이다. Storybook 캔버스처럼 아래에 다른 막대가 있는 host에서는 위치가 어긋나므로
109
109
  쇼케이스도 앱 크기 host에서 확인한다.
110
- - API 성숙도가 실험적 어댑터다(2026-10-06 Storybook 배포와 별개, [근거](../../optional-adapters.md#evidence-and-promotion)). 실제 키보드 애니메이션은 mock 테스트로 검증되지 않는다. 개발 클라이언트로 확인한다.
110
+ - 문서화한 선택 peer 계약은 stable이다([근거](../../optional-adapters.md#current-support--2026-10-26)). 실제 키보드 애니메이션은 mock 테스트로 검증되지 않는다. 개발 클라이언트로 확인한다.
@@ -11,7 +11,7 @@
11
11
  ## 언제 쓰나
12
12
 
13
13
  입력 필드가 여러 개인 세로 스크롤 폼(가입, 프로필 수정, 주소 입력)에서 포커스된 필드가 키보드에
14
- 가려지지 않게 스크롤해 줄 때 쓴다(Native 전용, 별도 보조 기능. API 성숙도는 실험적 어댑터). 내부는 `react-native-keyboard-controller`의
14
+ 가려지지 않게 스크롤해 줄 때 쓴다(Native 전용, 별도 보조 기능. 문서화한 선택 peer 계약은 stable). 내부는 `react-native-keyboard-controller`의
15
15
  `KeyboardAwareScrollView`이고, `keyboardShouldPersistTaps="handled"`로 고정돼 키보드가 열린 채 버튼을 눌러도 탭이 전달된다.
16
16
 
17
17
  ## 쓰지 않을 때
@@ -92,4 +92,4 @@ import { spacing } from "@hjmds/design-contracts/foundations";
92
92
  좌우 여백까지 스크롤 컨테이너에 직접 준다. 규칙은 세로 여백만 스크롤에, 좌우는 Container `gutter`다.
93
93
 
94
94
  - `refreshControl`, `onScroll` 같은 다른 ScrollView prop은 타입에서 빠져 있어 넘길 수 없다.
95
- - API 성숙도가 실험적 어댑터다(2026-10-06 Storybook 배포와 별개, [근거](../../optional-adapters.md#evidence-and-promotion)). 포커스 이동·키보드 애니메이션은 개발 클라이언트로 기기에서 확인한다.
95
+ - 문서화한 선택 peer 계약은 stable이다([근거](../../optional-adapters.md#current-support--2026-10-26)). 포커스 이동·키보드 애니메이션은 개발 클라이언트로 기기에서 확인한다.
@@ -11,7 +11,7 @@
11
11
  ## 언제 쓰나
12
12
 
13
13
  `@hjmds/react-native/keyboard-controller` 어댑터(KeyboardDock, KeyboardFormScrollView)를 쓰는 앱의
14
- 루트에 **한 번** 설치한다(Native 전용, 별도 보조 기능. API 성숙도는 실험적 어댑터). 내부는 `react-native-keyboard-controller`의
14
+ 루트에 **한 번** 설치한다(Native 전용, 별도 보조 기능. 문서화한 선택 peer 계약은 stable). 내부는 `react-native-keyboard-controller`의
15
15
  `KeyboardProvider`이며, 어댑터를 준비하려고 OS 키보드를 미리 띄우지 않도록 `preload={false}`로 고정돼 있다.
16
16
 
17
17
  ## 쓰지 않을 때
@@ -83,4 +83,4 @@ import { KeyboardMotionProvider } from "@hjmds/react-native/keyboard-controller"
83
83
  - tsc·mock 테스트 통과는 peer 설치와 native 연결의 근거가 아니다. 다른 optional subpath
84
84
  (celebration·effect-surface·qr-code·thinking-orb·toast-liquid)에서 앱에 없는 peer 때문에
85
85
  기기 Metro에서만 크래시가 난 사례가 있다(2026-10). 개발 클라이언트로 실제 화면을 띄워 확인한다.
86
- - 이 어댑터의 API 성숙도는 실험이다(2026-10-06 Storybook 배포와 별개). 기기·보조기술 검증은 아직 없다([근거](../../optional-adapters.md#evidence-and-promotion)).
86
+ - 문서화한 선택 peer 계약은 stable이다. 소비 기기의 키보드·보조기술 검증은 별도로 확인한다([근거](../../optional-adapters.md#current-support--2026-10-26)).
@@ -1,12 +1,14 @@
1
1
  # ShareSheet
2
2
 
3
3
  - 단계: 컴포넌트
4
- - 상태: 실험
4
+ - 상태: 배포
5
5
  - 지원: Web · Native
6
- - 적용: 미게시(1.47.0 이후)
6
+ - 적용: 1.48.0
7
7
  - 검토일: 2026-10-26
8
8
  - 근거: `src/share-sheet.ts`의 `shareSheetRecipe`·`resolveShareSheetSendOutcome`·`filterShareSheetRecipients`; Web `src/share-sheet.tsx`, Native `src/share-sheet.tsx`
9
- - 스토리북: `실험/컴포넌트/오버레이/공유 시트`
9
+ - 스토리북: `배포/컴포넌트/오버레이/공유 시트`
10
+
11
+ 1.48.0부터 제공하며 stable 지원은 1.50.0부터 적용된다.
10
12
 
11
13
  ## 언제 쓰나
12
14
 
@@ -123,8 +123,8 @@ import { Container, Stack, Text } from "@hjmds/react/layout";
123
123
  ```
124
124
 
125
125
  ```tsx
126
- // Native: 단일 펼침만. ContextMenu·Menubar는 Web 전용이고, 길게 누르기 메뉴는 실험적
127
- // `NativeContextMenu`(`/context-menu-native`)가 있다.
126
+ // Native: 단일 펼침만. ContextMenu는 `/context-menu`에 있고 Menubar는 Web 전용이다.
127
+ // OS 메뉴가 필요하면 선택형 `NativeContextMenu`(`/context-menu-native`)를 쓴다.
128
128
  import { Collapsible } from "@hjmds/react-native/collapsible";
129
129
  import { Text } from "@hjmds/react-native/primitives";
130
130
 
@@ -140,7 +140,7 @@ import { Text } from "@hjmds/react-native/primitives";
140
140
  | 항목 | Web | Native |
141
141
  | --- | --- | --- |
142
142
  | `Collapsible` | `/collapsible`, 배치는 `layoutStyle`(또는 `className`) | `/collapsible`, 배치는 `layoutStyle`(`style`은 제거된 속성) |
143
- | 대상 메뉴 | `ContextMenu`(stable) | `NativeContextMenu`(실험적 어댑터) |
143
+ | 대상 메뉴 | `ContextMenu`(stable) | `NativeContextMenu`(선택형 stable 어댑터) |
144
144
  | `Menubar` | 있음 | 없음 |
145
145
 
146
146
  ## 함정
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hjmds/design-contracts",
3
- "version": "1.49.0",
3
+ "version": "1.50.0",
4
4
  "description": "Renderer-neutral design contracts, tokens, recipes, and behaviors shared by HJM products.",
5
5
  "license": "MIT",
6
6
  "repository": {