diff --git a/docs/sw/property-panel-comparison-qa/before/before-compare-1440.png b/docs/sw/property-panel-comparison-qa/before/before-compare-1440.png new file mode 100644 index 0000000..7a805d7 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/before/before-compare-1440.png differ diff --git a/docs/sw/property-panel-comparison-qa/before/before-property-panel-all.png b/docs/sw/property-panel-comparison-qa/before/before-property-panel-all.png new file mode 100644 index 0000000..28e19c1 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/before/before-property-panel-all.png differ diff --git a/docs/sw/property-panel-comparison-qa/before/before-property-panel-circle.png b/docs/sw/property-panel-comparison-qa/before/before-property-panel-circle.png new file mode 100644 index 0000000..6c60a22 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/before/before-property-panel-circle.png differ diff --git a/docs/sw/property-panel-comparison-qa/before/before-property-panel-expanded.png b/docs/sw/property-panel-comparison-qa/before/before-property-panel-expanded.png new file mode 100644 index 0000000..20f2080 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/before/before-property-panel-expanded.png differ diff --git a/docs/sw/property-panel-comparison-qa/before/before-property-panel-none.png b/docs/sw/property-panel-comparison-qa/before/before-property-panel-none.png new file mode 100644 index 0000000..d32f7d0 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/before/before-property-panel-none.png differ diff --git a/docs/sw/property-panel-comparison-qa/before/before-property-panel-variants.png b/docs/sw/property-panel-comparison-qa/before/before-property-panel-variants.png new file mode 100644 index 0000000..bb6cce6 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/before/before-property-panel-variants.png differ diff --git a/docs/sw/property-panel-comparison-qa/before/result.json b/docs/sw/property-panel-comparison-qa/before/result.json new file mode 100644 index 0000000..ea7483c --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/before/result.json @@ -0,0 +1,202 @@ +{ + "mode": "before", + "base": "static", + "browser": "155.0.8059.80", + "checks": [], + "errors": [], + "data": { + "inventory": { + "total": 343, + "sw": 24, + "ids": [ + [ + "sw-header--composed-controls", + "Dropdown" + ], + [ + "sw-header--detail-buttons", + "Detail Buttons (Shared States)" + ], + [ + "sw-header--overview", + "Overview" + ], + [ + "sw-header--interactive-states", + "Interactive States" + ], + [ + "sw-header--window-move-motion", + "Window Move Motion" + ], + [ + "sw-header--logo-slot", + "Logo Slot" + ], + [ + "sw-header--document-dropdown", + "Document Dropdown" + ], + [ + "sw-header--responsive-more", + "Responsive More" + ], + [ + "sw-header--layer-detail-input", + "Layer Detail · Input" + ], + [ + "sw-header--property-panel", + "Property Panel" + ], + [ + "sw-header--property-panel-variants", + "Property Panel Variants" + ], + [ + "sw-header--k-guide", + "K Guide" + ], + [ + "sw-header--additional-hover", + "Additional Hover" + ], + [ + "sw-header--property-bar", + "Property Bar" + ], + [ + "sw-header--dynamic-controls", + "Dynamic Controls" + ], + [ + "sw-header--colorize", + "Colorize" + ], + [ + "sw-header--composition", + "Composition (Visibility · Order)" + ], + [ + "sw-header--property-panel-none", + "Property Panel · 선택 없음" + ], + [ + "sw-header--property-panel-all", + "Property Panel · 전체 선택" + ], + [ + "sw-header--property-panel-circle", + "Property Panel · 원 1개" + ], + [ + "sw-header--property-panel-expanded", + "Property Panel · 모두 펼침" + ], + [ + "sw-header--property-panel-compare", + "Property Panel · 4개 비교" + ], + [ + "sw-header--property-shape-slot", + "Property Panel · 형상 Slot" + ], + [ + "sw-header--property-fields", + "Property Panel · 필드 13개" + ] + ] + }, + "compare": { + "cells": [ + { + "id": "none", + "cell": { + "x": 0, + "y": 177, + "w": 314, + "h": 322, + "right": 314, + "bottom": 499 + }, + "panel": { + "x": 0, + "y": 243, + "w": 314, + "h": 256, + "right": 314, + "bottom": 499 + }, + "caption": "선택된 객체 없음" + }, + { + "id": "all", + "cell": { + "x": 338, + "y": 177, + "w": 314, + "h": 427, + "right": 652, + "bottom": 604 + }, + "panel": { + "x": 338, + "y": 243, + "w": 314, + "h": 361, + "right": 652, + "bottom": 604 + }, + "caption": "전체 객체 선택" + }, + { + "id": "circle", + "cell": { + "x": 676, + "y": 177, + "w": 314, + "h": 724, + "right": 990, + "bottom": 901 + }, + "panel": { + "x": 676, + "y": 243, + "w": 314, + "h": 658, + "right": 990, + "bottom": 901 + }, + "caption": "원 1개 선택" + }, + { + "id": "expanded", + "cell": { + "x": 1014, + "y": 177, + "w": 314, + "h": 820, + "right": 1328, + "bottom": 997 + }, + "panel": { + "x": 1014, + "y": 243, + "w": 314, + "h": 754, + "right": 1328, + "bottom": 997 + }, + "caption": "모든 항목 펼침" + } + ], + "scroller": null, + "doc": { + "scrollW": 1440, + "clientW": 1440, + "scrollH": 1037, + "clientH": 900 + } + } + } +} diff --git a/docs/sw/property-panel-comparison-qa/before/story-inventory-before.json b/docs/sw/property-panel-comparison-qa/before/story-inventory-before.json new file mode 100644 index 0000000..39432ff --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/before/story-inventory-before.json @@ -0,0 +1,246 @@ +{ + "total": 343, + "sw": [ + { + "id": "sw-header--composed-controls", + "name": "Dropdown", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--detail-buttons", + "name": "Detail Buttons (Shared States)", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ] + }, + { + "id": "sw-header--overview", + "name": "Overview", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--interactive-states", + "name": "Interactive States", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--window-move-motion", + "name": "Window Move Motion", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--logo-slot", + "name": "Logo Slot", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--document-dropdown", + "name": "Document Dropdown", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--responsive-more", + "name": "Responsive More", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--layer-detail-input", + "name": "Layer Detail · Input", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-panel", + "name": "Property Panel", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-panel-variants", + "name": "Property Panel Variants", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--k-guide", + "name": "K Guide", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--additional-hover", + "name": "Additional Hover", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-bar", + "name": "Property Bar", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--dynamic-controls", + "name": "Dynamic Controls", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--colorize", + "name": "Colorize", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--composition", + "name": "Composition (Visibility · Order)", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-panel-none", + "name": "Property Panel · 선택 없음", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-panel-all", + "name": "Property Panel · 전체 선택", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-panel-circle", + "name": "Property Panel · 원 1개", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-panel-expanded", + "name": "Property Panel · 모두 펼침", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-panel-compare", + "name": "Property Panel · 4개 비교", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-shape-slot", + "name": "Property Panel · 형상 Slot", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + }, + { + "id": "sw-header--property-fields", + "name": "Property Panel · 필드 13개", + "title": "SW/Header", + "tags": [ + "dev", + "test", + "manifest" + ] + } + ] +} diff --git a/docs/sw/property-panel-comparison-qa/legacy-detail-buttons-preservation/preservation-result.json b/docs/sw/property-panel-comparison-qa/legacy-detail-buttons-preservation/preservation-result.json new file mode 100644 index 0000000..223efc0 --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/legacy-detail-buttons-preservation/preservation-result.json @@ -0,0 +1,114 @@ +{ + "mode": "preservation", + "browser": "155.0.8059.80", + "checks": [ + { + "name": "required responsive width 390", + "status": "PASS", + "data": { + "height": 49, + "overflow": 0, + "documentOverflow": 0 + } + }, + { + "name": "required responsive width 768", + "status": "PASS", + "data": { + "height": 49, + "overflow": 0, + "documentOverflow": 0 + } + }, + { + "name": "required responsive width 1280", + "status": "PASS", + "data": { + "height": 49, + "overflow": 0, + "documentOverflow": 0 + } + }, + { + "name": "required responsive width 1440", + "status": "PASS", + "data": { + "height": 49, + "overflow": 0, + "documentOverflow": 0 + } + }, + { + "name": "preserve property panel none", + "status": "PASS", + "data": { + "x": 360, + "y": 282.5, + "width": 314, + "height": 256 + } + }, + { + "name": "preserve property panel all", + "status": "PASS", + "data": { + "x": 698, + "y": 282.5, + "width": 314, + "height": 361 + } + }, + { + "name": "preserve property panel circle", + "status": "PASS", + "data": { + "x": 360, + "y": 733.5, + "width": 314, + "height": 658 + } + }, + { + "name": "preserve property panel expanded", + "status": "PASS", + "data": { + "x": 698, + "y": 733.5, + "width": 314, + "height": 754 + } + }, + { + "name": "preserve window motion 1400ms", + "status": "PASS" + }, + { + "name": "window motion leave clears animations", + "status": "PASS" + }, + { + "name": "preserve K guide animation", + "status": "PASS" + }, + { + "name": "K guide leave closes", + "status": "PASS" + }, + { + "name": "preserve Colorize size", + "status": "PASS" + }, + { + "name": "preserve editable Input", + "status": "PASS" + }, + { + "name": "no browser errors", + "status": "PASS", + "data": [] + } + ], + "errors": [], + "styles": {}, + "status": "PASS" +} \ No newline at end of file diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/after-full-index.json b/docs/sw/property-panel-comparison-qa/legacy-dropdown/after-full-index.json new file mode 100644 index 0000000..def66d2 --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/legacy-dropdown/after-full-index.json @@ -0,0 +1,5278 @@ +{ + "v": 5, + "entries": { + "foundation-color--all": { + "type": "story", + "subtype": "story", + "id": "foundation-color--all", + "name": "Color", + "title": "Foundation/Color", + "importPath": "./src/foundation/color.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "foundation-typography--all": { + "type": "story", + "subtype": "story", + "id": "foundation-typography--all", + "name": "Typography", + "title": "Foundation/Typography", + "importPath": "./src/foundation/typography.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "foundation-layout--all": { + "type": "story", + "subtype": "story", + "id": "foundation-layout--all", + "name": "Layout", + "title": "Foundation/Layout", + "importPath": "./src/foundation/layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-form-button--all": { + "type": "story", + "subtype": "story", + "id": "components-form-button--all", + "name": "Button", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-form-button--roles": { + "type": "story", + "subtype": "story", + "id": "components-form-button--roles", + "name": "Roles", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Roles" + }, + "components-form-button--sizes": { + "type": "story", + "subtype": "story", + "id": "components-form-button--sizes", + "name": "Sizes", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Sizes" + }, + "components-form-button--states": { + "type": "story", + "subtype": "story", + "id": "components-form-button--states", + "name": "Brand States", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "States" + }, + "components-form-button--standard-states": { + "type": "story", + "subtype": "story", + "id": "components-form-button--standard-states", + "name": "Standard States", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "StandardStates" + }, + "components-form-button--long-label": { + "type": "story", + "subtype": "story", + "id": "components-form-button--long-label", + "name": "Long Label", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongLabel" + }, + "components-form-button--korean-labels": { + "type": "story", + "subtype": "story", + "id": "components-form-button--korean-labels", + "name": "Korean Labels", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "KoreanLabels" + }, + "components-form-button--icon-text-narrow": { + "type": "story", + "subtype": "story", + "id": "components-form-button--icon-text-narrow", + "name": "Icon Text Narrow", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "IconTextNarrow" + }, + "components-form-button--destructive": { + "type": "story", + "subtype": "story", + "id": "components-form-button--destructive", + "name": "Destructive", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Destructive" + }, + "components-form-button--playground": { + "type": "story", + "subtype": "story", + "id": "components-form-button--playground", + "name": "Playground", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Playground" + }, + "components-form-button--compatibility": { + "type": "story", + "subtype": "story", + "id": "components-form-button--compatibility", + "name": "Compatibility", + "title": "Components/Form/Button", + "importPath": "./src/components/button.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Compatibility" + }, + "components-form-input--all": { + "type": "story", + "subtype": "story", + "id": "components-form-input--all", + "name": "Input", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "play-fn" + ], + "exportName": "All" + }, + "components-form-input--default": { + "type": "story", + "subtype": "story", + "id": "components-form-input--default", + "name": "Default", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Default" + }, + "components-form-input--focus": { + "type": "story", + "subtype": "story", + "id": "components-form-input--focus", + "name": "Focus", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "Focus" + }, + "components-form-input--error": { + "type": "story", + "subtype": "story", + "id": "components-form-input--error", + "name": "Error", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Error" + }, + "components-form-input--invalid-focus": { + "type": "story", + "subtype": "story", + "id": "components-form-input--invalid-focus", + "name": "Invalid Focus", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "InvalidFocus" + }, + "components-form-input--error-message": { + "type": "story", + "subtype": "story", + "id": "components-form-input--error-message", + "name": "Error Message", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ErrorMessage" + }, + "components-form-input--required": { + "type": "story", + "subtype": "story", + "id": "components-form-input--required", + "name": "Required", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Required" + }, + "components-form-input--disabled": { + "type": "story", + "subtype": "story", + "id": "components-form-input--disabled", + "name": "Disabled", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-form-input--readonly": { + "type": "story", + "subtype": "story", + "id": "components-form-input--readonly", + "name": "Readonly", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Readonly" + }, + "components-form-input--sizes": { + "type": "story", + "subtype": "story", + "id": "components-form-input--sizes", + "name": "Compare Sizes", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Sizes" + }, + "components-form-input--small": { + "type": "story", + "subtype": "story", + "id": "components-form-input--small", + "name": "Small", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Small" + }, + "components-form-input--medium": { + "type": "story", + "subtype": "story", + "id": "components-form-input--medium", + "name": "Medium", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Medium" + }, + "components-form-input--large": { + "type": "story", + "subtype": "story", + "id": "components-form-input--large", + "name": "Large", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Large" + }, + "components-form-input--playground": { + "type": "story", + "subtype": "story", + "id": "components-form-input--playground", + "name": "Playground", + "title": "Components/Form/Input", + "importPath": "./src/components/input.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Playground" + }, + "components-form-textarea--all": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--all", + "name": "Textarea", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "play-fn" + ], + "exportName": "All" + }, + "components-form-textarea--default": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--default", + "name": "Default", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Default" + }, + "components-form-textarea--focus": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--focus", + "name": "Focus", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "Focus" + }, + "components-form-textarea--error": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--error", + "name": "Error", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Error" + }, + "components-form-textarea--invalid-focus": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--invalid-focus", + "name": "Invalid Focus", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "InvalidFocus" + }, + "components-form-textarea--error-message": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--error-message", + "name": "Error Message", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ErrorMessage" + }, + "components-form-textarea--required": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--required", + "name": "Required", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Required" + }, + "components-form-textarea--readonly": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--readonly", + "name": "Readonly", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Readonly" + }, + "components-form-textarea--disabled": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--disabled", + "name": "Disabled", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-form-textarea--long-content": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--long-content", + "name": "Long Content", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongContent" + }, + "components-form-textarea--playground": { + "type": "story", + "subtype": "story", + "id": "components-form-textarea--playground", + "name": "Playground", + "title": "Components/Form/Textarea", + "importPath": "./src/components/textarea.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Playground" + }, + "components-form-select--all": { + "type": "story", + "subtype": "story", + "id": "components-form-select--all", + "name": "Select", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-form-select--default": { + "type": "story", + "subtype": "story", + "id": "components-form-select--default", + "name": "Default", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Default" + }, + "components-form-select--invalid-focus": { + "type": "story", + "subtype": "story", + "id": "components-form-select--invalid-focus", + "name": "Invalid Focus", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "InvalidFocus" + }, + "components-form-select--open": { + "type": "story", + "subtype": "story", + "id": "components-form-select--open", + "name": "Open", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Open" + }, + "components-form-select--selected": { + "type": "story", + "subtype": "story", + "id": "components-form-select--selected", + "name": "Selected", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Selected" + }, + "components-form-select--disabled": { + "type": "story", + "subtype": "story", + "id": "components-form-select--disabled", + "name": "Disabled", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-form-select--sizes": { + "type": "story", + "subtype": "story", + "id": "components-form-select--sizes", + "name": "Compare Sizes", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Sizes" + }, + "components-form-select--medium": { + "type": "story", + "subtype": "story", + "id": "components-form-select--medium", + "name": "Medium", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Medium" + }, + "components-form-select--large": { + "type": "story", + "subtype": "story", + "id": "components-form-select--large", + "name": "Large", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Large" + }, + "components-form-select--long-content": { + "type": "story", + "subtype": "story", + "id": "components-form-select--long-content", + "name": "Long Content", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongContent" + }, + "components-form-select--open-large-short": { + "type": "story", + "subtype": "story", + "id": "components-form-select--open-large-short", + "name": "Open Large Short", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "OpenLargeShort" + }, + "components-form-select--open-medium-long": { + "type": "story", + "subtype": "story", + "id": "components-form-select--open-medium-long", + "name": "Open Medium Long", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "OpenMediumLong" + }, + "components-form-select--open-large-long": { + "type": "story", + "subtype": "story", + "id": "components-form-select--open-large-long", + "name": "Open Large Long", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "OpenLargeLong" + }, + "components-form-select--open-top": { + "type": "story", + "subtype": "story", + "id": "components-form-select--open-top", + "name": "Open Top", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "OpenTop" + }, + "components-form-select--open-top-long": { + "type": "story", + "subtype": "story", + "id": "components-form-select--open-top-long", + "name": "Open Top Long", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "OpenTopLong" + }, + "components-form-select--list-size-comparison": { + "type": "story", + "subtype": "story", + "id": "components-form-select--list-size-comparison", + "name": "Medium Trigger / List Size Comparison", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ListSizeComparison" + }, + "components-form-select--scroll": { + "type": "story", + "subtype": "story", + "id": "components-form-select--scroll", + "name": "Scroll", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Scroll" + }, + "components-form-select--playground": { + "type": "story", + "subtype": "story", + "id": "components-form-select--playground", + "name": "Playground", + "title": "Components/Form/Select", + "importPath": "./src/components/select.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Playground" + }, + "components-form-checkbox--all": { + "type": "story", + "subtype": "story", + "id": "components-form-checkbox--all", + "name": "Checkbox", + "title": "Components/Form/Checkbox", + "importPath": "./src/components/checkbox.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "play-fn" + ], + "exportName": "All" + }, + "components-form-checkbox--unchecked": { + "type": "story", + "subtype": "story", + "id": "components-form-checkbox--unchecked", + "name": "Unchecked", + "title": "Components/Form/Checkbox", + "importPath": "./src/components/checkbox.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Unchecked" + }, + "components-form-checkbox--checked": { + "type": "story", + "subtype": "story", + "id": "components-form-checkbox--checked", + "name": "Checked", + "title": "Components/Form/Checkbox", + "importPath": "./src/components/checkbox.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Checked" + }, + "components-form-checkbox--indeterminate": { + "type": "story", + "subtype": "story", + "id": "components-form-checkbox--indeterminate", + "name": "Indeterminate", + "title": "Components/Form/Checkbox", + "importPath": "./src/components/checkbox.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Indeterminate" + }, + "components-form-checkbox--disabled": { + "type": "story", + "subtype": "story", + "id": "components-form-checkbox--disabled", + "name": "Disabled", + "title": "Components/Form/Checkbox", + "importPath": "./src/components/checkbox.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-form-checkbox--error": { + "type": "story", + "subtype": "story", + "id": "components-form-checkbox--error", + "name": "Error", + "title": "Components/Form/Checkbox", + "importPath": "./src/components/checkbox.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Error" + }, + "components-form-checkbox--playground": { + "type": "story", + "subtype": "story", + "id": "components-form-checkbox--playground", + "name": "Playground", + "title": "Components/Form/Checkbox", + "importPath": "./src/components/checkbox.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Playground" + }, + "components-form-radio-group--all": { + "type": "story", + "subtype": "story", + "id": "components-form-radio-group--all", + "name": "Radio Group", + "title": "Components/Form/Radio Group", + "importPath": "./src/components/radio-group.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "play-fn" + ], + "exportName": "All" + }, + "components-form-radio-group--vertical": { + "type": "story", + "subtype": "story", + "id": "components-form-radio-group--vertical", + "name": "Vertical", + "title": "Components/Form/Radio Group", + "importPath": "./src/components/radio-group.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Vertical" + }, + "components-form-radio-group--horizontal": { + "type": "story", + "subtype": "story", + "id": "components-form-radio-group--horizontal", + "name": "Horizontal", + "title": "Components/Form/Radio Group", + "importPath": "./src/components/radio-group.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Horizontal" + }, + "components-form-radio-group--disabled": { + "type": "story", + "subtype": "story", + "id": "components-form-radio-group--disabled", + "name": "Disabled", + "title": "Components/Form/Radio Group", + "importPath": "./src/components/radio-group.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-form-radio-group--error": { + "type": "story", + "subtype": "story", + "id": "components-form-radio-group--error", + "name": "Error", + "title": "Components/Form/Radio Group", + "importPath": "./src/components/radio-group.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Error" + }, + "components-form-switch--all": { + "type": "story", + "subtype": "story", + "id": "components-form-switch--all", + "name": "Switch", + "title": "Components/Form/Switch", + "importPath": "./src/components/switch.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "play-fn" + ], + "exportName": "All" + }, + "components-form-switch--off": { + "type": "story", + "subtype": "story", + "id": "components-form-switch--off", + "name": "Off", + "title": "Components/Form/Switch", + "importPath": "./src/components/switch.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Off" + }, + "components-form-switch--on": { + "type": "story", + "subtype": "story", + "id": "components-form-switch--on", + "name": "On", + "title": "Components/Form/Switch", + "importPath": "./src/components/switch.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "On" + }, + "components-form-switch--disabled": { + "type": "story", + "subtype": "story", + "id": "components-form-switch--disabled", + "name": "Disabled", + "title": "Components/Form/Switch", + "importPath": "./src/components/switch.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-form-slider--all": { + "type": "story", + "subtype": "story", + "id": "components-form-slider--all", + "name": "Slider", + "title": "Components/Form/Slider", + "importPath": "./src/components/slider.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-form-slider--single-value": { + "type": "story", + "subtype": "story", + "id": "components-form-slider--single-value", + "name": "Single", + "title": "Components/Form/Slider", + "importPath": "./src/components/slider.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SingleValue" + }, + "components-form-slider--range-value": { + "type": "story", + "subtype": "story", + "id": "components-form-slider--range-value", + "name": "Range", + "title": "Components/Form/Slider", + "importPath": "./src/components/slider.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "RangeValue" + }, + "components-form-slider--disabled-slider": { + "type": "story", + "subtype": "story", + "id": "components-form-slider--disabled-slider", + "name": "Disabled", + "title": "Components/Form/Slider", + "importPath": "./src/components/slider.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "DisabledSlider" + }, + "components-form-slider--focus": { + "type": "story", + "subtype": "story", + "id": "components-form-slider--focus", + "name": "Focus", + "title": "Components/Form/Slider", + "importPath": "./src/components/slider.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "Focus" + }, + "components-form-toggle--all": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle--all", + "name": "Toggle", + "title": "Components/Form/Toggle", + "importPath": "./src/components/toggle.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-form-toggle--states": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle--states", + "name": "States", + "title": "Components/Form/Toggle", + "importPath": "./src/components/toggle.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "States" + }, + "components-form-toggle--icon-only": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle--icon-only", + "name": "Icon Only", + "title": "Components/Form/Toggle", + "importPath": "./src/components/toggle.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "IconOnly" + }, + "components-form-toggle--disabled-toggle": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle--disabled-toggle", + "name": "Disabled", + "title": "Components/Form/Toggle", + "importPath": "./src/components/toggle.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "DisabledToggle" + }, + "components-form-toggle--content-nodes": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle--content-nodes", + "name": "Content Nodes", + "title": "Components/Form/Toggle", + "importPath": "./src/components/toggle.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ContentNodes" + }, + "components-form-toggle-group--all": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle-group--all", + "name": "Toggle Group", + "title": "Components/Form/Toggle Group", + "importPath": "./src/components/toggle-group.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-form-toggle-group--single-selection": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle-group--single-selection", + "name": "Single", + "title": "Components/Form/Toggle Group", + "importPath": "./src/components/toggle-group.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SingleSelection" + }, + "components-form-toggle-group--multiple-selection": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle-group--multiple-selection", + "name": "Multiple", + "title": "Components/Form/Toggle Group", + "importPath": "./src/components/toggle-group.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "MultipleSelection" + }, + "components-form-toggle-group--vertical-group": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle-group--vertical-group", + "name": "Vertical", + "title": "Components/Form/Toggle Group", + "importPath": "./src/components/toggle-group.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "VerticalGroup" + }, + "components-form-toggle-group--content-nodes": { + "type": "story", + "subtype": "story", + "id": "components-form-toggle-group--content-nodes", + "name": "Content Nodes", + "title": "Components/Form/Toggle Group", + "importPath": "./src/components/toggle-group.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ContentNodes" + }, + "components-form-label--all": { + "type": "story", + "subtype": "story", + "id": "components-form-label--all", + "name": "Label", + "title": "Components/Form/Label", + "importPath": "./src/components/label.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-navigation-tabs--all": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--all", + "name": "Tabs", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-navigation-tabs--secondary": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--secondary", + "name": "Secondary", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Secondary" + }, + "components-navigation-tabs--selected-first": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--selected-first", + "name": "Selected First", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SelectedFirst" + }, + "components-navigation-tabs--selected-last": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--selected-last", + "name": "Selected Last", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SelectedLast" + }, + "components-navigation-tabs--focus": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--focus", + "name": "Focus", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "Focus" + }, + "components-navigation-tabs--disabled": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--disabled", + "name": "Disabled", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-navigation-tabs--overflow": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--overflow", + "name": "Overflow", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Overflow" + }, + "components-navigation-tabs--secondary-overflow": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--secondary-overflow", + "name": "Secondary Overflow", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SecondaryOverflow" + }, + "components-navigation-tabs--long-label": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--long-label", + "name": "Long Label", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongLabel" + }, + "components-navigation-tabs--compatibility": { + "type": "story", + "subtype": "story", + "id": "components-navigation-tabs--compatibility", + "name": "Compatibility", + "title": "Components/Navigation/Tabs", + "importPath": "./src/components/tabs.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Compatibility" + }, + "components-navigation-breadcrumb--all": { + "type": "story", + "subtype": "story", + "id": "components-navigation-breadcrumb--all", + "name": "Breadcrumb", + "title": "Components/Navigation/Breadcrumb", + "importPath": "./src/components/breadcrumb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-navigation-breadcrumb--basic-3": { + "type": "story", + "subtype": "story", + "id": "components-navigation-breadcrumb--basic-3", + "name": "Basic", + "title": "Components/Navigation/Breadcrumb", + "importPath": "./src/components/breadcrumb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Basic3" + }, + "components-navigation-breadcrumb--with-ellipsis": { + "type": "story", + "subtype": "story", + "id": "components-navigation-breadcrumb--with-ellipsis", + "name": "Ellipsis", + "title": "Components/Navigation/Breadcrumb", + "importPath": "./src/components/breadcrumb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "WithEllipsis" + }, + "components-navigation-breadcrumb--long-path": { + "type": "story", + "subtype": "story", + "id": "components-navigation-breadcrumb--long-path", + "name": "Long Path", + "title": "Components/Navigation/Breadcrumb", + "importPath": "./src/components/breadcrumb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongPath" + }, + "components-navigation-pagination--all": { + "type": "story", + "subtype": "story", + "id": "components-navigation-pagination--all", + "name": "Pagination", + "title": "Components/Navigation/Pagination", + "importPath": "./src/components/pagination.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-navigation-pagination--first-page": { + "type": "story", + "subtype": "story", + "id": "components-navigation-pagination--first-page", + "name": "First Page", + "title": "Components/Navigation/Pagination", + "importPath": "./src/components/pagination.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "FirstPage" + }, + "components-navigation-pagination--last-page": { + "type": "story", + "subtype": "story", + "id": "components-navigation-pagination--last-page", + "name": "Last Page", + "title": "Components/Navigation/Pagination", + "importPath": "./src/components/pagination.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LastPage" + }, + "components-navigation-pagination--long-range": { + "type": "story", + "subtype": "story", + "id": "components-navigation-pagination--long-range", + "name": "Long Range", + "title": "Components/Navigation/Pagination", + "importPath": "./src/components/pagination.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongRange" + }, + "components-navigation-navigation-menu--all": { + "type": "story", + "subtype": "story", + "id": "components-navigation-navigation-menu--all", + "name": "Navigation Menu", + "title": "Components/Navigation/Navigation Menu", + "importPath": "./src/components/navigation-menu.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-navigation-navigation-menu--default": { + "type": "story", + "subtype": "story", + "id": "components-navigation-navigation-menu--default", + "name": "Default", + "title": "Components/Navigation/Navigation Menu", + "importPath": "./src/components/navigation-menu.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Default" + }, + "components-navigation-navigation-menu--no-viewport": { + "type": "story", + "subtype": "story", + "id": "components-navigation-navigation-menu--no-viewport", + "name": "No Viewport", + "title": "Components/Navigation/Navigation Menu", + "importPath": "./src/components/navigation-menu.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "NoViewport" + }, + "components-navigation-navigation-menu--indicator-alignment": { + "type": "story", + "subtype": "story", + "id": "components-navigation-navigation-menu--indicator-alignment", + "name": "Indicator Alignment", + "title": "Components/Navigation/Navigation Menu", + "importPath": "./src/components/navigation-menu.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "IndicatorAlignment" + }, + "components-navigation-menubar--all": { + "type": "story", + "subtype": "story", + "id": "components-navigation-menubar--all", + "name": "Menubar", + "title": "Components/Navigation/Menubar", + "importPath": "./src/components/menubar.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-navigation-menubar--trigger-focus": { + "type": "story", + "subtype": "story", + "id": "components-navigation-menubar--trigger-focus", + "name": "Trigger Focus", + "title": "Components/Navigation/Menubar", + "importPath": "./src/components/menubar.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "TriggerFocus" + }, + "components-navigation-menubar--open-focus": { + "type": "story", + "subtype": "story", + "id": "components-navigation-menubar--open-focus", + "name": "Open Focus", + "title": "Components/Navigation/Menubar", + "importPath": "./src/components/menubar.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "OpenFocus" + }, + "components-overlay-dialog--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-dialog--all", + "name": "Dialog", + "title": "Components/Overlay/Dialog", + "importPath": "./src/components/dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-dialog--open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-dialog--open", + "name": "Open", + "title": "Components/Overlay/Dialog", + "importPath": "./src/components/dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Open" + }, + "components-overlay-dialog--long-content-open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-dialog--long-content-open", + "name": "Long Content", + "title": "Components/Overlay/Dialog", + "importPath": "./src/components/dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongContentOpen" + }, + "components-overlay-dialog--wide-content-open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-dialog--wide-content-open", + "name": "Wide Content", + "title": "Components/Overlay/Dialog", + "importPath": "./src/components/dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "WideContentOpen" + }, + "components-overlay-dialog--body-scroll-open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-dialog--body-scroll-open", + "name": "Body Scroll", + "title": "Components/Overlay/Dialog", + "importPath": "./src/components/dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "BodyScrollOpen" + }, + "components-overlay-dialog--delete-confirmation-open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-dialog--delete-confirmation-open", + "name": "Delete Confirmation", + "title": "Components/Overlay/Dialog", + "importPath": "./src/components/dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "DeleteConfirmationOpen" + }, + "components-overlay-alert-dialog--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-alert-dialog--all", + "name": "Alert Dialog", + "title": "Components/Overlay/Alert Dialog", + "importPath": "./src/components/alert-dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-alert-dialog--confirmation-open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-alert-dialog--confirmation-open", + "name": "Confirmation", + "title": "Components/Overlay/Alert Dialog", + "importPath": "./src/components/alert-dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ConfirmationOpen" + }, + "components-overlay-alert-dialog--destructive-open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-alert-dialog--destructive-open", + "name": "Destructive", + "title": "Components/Overlay/Alert Dialog", + "importPath": "./src/components/alert-dialog.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "DestructiveOpen" + }, + "components-overlay-sheet--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-sheet--all", + "name": "Sheet", + "title": "Components/Overlay/Sheet", + "importPath": "./src/components/sheet.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-sheet--right": { + "type": "story", + "subtype": "story", + "id": "components-overlay-sheet--right", + "name": "Right", + "title": "Components/Overlay/Sheet", + "importPath": "./src/components/sheet.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Right" + }, + "components-overlay-sheet--left": { + "type": "story", + "subtype": "story", + "id": "components-overlay-sheet--left", + "name": "Left", + "title": "Components/Overlay/Sheet", + "importPath": "./src/components/sheet.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Left" + }, + "components-overlay-sheet--top": { + "type": "story", + "subtype": "story", + "id": "components-overlay-sheet--top", + "name": "Top", + "title": "Components/Overlay/Sheet", + "importPath": "./src/components/sheet.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Top" + }, + "components-overlay-sheet--bottom": { + "type": "story", + "subtype": "story", + "id": "components-overlay-sheet--bottom", + "name": "Bottom", + "title": "Components/Overlay/Sheet", + "importPath": "./src/components/sheet.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Bottom" + }, + "components-overlay-sheet--form": { + "type": "story", + "subtype": "story", + "id": "components-overlay-sheet--form", + "name": "Form", + "title": "Components/Overlay/Sheet", + "importPath": "./src/components/sheet.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Form" + }, + "components-overlay-sheet--long-content": { + "type": "story", + "subtype": "story", + "id": "components-overlay-sheet--long-content", + "name": "Long Content", + "title": "Components/Overlay/Sheet", + "importPath": "./src/components/sheet.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongContent" + }, + "components-overlay-drawer--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-drawer--all", + "name": "Drawer", + "title": "Components/Overlay/Drawer", + "importPath": "./src/components/drawer.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-drawer--open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-drawer--open", + "name": "Open", + "title": "Components/Overlay/Drawer", + "importPath": "./src/components/drawer.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Open" + }, + "components-overlay-drawer--form": { + "type": "story", + "subtype": "story", + "id": "components-overlay-drawer--form", + "name": "Form", + "title": "Components/Overlay/Drawer", + "importPath": "./src/components/drawer.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Form" + }, + "components-overlay-drawer--long-content": { + "type": "story", + "subtype": "story", + "id": "components-overlay-drawer--long-content", + "name": "Long Content", + "title": "Components/Overlay/Drawer", + "importPath": "./src/components/drawer.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongContent" + }, + "components-overlay-dropdown-menu--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-dropdown-menu--all", + "name": "Dropdown Menu", + "title": "Components/Overlay/Dropdown Menu", + "importPath": "./src/components/dropdown-menu.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-dropdown-menu--open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-dropdown-menu--open", + "name": "Open", + "title": "Components/Overlay/Dropdown Menu", + "importPath": "./src/components/dropdown-menu.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Open" + }, + "components-overlay-context-menu--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-context-menu--all", + "name": "Context Menu", + "title": "Components/Overlay/Context Menu", + "importPath": "./src/components/context-menu.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-context-menu--open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-context-menu--open", + "name": "Open", + "title": "Components/Overlay/Context Menu", + "importPath": "./src/components/context-menu.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "Open" + }, + "components-overlay-popover--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-popover--all", + "name": "Popover", + "title": "Components/Overlay/Popover", + "importPath": "./src/components/popover.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-popover--open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-popover--open", + "name": "Open", + "title": "Components/Overlay/Popover", + "importPath": "./src/components/popover.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Open" + }, + "components-overlay-tooltip--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-tooltip--all", + "name": "Tooltip", + "title": "Components/Overlay/Tooltip", + "importPath": "./src/components/tooltip.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-tooltip--open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-tooltip--open", + "name": "Open", + "title": "Components/Overlay/Tooltip", + "importPath": "./src/components/tooltip.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Open" + }, + "components-overlay-hover-card--all": { + "type": "story", + "subtype": "story", + "id": "components-overlay-hover-card--all", + "name": "Hover Card", + "title": "Components/Overlay/Hover Card", + "importPath": "./src/components/hover-card.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-overlay-hover-card--open": { + "type": "story", + "subtype": "story", + "id": "components-overlay-hover-card--open", + "name": "Open", + "title": "Components/Overlay/Hover Card", + "importPath": "./src/components/hover-card.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Open" + }, + "components-data-display-card--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-card--all", + "name": "Card", + "title": "Components/Data & Display/Card", + "importPath": "./src/components/card.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-card--surfaces": { + "type": "story", + "subtype": "story", + "id": "components-data-display-card--surfaces", + "name": "Surfaces", + "title": "Components/Data & Display/Card", + "importPath": "./src/components/card.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Surfaces" + }, + "components-data-display-card--action": { + "type": "story", + "subtype": "story", + "id": "components-data-display-card--action", + "name": "Action", + "title": "Components/Data & Display/Card", + "importPath": "./src/components/card.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Action" + }, + "components-data-display-card--compatibility": { + "type": "story", + "subtype": "story", + "id": "components-data-display-card--compatibility", + "name": "Compatibility", + "title": "Components/Data & Display/Card", + "importPath": "./src/components/card.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Compatibility" + }, + "components-data-display-table--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-table--all", + "name": "Table", + "title": "Components/Data & Display/Table", + "importPath": "./src/components/table.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-table--basic": { + "type": "story", + "subtype": "story", + "id": "components-data-display-table--basic", + "name": "Basic", + "title": "Components/Data & Display/Table", + "importPath": "./src/components/table.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Basic" + }, + "components-data-display-table--selected": { + "type": "story", + "subtype": "story", + "id": "components-data-display-table--selected", + "name": "Selected", + "title": "Components/Data & Display/Table", + "importPath": "./src/components/table.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Selected" + }, + "components-data-display-table--long-text": { + "type": "story", + "subtype": "story", + "id": "components-data-display-table--long-text", + "name": "Long Text", + "title": "Components/Data & Display/Table", + "importPath": "./src/components/table.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongText" + }, + "components-data-display-table--overflow": { + "type": "story", + "subtype": "story", + "id": "components-data-display-table--overflow", + "name": "Horizontal Overflow", + "title": "Components/Data & Display/Table", + "importPath": "./src/components/table.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Overflow" + }, + "components-data-display-badge--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-badge--all", + "name": "Badge", + "title": "Components/Data & Display/Badge", + "importPath": "./src/components/badge.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-badge--variants": { + "type": "story", + "subtype": "story", + "id": "components-data-display-badge--variants", + "name": "Variants", + "title": "Components/Data & Display/Badge", + "importPath": "./src/components/badge.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Variants" + }, + "components-data-display-badge--playground": { + "type": "story", + "subtype": "story", + "id": "components-data-display-badge--playground", + "name": "Playground", + "title": "Components/Data & Display/Badge", + "importPath": "./src/components/badge.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Playground" + }, + "components-data-display-avatar--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-avatar--all", + "name": "Avatar", + "title": "Components/Data & Display/Avatar", + "importPath": "./src/components/avatar.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-avatar--image": { + "type": "story", + "subtype": "story", + "id": "components-data-display-avatar--image", + "name": "Image", + "title": "Components/Data & Display/Avatar", + "importPath": "./src/components/avatar.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Image" + }, + "components-data-display-avatar--fallback-error": { + "type": "story", + "subtype": "story", + "id": "components-data-display-avatar--fallback-error", + "name": "Fallback", + "title": "Components/Data & Display/Avatar", + "importPath": "./src/components/avatar.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "FallbackError" + }, + "components-data-display-progress--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-progress--all", + "name": "Progress", + "title": "Components/Data & Display/Progress", + "importPath": "./src/components/progress.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-progress--zero": { + "type": "story", + "subtype": "story", + "id": "components-data-display-progress--zero", + "name": "Zero", + "title": "Components/Data & Display/Progress", + "importPath": "./src/components/progress.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Zero" + }, + "components-data-display-progress--middle": { + "type": "story", + "subtype": "story", + "id": "components-data-display-progress--middle", + "name": "Middle", + "title": "Components/Data & Display/Progress", + "importPath": "./src/components/progress.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Middle" + }, + "components-data-display-progress--full": { + "type": "story", + "subtype": "story", + "id": "components-data-display-progress--full", + "name": "Full", + "title": "Components/Data & Display/Progress", + "importPath": "./src/components/progress.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Full" + }, + "components-data-display-progress--non-default-max": { + "type": "story", + "subtype": "story", + "id": "components-data-display-progress--non-default-max", + "name": "Non Default Max", + "title": "Components/Data & Display/Progress", + "importPath": "./src/components/progress.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "NonDefaultMax" + }, + "components-data-display-skeleton--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-skeleton--all", + "name": "Skeleton", + "title": "Components/Data & Display/Skeleton", + "importPath": "./src/components/skeleton.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-skeleton--text": { + "type": "story", + "subtype": "story", + "id": "components-data-display-skeleton--text", + "name": "Text", + "title": "Components/Data & Display/Skeleton", + "importPath": "./src/components/skeleton.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Text" + }, + "components-data-display-skeleton--card-list": { + "type": "story", + "subtype": "story", + "id": "components-data-display-skeleton--card-list", + "name": "Card List", + "title": "Components/Data & Display/Skeleton", + "importPath": "./src/components/skeleton.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "CardList" + }, + "components-data-display-separator--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-separator--all", + "name": "Separator", + "title": "Components/Data & Display/Separator", + "importPath": "./src/components/separator.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-separator--horizontal": { + "type": "story", + "subtype": "story", + "id": "components-data-display-separator--horizontal", + "name": "Horizontal", + "title": "Components/Data & Display/Separator", + "importPath": "./src/components/separator.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Horizontal" + }, + "components-data-display-separator--vertical": { + "type": "story", + "subtype": "story", + "id": "components-data-display-separator--vertical", + "name": "Vertical", + "title": "Components/Data & Display/Separator", + "importPath": "./src/components/separator.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Vertical" + }, + "components-data-display-aspect-ratio--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-aspect-ratio--all", + "name": "Aspect Ratio", + "title": "Components/Data & Display/Aspect Ratio", + "importPath": "./src/components/aspect-ratio.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-aspect-ratio--wide": { + "type": "story", + "subtype": "story", + "id": "components-data-display-aspect-ratio--wide", + "name": "16:9", + "title": "Components/Data & Display/Aspect Ratio", + "importPath": "./src/components/aspect-ratio.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Wide" + }, + "components-data-display-aspect-ratio--square": { + "type": "story", + "subtype": "story", + "id": "components-data-display-aspect-ratio--square", + "name": "1:1", + "title": "Components/Data & Display/Aspect Ratio", + "importPath": "./src/components/aspect-ratio.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Square" + }, + "components-data-display-carousel--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-carousel--all", + "name": "Carousel", + "title": "Components/Data & Display/Carousel", + "importPath": "./src/components/carousel.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-carousel--basic-carousel": { + "type": "story", + "subtype": "story", + "id": "components-data-display-carousel--basic-carousel", + "name": "Basic", + "title": "Components/Data & Display/Carousel", + "importPath": "./src/components/carousel.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "BasicCarousel" + }, + "components-data-display-carousel--multiple-items": { + "type": "story", + "subtype": "story", + "id": "components-data-display-carousel--multiple-items", + "name": "Multiple Items", + "title": "Components/Data & Display/Carousel", + "importPath": "./src/components/carousel.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "MultipleItems" + }, + "components-data-display-carousel--loop-carousel": { + "type": "story", + "subtype": "story", + "id": "components-data-display-carousel--loop-carousel", + "name": "Loop", + "title": "Components/Data & Display/Carousel", + "importPath": "./src/components/carousel.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LoopCarousel" + }, + "components-data-display-carousel--vertical-carousel": { + "type": "story", + "subtype": "story", + "id": "components-data-display-carousel--vertical-carousel", + "name": "Vertical", + "title": "Components/Data & Display/Carousel", + "importPath": "./src/components/carousel.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "VerticalCarousel" + }, + "components-data-display-scroll-area--all": { + "type": "story", + "subtype": "story", + "id": "components-data-display-scroll-area--all", + "name": "Scroll Area", + "title": "Components/Data & Display/Scroll Area", + "importPath": "./src/components/scroll-area.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-data-display-scroll-area--vertical-scroll": { + "type": "story", + "subtype": "story", + "id": "components-data-display-scroll-area--vertical-scroll", + "name": "Vertical", + "title": "Components/Data & Display/Scroll Area", + "importPath": "./src/components/scroll-area.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "VerticalScroll" + }, + "components-data-display-scroll-area--horizontal-scroll": { + "type": "story", + "subtype": "story", + "id": "components-data-display-scroll-area--horizontal-scroll", + "name": "Horizontal", + "title": "Components/Data & Display/Scroll Area", + "importPath": "./src/components/scroll-area.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "HorizontalScroll" + }, + "components-disclosure-accordion--all": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-accordion--all", + "name": "Accordion", + "title": "Components/Disclosure/Accordion", + "importPath": "./src/components/accordion.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-disclosure-accordion--single": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-accordion--single", + "name": "Single", + "title": "Components/Disclosure/Accordion", + "importPath": "./src/components/accordion.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Single" + }, + "components-disclosure-accordion--multiple": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-accordion--multiple", + "name": "Multiple", + "title": "Components/Disclosure/Accordion", + "importPath": "./src/components/accordion.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Multiple" + }, + "components-disclosure-accordion--disabled": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-accordion--disabled", + "name": "Disabled", + "title": "Components/Disclosure/Accordion", + "importPath": "./src/components/accordion.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-disclosure-accordion--long-content": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-accordion--long-content", + "name": "Long Content", + "title": "Components/Disclosure/Accordion", + "importPath": "./src/components/accordion.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongContent" + }, + "components-disclosure-collapsible--all": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-collapsible--all", + "name": "Collapsible", + "title": "Components/Disclosure/Collapsible", + "importPath": "./src/components/collapsible.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-disclosure-collapsible--closed": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-collapsible--closed", + "name": "Closed", + "title": "Components/Disclosure/Collapsible", + "importPath": "./src/components/collapsible.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Closed" + }, + "components-disclosure-collapsible--open": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-collapsible--open", + "name": "Open", + "title": "Components/Disclosure/Collapsible", + "importPath": "./src/components/collapsible.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Open" + }, + "components-disclosure-collapsible--disabled": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-collapsible--disabled", + "name": "Disabled", + "title": "Components/Disclosure/Collapsible", + "importPath": "./src/components/collapsible.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Disabled" + }, + "components-disclosure-collapsible--long-content": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-collapsible--long-content", + "name": "Long Content", + "title": "Components/Disclosure/Collapsible", + "importPath": "./src/components/collapsible.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongContent" + }, + "components-disclosure-resizable--all": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-resizable--all", + "name": "Resizable", + "title": "Components/Disclosure/Resizable", + "importPath": "./src/components/resizable.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-disclosure-resizable--horizontal-layout": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-resizable--horizontal-layout", + "name": "Horizontal", + "title": "Components/Disclosure/Resizable", + "importPath": "./src/components/resizable.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "HorizontalLayout" + }, + "components-disclosure-resizable--vertical-layout": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-resizable--vertical-layout", + "name": "Vertical", + "title": "Components/Disclosure/Resizable", + "importPath": "./src/components/resizable.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "VerticalLayout" + }, + "components-disclosure-resizable--min-max-layout": { + "type": "story", + "subtype": "story", + "id": "components-disclosure-resizable--min-max-layout", + "name": "Min Max", + "title": "Components/Disclosure/Resizable", + "importPath": "./src/components/resizable.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "MinMaxLayout" + }, + "components-search-date-command--all": { + "type": "story", + "subtype": "story", + "id": "components-search-date-command--all", + "name": "Command", + "title": "Components/Search & Date/Command", + "importPath": "./src/components/command.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-search-date-command--search": { + "type": "story", + "subtype": "story", + "id": "components-search-date-command--search", + "name": "Search", + "title": "Components/Search & Date/Command", + "importPath": "./src/components/command.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Search" + }, + "components-search-date-command--grouped-list": { + "type": "story", + "subtype": "story", + "id": "components-search-date-command--grouped-list", + "name": "Grouped", + "title": "Components/Search & Date/Command", + "importPath": "./src/components/command.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "GroupedList" + }, + "components-search-date-combobox--all": { + "type": "story", + "subtype": "story", + "id": "components-search-date-combobox--all", + "name": "Combobox", + "title": "Components/Search & Date/Combobox", + "importPath": "./src/components/combobox.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-search-date-combobox--empty-combobox": { + "type": "story", + "subtype": "story", + "id": "components-search-date-combobox--empty-combobox", + "name": "Empty", + "title": "Components/Search & Date/Combobox", + "importPath": "./src/components/combobox.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "EmptyCombobox" + }, + "components-search-date-combobox--controlled-combobox": { + "type": "story", + "subtype": "story", + "id": "components-search-date-combobox--controlled-combobox", + "name": "Controlled", + "title": "Components/Search & Date/Combobox", + "importPath": "./src/components/combobox.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ControlledCombobox" + }, + "components-search-date-combobox--long-option": { + "type": "story", + "subtype": "story", + "id": "components-search-date-combobox--long-option", + "name": "Long Option", + "title": "Components/Search & Date/Combobox", + "importPath": "./src/components/combobox.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongOption" + }, + "components-search-date-combobox--open-bottom": { + "type": "story", + "subtype": "story", + "id": "components-search-date-combobox--open-bottom", + "name": "Open Bottom", + "title": "Components/Search & Date/Combobox", + "importPath": "./src/components/combobox.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "OpenBottom" + }, + "components-search-date-combobox--open-top": { + "type": "story", + "subtype": "story", + "id": "components-search-date-combobox--open-top", + "name": "Open Top", + "title": "Components/Search & Date/Combobox", + "importPath": "./src/components/combobox.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "OpenTop" + }, + "components-search-date-calendar--all": { + "type": "story", + "subtype": "story", + "id": "components-search-date-calendar--all", + "name": "Calendar", + "title": "Components/Search & Date/Calendar", + "importPath": "./src/components/calendar.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-search-date-calendar--single-selection": { + "type": "story", + "subtype": "story", + "id": "components-search-date-calendar--single-selection", + "name": "Single", + "title": "Components/Search & Date/Calendar", + "importPath": "./src/components/calendar.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SingleSelection" + }, + "components-search-date-calendar--disabled-selection": { + "type": "story", + "subtype": "story", + "id": "components-search-date-calendar--disabled-selection", + "name": "Disabled Dates", + "title": "Components/Search & Date/Calendar", + "importPath": "./src/components/calendar.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "DisabledSelection" + }, + "components-search-date-calendar--range-selection": { + "type": "story", + "subtype": "story", + "id": "components-search-date-calendar--range-selection", + "name": "Range", + "title": "Components/Search & Date/Calendar", + "importPath": "./src/components/calendar.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "RangeSelection" + }, + "components-search-date-date-picker--all": { + "type": "story", + "subtype": "story", + "id": "components-search-date-date-picker--all", + "name": "Date Picker", + "title": "Components/Search & Date/Date Picker", + "importPath": "./src/components/date-picker.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-search-date-date-picker--empty-picker": { + "type": "story", + "subtype": "story", + "id": "components-search-date-date-picker--empty-picker", + "name": "Empty", + "title": "Components/Search & Date/Date Picker", + "importPath": "./src/components/date-picker.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "EmptyPicker" + }, + "components-search-date-date-picker--invalid-focus": { + "type": "story", + "subtype": "story", + "id": "components-search-date-date-picker--invalid-focus", + "name": "Invalid Focus", + "title": "Components/Search & Date/Date Picker", + "importPath": "./src/components/date-picker.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "InvalidFocus" + }, + "components-search-date-date-picker--selected-picker": { + "type": "story", + "subtype": "story", + "id": "components-search-date-date-picker--selected-picker", + "name": "Selected", + "title": "Components/Search & Date/Date Picker", + "importPath": "./src/components/date-picker.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SelectedPicker" + }, + "components-search-date-date-picker--controlled-picker": { + "type": "story", + "subtype": "story", + "id": "components-search-date-date-picker--controlled-picker", + "name": "Controlled", + "title": "Components/Search & Date/Date Picker", + "importPath": "./src/components/date-picker.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ControlledPicker" + }, + "components-feedback-alert--all": { + "type": "story", + "subtype": "story", + "id": "components-feedback-alert--all", + "name": "Alert", + "title": "Components/Feedback/Alert", + "importPath": "./src/components/alert.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "components-feedback-alert--default": { + "type": "story", + "subtype": "story", + "id": "components-feedback-alert--default", + "name": "Default", + "title": "Components/Feedback/Alert", + "importPath": "./src/components/alert.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Default" + }, + "components-feedback-alert--destructive": { + "type": "story", + "subtype": "story", + "id": "components-feedback-alert--destructive", + "name": "Destructive", + "title": "Components/Feedback/Alert", + "importPath": "./src/components/alert.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Destructive" + }, + "components-feedback-sonner--all": { + "type": "story", + "subtype": "story", + "id": "components-feedback-sonner--all", + "name": "Sonner", + "title": "Components/Feedback/Sonner", + "importPath": "./src/components/sonner.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "patterns-data-data-table--all": { + "type": "story", + "subtype": "story", + "id": "patterns-data-data-table--all", + "name": "Data Table", + "title": "Patterns/Data/Data Table", + "importPath": "./src/patterns/data-table.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "patterns-data-data-table--with-filter-bar-story": { + "type": "story", + "subtype": "story", + "id": "patterns-data-data-table--with-filter-bar-story", + "name": "With Filter Bar", + "title": "Patterns/Data/Data Table", + "importPath": "./src/patterns/data-table.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "WithFilterBarStory" + }, + "patterns-data-data-table--loading": { + "type": "story", + "subtype": "story", + "id": "patterns-data-data-table--loading", + "name": "Loading", + "title": "Patterns/Data/Data Table", + "importPath": "./src/patterns/data-table.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Loading" + }, + "patterns-data-data-table--empty": { + "type": "story", + "subtype": "story", + "id": "patterns-data-data-table--empty", + "name": "Empty", + "title": "Patterns/Data/Data Table", + "importPath": "./src/patterns/data-table.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Empty" + }, + "patterns-data-filter-bar--all": { + "type": "story", + "subtype": "story", + "id": "patterns-data-filter-bar--all", + "name": "Filter Bar", + "title": "Patterns/Data/Filter Bar", + "importPath": "./src/patterns/filter-bar.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "patterns-layout-gnb--all": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--all", + "name": "GNB", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "patterns-layout-gnb--default": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--default", + "name": "Default", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Default" + }, + "patterns-layout-gnb--sticky": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--sticky", + "name": "Sticky", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Sticky" + }, + "patterns-layout-gnb--sidebar": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--sidebar", + "name": "GNB Sidebar", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Sidebar" + }, + "patterns-layout-gnb--navigation-menu-open": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--navigation-menu-open", + "name": "Navigation Menu Open", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "NavigationMenuOpen" + }, + "patterns-layout-gnb--short-depth-open": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--short-depth-open", + "name": "Short Depth Open", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ShortDepthOpen" + }, + "patterns-layout-gnb--right-edge-long-depth": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--right-edge-long-depth", + "name": "Right Edge Long Depth", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "RightEdgeLongDepth" + }, + "patterns-layout-gnb--first-depth-short": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--first-depth-short", + "name": "First Depth Short", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "FirstDepthShort" + }, + "patterns-layout-gnb--first-depth-long": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--first-depth-long", + "name": "First Depth Long", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "FirstDepthLong" + }, + "patterns-layout-gnb--middle-depth-short": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--middle-depth-short", + "name": "Middle Depth Short", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "MiddleDepthShort" + }, + "patterns-layout-gnb--middle-depth-long": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--middle-depth-long", + "name": "Middle Depth Long", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "MiddleDepthLong" + }, + "patterns-layout-gnb--last-depth-short": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--last-depth-short", + "name": "Last Depth Short", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LastDepthShort" + }, + "patterns-layout-gnb--last-depth-long": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--last-depth-long", + "name": "Last Depth Long", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LastDepthLong" + }, + "patterns-layout-gnb--edge-first-long": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--edge-first-long", + "name": "Edge First Long", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "EdgeFirstLong" + }, + "patterns-layout-gnb--edge-last-long": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--edge-last-long", + "name": "Edge Last Long", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "EdgeLastLong" + }, + "patterns-layout-gnb--user-menu-open": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--user-menu-open", + "name": "User Menu Open", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "UserMenuOpen" + }, + "patterns-layout-gnb--long-labels": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--long-labels", + "name": "Long Labels", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongLabels" + }, + "patterns-layout-gnb--with-logo": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--with-logo", + "name": "With Logo", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "WithLogo" + }, + "patterns-layout-gnb--utilities": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--utilities", + "name": "Utilities", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Utilities" + }, + "patterns-layout-gnb--mobile": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--mobile", + "name": "Mobile", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Mobile" + }, + "patterns-layout-gnb--mobile-menu-open": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-gnb--mobile-menu-open", + "name": "Mobile Menu Open", + "title": "Patterns/Layout/GNB", + "importPath": "./src/patterns/gnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "MobileMenuOpen" + }, + "patterns-layout-lnb--all": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--all", + "name": "LNB", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "patterns-layout-lnb--default": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--default", + "name": "Default", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Default" + }, + "patterns-layout-lnb--selected": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--selected", + "name": "Selected", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Selected" + }, + "patterns-layout-lnb--expanded": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--expanded", + "name": "Expanded", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Expanded" + }, + "patterns-layout-lnb--selected-child": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--selected-child", + "name": "Selected Child", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SelectedChild" + }, + "patterns-layout-lnb--collapsed-with-selection": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--collapsed-with-selection", + "name": "Collapsed With Selection", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "CollapsedWithSelection" + }, + "patterns-layout-lnb--with-logo": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--with-logo", + "name": "With Logo", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "WithLogo" + }, + "patterns-layout-lnb--long-labels": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--long-labels", + "name": "Long Labels", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongLabels" + }, + "patterns-layout-lnb--scroll": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--scroll", + "name": "Scroll", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Scroll" + }, + "patterns-layout-lnb--third-level": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--third-level", + "name": "Third Level", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ThirdLevel" + }, + "patterns-layout-lnb--third-level-long-labels": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--third-level-long-labels", + "name": "Third Level Long Labels", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ThirdLevelLongLabels" + }, + "patterns-layout-lnb--third-level-scroll": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--third-level-scroll", + "name": "Third Level Scroll", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ThirdLevelScroll" + }, + "patterns-layout-lnb--with-gnb": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--with-gnb", + "name": "VERIFICATION ONLY · GNB + LNB", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "WithGNB" + }, + "patterns-layout-lnb--standalone-desktop": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--standalone-desktop", + "name": "LNB Standalone Desktop", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "StandaloneDesktop" + }, + "patterns-layout-lnb--lnb-profile-menu-open": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--lnb-profile-menu-open", + "name": "LNB Profile Menu Open", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LNBProfileMenuOpen" + }, + "patterns-layout-lnb--standalone-mobile": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--standalone-mobile", + "name": "LNB Standalone Mobile", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "StandaloneMobile" + }, + "patterns-layout-lnb--standalone-mobile-menu-open": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-lnb--standalone-mobile-menu-open", + "name": "LNB Standalone Mobile Menu Open", + "title": "Patterns/Layout/LNB", + "importPath": "./src/patterns/lnb.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "StandaloneMobileMenuOpen" + }, + "patterns-layout-loading-screen--all": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-loading-screen--all", + "name": "Loading Screen", + "title": "Patterns/Layout/Loading Screen", + "importPath": "./src/patterns/loading-screen.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "patterns-layout-loading-screen--inline": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-loading-screen--inline", + "name": "Inline", + "title": "Patterns/Layout/Loading Screen", + "importPath": "./src/patterns/loading-screen.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Inline" + }, + "patterns-layout-dashboard-layout--all": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-dashboard-layout--all", + "name": "Dashboard", + "title": "Patterns/Layout/Dashboard", + "importPath": "./src/patterns/dashboard-layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "patterns-layout-dashboard-layout--with-sidebar": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-dashboard-layout--with-sidebar", + "name": "VERIFICATION ONLY — 운영 사용 금지 · Dashboard Header + Sidebar", + "title": "Patterns/Layout/Dashboard", + "importPath": "./src/patterns/dashboard-layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "WithSidebar" + }, + "patterns-layout-dashboard-layout--third-level": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-dashboard-layout--third-level", + "name": "VERIFICATION ONLY — 운영 사용 금지 · Third Level", + "title": "Patterns/Layout/Dashboard", + "importPath": "./src/patterns/dashboard-layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "ThirdLevel" + }, + "patterns-layout-dashboard-layout--sidebar-only": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-dashboard-layout--sidebar-only", + "name": "VERIFICATION ONLY — 운영 사용 금지 · Dashboard Sidebar", + "title": "Patterns/Layout/Dashboard", + "importPath": "./src/patterns/dashboard-layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "SidebarOnly" + }, + "patterns-layout-dashboard-layout--long-content": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-dashboard-layout--long-content", + "name": "VERIFICATION ONLY — 운영 사용 금지 · Long Content", + "title": "Patterns/Layout/Dashboard", + "importPath": "./src/patterns/dashboard-layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "LongContent" + }, + "patterns-layout-dashboard-layout--loading": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-dashboard-layout--loading", + "name": "Loading", + "title": "Patterns/Layout/Dashboard", + "importPath": "./src/patterns/dashboard-layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Loading" + }, + "patterns-layout-dashboard-layout--empty": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-dashboard-layout--empty", + "name": "Empty", + "title": "Patterns/Layout/Dashboard", + "importPath": "./src/patterns/dashboard-layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Empty" + }, + "patterns-layout-dashboard-layout--framed": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-dashboard-layout--framed", + "name": "VERIFICATION ONLY — 운영 사용 금지 · Framed", + "title": "Patterns/Layout/Dashboard", + "importPath": "./src/patterns/dashboard-layout.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Framed" + }, + "patterns-layout-page-header--all": { + "type": "story", + "subtype": "story", + "id": "patterns-layout-page-header--all", + "name": "Page Header", + "title": "Patterns/Layout/Page Header", + "importPath": "./src/patterns/page-header.stories.tsx", + "componentPath": "./packages/ui/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "All" + }, + "orgchart--logo-personnel-summary": { + "type": "story", + "subtype": "story", + "id": "orgchart--logo-personnel-summary", + "name": "Overview", + "title": "OrgChart/Overview", + "importPath": "./src/org-chart/org-chart-p1.stories.tsx", + "componentPath": "./src/org-chart/org-chart-page-previews.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LogoPersonnelSummary" + }, + "orgchart--department-colors": { + "type": "story", + "subtype": "story", + "id": "orgchart--department-colors", + "name": "Department Colors", + "title": "OrgChart/Department Colors", + "importPath": "./src/org-chart/org-chart-department-colors.stories.tsx", + "componentPath": "./src/org-chart/org-chart-page-previews.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "DepartmentColors" + }, + "orgchart--full-composition": { + "type": "story", + "subtype": "story", + "id": "orgchart--full-composition", + "name": "Full Composition", + "title": "OrgChart/Full Composition", + "importPath": "./src/org-chart/org-chart-full-composition.stories.tsx", + "componentPath": "./src/org-chart/org-chart-page-previews.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "FullComposition" + }, + "orgchart--expanded-org-chart": { + "type": "story", + "subtype": "story", + "id": "orgchart--expanded-org-chart", + "name": "Expanded OrgChart", + "title": "OrgChart/Expanded OrgChart", + "importPath": "./src/org-chart/org-chart-expanded.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ExpandedOrgChart" + }, + "orgchart-components-cards--business-management": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--business-management", + "name": "Business Management", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "BusinessManagement" + }, + "orgchart-components-cards--business-planning": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--business-planning", + "name": "Business Planning", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "BusinessPlanning" + }, + "orgchart-components-cards--talent-growth": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--talent-growth", + "name": "Talent Growth", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "TalentGrowth" + }, + "orgchart-components-cards--integrated-system": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--integrated-system", + "name": "Integrated System", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "IntegratedSystem" + }, + "orgchart-components-cards--design-planning": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--design-planning", + "name": "Design Planning", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "DesignPlanning" + }, + "orgchart-components-cards--solution-sales": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--solution-sales", + "name": "Solution Sales", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "SolutionSales" + }, + "orgchart-components-cards--top-leader": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--top-leader", + "name": "최상위 리더", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "TopLeader" + }, + "orgchart-components-cards--organization-leader": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--organization-leader", + "name": "조직장", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "OrganizationLeader" + }, + "orgchart-components-cards--employee": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-cards--employee", + "name": "일반 직원", + "title": "OrgChart/Components/Cards", + "importPath": "./src/org-chart/org-chart-cards.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "Employee" + }, + "orgchart--logo": { + "type": "story", + "subtype": "story", + "id": "orgchart--logo", + "name": "Logo", + "title": "OrgChart/Verification/Overview", + "importPath": "./src/org-chart/org-chart-overview-internal.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "Logo" + }, + "orgchart--position-summary": { + "type": "story", + "subtype": "story", + "id": "orgchart--position-summary", + "name": "Position Summary", + "title": "OrgChart/Verification/Overview", + "importPath": "./src/org-chart/org-chart-overview-internal.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "PositionSummary" + }, + "orgchart--affiliation-summary": { + "type": "story", + "subtype": "story", + "id": "orgchart--affiliation-summary", + "name": "Affiliation Summary", + "title": "OrgChart/Verification/Overview", + "importPath": "./src/org-chart/org-chart-overview-internal.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "AffiliationSummary" + }, + "orgchart-components-summaries--position-summary": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-summaries--position-summary", + "name": "Position Summary", + "title": "OrgChart/Components/Summaries", + "importPath": "./src/org-chart/org-chart-summary.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "PositionSummary" + }, + "orgchart-components-summaries--affiliation-summary": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-summaries--affiliation-summary", + "name": "Affiliation Summary", + "title": "OrgChart/Components/Summaries", + "importPath": "./src/org-chart/org-chart-summary.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "AffiliationSummary" + }, + "orgchart-components-summaries--status-summary": { + "type": "story", + "subtype": "story", + "id": "orgchart-components-summaries--status-summary", + "name": "Status Summary", + "title": "OrgChart/Components/Summaries", + "importPath": "./src/org-chart/org-chart-summary.stories.tsx", + "componentPath": "./src/org-chart/core-component-preview.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "StatusSummary" + }, + "orgchart-content--basic-organization": { + "type": "story", + "subtype": "story", + "id": "orgchart-content--basic-organization", + "name": "Basic Organization", + "title": "OrgChart/Content", + "importPath": "./src/org-chart/org-chart.stories.tsx", + "componentPath": "./packages/org-chart-react/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "BasicOrganization" + }, + "orgchart-content--organization-hierarchy": { + "type": "story", + "subtype": "story", + "id": "orgchart-content--organization-hierarchy", + "name": "Organization Hierarchy", + "title": "OrgChart/Content", + "importPath": "./src/org-chart/org-chart.stories.tsx", + "componentPath": "./packages/org-chart-react/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "OrganizationHierarchy" + }, + "orgchart-content--employee-cards": { + "type": "story", + "subtype": "story", + "id": "orgchart-content--employee-cards", + "name": "Employee Cards", + "title": "OrgChart/Content", + "importPath": "./src/org-chart/org-chart.stories.tsx", + "componentPath": "./packages/org-chart-react/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "EmployeeCards" + }, + "orgchart-content--organization-summary": { + "type": "story", + "subtype": "story", + "id": "orgchart-content--organization-summary", + "name": "Organization Summary", + "title": "OrgChart/Content", + "importPath": "./src/org-chart/org-chart.stories.tsx", + "componentPath": "./packages/org-chart-react/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "OrganizationSummary" + }, + "orgchart-content--json-data-update": { + "type": "story", + "subtype": "story", + "id": "orgchart-content--json-data-update", + "name": "JSON Data Update", + "title": "OrgChart/Content", + "importPath": "./src/org-chart/org-chart.stories.tsx", + "componentPath": "./packages/org-chart-react/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "JSONDataUpdate" + }, + "orgchart-content--loading-empty-error": { + "type": "story", + "subtype": "story", + "id": "orgchart-content--loading-empty-error", + "name": "Loading / Empty / Error", + "title": "OrgChart/Content", + "importPath": "./src/org-chart/org-chart.stories.tsx", + "componentPath": "./packages/org-chart-react/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "LoadingEmptyError" + }, + "orgchart-content--responsive-container": { + "type": "story", + "subtype": "story", + "id": "orgchart-content--responsive-container", + "name": "Responsive Container", + "title": "OrgChart/Content", + "importPath": "./src/org-chart/org-chart.stories.tsx", + "componentPath": "./packages/org-chart-react/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "ResponsiveContainer" + }, + "orgchart-content--multiple-instances": { + "type": "story", + "subtype": "story", + "id": "orgchart-content--multiple-instances", + "name": "Multiple Instances", + "title": "OrgChart/Content", + "importPath": "./src/org-chart/org-chart.stories.tsx", + "componentPath": "./packages/org-chart-react/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "MultipleInstances" + }, + "center-graphic-facility--tunnel": { + "type": "story", + "subtype": "story", + "id": "center-graphic-facility--tunnel", + "name": "Tunnel", + "title": "Center Graphic/Facility", + "importPath": "./src/center/center-facility.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Tunnel" + }, + "center-graphic-facility--bridge": { + "type": "story", + "subtype": "story", + "id": "center-graphic-facility--bridge", + "name": "Bridge", + "title": "Center Graphic/Facility", + "importPath": "./src/center/center-facility.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Bridge" + }, + "center-graphic-facility--intersection": { + "type": "story", + "subtype": "story", + "id": "center-graphic-facility--intersection", + "name": "Intersection", + "title": "Center Graphic/Facility", + "importPath": "./src/center/center-facility.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Intersection" + }, + "center-graphic-facility--junction": { + "type": "story", + "subtype": "story", + "id": "center-graphic-facility--junction", + "name": "Junction", + "title": "Center Graphic/Facility", + "importPath": "./src/center/center-facility.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Junction" + }, + "center-graphic-facility--interchange": { + "type": "story", + "subtype": "story", + "id": "center-graphic-facility--interchange", + "name": "Interchange", + "title": "Center Graphic/Facility", + "importPath": "./src/center/center-facility.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Interchange" + }, + "center-graphic-facility--roadside": { + "type": "story", + "subtype": "story", + "id": "center-graphic-facility--roadside", + "name": "Roadside", + "title": "Center Graphic/Facility", + "importPath": "./src/center/center-facility.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Roadside" + }, + "center-graphic-facility--linked": { + "type": "story", + "subtype": "story", + "id": "center-graphic-facility--linked", + "name": "Linked", + "title": "Center Graphic/Facility", + "importPath": "./src/center/center-facility.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Linked" + }, + "center-graphic-facility--tunnel-playground": { + "type": "story", + "subtype": "story", + "id": "center-graphic-facility--tunnel-playground", + "name": "직접 테스트 (터널)", + "title": "Center Graphic/Facility", + "importPath": "./src/center/center-facility.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "TunnelPlayground" + }, + "center-graphic-information--information": { + "type": "story", + "subtype": "story", + "id": "center-graphic-information--information", + "name": "Information", + "title": "Center Graphic/Information", + "importPath": "./src/center/center-information.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Information" + }, + "center-graphic-overview--overview": { + "type": "story", + "subtype": "story", + "id": "center-graphic-overview--overview", + "name": "Overview", + "title": "Center Graphic/Overview", + "importPath": "./src/center/center-overview.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Overview" + }, + "center-graphic-spatial--spatial": { + "type": "story", + "subtype": "story", + "id": "center-graphic-spatial--spatial", + "name": "Spatial", + "title": "Center Graphic/Spatial", + "importPath": "./src/center/center-spatial.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Spatial" + }, + "center-graphic-title--compositions": { + "type": "story", + "subtype": "story", + "id": "center-graphic-title--compositions", + "name": "Title", + "title": "Center Graphic/Title", + "importPath": "./src/center/center-title.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Compositions" + }, + "center-graphic-title--playground": { + "type": "story", + "subtype": "story", + "id": "center-graphic-title--playground", + "name": "Playground", + "title": "Center Graphic/Title", + "importPath": "./src/center/center-title.stories.tsx", + "componentPath": "./packages/center-graphic/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Playground" + }, + "verification-publisher-regression--consumers-regression": { + "type": "story", + "subtype": "story", + "id": "verification-publisher-regression--consumers-regression", + "name": "Consumers Regression", + "title": "Verification/Publisher Regression", + "importPath": "./src/components/publisher-regression.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "ConsumersRegression" + }, + "sw-header--composed-controls": { + "type": "story", + "subtype": "story", + "id": "sw-header--composed-controls", + "name": "Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header-dropdown.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ComposedControls" + }, + "sw-header--detail-buttons": { + "type": "story", + "subtype": "story", + "id": "sw-header--detail-buttons", + "name": "Detail Buttons (Shared States)", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "DetailButtons" + }, + "sw-header--overview": { + "type": "story", + "subtype": "story", + "id": "sw-header--overview", + "name": "Overview", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Overview" + }, + "sw-header--interactive-states": { + "type": "story", + "subtype": "story", + "id": "sw-header--interactive-states", + "name": "Interactive States", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "InteractiveStates" + }, + "sw-header--window-move-motion": { + "type": "story", + "subtype": "story", + "id": "sw-header--window-move-motion", + "name": "Window Move Motion", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "WindowMoveMotion" + }, + "sw-header--logo-slot": { + "type": "story", + "subtype": "story", + "id": "sw-header--logo-slot", + "name": "Logo Slot", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LogoSlot" + }, + "sw-header--document-dropdown": { + "type": "story", + "subtype": "story", + "id": "sw-header--document-dropdown", + "name": "Document Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "DocumentDropdown" + }, + "sw-header--responsive-more": { + "type": "story", + "subtype": "story", + "id": "sw-header--responsive-more", + "name": "Responsive More", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ResponsiveMore" + }, + "sw-header--layer-detail-input": { + "type": "story", + "subtype": "story", + "id": "sw-header--layer-detail-input", + "name": "Layer Detail · Input", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LayerDetailInput" + }, + "sw-header--property-panel": { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel", + "name": "Property Panel", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanel" + }, + "sw-header--k-guide": { + "type": "story", + "subtype": "story", + "id": "sw-header--k-guide", + "name": "K Guide", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "KGuide" + }, + "sw-header--additional-hover": { + "type": "story", + "subtype": "story", + "id": "sw-header--additional-hover", + "name": "Additional Hover", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "AdditionalHover" + }, + "sw-header--property-bar": { + "type": "story", + "subtype": "story", + "id": "sw-header--property-bar", + "name": "Property Bar", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyBar" + }, + "sw-header--dynamic-controls": { + "type": "story", + "subtype": "story", + "id": "sw-header--dynamic-controls", + "name": "Dynamic Controls", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "DynamicControls" + }, + "sw-header--colorize": { + "type": "story", + "subtype": "story", + "id": "sw-header--colorize", + "name": "Colorize", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Colorize" + }, + "sw-header--composition": { + "type": "story", + "subtype": "story", + "id": "sw-header--composition", + "name": "Composition (Visibility · Order)", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Composition" + }, + "sw-header--property-panel-compare": { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel-compare", + "name": "Property Panel · 4개 비교", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanelCompare" + }, + "sw-header--property-shape-slot": { + "type": "story", + "subtype": "story", + "id": "sw-header--property-shape-slot", + "name": "Property Panel · 형상 Slot", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyShapeSlot" + }, + "sw-header--property-fields": { + "type": "story", + "subtype": "story", + "id": "sw-header--property-fields", + "name": "Property Panel · 필드 13개", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyFields" + }, + "theme-designer-playground--editor": { + "type": "story", + "subtype": "story", + "id": "theme-designer-playground--editor", + "name": "Designer Playground", + "title": "Theme/Designer Playground", + "importPath": "./src/theme/designer-theme.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal" + ], + "exportName": "Editor" + }, + "theme-designer-playground--live-verification": { + "type": "story", + "subtype": "story", + "id": "theme-designer-playground--live-verification", + "name": "Live Verification", + "title": "Theme/Designer Playground", + "importPath": "./src/theme/designer-theme.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "internal", + "verification", + "play-fn" + ], + "exportName": "LiveVerification" + }, + "theme-runtime-contract--comparison": { + "type": "story", + "subtype": "story", + "id": "theme-runtime-contract--comparison", + "name": "Comparison", + "title": "Theme/Runtime Contract", + "importPath": "./src/theme/runtime-theme.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Comparison" + }, + "theme-runtime-contract--global-external": { + "type": "story", + "subtype": "story", + "id": "theme-runtime-contract--global-external", + "name": "Global External", + "title": "Theme/Runtime Contract", + "importPath": "./src/theme/runtime-theme.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "GlobalExternal" + }, + "theme-runtime-contract--verification": { + "type": "story", + "subtype": "story", + "id": "theme-runtime-contract--verification", + "name": "Verification", + "title": "Theme/Runtime Contract", + "importPath": "./src/theme/runtime-theme.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "Verification" + }, + "theme-runtime-contract--dashboard": { + "type": "story", + "subtype": "story", + "id": "theme-runtime-contract--dashboard", + "name": "Dashboard", + "title": "Theme/Runtime Contract", + "importPath": "./src/theme/runtime-theme.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "Dashboard" + }, + "theme-runtime-contract-loader--cdn-verification": { + "type": "story", + "subtype": "story", + "id": "theme-runtime-contract-loader--cdn-verification", + "name": "Cdn Verification", + "title": "Theme/Runtime Contract/Loader", + "importPath": "./src/theme/runtime-loader.stories.tsx", + "tags": [ + "dev", + "test", + "manifest", + "verification", + "play-fn" + ], + "exportName": "CdnVerification" + } + } +} diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-1280.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-1280.png new file mode 100644 index 0000000..37ed59f Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-1280.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-1440.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-1440.png new file mode 100644 index 0000000..074dc19 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-1440.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-390.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-390.png new file mode 100644 index 0000000..dc36845 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-390.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-768.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-768.png new file mode 100644 index 0000000..1c567ce Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-768.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-manager.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-manager.png new file mode 100644 index 0000000..b9e2a6c Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-manager.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-property-panel-390.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-property-panel-390.png new file mode 100644 index 0000000..d89d661 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-property-panel-390.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-property-panel.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-property-panel.png new file mode 100644 index 0000000..cd9ea5b Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/composed-property-panel.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-0-1440.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-0-1440.png new file mode 100644 index 0000000..5f45607 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-0-1440.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-0-390.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-0-390.png new file mode 100644 index 0000000..36e8300 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-0-390.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-1-1440.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-1-1440.png new file mode 100644 index 0000000..f3dd8c3 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-1-1440.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-1-390.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-1-390.png new file mode 100644 index 0000000..701ea9e Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-1-390.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-2-1440.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-2-1440.png new file mode 100644 index 0000000..29330b6 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-2-1440.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-2-390.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-2-390.png new file mode 100644 index 0000000..dfa3b52 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-2-390.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-3-1440.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-3-1440.png new file mode 100644 index 0000000..fa54908 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-3-1440.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-3-390.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-3-390.png new file mode 100644 index 0000000..9470a10 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-3-390.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-4-1440.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-4-1440.png new file mode 100644 index 0000000..b6dc805 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-4-1440.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-4-390.png b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-4-390.png new file mode 100644 index 0000000..d8075e0 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-dropdown/overlay-4-390.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/result.json b/docs/sw/property-panel-comparison-qa/legacy-dropdown/result.json new file mode 100644 index 0000000..671d5f9 --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/legacy-dropdown/result.json @@ -0,0 +1,1741 @@ +{ + "baseCommit": "c165753bbe24de6581c66704bde4ba3246049ec2", + "checks": [ + { + "name": "28 -> 24 SW Stories, exactly four approved Dropdown retirements", + "status": "FAIL" + }, + { + "name": "Dropdown is one Story directly under Header with original ID, no Dropdown folder", + "status": "PASS" + }, + { + "name": "menu correction keeps all 24 IDs; only composed Story name/title change", + "status": "FAIL" + }, + { + "name": "all non-SW index entries identical", + "status": "PASS" + }, + { + "name": "all retained declarations identical outside imports, meta and ComposedDemo", + "status": "FAIL" + }, + { + "name": "runtime, API, AI template, Overview, existing CSS/assets and Storybook configuration untouched", + "status": "FAIL" + }, + { + "name": "render sw-header--composed-controls", + "status": "PASS" + }, + { + "name": "render sw-header--detail-buttons", + "status": "PASS" + }, + { + "name": "render sw-header--overview", + "status": "PASS" + }, + { + "name": "render sw-header--interactive-states", + "status": "PASS" + }, + { + "name": "render sw-header--window-move-motion", + "status": "PASS" + }, + { + "name": "render sw-header--logo-slot", + "status": "PASS" + }, + { + "name": "render sw-header--document-dropdown", + "status": "PASS" + }, + { + "name": "render sw-header--responsive-more", + "status": "PASS" + }, + { + "name": "render sw-header--layer-detail-input", + "status": "PASS" + }, + { + "name": "render sw-header--property-panel", + "status": "PASS" + }, + { + "name": "render sw-header--k-guide", + "status": "PASS" + }, + { + "name": "render sw-header--additional-hover", + "status": "PASS" + }, + { + "name": "render sw-header--property-bar", + "status": "PASS" + }, + { + "name": "render sw-header--dynamic-controls", + "status": "PASS" + }, + { + "name": "render sw-header--colorize", + "status": "PASS" + }, + { + "name": "render sw-header--composition", + "status": "PASS" + }, + { + "name": "render sw-header--property-panel-compare", + "status": "PASS" + }, + { + "name": "render sw-header--property-shape-slot", + "status": "PASS" + }, + { + "name": "render sw-header--property-fields", + "status": "PASS" + }, + { + "name": "Dropdown page contains the Composed Controls group", + "status": "PASS" + }, + { + "name": "one copy of five Dropdown fields and the details group", + "status": "PASS" + }, + { + "name": "composition wraps without page overflow or scaling at 390", + "status": "PASS", + "data": { + "overflow": 0, + "fields": [ + { + "width": 234, + "height": 38 + }, + { + "width": 192, + "height": 38 + }, + { + "width": 284, + "height": 38 + }, + { + "width": 164, + "height": 38 + }, + { + "width": 164, + "height": 38 + } + ] + } + }, + { + "name": "레이어 Hover does not open at 390", + "status": "PASS" + }, + { + "name": "레이어 overlay in viewport, not clipped or covered at 390", + "status": "PASS", + "data": { + "x": 24, + "y": 364.5, + "w": 234, + "h": 280, + "right": 258, + "bottom": 644.5, + "hit": true + } + }, + { + "name": "레이어 selected and expanded at 390", + "status": "PASS" + }, + { + "name": "레이어 Escape closes and restores focus at 390", + "status": "PASS" + }, + { + "name": "레이어 trigger toggles closed at 390", + "status": "PASS" + }, + { + "name": "레이어 outside click closes at 390", + "status": "PASS" + }, + { + "name": "색상 Hover does not open at 390", + "status": "PASS" + }, + { + "name": "색상 overlay in viewport, not clipped or covered at 390", + "status": "PASS", + "data": { + "x": 24, + "y": 406.5, + "w": 192, + "h": 182, + "right": 216, + "bottom": 588.5, + "hit": true + } + }, + { + "name": "색상 selected and expanded at 390", + "status": "PASS" + }, + { + "name": "색상 Escape closes and restores focus at 390", + "status": "PASS" + }, + { + "name": "색상 trigger toggles closed at 390", + "status": "PASS" + }, + { + "name": "색상 outside click closes at 390", + "status": "PASS" + }, + { + "name": "선스타일 Hover does not open at 390", + "status": "PASS" + }, + { + "name": "선스타일 overlay in viewport, not clipped or covered at 390", + "status": "PASS", + "data": { + "x": 1, + "y": 447.5, + "w": 388, + "h": 192, + "right": 389, + "bottom": 639.5, + "hit": true + } + }, + { + "name": "선스타일 selected and expanded at 390", + "status": "PASS" + }, + { + "name": "선스타일 Escape closes and restores focus at 390", + "status": "PASS" + }, + { + "name": "선스타일 trigger toggles closed at 390", + "status": "PASS" + }, + { + "name": "선스타일 outside click closes at 390", + "status": "PASS" + }, + { + "name": "문자스타일 Hover does not open at 390", + "status": "PASS" + }, + { + "name": "문자스타일 overlay in viewport, not clipped or covered at 390", + "status": "PASS", + "data": { + "x": 24, + "y": 490.5, + "w": 164, + "h": 100, + "right": 188, + "bottom": 590.5, + "hit": true + } + }, + { + "name": "문자스타일 selected and expanded at 390", + "status": "PASS" + }, + { + "name": "문자스타일 Escape closes and restores focus at 390", + "status": "PASS" + }, + { + "name": "문자스타일 trigger toggles closed at 390", + "status": "PASS" + }, + { + "name": "문자스타일 outside click closes at 390", + "status": "PASS" + }, + { + "name": "치수스타일 Hover does not open at 390", + "status": "PASS" + }, + { + "name": "치수스타일 overlay in viewport, not clipped or covered at 390", + "status": "PASS", + "data": { + "x": 192, + "y": 490.5, + "w": 164, + "h": 100, + "right": 356, + "bottom": 590.5, + "hit": true + } + }, + { + "name": "치수스타일 selected and expanded at 390", + "status": "PASS" + }, + { + "name": "치수스타일 Escape closes and restores focus at 390", + "status": "PASS" + }, + { + "name": "치수스타일 trigger toggles closed at 390", + "status": "PASS" + }, + { + "name": "치수스타일 outside click closes at 390", + "status": "PASS" + }, + { + "name": "composition wraps without page overflow or scaling at 768", + "status": "PASS", + "data": { + "overflow": 0, + "fields": [ + { + "width": 234, + "height": 38 + }, + { + "width": 192, + "height": 38 + }, + { + "width": 284, + "height": 38 + }, + { + "width": 164, + "height": 38 + }, + { + "width": 164, + "height": 38 + } + ] + } + }, + { + "name": "레이어 Hover does not open at 768", + "status": "PASS" + }, + { + "name": "레이어 overlay in viewport, not clipped or covered at 768", + "status": "PASS", + "data": { + "x": 31.046875, + "y": 331.53125, + "w": 234, + "h": 280, + "right": 265.046875, + "bottom": 611.53125, + "hit": true + } + }, + { + "name": "레이어 selected and expanded at 768", + "status": "PASS" + }, + { + "name": "레이어 Escape closes and restores focus at 768", + "status": "PASS" + }, + { + "name": "레이어 trigger toggles closed at 768", + "status": "PASS" + }, + { + "name": "레이어 outside click closes at 768", + "status": "PASS" + }, + { + "name": "색상 Hover does not open at 768", + "status": "PASS" + }, + { + "name": "색상 overlay in viewport, not clipped or covered at 768", + "status": "PASS", + "data": { + "x": 269.046875, + "y": 331.53125, + "w": 192, + "h": 182, + "right": 461.046875, + "bottom": 513.53125, + "hit": true + } + }, + { + "name": "색상 selected and expanded at 768", + "status": "PASS" + }, + { + "name": "색상 Escape closes and restores focus at 768", + "status": "PASS" + }, + { + "name": "색상 trigger toggles closed at 768", + "status": "PASS" + }, + { + "name": "색상 outside click closes at 768", + "status": "PASS" + }, + { + "name": "선스타일 Hover does not open at 768", + "status": "PASS" + }, + { + "name": "선스타일 overlay in viewport, not clipped or covered at 768", + "status": "PASS", + "data": { + "x": 1.046875, + "y": 372.53125, + "w": 473.1875, + "h": 192, + "right": 474.234375, + "bottom": 564.53125, + "hit": true + } + }, + { + "name": "선스타일 selected and expanded at 768", + "status": "PASS" + }, + { + "name": "선스타일 Escape closes and restores focus at 768", + "status": "PASS" + }, + { + "name": "선스타일 trigger toggles closed at 768", + "status": "PASS" + }, + { + "name": "선스타일 outside click closes at 768", + "status": "PASS" + }, + { + "name": "문자스타일 Hover does not open at 768", + "status": "PASS" + }, + { + "name": "문자스타일 overlay in viewport, not clipped or covered at 768", + "status": "PASS", + "data": { + "x": 319.046875, + "y": 373.53125, + "w": 164, + "h": 100, + "right": 483.046875, + "bottom": 473.53125, + "hit": true + } + }, + { + "name": "문자스타일 selected and expanded at 768", + "status": "PASS" + }, + { + "name": "문자스타일 Escape closes and restores focus at 768", + "status": "PASS" + }, + { + "name": "문자스타일 trigger toggles closed at 768", + "status": "PASS" + }, + { + "name": "문자스타일 outside click closes at 768", + "status": "PASS" + }, + { + "name": "치수스타일 Hover does not open at 768", + "status": "PASS" + }, + { + "name": "치수스타일 overlay in viewport, not clipped or covered at 768", + "status": "PASS", + "data": { + "x": 487.046875, + "y": 373.53125, + "w": 164, + "h": 100, + "right": 651.046875, + "bottom": 473.53125, + "hit": true + } + }, + { + "name": "치수스타일 selected and expanded at 768", + "status": "PASS" + }, + { + "name": "치수스타일 Escape closes and restores focus at 768", + "status": "PASS" + }, + { + "name": "치수스타일 trigger toggles closed at 768", + "status": "PASS" + }, + { + "name": "치수스타일 outside click closes at 768", + "status": "PASS" + }, + { + "name": "composition wraps without page overflow or scaling at 1280", + "status": "PASS", + "data": { + "overflow": 0, + "fields": [ + { + "width": 234, + "height": 38 + }, + { + "width": 192, + "height": 38 + }, + { + "width": 284, + "height": 38 + }, + { + "width": 164, + "height": 38 + }, + { + "width": 164, + "height": 38 + } + ] + } + }, + { + "name": "레이어 Hover does not open at 1280", + "status": "PASS" + }, + { + "name": "레이어 overlay in viewport, not clipped or covered at 1280", + "status": "PASS", + "data": { + "x": 46.40625, + "y": 326.890625, + "w": 234, + "h": 280, + "right": 280.40625, + "bottom": 606.890625, + "hit": true + } + }, + { + "name": "레이어 selected and expanded at 1280", + "status": "PASS" + }, + { + "name": "레이어 Escape closes and restores focus at 1280", + "status": "PASS" + }, + { + "name": "레이어 trigger toggles closed at 1280", + "status": "PASS" + }, + { + "name": "레이어 outside click closes at 1280", + "status": "PASS" + }, + { + "name": "색상 Hover does not open at 1280", + "status": "PASS" + }, + { + "name": "색상 overlay in viewport, not clipped or covered at 1280", + "status": "PASS", + "data": { + "x": 284.40625, + "y": 326.890625, + "w": 192, + "h": 182, + "right": 476.40625, + "bottom": 508.890625, + "hit": true + } + }, + { + "name": "색상 selected and expanded at 1280", + "status": "PASS" + }, + { + "name": "색상 Escape closes and restores focus at 1280", + "status": "PASS" + }, + { + "name": "색상 trigger toggles closed at 1280", + "status": "PASS" + }, + { + "name": "색상 outside click closes at 1280", + "status": "PASS" + }, + { + "name": "선스타일 Hover does not open at 1280", + "status": "PASS" + }, + { + "name": "선스타일 overlay in viewport, not clipped or covered at 1280", + "status": "PASS", + "data": { + "x": 386.40625, + "y": 325.890625, + "w": 473.1875, + "h": 192, + "right": 859.59375, + "bottom": 517.890625, + "hit": true + } + }, + { + "name": "선스타일 selected and expanded at 1280", + "status": "PASS" + }, + { + "name": "선스타일 Escape closes and restores focus at 1280", + "status": "PASS" + }, + { + "name": "선스타일 trigger toggles closed at 1280", + "status": "PASS" + }, + { + "name": "선스타일 outside click closes at 1280", + "status": "PASS" + }, + { + "name": "문자스타일 Hover does not open at 1280", + "status": "PASS" + }, + { + "name": "문자스타일 overlay in viewport, not clipped or covered at 1280", + "status": "PASS", + "data": { + "x": 768.40625, + "y": 326.890625, + "w": 164, + "h": 100, + "right": 932.40625, + "bottom": 426.890625, + "hit": true + } + }, + { + "name": "문자스타일 selected and expanded at 1280", + "status": "PASS" + }, + { + "name": "문자스타일 Escape closes and restores focus at 1280", + "status": "PASS" + }, + { + "name": "문자스타일 trigger toggles closed at 1280", + "status": "PASS" + }, + { + "name": "문자스타일 outside click closes at 1280", + "status": "PASS" + }, + { + "name": "치수스타일 Hover does not open at 1280", + "status": "PASS" + }, + { + "name": "치수스타일 overlay in viewport, not clipped or covered at 1280", + "status": "PASS", + "data": { + "x": 936.40625, + "y": 326.890625, + "w": 164, + "h": 100, + "right": 1100.40625, + "bottom": 426.890625, + "hit": true + } + }, + { + "name": "치수스타일 selected and expanded at 1280", + "status": "PASS" + }, + { + "name": "치수스타일 Escape closes and restores focus at 1280", + "status": "PASS" + }, + { + "name": "치수스타일 trigger toggles closed at 1280", + "status": "PASS" + }, + { + "name": "치수스타일 outside click closes at 1280", + "status": "PASS" + }, + { + "name": "composition wraps without page overflow or scaling at 1440", + "status": "PASS", + "data": { + "overflow": 0, + "fields": [ + { + "width": 234, + "height": 38 + }, + { + "width": 192, + "height": 38 + }, + { + "width": 284, + "height": 38 + }, + { + "width": 164, + "height": 38 + }, + { + "width": 164, + "height": 38 + } + ] + } + }, + { + "name": "레이어 Hover does not open at 1440", + "status": "PASS" + }, + { + "name": "레이어 overlay in viewport, not clipped or covered at 1440", + "status": "PASS", + "data": { + "x": 128, + "y": 328.5, + "w": 234, + "h": 280, + "right": 362, + "bottom": 608.5, + "hit": true + } + }, + { + "name": "레이어 selected and expanded at 1440", + "status": "PASS" + }, + { + "name": "레이어 Escape closes and restores focus at 1440", + "status": "PASS" + }, + { + "name": "레이어 trigger toggles closed at 1440", + "status": "PASS" + }, + { + "name": "레이어 outside click closes at 1440", + "status": "PASS" + }, + { + "name": "색상 Hover does not open at 1440", + "status": "PASS" + }, + { + "name": "색상 overlay in viewport, not clipped or covered at 1440", + "status": "PASS", + "data": { + "x": 366, + "y": 328.5, + "w": 192, + "h": 182, + "right": 558, + "bottom": 510.5, + "hit": true + } + }, + { + "name": "색상 selected and expanded at 1440", + "status": "PASS" + }, + { + "name": "색상 Escape closes and restores focus at 1440", + "status": "PASS" + }, + { + "name": "색상 trigger toggles closed at 1440", + "status": "PASS" + }, + { + "name": "색상 outside click closes at 1440", + "status": "PASS" + }, + { + "name": "선스타일 Hover does not open at 1440", + "status": "PASS" + }, + { + "name": "선스타일 overlay in viewport, not clipped or covered at 1440", + "status": "PASS", + "data": { + "x": 468, + "y": 327.5, + "w": 473.1875, + "h": 192, + "right": 941.1875, + "bottom": 519.5, + "hit": true + } + }, + { + "name": "선스타일 selected and expanded at 1440", + "status": "PASS" + }, + { + "name": "선스타일 Escape closes and restores focus at 1440", + "status": "PASS" + }, + { + "name": "선스타일 trigger toggles closed at 1440", + "status": "PASS" + }, + { + "name": "선스타일 outside click closes at 1440", + "status": "PASS" + }, + { + "name": "문자스타일 Hover does not open at 1440", + "status": "PASS" + }, + { + "name": "문자스타일 overlay in viewport, not clipped or covered at 1440", + "status": "PASS", + "data": { + "x": 850, + "y": 328.5, + "w": 164, + "h": 100, + "right": 1014, + "bottom": 428.5, + "hit": true + } + }, + { + "name": "문자스타일 selected and expanded at 1440", + "status": "PASS" + }, + { + "name": "문자스타일 Escape closes and restores focus at 1440", + "status": "PASS" + }, + { + "name": "문자스타일 trigger toggles closed at 1440", + "status": "PASS" + }, + { + "name": "문자스타일 outside click closes at 1440", + "status": "PASS" + }, + { + "name": "치수스타일 Hover does not open at 1440", + "status": "PASS" + }, + { + "name": "치수스타일 overlay in viewport, not clipped or covered at 1440", + "status": "PASS", + "data": { + "x": 1018, + "y": 328.5, + "w": 164, + "h": 100, + "right": 1182, + "bottom": 428.5, + "hit": true + } + }, + { + "name": "치수스타일 selected and expanded at 1440", + "status": "PASS" + }, + { + "name": "치수스타일 Escape closes and restores focus at 1440", + "status": "PASS" + }, + { + "name": "치수스타일 trigger toggles closed at 1440", + "status": "PASS" + }, + { + "name": "치수스타일 outside click closes at 1440", + "status": "PASS" + }, + { + "name": "keyboard opens layer menu and focuses current row", + "status": "PASS" + }, + { + "name": "keyboard moves to next layer row", + "status": "PASS" + }, + { + "name": "onLayerSelect callback exactly once", + "status": "PASS", + "data": [ + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "layerOpen(true)", + "onLayerSelect(layer, Sample-Center)", + "layerOpen(false)" + ] + }, + { + "name": "layer selection appears, closes and restores focus", + "status": "PASS" + }, + { + "name": "selected layer retains original row Hover background", + "status": "PASS" + }, + { + "name": "onLayerVisibilityChange callback exactly once", + "status": "PASS", + "data": [ + "onLayerSelect(layer, Sample-Center)", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerVisibilityChange(layer-1, false)" + ] + }, + { + "name": "onLayerVisibilityChange toggles only its own state, menu remains open", + "status": "PASS" + }, + { + "name": "onLayerFreezeChange callback exactly once", + "status": "PASS", + "data": [ + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerVisibilityChange(layer-1, false)", + "onLayerFreezeChange(layer-1, true)" + ] + }, + { + "name": "onLayerFreezeChange toggles only its own state, menu remains open", + "status": "PASS" + }, + { + "name": "onLayerLockChange callback exactly once", + "status": "PASS", + "data": [ + "onLayerOpen", + "layerOpen(true)", + "onLayerVisibilityChange(layer-1, false)", + "onLayerFreezeChange(layer-1, true)", + "onLayerLockChange(layer-1, true)" + ] + }, + { + "name": "onLayerLockChange toggles only its own state, menu remains open", + "status": "PASS" + }, + { + "name": "disabled layer selection and toggles blocked", + "status": "PASS" + }, + { + "name": "full color menu: seven palette chips, two user colors, modes, RGB and pick", + "status": "PASS" + }, + { + "name": "onColorSelect callback exactly once", + "status": "PASS", + "data": [ + "onLayerLockChange(layer-1, true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorSelect(color, 241,4,4)" + ] + }, + { + "name": "color palette updates displayed RGB and leaves menu open", + "status": "PASS" + }, + { + "name": "onColorModeChange callback exactly once", + "status": "PASS", + "data": [ + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorSelect(color, 241,4,4)", + "onColorModeChange(byBlock)" + ] + }, + { + "name": "ByBlock On and displayed mode", + "status": "PASS" + }, + { + "name": "onColorInput callback exactly once", + "status": "PASS", + "data": [ + "onColorOpen", + "colorOpen(true)", + "onColorSelect(color, 241,4,4)", + "onColorModeChange(byBlock)", + "onColorInput(color, 255,0,0)" + ] + }, + { + "name": "RGB commit clears mode and updates chip", + "status": "PASS" + }, + { + "name": "invalid RGB restores without callback", + "status": "PASS" + }, + { + "name": "onColorPick callback exactly once", + "status": "PASS", + "data": [ + "onColorSelect(color, 241,4,4)", + "onColorModeChange(byBlock)", + "onColorInput(color, 255,0,0)", + "onColorPick", + "colorOpen(false)" + ] + }, + { + "name": "color pick closes and restores focus", + "status": "PASS" + }, + { + "name": "color changes leave layer, line, text and dimension values intact", + "status": "PASS" + }, + { + "name": "all original line rows and weights retained", + "status": "PASS" + }, + { + "name": "onLineTypeSelect callback exactly once", + "status": "PASS", + "data": [ + "onColorPick", + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineTypeSelect(line, CENTER)" + ] + }, + { + "name": "selected line retains original row Hover and preview", + "status": "PASS" + }, + { + "name": "onLineWeightSelect callback exactly once", + "status": "PASS", + "data": [ + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineTypeSelect(line, CENTER)", + "onLineWeightSelect(weight, 0.25)" + ] + }, + { + "name": "onLineWeightValueChange callback exactly once", + "status": "PASS", + "data": [ + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineTypeSelect(line, CENTER)", + "onLineWeightSelect(weight, 0.25)", + "onLineWeightValueChange(weight, 0.5)" + ] + }, + { + "name": "onLineScaleChange callback exactly once", + "status": "PASS", + "data": [ + "lineStyleOpen(true)", + "onLineTypeSelect(line, CENTER)", + "onLineWeightSelect(weight, 0.25)", + "onLineWeightValueChange(weight, 0.5)", + "onLineScaleChange(scale, 2)" + ] + }, + { + "name": "line type, editable weight and scale update independently; menu stays open", + "status": "PASS" + }, + { + "name": "invalid scale restores, no callback", + "status": "PASS" + }, + { + "name": "문자스타일 full two-item list retained", + "status": "PASS" + }, + { + "name": "onTextStyleSelect callback exactly once", + "status": "PASS", + "data": [ + "lineStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "onTextStyleSelect(dotum)", + "textStyleOpen(false)" + ] + }, + { + "name": "문자스타일 selection displayed, closes, focus returns", + "status": "PASS" + }, + { + "name": "치수스타일 full two-item list retained", + "status": "PASS" + }, + { + "name": "onDimensionStyleSelect callback exactly once", + "status": "PASS", + "data": [ + "textStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "onDimensionStyleSelect(iso-25)", + "dimensionStyleOpen(false)" + ] + }, + { + "name": "치수스타일 selection displayed, closes, focus returns", + "status": "PASS" + }, + { + "name": "레이어 detail Hover uses existing text opacity", + "status": "PASS" + }, + { + "name": "onLayerDetail callback exactly once", + "status": "PASS", + "data": [ + "dimensionStyleOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerDetail", + "layerOpen(false)" + ] + }, + { + "name": "레이어 detail closes, focus returns, no fabricated popup", + "status": "PASS" + }, + { + "name": "색상 detail Hover uses existing text opacity", + "status": "PASS" + }, + { + "name": "onColorDetail callback exactly once", + "status": "PASS", + "data": [ + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorDetail", + "colorOpen(false)" + ] + }, + { + "name": "색상 detail closes, focus returns, no fabricated popup", + "status": "PASS" + }, + { + "name": "선스타일 detail Hover uses existing text opacity", + "status": "PASS" + }, + { + "name": "onLineStyleDetail callback exactly once", + "status": "PASS", + "data": [ + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineStyleDetail", + "lineStyleOpen(false)" + ] + }, + { + "name": "선스타일 detail closes, focus returns, no fabricated popup", + "status": "PASS" + }, + { + "name": "문자스타일 detail Hover uses existing text opacity", + "status": "PASS" + }, + { + "name": "onTextStyleDetail callback exactly once", + "status": "PASS", + "data": [ + "lineStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "onTextStyleDetail", + "textStyleOpen(false)" + ] + }, + { + "name": "문자스타일 detail closes, focus returns, no fabricated popup", + "status": "PASS" + }, + { + "name": "치수스타일 detail Hover uses existing text opacity", + "status": "PASS" + }, + { + "name": "onDimensionStyleDetail callback exactly once", + "status": "PASS", + "data": [ + "textStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "onDimensionStyleDetail", + "dimensionStyleOpen(false)" + ] + }, + { + "name": "치수스타일 detail closes, focus returns, no fabricated popup", + "status": "PASS" + }, + { + "name": "opening another control leaves exactly one menu and preserves selection", + "status": "PASS" + }, + { + "name": "keyboard Tab enters the open color controls", + "status": "PASS" + }, + { + "name": "details opens existing 28px property Bar", + "status": "PASS" + }, + { + "name": "details opens existing 314px property panel with focus", + "status": "PASS", + "data": { + "width": 314, + "focused": true, + "active": "
\"\"선택된 객체 - 원1
(LTscale:1)
(ByL)%

형상

\"원형

위치

구분XYZ
중간점
" + } + }, + { + "name": "property Bar and panel share edited state", + "status": "PASS", + "data": "12.5" + }, + { + "name": "property panel weight edit appears in composed line field", + "status": "PASS" + }, + { + "name": "property panel close returns focus", + "status": "PASS" + }, + { + "name": "property panel Escape returns focus", + "status": "PASS" + }, + { + "name": "narrow details panel keeps natural width and fits viewport", + "status": "PASS", + "data": { + "width": 314, + "left": 72, + "right": 386, + "bottom": 840, + "overflow": 0 + } + }, + { + "name": "all seven actionable controls Disabled", + "status": "PASS" + }, + { + "name": "Disabled controls block callbacks and overlays", + "status": "PASS" + }, + { + "name": "callback-free layer icons become readonly status images", + "status": "PASS" + }, + { + "name": "missing detail callback keeps safe no-op and menu open", + "status": "PASS" + }, + { + "name": "retained long layer scenario", + "status": "PASS" + }, + { + "name": "long layer name preserved with full title", + "status": "PASS" + }, + { + "name": "retained many layer scenario", + "status": "PASS" + }, + { + "name": "long layer list scrolls internally", + "status": "PASS" + }, + { + "name": "all 40 user colors accessible with palette scroll", + "status": "PASS" + }, + { + "name": "retained empty layer scenario", + "status": "PASS" + }, + { + "name": "Overview keeps one Header at 49px and 16:9 Stage", + "status": "PASS" + }, + { + "name": "Window Move Motion retains only nine 3x steps", + "status": "PASS" + }, + { + "name": "manager shows a single Dropdown link directly under Header, no Composed Controls submenu", + "status": "PASS" + }, + { + "name": "retired Dropdown links absent in manager", + "status": "PASS" + }, + { + "name": "no browser console or page errors", + "status": "PASS", + "data": [] + } + ], + "errors": [], + "callbacks": [ + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerOpen", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorOpen", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "lineStyleOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineStyleOpen", + "lineStyleOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "lineStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "textStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "onTextStyleOpen", + "textStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "textStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "onDimensionStyleOpen", + "dimensionStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerOpen", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorOpen", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "lineStyleOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineStyleOpen", + "lineStyleOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "lineStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "textStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "onTextStyleOpen", + "textStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "textStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "onDimensionStyleOpen", + "dimensionStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerOpen", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorOpen", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "lineStyleOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineStyleOpen", + "lineStyleOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "lineStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "textStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "onTextStyleOpen", + "textStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "textStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "onDimensionStyleOpen", + "dimensionStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerOpen", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorOpen", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "lineStyleOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineStyleOpen", + "lineStyleOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "lineStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "textStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "onTextStyleOpen", + "textStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "textStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "onDimensionStyleOpen", + "dimensionStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "dimensionStyleOpen(false)", + "layerOpen(true)", + "onLayerSelect(layer, Sample-Center)", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerVisibilityChange(layer-1, false)", + "onLayerFreezeChange(layer-1, true)", + "onLayerLockChange(layer-1, true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorSelect(color, 241,4,4)", + "onColorModeChange(byBlock)", + "onColorInput(color, 255,0,0)", + "onColorPick", + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineTypeSelect(line, CENTER)", + "onLineWeightSelect(weight, 0.25)", + "onLineWeightValueChange(weight, 0.5)", + "onLineScaleChange(scale, 2)", + "lineStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "onTextStyleSelect(dotum)", + "textStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "onDimensionStyleSelect(iso-25)", + "dimensionStyleOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerDetail", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "onColorDetail", + "colorOpen(false)", + "onLineStyleOpen", + "lineStyleOpen(true)", + "onLineStyleDetail", + "lineStyleOpen(false)", + "onTextStyleOpen", + "textStyleOpen(true)", + "onTextStyleDetail", + "textStyleOpen(false)", + "onDimensionStyleOpen", + "dimensionStyleOpen(true)", + "onDimensionStyleDetail", + "dimensionStyleOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onPropertyBarOpenChange(true)", + "onPropertyPanelOpenChange(true)", + "onPropertyChange(radius, 12.5)", + "onPropertyChange(weight, 0.75)", + "onPropertyPanelOpenChange(false)", + "onPropertyPanelOpenChange(true)", + "onPropertyPanelOpenChange(false)", + "onPropertyPanelOpenChange(true)", + "onPropertyPanelOpenChange(false)", + "onPropertyBarOpenChange(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "onLayerSelect(layer, Sample-매우-긴-레이어-이름-Ellipsis-확인용-Layer-Name-0123456789)", + "layerOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)", + "onColorOpen", + "colorOpen(true)", + "colorOpen(false)", + "onLayerOpen", + "layerOpen(true)", + "layerOpen(false)" + ], + "geometry": [ + { + "width": 390, + "overflow": 0, + "fields": [ + { + "width": 234, + "height": 38 + }, + { + "width": 192, + "height": 38 + }, + { + "width": 284, + "height": 38 + }, + { + "width": 164, + "height": 38 + }, + { + "width": 164, + "height": 38 + } + ] + }, + { + "width": 768, + "overflow": 0, + "fields": [ + { + "width": 234, + "height": 38 + }, + { + "width": 192, + "height": 38 + }, + { + "width": 284, + "height": 38 + }, + { + "width": 164, + "height": 38 + }, + { + "width": 164, + "height": 38 + } + ] + }, + { + "width": 1280, + "overflow": 0, + "fields": [ + { + "width": 234, + "height": 38 + }, + { + "width": 192, + "height": 38 + }, + { + "width": 284, + "height": 38 + }, + { + "width": 164, + "height": 38 + }, + { + "width": 164, + "height": 38 + } + ] + }, + { + "width": 1440, + "overflow": 0, + "fields": [ + { + "width": 234, + "height": 38 + }, + { + "width": 192, + "height": 38 + }, + { + "width": 284, + "height": 38 + }, + { + "width": 164, + "height": 38 + }, + { + "width": 164, + "height": 38 + } + ] + } + ], + "menuCorrectionBaseCommit": "9482d45f340981c4b4ad6537cb678bf4afcdc681", + "browser": "155.0.8059.80", + "status": "FAIL" +} diff --git a/docs/sw/property-panel-comparison-qa/legacy-dropdown/story-inventory.json b/docs/sw/property-panel-comparison-qa/legacy-dropdown/story-inventory.json new file mode 100644 index 0000000..486eeca --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/legacy-dropdown/story-inventory.json @@ -0,0 +1,774 @@ +{ + "before": [ + { + "type": "story", + "subtype": "story", + "id": "sw-header--detail-buttons", + "name": "Detail Buttons (Shared States)", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "DetailButtons" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--overview", + "name": "Overview", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Overview" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--interactive-states", + "name": "Interactive States", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "InteractiveStates" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--window-move-motion", + "name": "Window Move Motion", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "WindowMoveMotion" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--composed-controls", + "name": "Composed Controls", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ComposedControls" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--logo-slot", + "name": "Logo Slot", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LogoSlot" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--document-dropdown", + "name": "Document Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "DocumentDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--layer-dropdown", + "name": "Layer Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LayerDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--color-dropdown", + "name": "Color Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ColorDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--line-style-dropdown", + "name": "Line Style Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LineStyleDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--text-dimension-style-dropdown", + "name": "Text · Dimension Style Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "TextDimensionStyleDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--responsive-more", + "name": "Responsive More", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ResponsiveMore" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--layer-detail-input", + "name": "Layer Detail · Input", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LayerDetailInput" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel", + "name": "Property Panel", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanel" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel-variants", + "name": "Property Panel Variants", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanelVariants" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--k-guide", + "name": "K Guide", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "KGuide" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--additional-hover", + "name": "Additional Hover", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "AdditionalHover" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-bar", + "name": "Property Bar", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyBar" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--dynamic-controls", + "name": "Dynamic Controls", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "DynamicControls" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--colorize", + "name": "Colorize", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Colorize" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--composition", + "name": "Composition (Visibility · Order)", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Composition" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel-none", + "name": "Property Panel · 선택 없음", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanelNone" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel-all", + "name": "Property Panel · 전체 선택", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanelAll" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel-circle", + "name": "Property Panel · 원 1개", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanelCircle" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel-expanded", + "name": "Property Panel · 모두 펼침", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanelExpanded" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel-compare", + "name": "Property Panel · 4개 비교", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanelCompare" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-shape-slot", + "name": "Property Panel · 형상 Slot", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyShapeSlot" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-fields", + "name": "Property Panel · 필드 13개", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyFields" + } + ], + "after": [ + { + "type": "story", + "subtype": "story", + "id": "sw-header--composed-controls", + "name": "Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header-dropdown.stories.tsx", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ComposedControls" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--detail-buttons", + "name": "Detail Buttons (Shared States)", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest", + "verification" + ], + "exportName": "DetailButtons" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--overview", + "name": "Overview", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Overview" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--interactive-states", + "name": "Interactive States", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "InteractiveStates" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--window-move-motion", + "name": "Window Move Motion", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "WindowMoveMotion" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--logo-slot", + "name": "Logo Slot", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LogoSlot" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--document-dropdown", + "name": "Document Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "DocumentDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--responsive-more", + "name": "Responsive More", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ResponsiveMore" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--layer-detail-input", + "name": "Layer Detail · Input", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LayerDetailInput" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel", + "name": "Property Panel", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanel" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--k-guide", + "name": "K Guide", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "KGuide" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--additional-hover", + "name": "Additional Hover", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "AdditionalHover" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-bar", + "name": "Property Bar", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyBar" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--dynamic-controls", + "name": "Dynamic Controls", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "DynamicControls" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--colorize", + "name": "Colorize", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Colorize" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--composition", + "name": "Composition (Visibility · Order)", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "Composition" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-panel-compare", + "name": "Property Panel · 4개 비교", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyPanelCompare" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-shape-slot", + "name": "Property Panel · 형상 Slot", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyShapeSlot" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--property-fields", + "name": "Property Panel · 필드 13개", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "PropertyFields" + } + ], + "removed": [ + { + "type": "story", + "subtype": "story", + "id": "sw-header--layer-dropdown", + "name": "Layer Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LayerDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--color-dropdown", + "name": "Color Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "ColorDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--line-style-dropdown", + "name": "Line Style Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "LineStyleDropdown" + }, + { + "type": "story", + "subtype": "story", + "id": "sw-header--text-dimension-style-dropdown", + "name": "Text · Dimension Style Dropdown", + "title": "SW/Header", + "importPath": "./src/sw/sw-header.stories.tsx", + "componentPath": "./packages/sw/dist/index.js", + "tags": [ + "dev", + "test", + "manifest" + ], + "exportName": "TextDimensionStyleDropdown" + } + ] +} diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/A-bar-1920.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/A-bar-1920.png new file mode 100644 index 0000000..8ef2f19 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/A-bar-1920.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/A-bar-right-end.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/A-bar-right-end.png new file mode 100644 index 0000000..7580283 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/A-bar-right-end.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-active.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-active.png new file mode 100644 index 0000000..f2fd71a Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-active.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-default.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-default.png new file mode 100644 index 0000000..4773845 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-default.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-hover.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-hover.png new file mode 100644 index 0000000..e02e8a8 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/B-tool-hover.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-color-open-hover.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-color-open-hover.png new file mode 100644 index 0000000..c35af33 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-color-open-hover.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-dimension-style-open-hover.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-dimension-style-open-hover.png new file mode 100644 index 0000000..c3ff8da Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-dimension-style-open-hover.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-layer-open-hover.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-layer-open-hover.png new file mode 100644 index 0000000..0a3cc83 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-layer-open-hover.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-line-style-open-hover.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-line-style-open-hover.png new file mode 100644 index 0000000..c62eff1 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-line-style-open-hover.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-text-style-open-hover.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-text-style-open-hover.png new file mode 100644 index 0000000..c3ff8da Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/C-text-style-open-hover.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-initial.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-initial.png new file mode 100644 index 0000000..42c0c13 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-initial.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-keyboard.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-keyboard.png new file mode 100644 index 0000000..2c3eaf5 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-keyboard.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-max.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-max.png new file mode 100644 index 0000000..440e16a Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-max.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-min.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-min.png new file mode 100644 index 0000000..c60c8fb Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-gauge-min.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-panel-circle.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-panel-circle.png new file mode 100644 index 0000000..1e3493c Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/E-panel-circle.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-all.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-all.png new file mode 100644 index 0000000..0f12c20 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-all.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-circle.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-circle.png new file mode 100644 index 0000000..547bc13 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-circle.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-expanded.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-expanded.png new file mode 100644 index 0000000..209ca51 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-expanded.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-none.png b/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-none.png new file mode 100644 index 0000000..1c7a77e Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-followup-four/F-property-panel-none.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-followup-four/result.json b/docs/sw/property-panel-comparison-qa/legacy-followup-four/result.json new file mode 100644 index 0000000..00e2b77 --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/legacy-followup-four/result.json @@ -0,0 +1,1186 @@ +{ + "checks": [ + { + "name": "A1 bar ends after last field (padding 6 + border 1)", + "status": "PASS", + "data": { + "left": 377, + "right": 906.671875, + "width": 529.671875, + "height": 28, + "lastFieldRight": 899.671875, + "scrollW": 528, + "clientW": 528, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 4 + } + }, + { + "name": "A2 height 28 / header 49 / radius & border kept", + "status": "PASS", + "data": { + "left": 377, + "right": 906.671875, + "width": 529.671875, + "height": 28, + "lastFieldRight": 899.671875, + "scrollW": 528, + "clientW": 528, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 4 + } + }, + { + "name": "A3 background and bottom line end together; nothing brown beyond", + "status": "PASS", + "data": { + "inBg": [ + 38, + 30, + 19 + ], + "outBg": [ + 245, + 240, + 229 + ], + "inLine": [ + 8, + 37, + 28 + ], + "outLine": [ + 245, + 240, + 229 + ] + } + }, + { + "name": "A4 bar grows with added fields, none clipped", + "status": "PASS", + "data": { + "left": 377, + "right": 1546.046875, + "width": 1169.046875, + "height": 28, + "lastFieldRight": 1539.046875, + "scrollW": 1167, + "clientW": 1167, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 10 + } + }, + { + "name": "A5 longer than space: capped to header edge, scroll reaches last field", + "status": "PASS", + "data": { + "left": 377, + "right": 1920, + "width": 1543, + "height": 28, + "lastFieldRight": 3030.921875, + "scrollW": 2659, + "clientW": 1541, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 24, + "lastVisible": true + } + }, + { + "name": "A6 bar shrinks back for a 1-field object", + "status": "PASS", + "data": { + "left": 377, + "right": 534.984375, + "width": 157.984375, + "height": 28, + "lastFieldRight": 527.984375, + "scrollW": 156, + "clientW": 156, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 1 + } + }, + { + "name": "A7 width 1440: bar within header, height 28, no page scroll", + "status": "PASS", + "data": { + "left": 377, + "right": 906.671875, + "width": 529.671875, + "height": 28, + "lastFieldRight": 899.671875, + "scrollW": 528, + "clientW": 528, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1440, + "fieldCount": 4, + "overflowX": false + } + }, + { + "name": "A7 width 1080: bar within header, height 28, no page scroll", + "status": "PASS", + "data": { + "left": 203, + "right": 732.671875, + "width": 529.671875, + "height": 28, + "lastFieldRight": 725.671875, + "scrollW": 528, + "clientW": 528, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1080, + "fieldCount": 4, + "overflowX": false + } + }, + { + "name": "A7 width 768: bar within header, height 28, no page scroll", + "status": "PASS", + "data": { + "left": 306, + "right": 768, + "width": 462, + "height": 28, + "lastFieldRight": 828.671875, + "scrollW": 528, + "clientW": 460, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 768, + "fieldCount": 4, + "overflowX": false + } + }, + { + "name": "B1 no CSS border/outline/background on tool button", + "status": "PASS", + "data": { + "border": "0px rgb(0, 0, 0)", + "outline": "none", + "bg": "rgba(0, 0, 0, 0)", + "w": 29, + "h": 27.125, + "imgs": [ + { + "cls": "hm-sw-property__tool-default", + "w": 29, + "h": 27.125, + "src": "data:image/svg+xml,%3csvg%20width='29'%20height='27.129'%20v" + }, + { + "cls": "hm-sw-property__tool-hover", + "w": 29, + "h": 27.125, + "src": "data:image/svg+xml,%3csvg%20width='29'%20height='27.129'%20v" + } + ] + } + }, + { + "name": "B2 images 29 x 27.13 equal the button", + "status": "PASS", + "data": [ + { + "cls": "hm-sw-property__tool-default", + "w": 29, + "h": 27.125, + "src": "data:image/svg+xml,%3csvg%20width='29'%20height='27.129'%20v" + }, + { + "cls": "hm-sw-property__tool-hover", + "w": 29, + "h": 27.125, + "src": "data:image/svg+xml,%3csvg%20width='29'%20height='27.129'%20v" + } + ] + }, + { + "name": "B3 no white frame pixels (default/hover/active)", + "status": "PASS", + "data": { + "def": 0, + "hov": 0, + "act": 0 + } + }, + { + "name": "B4 active toggles (aria-pressed)", + "status": "PASS", + "data": { + "pressed": "true" + } + }, + { + "name": "C layer: open+hover == open idle", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C layer: hover restored after close", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "D layer: inner row hover kept / detail hover kept", + "status": "PASS", + "data": { + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C color: open+hover == open idle", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C color: hover restored after close", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "D color: inner row hover kept / detail hover kept", + "status": "PASS", + "data": { + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C text-style: open+hover == open idle", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C text-style: hover restored after close", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "D text-style: inner row hover kept / detail hover kept", + "status": "PASS", + "data": { + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C dimension-style: open+hover == open idle", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C dimension-style: hover restored after close", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "D dimension-style: inner row hover kept / detail hover kept", + "status": "PASS", + "data": { + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C line-style: open+hover == open idle", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "C line-style: hover restored after close", + "status": "PASS", + "data": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "D line-style: inner row hover kept / detail hover kept", + "status": "PASS", + "data": { + "rowChanged": true, + "detailChanged": true + } + }, + { + "name": "E1 initial 0.25: red left of thumb, beige right", + "status": "PASS", + "data": { + "value": "0.25", + "fill": "0.25", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)", + "left": [ + 250, + 63, + 63 + ], + "right": [ + 199, + 189, + 169 + ], + "width": 86 + } + }, + { + "name": "E2 keyboard ArrowRight x40 -> 0.65, fill follows", + "status": "PASS", + "data": { + "value": "0.65", + "fill": "0.65", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)", + "left": [ + 254, + 64, + 64 + ], + "right": [ + 199, + 189, + 169 + ], + "width": 86 + } + }, + { + "name": "E3 commit updates the number input (callback path)", + "status": "PASS", + "data": { + "committed": "0.65" + } + }, + { + "name": "E4 max -> fill 1", + "status": "PASS", + "data": { + "value": "1", + "fill": "1", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)", + "left": [ + 250, + 63, + 63 + ], + "right": [ + 160, + 16, + 16 + ], + "width": 86 + } + }, + { + "name": "E5 min -> fill 0, beige right", + "status": "PASS", + "data": { + "value": "0", + "fill": "0", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)", + "left": [ + 138, + 40, + 40 + ], + "right": [ + 199, + 189, + 169 + ], + "width": 86 + } + }, + { + "name": "E6 value changed elsewhere syncs gauge", + "status": "PASS", + "data": { + "value": "0.5", + "fill": "0.5", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)" + } + }, + { + "name": "F property-panel-none renders", + "status": "PASS", + "data": [ + 314, + 256 + ] + }, + { + "name": "F property-panel-all renders", + "status": "PASS", + "data": [ + 314, + 361 + ] + }, + { + "name": "F property-panel-circle renders", + "status": "PASS", + "data": [ + 314, + 658 + ] + }, + { + "name": "F property-panel-expanded renders", + "status": "PASS", + "data": [ + 314, + 754 + ] + }, + { + "name": "G no page/console errors", + "status": "PASS", + "data": [] + } + ], + "errors": [], + "data": { + "barDefault": { + "left": 377, + "right": 906.671875, + "width": 529.671875, + "height": 28, + "lastFieldRight": 899.671875, + "scrollW": 528, + "clientW": 528, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 4 + }, + "barGrown": { + "left": 377, + "right": 1546.046875, + "width": 1169.046875, + "height": 28, + "lastFieldRight": 1539.046875, + "scrollW": 1167, + "clientW": 1167, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 10 + }, + "barOverflow": { + "left": 377, + "right": 1920, + "width": 1543, + "height": 28, + "lastFieldRight": 3030.921875, + "scrollW": 2659, + "clientW": 1541, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 24 + }, + "barReplaced": { + "left": 377, + "right": 534.984375, + "width": 157.984375, + "height": 28, + "lastFieldRight": 527.984375, + "scrollW": 156, + "clientW": 156, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1920, + "fieldCount": 1 + }, + "bar1440": { + "left": 377, + "right": 906.671875, + "width": 529.671875, + "height": 28, + "lastFieldRight": 899.671875, + "scrollW": 528, + "clientW": 528, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1440, + "fieldCount": 4 + }, + "bar1080": { + "left": 203, + "right": 732.671875, + "width": 529.671875, + "height": 28, + "lastFieldRight": 725.671875, + "scrollW": 528, + "clientW": 528, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 1080, + "fieldCount": 4 + }, + "bar768": { + "left": 306, + "right": 768, + "width": 462, + "height": 28, + "lastFieldRight": 828.671875, + "scrollW": 528, + "clientW": 460, + "borderBottom": "1px rgb(8, 37, 28)", + "radius": "6px/6px", + "bg": "rgb(39, 31, 19)", + "headerH": 49, + "headerRight": 768, + "fieldCount": 4 + }, + "tool": { + "border": "0px rgb(0, 0, 0)", + "outline": "none", + "bg": "rgba(0, 0, 0, 0)", + "w": 29, + "h": 27.125, + "imgs": [ + { + "cls": "hm-sw-property__tool-default", + "w": 29, + "h": 27.125, + "src": "data:image/svg+xml,%3csvg%20width='29'%20height='27.129'%20v" + }, + { + "cls": "hm-sw-property__tool-hover", + "w": 29, + "h": 27.125, + "src": "data:image/svg+xml,%3csvg%20width='29'%20height='27.129'%20v" + } + ] + }, + "toolPixels": { + "def": { + "white": 0, + "outer": [ + [ + 2, + 7, + 5 + ], + [ + 2, + 6, + 5 + ], + [ + 17, + 67, + 52 + ], + [ + 17, + 67, + 52 + ] + ] + }, + "hov": { + "white": 0, + "outer": [ + [ + 2, + 7, + 5 + ], + [ + 2, + 6, + 5 + ], + [ + 17, + 67, + 52 + ], + [ + 17, + 67, + 52 + ] + ] + }, + "act": { + "white": 0, + "outer": [ + [ + 2, + 7, + 5 + ], + [ + 2, + 6, + 5 + ], + [ + 17, + 67, + 52 + ], + [ + 17, + 67, + 52 + ] + ] + }, + "pressed": "true" + }, + "dropdown-layer": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + }, + "dropdown-color": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + }, + "dropdown-text-style": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + }, + "dropdown-dimension-style": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "0", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + }, + "dropdown-line-style": { + "closedHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "openIdle": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "openHover": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": "true" + }, + "closedAgain": { + "after": "0", + "color": "rgb(246, 244, 242)", + "expanded": null + }, + "restored": { + "after": "1", + "color": "rgb(255, 198, 0)", + "expanded": null + }, + "rowChanged": true, + "detailChanged": true + }, + "gaugeInitial": { + "value": "0.25", + "fill": "0.25", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)", + "left": [ + 250, + 63, + 63 + ], + "right": [ + 199, + 189, + 169 + ], + "width": 86 + }, + "gaugeKeyboard": { + "value": "0.65", + "fill": "0.65", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)", + "left": [ + 254, + 64, + 64 + ], + "right": [ + 199, + 189, + 169 + ], + "width": 86 + }, + "gaugeCommitted": "0.65", + "gaugeMax": { + "value": "1", + "fill": "1", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)", + "left": [ + 250, + 63, + 63 + ], + "right": [ + 160, + 16, + 16 + ], + "width": 86 + }, + "gaugeMin": { + "value": "0", + "fill": "0", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)", + "left": [ + 138, + 40, + 40 + ], + "right": [ + 199, + 189, + 169 + ], + "width": 86 + }, + "gaugeExternal": { + "value": "0.5", + "fill": "0.5", + "track": "linear-gradient(#aea28b 0 1px, #c3b9a4 1px 2px, #c7bda9 2px 4px, #b7ac96 4px 5px, #ac9e84 5px)" + }, + "property-panel-none": [ + 314, + 256 + ], + "property-panel-all": [ + 314, + 361 + ], + "property-panel-circle": [ + 314, + 658 + ], + "property-panel-expanded": [ + 314, + 754 + ] + } +} \ No newline at end of file diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-close/run-default.png b/docs/sw/property-panel-comparison-qa/legacy-property-close/run-default.png new file mode 100644 index 0000000..cc1eb1d Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-close/run-default.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-close/run-hover.png b/docs/sw/property-panel-comparison-qa/legacy-property-close/run-hover.png new file mode 100644 index 0000000..925ce65 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-close/run-hover.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-close/run-result.json b/docs/sw/property-panel-comparison-qa/legacy-property-close/run-result.json new file mode 100644 index 0000000..f85c6fa --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/legacy-property-close/run-result.json @@ -0,0 +1,81 @@ +{ + "label": "run", + "checks": [ + { + "name": "size 44 x 30, top-right of the panel", + "status": "PASS", + "data": { + "w": 44, + "h": 30, + "right": 1, + "top": 1, + "imgs": [ + [ + "hm-sw-property__close-default", + 44, + 30 + ], + [ + "hm-sw-property__close-hover", + 44, + 30 + ] + ] + } + }, + { + "name": "Default: no canvas-light pixels on the button edge / corner", + "status": "PASS", + "data": { + "bright": 0, + "where": [] + } + }, + { + "name": "Hover: hover asset shown, no canvas-light pixels on the edge / corner", + "status": "PASS", + "data": { + "vis": [ + "hidden", + "visible" + ], + "bright": 0, + "where": [] + } + }, + { + "name": "click closes the panel, focus back on 속성창 trigger", + "status": "PASS", + "data": { + "open": false, + "focusTrigger": true, + "log": "legacyToggle → open(true) → open(false)" + } + }, + { + "name": "Escape closes the panel, focus back on 속성창 trigger", + "status": "PASS", + "data": { + "open": false, + "focusTrigger": true, + "log": "rue) → open(false) → legacyToggle → open(true) → open(false)" + } + }, + { + "name": "no console / page errors", + "status": "PASS", + "data": [] + } + ], + "errors": [], + "pixels": { + "def": { + "bright": 0, + "where": [] + }, + "hov": { + "bright": 0, + "where": [] + } + } +} \ No newline at end of file diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-compare.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-compare.png new file mode 100644 index 0000000..fb0a55b Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-compare.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-default.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-default.png new file mode 100644 index 0000000..a0fe15c Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-default.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-hover-scale.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-hover-scale.png new file mode 100644 index 0000000..6293475 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-hover-scale.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-color.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-color.png new file mode 100644 index 0000000..afd082e Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-color.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-layer-mixed.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-layer-mixed.png new file mode 100644 index 0000000..128ce34 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-layer-mixed.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-layer.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-layer.png new file mode 100644 index 0000000..a54a187 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-layer.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-line.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-line.png new file mode 100644 index 0000000..ea3b391 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-line.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-scale.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-scale.png new file mode 100644 index 0000000..e49e4cc Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-scale.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-thickness.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-thickness.png new file mode 100644 index 0000000..b0d60e9 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-thickness.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-weight.png b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-weight.png new file mode 100644 index 0000000..861b316 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-on-weight.png differ diff --git a/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-result.json b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-result.json new file mode 100644 index 0000000..fab1478 --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/legacy-property-fields/run-result.json @@ -0,0 +1,813 @@ +{ + "label": "run", + "checks": [ + { + "name": "Default layer-mixed: 200 x 28, radius 2, no border / surface", + "status": "PASS", + "data": { + "x": 97, + "y": 371.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopLeftRadius": "2px" + } + }, + { + "name": "Default layer: 200 x 28, radius 2, no border / surface", + "status": "PASS", + "data": { + "x": 97, + "y": 403.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopLeftRadius": "2px" + } + }, + { + "name": "Default color: 200 x 28, radius 2, no border / surface", + "status": "PASS", + "data": { + "x": 97, + "y": 435.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopLeftRadius": "2px" + } + }, + { + "name": "Default line: 200 x 28, radius 2, no border / surface", + "status": "PASS", + "data": { + "x": 97, + "y": 467.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopLeftRadius": "2px" + } + }, + { + "name": "Default scale: 200 x 28, radius 2, no border / surface", + "status": "PASS", + "data": { + "x": 97, + "y": 531.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopLeftRadius": "2px" + } + }, + { + "name": "Default link: 200 x 28, radius 2, no border / surface", + "status": "PASS", + "data": { + "x": 97, + "y": 595.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopLeftRadius": "2px" + } + }, + { + "name": "Default thickness: 200 x 28, radius 2, no border / surface", + "status": "PASS", + "data": { + "x": 97, + "y": 627.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopLeftRadius": "2px" + } + }, + { + "name": "Default material: 200 x 28, radius 2, no border / surface", + "status": "PASS", + "data": { + "x": 97, + "y": 659.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopLeftRadius": "2px" + } + }, + { + "name": "Default weight: compact 28px hug field (pl 6 / pr 4 incl. border), no border", + "status": "PASS", + "data": { + "x": 97, + "y": 499.5, + "w": 39.23, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "paddingLeft": "5px", + "paddingRight": "3px" + } + }, + { + "name": "Default opacity: compact 28px hug field (pl 6 / pr 4 incl. border), no border", + "status": "PASS", + "data": { + "x": 97, + "y": 563.5, + "w": 39.23, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "paddingLeft": "5px", + "paddingRight": "3px" + } + }, + { + "name": "Typography: value #E60403 14px, unit #000 12px", + "status": "PASS", + "data": { + "value": [ + "rgb(230, 4, 3)", + "14px" + ], + "unit": [ + "rgb(0, 0, 0)", + "12px" + ] + } + }, + { + "name": "Hover layer-mixed: rgba(33,29,19,.4) border, 28px kept, value not moved", + "status": "PASS", + "data": { + "x": 97, + "y": 371.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "before": [ + 105, + 377.5 + ], + "after": [ + 105, + 377.5 + ] + } + }, + { + "name": "Mouse Leave layer-mixed: back to Default", + "status": "PASS", + "data": { + "x": 97, + "y": 371.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover layer: rgba(33,29,19,.4) border, 28px kept, value not moved", + "status": "PASS", + "data": { + "x": 97, + "y": 403.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "before": [ + 105, + 409.5 + ], + "after": [ + 105, + 409.5 + ] + } + }, + { + "name": "Mouse Leave layer: back to Default", + "status": "PASS", + "data": { + "x": 97, + "y": 403.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover color: rgba(33,29,19,.4) border, 28px kept, value not moved, divider shown", + "status": "PASS", + "data": { + "x": 98, + "y": 436.5, + "w": 114, + "h": 26, + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "before": [ + 105, + 436.5 + ], + "after": [ + 105, + 436.5 + ], + "borderRightColor": "rgba(33, 29, 19, 0.4)" + } + }, + { + "name": "Mouse Leave color: back to Default", + "status": "PASS", + "data": { + "x": 97, + "y": 435.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover line: rgba(33,29,19,.4) border, 28px kept, value not moved", + "status": "PASS", + "data": { + "x": 97, + "y": 467.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "before": [ + 105, + 473.5 + ], + "after": [ + 105, + 473.5 + ] + } + }, + { + "name": "Mouse Leave line: back to Default", + "status": "PASS", + "data": { + "x": 97, + "y": 467.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover scale: rgba(33,29,19,.4) border, 28px kept, value not moved", + "status": "PASS", + "data": { + "x": 97, + "y": 531.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "before": [ + 105, + 532.5 + ], + "after": [ + 105, + 532.5 + ] + } + }, + { + "name": "Mouse Leave scale: back to Default", + "status": "PASS", + "data": { + "x": 97, + "y": 531.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover link: rgba(33,29,19,.4) border, 28px kept, value not moved", + "status": "PASS", + "data": { + "x": 97, + "y": 595.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "before": [ + 105, + 596.5 + ], + "after": [ + 105, + 596.5 + ] + } + }, + { + "name": "Mouse Leave link: back to Default", + "status": "PASS", + "data": { + "x": 97, + "y": 595.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover thickness: rgba(33,29,19,.4) border, 28px kept, value not moved", + "status": "PASS", + "data": { + "x": 97, + "y": 627.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "before": [ + 105, + 628.5 + ], + "after": [ + 105, + 628.5 + ] + } + }, + { + "name": "Mouse Leave thickness: back to Default", + "status": "PASS", + "data": { + "x": 97, + "y": 627.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover material: rgba(33,29,19,.4) border, 28px kept, value not moved", + "status": "PASS", + "data": { + "x": 97, + "y": 659.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "backgroundColor": "rgba(0, 0, 0, 0)", + "before": [ + 105, + 660.5 + ], + "after": [ + 105, + 660.5 + ] + } + }, + { + "name": "Mouse Leave material: back to Default", + "status": "PASS", + "data": { + "x": 97, + "y": 659.5, + "w": 200, + "h": 28, + "borderTopColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover / Leave weight compact", + "status": "PASS", + "data": { + "hover": "rgba(33, 29, 19, 0.4)", + "leave": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Hover / Leave opacity compact", + "status": "PASS", + "data": { + "hover": "rgba(33, 29, 19, 0.4)", + "leave": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "On(편집) scale: #0F0D0A, border, unit #FFF, focused input with red caret + outline", + "status": "PASS", + "data": { + "x": 97, + "y": 531.5, + "w": 200, + "h": 28, + "backgroundColor": "rgb(15, 13, 10)", + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "unit": "rgb(255, 255, 255)", + "focused": true, + "caret": "rgb(230, 4, 3)", + "shadow": true + } + }, + { + "name": "On(편집) thickness: #0F0D0A, border, unit #FFF, focused input with red caret + outline", + "status": "PASS", + "data": { + "x": 97, + "y": 627.5, + "w": 200, + "h": 28, + "backgroundColor": "rgb(15, 13, 10)", + "borderTopColor": "rgba(33, 29, 19, 0.4)", + "unit": "rgb(255, 255, 255)", + "focused": true, + "caret": "rgb(230, 4, 3)", + "shadow": true + } + }, + { + "name": "Enter: 선축적 2 → validated, 4 decimals committed", + "status": "PASS", + "data": "property(scale, 2.0000)" + }, + { + "name": "Escape: draft cancelled (2.0000 restored, no callback)", + "status": "PASS", + "data": "2.0000" + }, + { + "name": "On(편집) 선가중치 compact: #0F0D0A", + "status": "PASS", + "data": { + "x": 97, + "y": 499.5, + "w": 43.03, + "h": 28, + "backgroundColor": "rgb(15, 13, 10)" + } + }, + { + "name": "Invalid 선가중치 -1 (min 0): restored, no callback", + "status": "PASS", + "data": "0.25" + }, + { + "name": "선가중치 0.5 committed", + "status": "PASS", + "data": "property(scale, 2.0000) → property(weight, 0.5)" + }, + { + "name": "하이퍼링크 focus: no On surface (Figma has no On), editable", + "status": "PASS", + "data": { + "x": 97, + "y": 595.5, + "w": 200, + "h": 28, + "backgroundColor": "rgba(0, 0, 0, 0)", + "borderTopColor": "rgba(33, 29, 19, 0.4)" + } + }, + { + "name": "하이퍼링크 commit via host callback", + "status": "PASS", + "data": "property(scale, 2.0000) → property(weight, 0.5) → property(link, http://a)" + }, + { + "name": "재료: read-only, no On", + "status": "PASS", + "data": { + "x": 97, + "y": 659.5, + "w": 200, + "h": 28, + "backgroundColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "Layer On: #211D13 field, 234 wide list, right edges meet, starts at field bottom", + "status": "PASS", + "data": { + "f": { + "x": 97, + "y": 403.5, + "w": 200, + "h": 28, + "backgroundColor": "rgb(33, 29, 19)", + "borderTopColor": "rgba(33, 29, 19, 0.4)" + }, + "d": { + "x": 63, + "y": 431.5, + "w": 234, + "h": 250 + } + } + }, + { + "name": "Layer list rows 30px, footer 40px, height = rows*30+40", + "status": "PASS", + "data": { + "rows": 7, + "row": 30, + "footer": 40, + "h": 250 + } + }, + { + "name": "Layer current row marked (0_Layer_Cludmark)", + "status": "PASS", + "data": null + }, + { + "name": "Bulb toggle: callback only, list stays open, row not selected", + "status": "PASS", + "data": "property(scale, 2.0000) → property(weight, 0.5) → property(link, http://a) → layer.visible(Sample-Wall, true)" + }, + { + "name": "Row select: property(layer, CC-D GNL), closes, field shows value", + "status": "PASS", + "data": "property(scale, 2.0000) → property(weight, 0.5) → property(link, http://a) → layer.visible(Sample-Wall, true) → property(layer, CC-D GNL)" + }, + { + "name": "Close keeps the value and focus returns to the field", + "status": "PASS", + "data": null + }, + { + "name": "다양함: text 다양함, no current row in list", + "status": "PASS", + "data": null + }, + { + "name": "Escape closes the layer list; panel stays", + "status": "PASS", + "data": null + }, + { + "name": "Host data: 다양함 → 단일 값 (0_Layer_Cludmark)", + "status": "PASS", + "data": "0_Layer_Cludmark" + }, + { + "name": "External value change shown (CC-D GNL)", + "status": "PASS", + "data": null + }, + { + "name": "Keyboard: ArrowDown opens + focuses list, Escape closes to trigger", + "status": "PASS", + "data": null + }, + { + "name": "Outside click closes", + "status": "PASS", + "data": null + }, + { + "name": "Line style On: #211D13, (ByL) #D4CBBD, 3 columns, right edges meet (or shifted to the 4px screen edge when no room)", + "status": "PASS", + "data": { + "f": { + "x": 97, + "y": 485.5, + "w": 200, + "h": 28, + "backgroundColor": "rgb(33, 29, 19)" + }, + "d": { + "x": 4, + "y": 513.5, + "w": 471.19, + "h": 190 + }, + "cols": [ + 187.19, + 142, + 142 + ] + } + }, + { + "name": "Line style drop 466 x 190 (type column grows only for wider font names)", + "status": "PASS", + "data": { + "w": 471.19, + "h": 190, + "cols": [ + 187.19, + 142, + 142 + ] + } + }, + { + "name": "Weight column: callback only, stays open", + "status": "PASS", + "data": "property(scale, 2.0000) → property(weight, 0.5) → property(link, http://a) → layer.visible(Sample-Wall, true) → property(layer, CC-D GNL) → lineWeight(w-byblock)" + }, + { + "name": "Line type select: property(line, CENTER), closes, preview = CENTER pattern (4 segments)", + "status": "PASS", + "data": { + "segs": 4 + } + }, + { + "name": "Figma sample 255,259,0 shown as host text, swatch from host", + "status": "PASS", + "data": null + }, + { + "name": "Color On: dropdown 192 wide, left edges meet, RGB area #211D13 + divider", + "status": "PASS", + "data": { + "f": { + "x": 97, + "y": 435.5, + "w": 200, + "h": 28 + }, + "d": { + "x": 97, + "y": 463.5, + "w": 192, + "h": 158 + }, + "left": { + "x": 98, + "y": 436.5, + "w": 114, + "h": 26, + "backgroundColor": "rgb(33, 29, 19)", + "borderRightColor": "rgba(33, 29, 19, 0.4)" + } + } + }, + { + "name": "Color dropdown height 158 (Figma)", + "status": "PASS", + "data": 158 + }, + { + "name": "ByBlock: callback, required single choice (ByBlock pressed, ByLayer not)", + "status": "PASS", + "data": null + }, + { + "name": "Clicking the pressed mode is a no-op", + "status": "PASS", + "data": null + }, + { + "name": "Chip: property(color, 241,4,4)", + "status": "PASS", + "data": "property(scale, 2.0000) → property(weight, 0.5) → property(link, http://a) → layer.visible(Sample-Wall, true) → property(layer, CC-D GNL) → lineWeight(w-byblock) → property(line, CENTER) → colorMode(byBlock) → property(color, 241,4,4)" + }, + { + "name": "Out-of-range 255,259,0 rejected (no callback, restored)", + "status": "PASS", + "data": "241,4,4" + }, + { + "name": "Valid RGB committed normalized (1,2,3)", + "status": "PASS", + "data": "property(scale, 2.0000) → property(weight, 0.5) → property(link, http://a) → layer.visible(Sample-Wall, true) → property(layer, CC-D GNL) → lineWeight(w-byblock) → property(line, CENTER) → colorMode(byBlock) → property(color, 241,4,4) → property(color, 1,2,3)" + }, + { + "name": "btn_colorize: host callback, dropdown closes", + "status": "PASS", + "data": null + }, + { + "name": "Field RGB 300,0,0 rejected", + "status": "PASS", + "data": "1,2,3" + }, + { + "name": "Escape #1 cancels draft, dropdown still open", + "status": "PASS", + "data": null + }, + { + "name": "Escape #2 closes the dropdown, panel stays", + "status": "PASS", + "data": null + }, + { + "name": "ReadOnly 두께: no On; ReadOnly 레이어: no dropdown", + "status": "PASS", + "data": { + "x": 97, + "y": 647, + "w": 200, + "h": 28, + "backgroundColor": "rgba(0, 0, 0, 0)" + } + }, + { + "name": "ReadOnly keeps Hover border", + "status": "PASS", + "data": null + }, + { + "name": "Disabled 색상: no dropdown; Disabled 선축적: no hover border", + "status": "PASS", + "data": null + }, + { + "name": "External value / unit props: 선축적 2.5000, 두께 cm", + "status": "PASS", + "data": null + }, + { + "name": "Dynamic rows: added at the end, removed row gone, order kept", + "status": "PASS", + "data": [ + "layer-mixed", + "layer", + "color", + "line", + "weight", + "scale", + "opacity", + "thickness", + "material", + "extra-10" + ] + }, + { + "name": "Without menus: line types from options only (1 column), no crash", + "status": "PASS", + "data": 1 + }, + { + "name": "Pinned Hover specimen uses the same border", + "status": "PASS", + "data": "rgba(33, 29, 19, 0.4)" + }, + { + "name": "4 panel states: 314 x 256 / 361 / 658 / 754", + "status": "PASS", + "data": [ + [ + "none", + 314, + 256 + ], + [ + "all", + 314, + 361 + ], + [ + "circle", + 314, + 658 + ], + [ + "expanded", + 314, + 754 + ] + ] + }, + { + "name": "Header-hosted panel: layer list attached; Escape closes list only", + "status": "PASS", + "data": { + "hosted": { + "right": 0, + "top": 0, + "panelOpen": true + }, + "stillOpen": 1 + } + }, + { + "name": "no console / page errors", + "status": "PASS", + "data": [] + } + ], + "errors": [] +} \ No newline at end of file diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-1280-end.png b/docs/sw/property-panel-comparison-qa/verify/compare-1280-end.png new file mode 100644 index 0000000..fca3565 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-1280-end.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-1280-top.png b/docs/sw/property-panel-comparison-qa/verify/compare-1280-top.png new file mode 100644 index 0000000..e6ad54f Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-1280-top.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-1440-end.png b/docs/sw/property-panel-comparison-qa/verify/compare-1440-end.png new file mode 100644 index 0000000..d3d82b0 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-1440-end.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-1440-top.png b/docs/sw/property-panel-comparison-qa/verify/compare-1440-top.png new file mode 100644 index 0000000..0e64c38 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-1440-top.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-390-end.png b/docs/sw/property-panel-comparison-qa/verify/compare-390-end.png new file mode 100644 index 0000000..9fc5f41 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-390-end.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-390-top.png b/docs/sw/property-panel-comparison-qa/verify/compare-390-top.png new file mode 100644 index 0000000..43b1520 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-390-top.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-768-end.png b/docs/sw/property-panel-comparison-qa/verify/compare-768-end.png new file mode 100644 index 0000000..4686f20 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-768-end.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-768-top.png b/docs/sw/property-panel-comparison-qa/verify/compare-768-top.png new file mode 100644 index 0000000..f3f43c6 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-768-top.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/compare-after-interaction.png b/docs/sw/property-panel-comparison-qa/verify/compare-after-interaction.png new file mode 100644 index 0000000..61628a9 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/compare-after-interaction.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/dropdown-all.png b/docs/sw/property-panel-comparison-qa/verify/dropdown-all.png new file mode 100644 index 0000000..3698614 Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/dropdown-all.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/dropdown-expanded.png b/docs/sw/property-panel-comparison-qa/verify/dropdown-expanded.png new file mode 100644 index 0000000..f8edcab Binary files /dev/null and b/docs/sw/property-panel-comparison-qa/verify/dropdown-expanded.png differ diff --git a/docs/sw/property-panel-comparison-qa/verify/result.json b/docs/sw/property-panel-comparison-qa/verify/result.json new file mode 100644 index 0000000..44dcc50 --- /dev/null +++ b/docs/sw/property-panel-comparison-qa/verify/result.json @@ -0,0 +1,1515 @@ +{ + "mode": "verify", + "base": "static", + "browser": "155.0.8059.80", + "checks": [ + { + "name": "inventory: 24 -> 19 SW Stories, 343 -> 338 total, only 5 approved retirements", + "status": "PASS", + "data": { + "before": [ + 343, + 24 + ], + "after": [ + 338, + 19 + ] + } + }, + { + "name": "inventory: retained SW Story IDs, names, titles, tags unchanged", + "status": "PASS", + "data": { + "retained": 19 + } + }, + { + "name": "inventory: compare Story keeps its ID and name", + "status": "PASS" + }, + { + "name": "inventory: Dropdown Story keeps ID / name / title", + "status": "PASS" + }, + { + "name": "390: four states in original order with captions", + "status": "PASS", + "data": [ + [ + "none", + "선택된 객체 없음" + ], + [ + "all", + "전체 객체 선택" + ], + [ + "circle", + "원 1개 선택" + ], + [ + "expanded", + "모든 항목 펼침" + ] + ] + }, + { + "name": "390: original panel sizes 314 × 256 / 361 / 658 / 754", + "status": "PASS", + "data": [ + [ + "none", + 314, + 256 + ], + [ + "all", + 314, + 361 + ], + [ + "circle", + 314, + 658 + ], + [ + "expanded", + 314, + 754 + ] + ] + }, + { + "name": "390: 2 columns × 2 rows by coordinates", + "status": "PASS", + "data": { + "a": { + "x": 16, + "y": 212.5, + "w": 314, + "h": 322, + "right": 330, + "bottom": 534.5 + }, + "b": { + "x": 354, + "y": 212.5, + "w": 314, + "h": 427, + "right": 668, + "bottom": 639.5 + }, + "c": { + "x": 16, + "y": 663.5, + "w": 314, + "h": 724, + "right": 330, + "bottom": 1387.5 + }, + "d": { + "x": 354, + "y": 663.5, + "w": 314, + "h": 820, + "right": 668, + "bottom": 1483.5 + } + } + }, + { + "name": "390: consistent 24px column and row gaps", + "status": "PASS", + "data": { + "colGap": 24, + "colGap2": 24, + "rowGap": 24 + } + }, + { + "name": "390: page itself does not scroll (no document overflow)", + "status": "PASS", + "data": { + "scrollW": 390, + "clientW": 390, + "scrollH": 900, + "clientH": 900 + } + }, + { + "name": "390: Inner scroller scrolls vertically to the 754px panel", + "status": "PASS", + "data": { + "x": 16, + "y": 212.5, + "w": 358, + "h": 671.5, + "right": 374, + "bottom": 884, + "scrollW": 652, + "clientW": 358, + "scrollH": 1271, + "clientH": 672 + } + }, + { + "name": "390: bottom of the 754px panel reachable, not clipped", + "status": "PASS", + "data": { + "scrollTop": 599, + "scrollLeft": 294, + "panels": [ + { + "bottom": -64.5, + "right": 36 + }, + { + "bottom": 40.5, + "right": 374 + }, + { + "bottom": 788.5, + "right": 36 + }, + { + "bottom": 884.5, + "right": 374 + } + ], + "sBottom": 884, + "sRight": 374 + } + }, + { + "name": "390: narrow Inner scrolls horizontally, keeping 2 columns", + "status": "PASS", + "data": { + "scrollW": 652, + "clientW": 358, + "end": { + "scrollTop": 599, + "scrollLeft": 294, + "panels": [ + { + "bottom": -64.5, + "right": 36 + }, + { + "bottom": 40.5, + "right": 374 + }, + { + "bottom": 788.5, + "right": 36 + }, + { + "bottom": 884.5, + "right": 374 + } + ], + "sBottom": 884, + "sRight": 374 + } + } + }, + { + "name": "768: four states in original order with captions", + "status": "PASS", + "data": [ + [ + "none", + "선택된 객체 없음" + ], + [ + "all", + "전체 객체 선택" + ], + [ + "circle", + "원 1개 선택" + ], + [ + "expanded", + "모든 항목 펼침" + ] + ] + }, + { + "name": "768: original panel sizes 314 × 256 / 361 / 658 / 754", + "status": "PASS", + "data": [ + [ + "none", + 314, + 256 + ], + [ + "all", + 314, + 361 + ], + [ + "circle", + 314, + 658 + ], + [ + "expanded", + 314, + 754 + ] + ] + }, + { + "name": "768: 2 columns × 2 rows by coordinates", + "status": "PASS", + "data": { + "a": { + "x": 23.046875, + "y": 199.53125, + "w": 314, + "h": 322, + "right": 337.046875, + "bottom": 521.53125 + }, + "b": { + "x": 361.046875, + "y": 199.53125, + "w": 314, + "h": 427, + "right": 675.046875, + "bottom": 626.53125 + }, + "c": { + "x": 23.046875, + "y": 650.53125, + "w": 314, + "h": 724, + "right": 337.046875, + "bottom": 1374.53125 + }, + "d": { + "x": 361.046875, + "y": 650.53125, + "w": 314, + "h": 820, + "right": 675.046875, + "bottom": 1470.53125 + } + } + }, + { + "name": "768: consistent 24px column and row gaps", + "status": "PASS", + "data": { + "colGap": 24, + "colGap2": 24, + "rowGap": 24 + } + }, + { + "name": "768: page itself does not scroll (no document overflow)", + "status": "PASS", + "data": { + "scrollW": 768, + "clientW": 768, + "scrollH": 900, + "clientH": 900 + } + }, + { + "name": "768: Inner scroller scrolls vertically to the 754px panel", + "status": "PASS", + "data": { + "x": 23.046875, + "y": 199.53125, + "w": 721.90625, + "h": 677.4375, + "right": 744.953125, + "bottom": 876.96875, + "scrollW": 722, + "clientW": 722, + "scrollH": 1271, + "clientH": 677 + } + }, + { + "name": "768: bottom of the 754px panel reachable, not clipped", + "status": "PASS", + "data": { + "scrollTop": 594, + "scrollLeft": 0, + "panels": [ + { + "bottom": -72.46875, + "right": 337.046875 + }, + { + "bottom": 32.53125, + "right": 675.046875 + }, + { + "bottom": 780.53125, + "right": 337.046875 + }, + { + "bottom": 876.53125, + "right": 675.046875 + } + ], + "sBottom": 876.96875, + "sRight": 744.953125 + } + }, + { + "name": "768: both columns fit without horizontal scroll", + "status": "PASS", + "data": { + "x": 23.046875, + "y": 199.53125, + "w": 721.90625, + "h": 677.4375, + "right": 744.953125, + "bottom": 876.96875, + "scrollW": 722, + "clientW": 722, + "scrollH": 1271, + "clientH": 677 + } + }, + { + "name": "1280: four states in original order with captions", + "status": "PASS", + "data": [ + [ + "none", + "선택된 객체 없음" + ], + [ + "all", + "전체 객체 선택" + ], + [ + "circle", + "원 1개 선택" + ], + [ + "expanded", + "모든 항목 펼침" + ] + ] + }, + { + "name": "1280: original panel sizes 314 × 256 / 361 / 658 / 754", + "status": "PASS", + "data": [ + [ + "none", + 314, + 256 + ], + [ + "all", + 314, + 361 + ], + [ + "circle", + 314, + 658 + ], + [ + "expanded", + 314, + 754 + ] + ] + }, + { + "name": "1280: 2 columns × 2 rows by coordinates", + "status": "PASS", + "data": { + "a": { + "x": 38.40625, + "y": 214.890625, + "w": 314, + "h": 322, + "right": 352.40625, + "bottom": 536.890625 + }, + "b": { + "x": 376.40625, + "y": 214.890625, + "w": 314, + "h": 427, + "right": 690.40625, + "bottom": 641.890625 + }, + "c": { + "x": 38.40625, + "y": 665.890625, + "w": 314, + "h": 724, + "right": 352.40625, + "bottom": 1389.890625 + }, + "d": { + "x": 376.40625, + "y": 665.890625, + "w": 314, + "h": 820, + "right": 690.40625, + "bottom": 1485.890625 + } + } + }, + { + "name": "1280: consistent 24px column and row gaps", + "status": "PASS", + "data": { + "colGap": 24, + "colGap2": 24, + "rowGap": 24 + } + }, + { + "name": "1280: page itself does not scroll (no document overflow)", + "status": "PASS", + "data": { + "scrollW": 1280, + "clientW": 1280, + "scrollH": 900, + "clientH": 900 + } + }, + { + "name": "1280: Inner scroller scrolls vertically to the 754px panel", + "status": "PASS", + "data": { + "x": 38.40625, + "y": 214.890625, + "w": 1203.1875, + "h": 646.71875, + "right": 1241.59375, + "bottom": 861.609375, + "scrollW": 1203, + "clientW": 1203, + "scrollH": 1271, + "clientH": 647 + } + }, + { + "name": "1280: bottom of the 754px panel reachable, not clipped", + "status": "PASS", + "data": { + "scrollTop": 624, + "scrollLeft": 0, + "panels": [ + { + "bottom": -87.109375, + "right": 352.40625 + }, + { + "bottom": 17.890625, + "right": 690.40625 + }, + { + "bottom": 765.890625, + "right": 352.40625 + }, + { + "bottom": 861.890625, + "right": 690.40625 + } + ], + "sBottom": 861.609375, + "sRight": 1241.59375 + } + }, + { + "name": "1280: both columns fit without horizontal scroll", + "status": "PASS", + "data": { + "x": 38.40625, + "y": 214.890625, + "w": 1203.1875, + "h": 646.71875, + "right": 1241.59375, + "bottom": 861.609375, + "scrollW": 1203, + "clientW": 1203, + "scrollH": 1271, + "clientH": 647 + } + }, + { + "name": "1440: four states in original order with captions", + "status": "PASS", + "data": [ + [ + "none", + "선택된 객체 없음" + ], + [ + "all", + "전체 객체 선택" + ], + [ + "circle", + "원 1개 선택" + ], + [ + "expanded", + "모든 항목 펼침" + ] + ] + }, + { + "name": "1440: original panel sizes 314 × 256 / 361 / 658 / 754", + "status": "PASS", + "data": [ + [ + "none", + 314, + 256 + ], + [ + "all", + 314, + 361 + ], + [ + "circle", + 314, + 658 + ], + [ + "expanded", + 314, + 754 + ] + ] + }, + { + "name": "1440: 2 columns × 2 rows by coordinates", + "status": "PASS", + "data": { + "a": { + "x": 120, + "y": 216.5, + "w": 314, + "h": 322, + "right": 434, + "bottom": 538.5 + }, + "b": { + "x": 458, + "y": 216.5, + "w": 314, + "h": 427, + "right": 772, + "bottom": 643.5 + }, + "c": { + "x": 120, + "y": 667.5, + "w": 314, + "h": 724, + "right": 434, + "bottom": 1391.5 + }, + "d": { + "x": 458, + "y": 667.5, + "w": 314, + "h": 820, + "right": 772, + "bottom": 1487.5 + } + } + }, + { + "name": "1440: consistent 24px column and row gaps", + "status": "PASS", + "data": { + "colGap": 24, + "colGap2": 24, + "rowGap": 24 + } + }, + { + "name": "1440: page itself does not scroll (no document overflow)", + "status": "PASS", + "data": { + "scrollW": 1440, + "clientW": 1440, + "scrollH": 900, + "clientH": 900 + } + }, + { + "name": "1440: Inner scroller scrolls vertically to the 754px panel", + "status": "PASS", + "data": { + "x": 120, + "y": 216.5, + "w": 1200, + "h": 643.5, + "right": 1320, + "bottom": 860, + "scrollW": 1200, + "clientW": 1200, + "scrollH": 1271, + "clientH": 644 + } + }, + { + "name": "1440: bottom of the 754px panel reachable, not clipped", + "status": "PASS", + "data": { + "scrollTop": 627, + "scrollLeft": 0, + "panels": [ + { + "bottom": -88.5, + "right": 434 + }, + { + "bottom": 16.5, + "right": 772 + }, + { + "bottom": 764.5, + "right": 434 + }, + { + "bottom": 860.5, + "right": 772 + } + ], + "sBottom": 860, + "sRight": 1320 + } + }, + { + "name": "1440: both columns fit without horizontal scroll", + "status": "PASS", + "data": { + "x": 120, + "y": 216.5, + "w": 1200, + "h": 643.5, + "right": 1320, + "bottom": 860, + "scrollW": 1200, + "clientW": 1200, + "scrollH": 1271, + "clientH": 644 + } + }, + { + "name": "Input Enter commits via callback; only that panel changes", + "status": "PASS", + "data": { + "circle": "5.5", + "expanded": "4.0526", + "log": "circle: property(radius, 5.5)" + } + }, + { + "name": "Input Escape cancels the edit", + "status": "PASS", + "data": "5.5" + }, + { + "name": "Focus stays inside the edited panel after Escape", + "status": "PASS" + }, + { + "name": "Tab moves focus within the page (no trap / loss to body)", + "status": "PASS" + }, + { + "name": "Dropdown all: opens, has items, fully inside the viewport", + "status": "PASS", + "data": { + "x": 521, + "y": 353.5, + "w": 234, + "h": 250, + "bottom": 603.5, + "right": 755, + "vw": 1440, + "vh": 900, + "items": 36 + } + }, + { + "name": "Dropdown all: Escape closes and returns focus to its field", + "status": "PASS" + }, + { + "name": "Dropdown expanded: opens, has items, fully inside the viewport", + "status": "PASS", + "data": { + "x": 521, + "y": 526.5, + "w": 234, + "h": 250, + "bottom": 776.5, + "right": 755, + "vw": 1440, + "vh": 900, + "items": 36 + } + }, + { + "name": "Dropdown follows the Inner scroller (stays attached to its field)", + "status": "PASS", + "data": { + "moved": 120, + "before": { + "x": 521, + "y": 526.5, + "w": 234, + "h": 250, + "bottom": 776.5, + "right": 755, + "vw": 1440, + "vh": 900, + "items": 36 + }, + "after": { + "dTop": 406.5, + "dBottom": 656.5, + "fTop": 657.5, + "fBottom": 683.5 + } + } + }, + { + "name": "Dropdown expanded: Escape closes and returns focus to its field", + "status": "PASS" + }, + { + "name": "Dropdown selection commits via callback in its own panel only", + "status": "PASS", + "data": "circle: property(radius, 5.5) → all: property(layer, CC-D GNL)" + }, + { + "name": "Tool toggle in one panel does not affect the others", + "status": "PASS" + }, + { + "name": "Group expand is per panel and collapses back to 256", + "status": "PASS", + "data": { + "h0": 256, + "h1": 352, + "h2": 256, + "allH": 361 + } + }, + { + "name": "Close button calls onClose of that panel", + "status": "PASS", + "data": "circle: property(radius, 5.5) → all: property(layer, CC-D GNL) → circle: close" + }, + { + "name": "Overview: Header 49px and Stage render", + "status": "PASS" + }, + { + "name": "Dropdown Story renders composed controls", + "status": "PASS" + }, + { + "name": "Window Move Motion Story renders", + "status": "PASS" + }, + { + "name": "Property Panel (Header-connected) still opens; Escape closes", + "status": "PASS", + "data": { + "opened": 1 + } + }, + { + "name": "render property-shape-slot", + "status": "PASS" + }, + { + "name": "render property-fields", + "status": "PASS" + }, + { + "name": "render property-bar", + "status": "PASS" + }, + { + "name": "render layer-detail-input", + "status": "PASS" + }, + { + "name": "render k-guide", + "status": "PASS" + }, + { + "name": "no browser console or page errors", + "status": "PASS", + "data": [] + } + ], + "errors": [], + "data": { + "inventory": { + "total": 338, + "sw": 19, + "ids": [ + [ + "sw-header--composed-controls", + "Dropdown" + ], + [ + "sw-header--detail-buttons", + "Detail Buttons (Shared States)" + ], + [ + "sw-header--overview", + "Overview" + ], + [ + "sw-header--interactive-states", + "Interactive States" + ], + [ + "sw-header--window-move-motion", + "Window Move Motion" + ], + [ + "sw-header--logo-slot", + "Logo Slot" + ], + [ + "sw-header--document-dropdown", + "Document Dropdown" + ], + [ + "sw-header--responsive-more", + "Responsive More" + ], + [ + "sw-header--layer-detail-input", + "Layer Detail · Input" + ], + [ + "sw-header--property-panel", + "Property Panel" + ], + [ + "sw-header--k-guide", + "K Guide" + ], + [ + "sw-header--additional-hover", + "Additional Hover" + ], + [ + "sw-header--property-bar", + "Property Bar" + ], + [ + "sw-header--dynamic-controls", + "Dynamic Controls" + ], + [ + "sw-header--colorize", + "Colorize" + ], + [ + "sw-header--composition", + "Composition (Visibility · Order)" + ], + [ + "sw-header--property-panel-compare", + "Property Panel · 4개 비교" + ], + [ + "sw-header--property-shape-slot", + "Property Panel · 형상 Slot" + ], + [ + "sw-header--property-fields", + "Property Panel · 필드 13개" + ] + ] + }, + "layout390": { + "cells": [ + { + "id": "none", + "cell": { + "x": 16, + "y": 212.5, + "w": 314, + "h": 322, + "right": 330, + "bottom": 534.5 + }, + "panel": { + "x": 16, + "y": 278.5, + "w": 314, + "h": 256, + "right": 330, + "bottom": 534.5 + }, + "caption": "선택된 객체 없음" + }, + { + "id": "all", + "cell": { + "x": 354, + "y": 212.5, + "w": 314, + "h": 427, + "right": 668, + "bottom": 639.5 + }, + "panel": { + "x": 354, + "y": 278.5, + "w": 314, + "h": 361, + "right": 668, + "bottom": 639.5 + }, + "caption": "전체 객체 선택" + }, + { + "id": "circle", + "cell": { + "x": 16, + "y": 663.5, + "w": 314, + "h": 724, + "right": 330, + "bottom": 1387.5 + }, + "panel": { + "x": 16, + "y": 729.5, + "w": 314, + "h": 658, + "right": 330, + "bottom": 1387.5 + }, + "caption": "원 1개 선택" + }, + { + "id": "expanded", + "cell": { + "x": 354, + "y": 663.5, + "w": 314, + "h": 820, + "right": 668, + "bottom": 1483.5 + }, + "panel": { + "x": 354, + "y": 729.5, + "w": 314, + "h": 754, + "right": 668, + "bottom": 1483.5 + }, + "caption": "모든 항목 펼침" + } + ], + "scroller": { + "x": 16, + "y": 212.5, + "w": 358, + "h": 671.5, + "right": 374, + "bottom": 884, + "scrollW": 652, + "clientW": 358, + "scrollH": 1271, + "clientH": 672 + }, + "doc": { + "scrollW": 390, + "clientW": 390, + "scrollH": 900, + "clientH": 900 + } + }, + "gaps390": { + "colGap": 24, + "colGap2": 24, + "rowGap": 24 + }, + "end390": { + "scrollTop": 599, + "scrollLeft": 294, + "panels": [ + { + "bottom": -64.5, + "right": 36 + }, + { + "bottom": 40.5, + "right": 374 + }, + { + "bottom": 788.5, + "right": 36 + }, + { + "bottom": 884.5, + "right": 374 + } + ], + "sBottom": 884, + "sRight": 374 + }, + "layout768": { + "cells": [ + { + "id": "none", + "cell": { + "x": 23.046875, + "y": 199.53125, + "w": 314, + "h": 322, + "right": 337.046875, + "bottom": 521.53125 + }, + "panel": { + "x": 23.046875, + "y": 265.53125, + "w": 314, + "h": 256, + "right": 337.046875, + "bottom": 521.53125 + }, + "caption": "선택된 객체 없음" + }, + { + "id": "all", + "cell": { + "x": 361.046875, + "y": 199.53125, + "w": 314, + "h": 427, + "right": 675.046875, + "bottom": 626.53125 + }, + "panel": { + "x": 361.046875, + "y": 265.53125, + "w": 314, + "h": 361, + "right": 675.046875, + "bottom": 626.53125 + }, + "caption": "전체 객체 선택" + }, + { + "id": "circle", + "cell": { + "x": 23.046875, + "y": 650.53125, + "w": 314, + "h": 724, + "right": 337.046875, + "bottom": 1374.53125 + }, + "panel": { + "x": 23.046875, + "y": 716.53125, + "w": 314, + "h": 658, + "right": 337.046875, + "bottom": 1374.53125 + }, + "caption": "원 1개 선택" + }, + { + "id": "expanded", + "cell": { + "x": 361.046875, + "y": 650.53125, + "w": 314, + "h": 820, + "right": 675.046875, + "bottom": 1470.53125 + }, + "panel": { + "x": 361.046875, + "y": 716.53125, + "w": 314, + "h": 754, + "right": 675.046875, + "bottom": 1470.53125 + }, + "caption": "모든 항목 펼침" + } + ], + "scroller": { + "x": 23.046875, + "y": 199.53125, + "w": 721.90625, + "h": 677.4375, + "right": 744.953125, + "bottom": 876.96875, + "scrollW": 722, + "clientW": 722, + "scrollH": 1271, + "clientH": 677 + }, + "doc": { + "scrollW": 768, + "clientW": 768, + "scrollH": 900, + "clientH": 900 + } + }, + "gaps768": { + "colGap": 24, + "colGap2": 24, + "rowGap": 24 + }, + "end768": { + "scrollTop": 594, + "scrollLeft": 0, + "panels": [ + { + "bottom": -72.46875, + "right": 337.046875 + }, + { + "bottom": 32.53125, + "right": 675.046875 + }, + { + "bottom": 780.53125, + "right": 337.046875 + }, + { + "bottom": 876.53125, + "right": 675.046875 + } + ], + "sBottom": 876.96875, + "sRight": 744.953125 + }, + "layout1280": { + "cells": [ + { + "id": "none", + "cell": { + "x": 38.40625, + "y": 214.890625, + "w": 314, + "h": 322, + "right": 352.40625, + "bottom": 536.890625 + }, + "panel": { + "x": 38.40625, + "y": 280.890625, + "w": 314, + "h": 256, + "right": 352.40625, + "bottom": 536.890625 + }, + "caption": "선택된 객체 없음" + }, + { + "id": "all", + "cell": { + "x": 376.40625, + "y": 214.890625, + "w": 314, + "h": 427, + "right": 690.40625, + "bottom": 641.890625 + }, + "panel": { + "x": 376.40625, + "y": 280.890625, + "w": 314, + "h": 361, + "right": 690.40625, + "bottom": 641.890625 + }, + "caption": "전체 객체 선택" + }, + { + "id": "circle", + "cell": { + "x": 38.40625, + "y": 665.890625, + "w": 314, + "h": 724, + "right": 352.40625, + "bottom": 1389.890625 + }, + "panel": { + "x": 38.40625, + "y": 731.890625, + "w": 314, + "h": 658, + "right": 352.40625, + "bottom": 1389.890625 + }, + "caption": "원 1개 선택" + }, + { + "id": "expanded", + "cell": { + "x": 376.40625, + "y": 665.890625, + "w": 314, + "h": 820, + "right": 690.40625, + "bottom": 1485.890625 + }, + "panel": { + "x": 376.40625, + "y": 731.890625, + "w": 314, + "h": 754, + "right": 690.40625, + "bottom": 1485.890625 + }, + "caption": "모든 항목 펼침" + } + ], + "scroller": { + "x": 38.40625, + "y": 214.890625, + "w": 1203.1875, + "h": 646.71875, + "right": 1241.59375, + "bottom": 861.609375, + "scrollW": 1203, + "clientW": 1203, + "scrollH": 1271, + "clientH": 647 + }, + "doc": { + "scrollW": 1280, + "clientW": 1280, + "scrollH": 900, + "clientH": 900 + } + }, + "gaps1280": { + "colGap": 24, + "colGap2": 24, + "rowGap": 24 + }, + "end1280": { + "scrollTop": 624, + "scrollLeft": 0, + "panels": [ + { + "bottom": -87.109375, + "right": 352.40625 + }, + { + "bottom": 17.890625, + "right": 690.40625 + }, + { + "bottom": 765.890625, + "right": 352.40625 + }, + { + "bottom": 861.890625, + "right": 690.40625 + } + ], + "sBottom": 861.609375, + "sRight": 1241.59375 + }, + "layout1440": { + "cells": [ + { + "id": "none", + "cell": { + "x": 120, + "y": 216.5, + "w": 314, + "h": 322, + "right": 434, + "bottom": 538.5 + }, + "panel": { + "x": 120, + "y": 282.5, + "w": 314, + "h": 256, + "right": 434, + "bottom": 538.5 + }, + "caption": "선택된 객체 없음" + }, + { + "id": "all", + "cell": { + "x": 458, + "y": 216.5, + "w": 314, + "h": 427, + "right": 772, + "bottom": 643.5 + }, + "panel": { + "x": 458, + "y": 282.5, + "w": 314, + "h": 361, + "right": 772, + "bottom": 643.5 + }, + "caption": "전체 객체 선택" + }, + { + "id": "circle", + "cell": { + "x": 120, + "y": 667.5, + "w": 314, + "h": 724, + "right": 434, + "bottom": 1391.5 + }, + "panel": { + "x": 120, + "y": 733.5, + "w": 314, + "h": 658, + "right": 434, + "bottom": 1391.5 + }, + "caption": "원 1개 선택" + }, + { + "id": "expanded", + "cell": { + "x": 458, + "y": 667.5, + "w": 314, + "h": 820, + "right": 772, + "bottom": 1487.5 + }, + "panel": { + "x": 458, + "y": 733.5, + "w": 314, + "h": 754, + "right": 772, + "bottom": 1487.5 + }, + "caption": "모든 항목 펼침" + } + ], + "scroller": { + "x": 120, + "y": 216.5, + "w": 1200, + "h": 643.5, + "right": 1320, + "bottom": 860, + "scrollW": 1200, + "clientW": 1200, + "scrollH": 1271, + "clientH": 644 + }, + "doc": { + "scrollW": 1440, + "clientW": 1440, + "scrollH": 900, + "clientH": 900 + } + }, + "gaps1440": { + "colGap": 24, + "colGap2": 24, + "rowGap": 24 + }, + "end1440": { + "scrollTop": 627, + "scrollLeft": 0, + "panels": [ + { + "bottom": -88.5, + "right": 434 + }, + { + "bottom": 16.5, + "right": 772 + }, + { + "bottom": 764.5, + "right": 434 + }, + { + "bottom": 860.5, + "right": 772 + } + ], + "sBottom": 860, + "sRight": 1320 + }, + "drop-all": { + "x": 521, + "y": 353.5, + "w": 234, + "h": 250, + "bottom": 603.5, + "right": 755, + "vw": 1440, + "vh": 900, + "items": 36 + }, + "drop-expanded": { + "x": 521, + "y": 526.5, + "w": 234, + "h": 250, + "bottom": 776.5, + "right": 755, + "vw": 1440, + "vh": 900, + "items": 36 + }, + "dropScroll": { + "moved": 120, + "before": { + "x": 521, + "y": 526.5, + "w": 234, + "h": 250, + "bottom": 776.5, + "right": 755, + "vw": 1440, + "vh": 900, + "items": 36 + }, + "after": { + "dTop": 406.5, + "dBottom": 656.5, + "fTop": 657.5, + "fBottom": 683.5 + } + } + } +} diff --git a/docs/sw/sw-storybook-property-panel-comparison-2026-10-19.md b/docs/sw/sw-storybook-property-panel-comparison-2026-10-19.md new file mode 100644 index 0000000..b23d765 --- /dev/null +++ b/docs/sw/sw-storybook-property-panel-comparison-2026-10-19.md @@ -0,0 +1,118 @@ +# SW Storybook — 속성창 4개 상태 비교 통합 (2026-10-19) + +- 브랜치: `feature/sw-package` · 시작 HEAD `c705a1fc59fe8ecbce663bf4601638fde43553a1` · 시작 시 Working Tree Clean +- 범위: Storybook 전용 코드(`src/sw/sw-header.stories.tsx`, `src/sw/sw-stories.css`)와 검증 스크립트. SW 패키지 런타임·공개 API·AI 템플릿·Overview·Dropdown Story는 변경하지 않음. +- 증거: `docs/sw/property-panel-comparison-qa/` (기존 QA 폴더는 덮어쓰지 않음) + +## 1. 수정 전 속성창 관련 Story 목록 (실제 선언 기준) + +| Story ID | 이름 | 실제 기능·목적 | 분류 | +| --- | --- | --- | --- | +| `sw-header--property-panel-compare` | Property Panel · 4개 비교 | 같은 `SWHeaderPropertyPanel` 4개 상태를 한 화면에 실측 크기와 함께 표시 | **유지** | +| `sw-header--property-panel-variants` | Property Panel Variants | `PropertyPanelDemo standalone`: 상태 전환 버튼으로 **한 번에 1개** 단독 패널. 데이터 조작 버튼은 `Property Panel`과 동일 | **삭제** (중복) | +| `sw-header--property-panel-none` | Property Panel · 선택 없음 | 314×256 단독 패널 1개 | **삭제** (비교 화면과 중복) | +| `sw-header--property-panel-all` | Property Panel · 전체 선택 | 314×361 단독 패널 1개 | **삭제** (중복) | +| `sw-header--property-panel-circle` | Property Panel · 원 1개 | 314×658 단독 패널 1개 | **삭제** (중복) | +| `sw-header--property-panel-expanded` | Property Panel · 모두 펼침 | 314×754 단독 패널 1개 | **삭제** (중복) | +| `sw-header--property-panel` | Property Panel | Header 연결 열기/닫기, Controlled/Uncontrolled, 외부 Open, 폭 전환, 속성 추가·삭제·순서·제한 상태 | **보존** (Header 연동·API 검증) | +| `sw-header--property-shape-slot` | Property Panel · 형상 Slot | `shapeContent` 확장 계약(기본/null/ReactNode/Render Prop) | **보존** (API 검증) | +| `sw-header--property-fields` | Property Panel · 필드 13개 | 필드 Default/Hover 표본 + 실제 조작 | **보존** (필드 검증) | +| `sw-header--property-bar` | Property Bar | 속성Bar 독립 기능 | **보존** | +| `sw-header--layer-detail-input` | Layer Detail · Input | Input 독립 검증 | **보존** | +| `sw-header--interactive-states` | Interactive States | Header 공통 Hover/Selected(속성창 토글 포함) | **보존** | +| `sw-header--detail-buttons` | Detail Buttons (Shared States) | 공통 상세 버튼 상태 | **보존** | + +삭제한 5개는 모두 비교 화면과 같은 `PropertyState`/`SWHeaderPropertyPanel` + 같은 fixture를 렌더링했고, 고유 기능 검증은 없었습니다(Variants의 데이터 조작 버튼은 `Property Panel`에 동일하게 남아 있음). + +## 2. 유지한 4개 상태 비교 Story + +- ID `sw-header--property-panel-compare`, 이름 `Property Panel · 4개 비교`, 페이지 제목 `속성창 4개 상태 비교` — 모두 유지. +- 상태명·순서 유지(코드 `PROPERTY_STATES`): ① 선택된 객체 없음 ② 전체 객체 선택 ③ 원 1개 선택 ④ 모든 항목 펼침. 각 카드 상단 캡션(상태명 · Figma 노드 · 크기 · 측정값)은 패널 밖 `figcaption`이라 제품 디자인에 영향 없음. +- 변경: 줄바꿈 flex → 2열 × 2행 grid(간격 24px, 패널 원래 크기). 페이지를 뷰포트 높이로 고정하고 Inner 스크롤 영역(`[data-compare-scroll]`)만 가로·세로 스크롤. 설명 문구에서 "폭이 부족하면 줄바꿈합니다" 등 불필요한 문장 제거. 삭제된 개별 Story가 보여주던 Callback 기록을 대신해 한 줄 로그(`상태: callback`)를 추가. +- Storybook 전용 배치 예외 1건: 제품 CSS의 `.hm-sw-property { max-height: calc(100dvh - 8px) }`가 낮은 뷰포트에서 754px 패널을 줄이지 않도록 비교 grid 안에서만 `max-height: none` (Overview Stage와 같은 방식). 패키지 CSS는 미변경. + +## 3·4. 삭제한 Popup 시연 / 삭제된 Story ID + +`sw-header--property-panel-variants`, `sw-header--property-panel-none`, `sw-header--property-panel-all`, `sw-header--property-panel-circle`, `sw-header--property-panel-expanded` + +함께 정리한 Story 전용 코드: `PropertyStateStory`(삭제된 4개 전용), `PropertyPanelDemo`의 `standalone` 분기(Variants 전용). 제품 컴포넌트·타입·CSS·SVG·형상 Slot은 삭제하지 않음. + +## 5. 최종 Story 개수 + +| | 수정 전 | 수정 후 | +| --- | --- | --- | +| SW Story | 24 | **19** | +| 전체 저장소 Story | 343 | **338** | + +남은 19개의 ID·이름·title·tags는 수정 전과 동일(자동 비교 PASS). Dropdown(`sw-header--composed-controls`, 이름 `Dropdown`, title `SW/Header`) 동일. + +## 6~8. 배치·크기·스크롤 검증 (실제 좌표, Chrome, 높이 900) + +| 폭 | ①(x,y) | ②(x,y) | ③(x,y) | ④(x,y) | 열/열/행 간격 | Inner client→scroll (W / H) | +| --- | --- | --- | --- | --- | --- | --- | +| 390 | 16,213 | 354,213 | 16,664 | 354,664 | 24/24/24 | 358→652 / 672→1271 | +| 768 | 23,200 | 361,200 | 23,651 | 361,651 | 24/24/24 | 722→722 / 677→1271 | +| 1280 | 38,215 | 376,215 | 38,666 | 376,666 | 24/24/24 | 1203→1203 / 647→1271 | +| 1440 | 120,217 | 458,217 | 120,668 | 458,668 | 24/24/24 | 1200→1200 / 644→1271 | + +- 같은 행 y 일치, 같은 열 x 일치, 2열이 1열 오른쪽·2행이 1행 아래 → 4개 폭 모두 **2열 × 2행 PASS**. +- 패널 크기(모든 폭): 314×256 / 314×361 / 314×658 / 314×754 **PASS**. +- 문서 자체는 가로·세로 스크롤 없음(페이지 높이 무제한 확장 없음). Inner 끝까지 스크롤 시 754px 패널 하단·우측이 스크롤 영역 안에 완전히 보임. 390px은 Inner 가로 스크롤로 2열 유지(1열 전환·축소 없음) **PASS**. + +## 9. Dropdown / Input / Focus / 닫기 + +- Input: 원 1개 패널 반지름 Enter 확정 → Callback 기록, 모두 펼침 패널 값 불변(상태 독립). Escape 편집 취소, Focus 패널 내부 유지, Tab 이동 정상. +- Dropdown(레이어): 1행 패널·2행 패널 모두 열림·항목 표시·뷰포트 내부. 열린 채 Inner를 120px 스크롤해도 필드에 붙어 이동(fixed overlay가 분리되지 않음). Escape 닫힘 + 필드로 Focus 복귀. 항목 선택 시 해당 패널에만 Callback. +- 도구 토글 `aria-pressed` 패널별 독립, 그룹 펼침 후 접으면 256px 복귀(다른 패널 361px 유지), 닫기 버튼 → 해당 패널 `onClose` Callback. + +## 10. 기존 Header / Overview 보존 + +- Overview: Header 49px·Stage 렌더 PASS. Dropdown Story: composed controls 렌더 PASS, 기존 기능 스크립트(`dropdown-consolidation.browser.mjs`) 223개 기능 체크 PASS. +- Window Move Motion·K Guide·Property Bar·Layer Detail · Input·형상 Slot·필드 13개 렌더 PASS. `Property Panel`(Header 연결) 열기/Escape 닫기 PASS. + +## 11. 제품 런타임·API 미변경 + +`git diff HEAD -- packages/sw/src packages/sw/ai packages/sw/package.json packages/ui packages/org-chart packages/org-chart-react docs/sw/ai-template src/sw/sw-header-overview.tsx src/sw/sw-header-dropdown.stories.tsx .storybook` → 변경 없음. + +## 12. 변경 파일 + +- `src/sw/sw-header.stories.tsx` — 5개 Story·전용 헬퍼 삭제, 비교 화면 grid·스크롤·로그 +- `src/sw/sw-stories.css` — 비교 페이지 레이아웃(Story 전용) +- `packages/sw/tests/storybook-inventory.mjs` — `retiredPropertyPanelIds` 추가 +- `packages/sw/tests/followup-four.browser.mjs`, `packages/sw/tests/detail-buttons.browser.mjs` — 삭제된 ID 참조를 비교 Story의 `[data-compare]` 범위로 교체, 기대 개수 24→19 +- `packages/sw/tests/property-panel-comparison.browser.mjs` — 신규 검증 스크립트(`before` / `verify`) +- `docs/sw/property-panel-comparison-qa/` — 수정 전후 증거 +- 과거 검토·검증 문서(`sw-first-pass-cleanup-review`, `sw-storybook-screen-review` 등)의 옛 ID는 당시 기록으로 보존. + +## 13. Typecheck / Build + +| 항목 | 결과 | +| --- | --- | +| `npm run typecheck:sw` | PASS | +| `npm run build:sw` | PASS | +| Storybook Typecheck `npx tsc -b` | PASS | +| `npm run build-storybook` | PASS | +| `git diff --check` | PASS | + +## 14. 브라우저 검증 (Chrome headless, 새 static build) + +| 스크립트 | 결과 | 증거 | +| --- | --- | --- | +| `property-panel-comparison.browser.mjs verify` | **59/59 PASS**, 콘솔 오류 0 | `verify/` | +| `followup-four.browser.mjs` (비교 Story로 이전) | 39/39 PASS | `legacy-followup-four/` | +| `detail-buttons.browser.mjs preservation` | 15/15 PASS | `legacy-detail-buttons-preservation/` | +| `property-fields.browser.mjs` | 77/77 PASS | `legacy-property-fields/` | +| `property-close.browser.mjs` | 6/6 PASS | `legacy-property-close/` | +| `dropdown-consolidation.browser.mjs` | 223 PASS / 4 FAIL (아래) | `legacy-dropdown/` | + +`dropdown-consolidation`의 4개 FAIL은 이전 단계 기준선에 고정된 단언입니다: 28→24 / 24 개수 2건, "삭제 외 선언 동일" 1건(이번에 선언 삭제), "`src/sw/sw-stories.css` 미변경" 1건(이번에 Story CSS 수정). 이번 작업의 의도된 변경이며 Dropdown 기능 체크는 모두 PASS입니다. 이 스크립트는 당시 단계 기록이라 수정하지 않았습니다. + +수정 전 스크린샷: `before/before-compare-1440.png`(4개가 한 줄), `before/before-property-panel-*.png`. 수정 후: `verify/compare-<폭>-top.png` / `-end.png`, `dropdown-*.png`. + +## 15. NOT VERIFIED + +- Firefox·Safari 등 Chrome 외 브라우저(이번 작업에서 실행하지 않음). +- 개발 서버(6024) 화면 — 다른 worktree의 서버일 수 있어 사용하지 않고 static build로만 검증. +- 실제 Storybook Manager UI에서의 사이드바 표시(index.json으로 목록만 검증). +- `overview.browser.mjs`, `overview-firefox.browser.mjs`, `storybook-cleanup-stage1.browser.mjs`, `ai-template-*` 스크립트는 재실행하지 않음(Overview는 신규 스크립트에서 렌더·Header 49px만 확인). +- 스크린리더 실사용. diff --git a/packages/sw/tests/detail-buttons.browser.mjs b/packages/sw/tests/detail-buttons.browser.mjs index 683d83a..00e4e29 100644 --- a/packages/sw/tests/detail-buttons.browser.mjs +++ b/packages/sw/tests/detail-buttons.browser.mjs @@ -2,7 +2,7 @@ import { createRequire } from 'node:module' import { mkdir, readFile, writeFile } from 'node:fs/promises' import path from 'node:path' import http from 'node:http' -import { swStoryEntries, retainedInventory } from './storybook-inventory.mjs' +import { swStoryEntries, retainedInventory, retiredPropertyPanelIds } from './storybook-inventory.mjs' // Usage: node packages/sw/tests/detail-buttons.browser.mjs baseline|verify [base-url] const mode = process.argv[2] ?? 'verify' @@ -50,9 +50,9 @@ try { check(`required responsive width ${width}`,layout.height===49&&layout.overflow===0&&layout.documentOverflow===0,layout) } await page.setViewportSize({width:1920,height:1000}) + await goto('property-panel-compare') for(const [id,height] of [['none',256],['all',361],['circle',658],['expanded',754]]){ - await goto(`property-panel-${id}`) - const box=await page.locator('.hm-sw-property').first().boundingBox() + const box=await page.locator(`[data-compare="${id}"] .hm-sw-property`).boundingBox() check(`preserve property panel ${id}`,box.width===314&&box.height===height,box) } await goto('composition') @@ -100,8 +100,10 @@ try { for(const key of Object.keys(snapshots).filter(k=>!k.startsWith('text'))) check(`unchanged header ${key} (capture a current baseline for replacement fixtures)`,JSON.stringify(before[key])===JSON.stringify(snapshots[key])) const oldIds=JSON.parse(await readFile(path.join(output,'baseline-story-ids.json'),'utf8')) const retiredIds=['default','controls','responsive','text-stroke','dynamic-data','layer-dropdown','color-dropdown','line-style-dropdown','text-dimension-style-dropdown'].map(id=>`sw-header--${id}`) - const retainedIds=retainedInventory(oldIds.map(id=>({id}))).map(e=>e.id) - check('retained stories remain; only approved retirements are absent',ids.length===24&&retainedIds.every(id=>ids.includes(id))&&retiredIds.every(id=>!ids.includes(id)),{before:oldIds.length,after:ids.length}) + // 2026-10-19: the five duplicate property panel demos are retired as well (24 -> 19). + retiredIds.push(...retiredPropertyPanelIds) + const retainedIds=retainedInventory(oldIds.map(id=>({id}))).map(e=>e.id).filter(id=>!retiredPropertyPanelIds.includes(id)) + check('retained stories remain; only approved retirements are absent',ids.length===19&&retainedIds.every(id=>ids.includes(id))&&retiredIds.every(id=>!ids.includes(id)),{before:oldIds.length,after:ids.length}) for(const id of ids){await goto(id.replace('sw-header--',''));check(`render ${id}`,!(await page.locator('.sb-errordisplay').isVisible()))} await goto('composition') const presets=['기본 전체','구성 A','구성 B (레이어·선스타일)','구성 C (로고만)','파일 목록 제거','레이어 제거','색상 제거','스타일 그룹 제거','여러 메뉴 제거','순서 변경','숨김 + 순서 변경'] diff --git a/packages/sw/tests/followup-four.browser.mjs b/packages/sw/tests/followup-four.browser.mjs index eb64a01..d87ca2d 100644 --- a/packages/sw/tests/followup-four.browser.mjs +++ b/packages/sw/tests/followup-four.browser.mjs @@ -72,8 +72,9 @@ for (const w of [1440, 1080, 768]) { } // ---- B. Tool icon -await goto('property-panel-all') -const tool = page.locator('.hm-sw-property__tool').first() +// The four states share one Story since 2026-10-19; each check is scoped to its panel. +await goto('property-panel-compare') +const tool = page.locator('[data-compare="all"] .hm-sw-property__tool') const toolInfo = await tool.evaluate(e => { const s = getComputedStyle(e), imgs = [...e.querySelectorAll('img')].map(i => ({ cls: i.className, w: i.getBoundingClientRect().width, h: i.getBoundingClientRect().height, src: i.getAttribute('src').slice(0, 60) })); return { border: s.borderTopWidth + ' ' + s.borderTopColor, outline: s.outlineStyle, bg: s.backgroundColor, w: e.getBoundingClientRect().width, h: e.getBoundingClientRect().height, imgs } }) report.data.tool = toolInfo check('B1 no CSS border/outline/background on tool button', toolInfo.border.startsWith('0px') && toolInfo.outline === 'none' && toolInfo.bg === 'rgba(0, 0, 0, 0)', toolInfo) @@ -147,8 +148,8 @@ for (const menu of ['layer', 'color', 'text-style', 'dimension-style', 'line-sty } // ---- E. Gauge -await goto('property-panel-circle') -const range = page.locator('.hm-sw-property input[type="range"]').first() +await goto('property-panel-compare') +const range = page.locator('[data-compare="circle"] .hm-sw-property input[type="range"]') const gaugeState = () => range.evaluate(e => ({ value: e.value, fill: e.style.getPropertyValue('--hm-sw-range-fill'), track: getComputedStyle(e).getPropertyValue('--hm-sw-property-range-track').trim() })) const gaugePixels = async name => { const b = await range.boundingBox() @@ -166,8 +167,8 @@ await range.focus(); for (let n = 0; n < 40; n++) await page.keyboard.press('Arr gs = await gaugePixels('keyboard'); report.data.gaugeKeyboard = gs check('E2 keyboard ArrowRight x40 -> 0.65, fill follows', gs.value === '0.65' && Math.abs(Number(gs.fill) - 0.65) < 1e-9 && isRed(gs.left) && isBeige(gs.right), gs) await page.keyboard.press('Enter') -await page.waitForFunction(() => document.querySelector('.hm-sw-property [data-property-id="opacity"] .hm-sw-header__input')?.value === '0.65', null, { timeout: 2000 }).catch(() => {}) -const committed = await page.locator('.hm-sw-property [data-property-id="opacity"] .hm-sw-header__input').first().inputValue().catch(() => null) +await page.waitForFunction(() => document.querySelector('[data-compare="circle"] .hm-sw-property [data-property-id="opacity"] .hm-sw-header__input')?.value === '0.65', null, { timeout: 2000 }).catch(() => {}) +const committed = await page.locator('[data-compare="circle"] [data-property-id="opacity"] .hm-sw-header__input').inputValue().catch(() => null) report.data.gaugeCommitted = committed check('E3 commit updates the number input (callback path)', committed === '0.65', { committed }) await page.keyboard.press('End'); gs = await gaugePixels('max'); report.data.gaugeMax = gs @@ -175,18 +176,19 @@ check('E4 max -> fill 1', gs.value === '1' && Number(gs.fill) === 1 && isRed(gs. await page.keyboard.press('Home'); gs = await gaugePixels('min'); report.data.gaugeMin = gs check('E5 min -> fill 0, beige right', gs.value === '0' && Number(gs.fill) === 0 && isBeige(gs.right), gs) // External value: type into the numeric input and commit -const num = page.locator('.hm-sw-property [data-property-id="opacity"] .hm-sw-header__input').first() +const num = page.locator('[data-compare="circle"] [data-property-id="opacity"] .hm-sw-header__input') await num.click(); await num.fill('0.5'); await num.press('Enter'); await page.mouse.move(1, 1) gs = await gaugeState(); report.data.gaugeExternal = gs check('E6 value changed elsewhere syncs gauge', gs.value === '0.5' && Number(gs.fill) === 0.5, gs) -await page.locator('.hm-sw-property').first().screenshot({ path: path.join(out, 'E-panel-circle.png') }) +await page.locator('[data-compare="circle"] .hm-sw-property').screenshot({ path: path.join(out, 'E-panel-circle.png') }) // ---- F. Panel four states render +await goto('property-panel-compare') for (const id of ['property-panel-none', 'property-panel-all', 'property-panel-circle', 'property-panel-expanded']) { - await goto(id) - const sz = await page.locator('.hm-sw-property').first().evaluate(e => { const r = e.getBoundingClientRect(); return [r.width, r.height] }) + const panel = page.locator(`[data-compare="${id.replace('property-panel-', '')}"] .hm-sw-property`) + const sz = await panel.evaluate(e => { const r = e.getBoundingClientRect(); return [r.width, r.height] }) report.data[id] = sz - await page.locator('.hm-sw-property').first().screenshot({ path: path.join(out, `F-${id}.png`) }) + await panel.screenshot({ path: path.join(out, `F-${id}.png`) }) check(`F ${id} renders`, sz[0] === 314 && sz[1] > 200, sz) } check('G no page/console errors', report.errors.length === 0, report.errors) diff --git a/packages/sw/tests/property-panel-comparison.browser.mjs b/packages/sw/tests/property-panel-comparison.browser.mjs new file mode 100644 index 0000000..863f0ca --- /dev/null +++ b/packages/sw/tests/property-panel-comparison.browser.mjs @@ -0,0 +1,196 @@ +import { createRequire } from 'node:module' +import { mkdir, readFile, writeFile } from 'node:fs/promises' +import path from 'node:path' +import http from 'node:http' +import { swStoryEntries, retiredPropertyPanelIds } from './storybook-inventory.mjs' + +// Property panel comparison consolidation (2026-10-19). +// Usage: node packages/sw/tests/property-panel-comparison.browser.mjs before|verify [base-url|static] +const mode = process.argv[2] ?? 'verify' +const out = path.resolve(process.argv[3] ?? 'docs/sw/property-panel-comparison-qa/' + mode) +let base = process.argv[4] ?? 'static' +let server +if (base === 'static') { + const root = path.resolve('storybook-static'), mime = { '.html': 'text/html', '.js': 'text/javascript', '.css': 'text/css', '.json': 'application/json', '.svg': 'image/svg+xml', '.png': 'image/png', '.gif': 'image/gif', '.ttf': 'font/ttf', '.woff2': 'font/woff2' } + server = http.createServer(async (req, res) => { try { const p = new URL(req.url, 'http://localhost').pathname, file = path.resolve(root, '.' + decodeURIComponent(p === '/' ? '/index.html' : p)); if (path.relative(root, file).startsWith('..')) return res.writeHead(403).end(); res.setHeader('Content-Type', mime[path.extname(file)] ?? 'application/octet-stream'); res.end(await readFile(file)) } catch { res.writeHead(404).end() } }) + await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)); base = `http://127.0.0.1:${server.address().port}` +} +const { chromium } = createRequire(import.meta.url)(process.env.SW_PLAYWRIGHT_PATH ?? 'C:/Users/user/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules/playwright') +await mkdir(out, { recursive: true }) +const browser = await chromium.launch({ headless: true, executablePath: process.env.SW_CHROME_PATH ?? 'C:/Program Files/Google/Chrome/Application/chrome.exe' }) +const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }) +const report = { mode, base: process.argv[4] ?? 'static', browser: browser.version(), checks: [], errors: [], data: {} } +page.on('pageerror', e => report.errors.push(e.message)) +page.on('console', m => { if (m.type() === 'error') report.errors.push(m.text()) }) +const check = (name, ok, data) => { report.checks.push({ name, status: ok ? 'PASS' : 'FAIL', data }); if (!ok) console.error('FAIL', name, JSON.stringify(data)) } +const goto = async id => { + await page.goto(`${base}/iframe.html?id=sw-header--${id}&viewMode=story`) + await page.locator('.hm-sw-header, .hm-sw-theme').first().waitFor() + await page.evaluate(() => document.fonts.ready) + await page.mouse.move(1, 1) +} +const STATES = [['none', 256], ['all', 361], ['circle', 658], ['expanded', 754]] +const geometry = () => page.evaluate(() => { + const r = e => { const b = e.getBoundingClientRect(); return { x: b.x, y: b.y, w: b.width, h: b.height, right: b.right, bottom: b.bottom } } + const scroller = document.querySelector('[data-compare-scroll]') + return { + cells: [...document.querySelectorAll('[data-compare]')].map(c => ({ id: c.dataset.compare, cell: r(c), panel: r(c.querySelector('.hm-sw-property')), caption: c.querySelector('figcaption strong')?.textContent })), + scroller: scroller && { ...r(scroller), scrollW: scroller.scrollWidth, clientW: scroller.clientWidth, scrollH: scroller.scrollHeight, clientH: scroller.clientHeight }, + doc: { scrollW: document.documentElement.scrollWidth, clientW: document.documentElement.clientWidth, scrollH: document.documentElement.scrollHeight, clientH: document.documentElement.clientHeight }, + } +}) + +try { + const index = await (await fetch(`${base}/index.json`)).json() + const stories = Object.values(index.entries).filter(e => e.type === 'story') + const sw = swStoryEntries(index) + report.data.inventory = { total: stories.length, sw: sw.length, ids: sw.map(e => [e.id, e.name]) } + + if (mode === 'before') { + await writeFile(path.join(out, 'story-inventory-before.json'), JSON.stringify({ total: stories.length, sw: sw.map(e => ({ id: e.id, name: e.name, title: e.title, tags: e.tags })) }, null, 2) + '\n') + await goto('property-panel-compare') + report.data.compare = await geometry() + await page.screenshot({ path: path.join(out, 'before-compare-1440.png'), fullPage: true }) + for (const id of retiredPropertyPanelIds) { + await goto(id.replace('sw-header--', '')) + await page.screenshot({ path: path.join(out, `before-${id.replace('sw-header--', '')}.png`), fullPage: true }) + } + } else { + // ---- Inventory + const before = JSON.parse(await readFile(path.resolve(process.env.SW_BEFORE_INVENTORY ?? 'docs/sw/property-panel-comparison-qa/before/story-inventory-before.json'), 'utf8')) + const expected = before.sw.filter(e => !retiredPropertyPanelIds.includes(e.id)) + const signature = list => JSON.stringify(list.map(e => [e.id, e.name, e.title, e.tags]).sort((a, b) => a[0].localeCompare(b[0]))) + check('inventory: 24 -> 19 SW Stories, 343 -> 338 total, only 5 approved retirements', before.sw.length === 24 && sw.length === 19 && before.total === 343 && stories.length === 338 && retiredPropertyPanelIds.every(id => !index.entries[id]), { before: [before.total, before.sw.length], after: [stories.length, sw.length] }) + check('inventory: retained SW Story IDs, names, titles, tags unchanged', signature(expected) === signature(sw), { retained: sw.length }) + check('inventory: compare Story keeps its ID and name', index.entries['sw-header--property-panel-compare']?.name === 'Property Panel · 4개 비교') + check('inventory: Dropdown Story keeps ID / name / title', index.entries['sw-header--composed-controls']?.name === 'Dropdown' && index.entries['sw-header--composed-controls']?.title === 'SW/Header') + + // ---- Layout at four widths + for (const width of [390, 768, 1280, 1440]) { + await page.setViewportSize({ width, height: 900 }) + await goto('property-panel-compare') + const g = await geometry(); report.data[`layout${width}`] = g + const [a, b, c, d] = g.cells + const sizes = g.cells.map(cell => [cell.id, cell.panel.w, cell.panel.h]) + check(`${width}: four states in original order with captions`, JSON.stringify(g.cells.map(cell => cell.id)) === JSON.stringify(STATES.map(s => s[0])) && g.cells.every(cell => cell.caption), g.cells.map(cell => [cell.id, cell.caption])) + check(`${width}: original panel sizes 314 × 256 / 361 / 658 / 754`, STATES.every(([id, h], i) => sizes[i][0] === id && sizes[i][1] === 314 && sizes[i][2] === h), sizes) + const colGap = b.cell.x - a.cell.right, colGap2 = d.cell.x - c.cell.right, rowGap = c.cell.y - Math.max(a.cell.bottom, b.cell.bottom) + report.data[`gaps${width}`] = { colGap, colGap2, rowGap } + check(`${width}: 2 columns × 2 rows by coordinates`, Math.abs(a.cell.y - b.cell.y) < 0.5 && Math.abs(c.cell.y - d.cell.y) < 0.5 && Math.abs(a.cell.x - c.cell.x) < 0.5 && Math.abs(b.cell.x - d.cell.x) < 0.5 && b.cell.x >= a.cell.right && c.cell.y >= Math.max(a.cell.bottom, b.cell.bottom), { a: a.cell, b: b.cell, c: c.cell, d: d.cell }) + check(`${width}: consistent 24px column and row gaps`, [colGap, colGap2, rowGap].every(v => Math.abs(v - 24) < 0.5), { colGap, colGap2, rowGap }) + check(`${width}: page itself does not scroll (no document overflow)`, g.doc.scrollW <= g.doc.clientW && g.doc.scrollH <= g.doc.clientH, g.doc) + check(`${width}: Inner scroller scrolls vertically to the 754px panel`, g.scroller.scrollH > g.scroller.clientH, g.scroller) + await page.screenshot({ path: path.join(out, `compare-${width}-top.png`) }) + // Scroll to the very end: every panel must be reachable with its bottom inside the scroller. + const end = await page.evaluate(() => { + const s = document.querySelector('[data-compare-scroll]'); s.scrollTop = s.scrollHeight; s.scrollLeft = s.scrollWidth + const sr = s.getBoundingClientRect() + return { scrollTop: s.scrollTop, scrollLeft: s.scrollLeft, panels: [...s.querySelectorAll('.hm-sw-property')].map(p => { const r = p.getBoundingClientRect(); return { bottom: r.bottom, right: r.right } }), sBottom: sr.bottom, sRight: sr.right } + }) + report.data[`end${width}`] = end + const last = end.panels[3], right = end.panels[1] + check(`${width}: bottom of the 754px panel reachable, not clipped`, last.bottom <= end.sBottom + 0.5 && last.right <= end.sRight + 0.5, end) + if (g.scroller.scrollW > g.scroller.clientW) check(`${width}: narrow Inner scrolls horizontally, keeping 2 columns`, end.scrollLeft > 0 && right.right <= end.sRight + 0.5, { scrollW: g.scroller.scrollW, clientW: g.scroller.clientW, end }) + else check(`${width}: both columns fit without horizontal scroll`, g.scroller.scrollW <= g.scroller.clientW && b.cell.right <= g.scroller.right, g.scroller) + await page.screenshot({ path: path.join(out, `compare-${width}-end.png`) }) + } + + // ---- Behaviour (1440 × 900) + await page.setViewportSize({ width: 1440, height: 900 }) + await goto('property-panel-compare') + const cell = id => page.locator(`[data-compare="${id}"]`) + const log = () => page.locator('[data-property-log]').textContent() + const input = (id, prop) => cell(id).locator(`[data-property-id="${prop}"] input.hm-sw-header__input`).first() + + // Input: Enter commits through onPropertyChange; Escape restores; other panels unaffected. + const radius = input('circle', 'radius') + await radius.scrollIntoViewIfNeeded(); await radius.click(); await radius.fill('5.5'); await radius.press('Enter') + const committed = { circle: await radius.inputValue(), expanded: await input('expanded', 'radius').inputValue(), log: await log() } + check('Input Enter commits via callback; only that panel changes', committed.circle.startsWith('5.5') && committed.expanded === '4.0526' && committed.log.includes('circle: property(radius, 5.5'), committed) + await radius.click(); await radius.fill('9'); await radius.press('Escape') + check('Input Escape cancels the edit', (await radius.inputValue()).startsWith('5.5'), await radius.inputValue()) + const focusOk = await radius.evaluate(e => document.activeElement === e || !!e.closest('.hm-sw-property')?.contains(document.activeElement)) + check('Focus stays inside the edited panel after Escape', focusOk) + await page.keyboard.press('Tab') + check('Tab moves focus within the page (no trap / loss to body)', await page.evaluate(() => document.activeElement !== document.body)) + + // Dropdown (layer picker) in a top panel and in a bottom-row panel after scrolling. + const openPicker = async id => { + const trigger = cell(id).locator('[data-property-id="layer"] button[aria-haspopup], [data-property-id="layer"] [aria-expanded]').first() + await trigger.scrollIntoViewIfNeeded(); await trigger.click() + const drop = page.locator('.hm-sw-property__drop').first(); await drop.waitFor({ timeout: 2000 }) + const info = await drop.evaluate(e => { const r = e.getBoundingClientRect(); return { x: r.x, y: r.y, w: r.width, h: r.height, bottom: r.bottom, right: r.right, vw: innerWidth, vh: innerHeight, items: e.querySelectorAll('button, [role="option"], li').length } }) + return { trigger, drop, info } + } + for (const id of ['all', 'expanded']) { + const { trigger, drop, info } = await openPicker(id) + report.data[`drop-${id}`] = info + check(`Dropdown ${id}: opens, has items, fully inside the viewport`, info.items > 0 && info.x >= 0 && info.y >= 0 && info.right <= info.vw + 0.5 && info.bottom <= info.vh + 0.5, info) + await page.screenshot({ path: path.join(out, `dropdown-${id}.png`) }) + if (id === 'expanded') { + // Scroll the Inner while open: the fixed overlay must stay attached to its field (below or flipped above). + const moved = await page.locator('[data-compare-scroll]').evaluate(s => { const t = s.scrollTop; s.scrollTop += 120; return s.scrollTop - t }) + await page.waitForTimeout(150) + const after = await page.evaluate(() => { + const d = document.querySelector('.hm-sw-property__drop')?.getBoundingClientRect() + const f = document.querySelector('[data-compare="expanded"] [data-property-id="layer"] [aria-expanded="true"]')?.getBoundingClientRect() + return d && f ? { dTop: d.top, dBottom: d.bottom, fTop: f.top, fBottom: f.bottom } : null + }) + report.data.dropScroll = { moved, before: info, after } + check('Dropdown follows the Inner scroller (stays attached to its field)', moved > 0 && after && (Math.abs(after.dTop - after.fBottom) < 1.5 || Math.abs(after.dBottom - after.fTop) < 1.5), report.data.dropScroll) + } + await page.keyboard.press('Escape') + check(`Dropdown ${id}: Escape closes and returns focus to its field`, await page.locator('.hm-sw-property__drop').count() === 0 && await trigger.evaluate(e => document.activeElement === e || e.contains(document.activeElement))) + } + // Select a layer value: callback updates only that panel. + { + const { drop } = await openPicker('all') + const option = drop.getByRole('button', { name: 'CC-D GNL', exact: true }).first() + if (await option.count()) { + await option.click() + check('Dropdown selection commits via callback in its own panel only', (await log()).includes('all: property(layer, CC-D GNL)'), await log()) + } else check('Dropdown selection commits via callback in its own panel only', false, 'option not found') + if (await page.locator('.hm-sw-property__drop').count()) await page.keyboard.press('Escape') + } + + // Tool toggle, group expand, close button — each panel keeps its own state. + const tool = cell('none').locator('.hm-sw-property__tool') + await tool.scrollIntoViewIfNeeded(); await tool.click() + check('Tool toggle in one panel does not affect the others', await tool.getAttribute('aria-pressed') === 'true' && await cell('all').locator('.hm-sw-property__tool').getAttribute('aria-pressed') !== 'true') + await tool.click() + const expand = cell('none').locator('.hm-sw-property__expand').first() + if (await expand.count()) { + const h0 = (await cell('none').locator('.hm-sw-property').boundingBox()).height + await expand.click(); const h1 = (await cell('none').locator('.hm-sw-property').boundingBox()).height + const allH = (await cell('all').locator('.hm-sw-property').boundingBox()).height + await expand.click(); const h2 = (await cell('none').locator('.hm-sw-property').boundingBox()).height + check('Group expand is per panel and collapses back to 256', h1 > h0 && allH === 361 && h2 === 256, { h0, h1, h2, allH }) + } + const close = cell('circle').getByRole('button', { name: '속성창 닫기', exact: true }) + await close.scrollIntoViewIfNeeded(); await close.click() + check('Close button calls onClose of that panel', (await log()).includes('circle: close'), await log()) + await page.screenshot({ path: path.join(out, 'compare-after-interaction.png') }) + + // ---- Preservation of other Stories + await page.setViewportSize({ width: 1920, height: 1000 }) + await goto('overview') + check('Overview: Header 49px and Stage render', await page.locator('header.hm-sw-header').first().evaluate(h => h.getBoundingClientRect().height) === 49 && await page.locator('.sw-overview-stage').count() === 1) + await goto('composed-controls') + check('Dropdown Story renders composed controls', await page.locator('.sw-composed-controls').count() > 0) + await goto('window-move-motion') + check('Window Move Motion Story renders', await page.locator('[data-sw-window-move]').count() > 0) + await goto('property-panel') + const trigger = page.locator('.hm-sw-header [data-property-panel-trigger]') + await trigger.click(); const opened = await page.locator('.hm-sw-property').count() + await page.keyboard.press('Escape'); await page.keyboard.press('Escape') + check('Property Panel (Header-connected) still opens; Escape closes', opened === 1 && await page.locator('.hm-sw-property').count() === 0, { opened }) + for (const id of ['property-shape-slot', 'property-fields', 'property-bar', 'layer-detail-input', 'k-guide']) { + await goto(id); check(`render ${id}`, !(await page.locator('.sb-errordisplay').isVisible())) + } + check('no browser console or page errors', report.errors.length === 0, report.errors) + } +} finally { + await writeFile(path.join(out, 'result.json'), JSON.stringify(report, null, 2) + '\n') + await browser.close(); server?.close() +} +console.log('TOTAL', report.checks.length, 'FAIL', report.checks.filter(c => c.status === 'FAIL').length) diff --git a/packages/sw/tests/storybook-inventory.mjs b/packages/sw/tests/storybook-inventory.mjs index e553786..172a3cf 100644 --- a/packages/sw/tests/storybook-inventory.mjs +++ b/packages/sw/tests/storybook-inventory.mjs @@ -1,6 +1,8 @@ // Current SW inventory after the approved stage-1 and Dropdown consolidations. export const retiredStage1Ids = ['responsive', 'text-stroke', 'dynamic-data', 'default', 'controls'].map(id => `sw-header--${id}`) export const retiredDropdownIds = ['layer-dropdown', 'color-dropdown', 'line-style-dropdown', 'text-dimension-style-dropdown'].map(id => `sw-header--${id}`) +// 2026-10-19: duplicate property panel demos; the four states live on sw-header--property-panel-compare. +export const retiredPropertyPanelIds = ['property-panel-variants', 'property-panel-none', 'property-panel-all', 'property-panel-circle', 'property-panel-expanded'].map(id => `sw-header--${id}`) // Include the old title when reading historical evidence; live hierarchy is asserted separately. export const swStoryEntries = index => Object.values(index.entries).filter(entry => entry.type === 'story' && (entry.title === 'SW/Header' || entry.title === 'SW/Header/Dropdown')) export const retainedInventory = entries => entries.filter(entry => ![...retiredStage1Ids, ...retiredDropdownIds].includes(entry.id)) diff --git a/src/sw/sw-header.stories.tsx b/src/sw/sw-header.stories.tsx index 293c75e..c5e3601 100644 --- a/src/sw/sw-header.stories.tsx +++ b/src/sw/sw-header.stories.tsx @@ -1038,7 +1038,7 @@ function usePropertyMenus(record: (line: string) => void, setProperties: (update } } -function PropertyPanelDemo({ standalone = false }: { standalone?: boolean }) { +function PropertyPanelDemo() { const [example, setExample] = useState("none") const [selection, setSelection] = useState(propertySelection("none")) const [properties, setProperties] = useState(propertyFixture("none")) @@ -1087,12 +1087,11 @@ function PropertyPanelDemo({ standalone = false }: { standalone?: boolean }) {

{log.join(" → ") || "Callback 없음"}

{JSON.stringify({ selection: selection.id, values: properties.map(item => [item.id, item.value]), expanded, open })}
- {standalone ? record("close")} /> - :
{ record("open(" + next + ")"); if (controlled) setOpen(next) }} - onPropertyPanelToggle={() => record("legacyToggle")} - layers={SAMPLE_LAYERS} activeLayerId="layer-0" colors={FIGMA_COLORS} lineTypes={FIGMA_LINE_TYPES} textStyles={FIGMA_TEXT_STYLES} dimensionStyles={FIGMA_DIMENSION_STYLES} - />
} +
{ record("open(" + next + ")"); if (controlled) setOpen(next) }} + onPropertyPanelToggle={() => record("legacyToggle")} + layers={SAMPLE_LAYERS} activeLayerId="layer-0" colors={FIGMA_COLORS} lineTypes={FIGMA_LINE_TYPES} textStyles={FIGMA_TEXT_STYLES} dimensionStyles={FIGMA_DIMENSION_STYLES} + />
) } @@ -1102,11 +1101,6 @@ export const PropertyPanel: Story = { parameters: { controls: { disable: true } }, render: () => , } -export const PropertyPanelVariants: Story = { - name: "Property Panel Variants", - parameters: { controls: { disable: true } }, - render: () => , -} export const KGuide: Story = { name: "K Guide", parameters: { controls: { disable: true } }, @@ -1293,22 +1287,11 @@ function PropertyState({ example, shapeContent, onLog }: { example: PropertyExam onPropertyChange={(property, value) => { onLog?.(`property(${property.id}, ${value})`); setProperties(items => items.map(item => item.id === property.id ? { ...item, value, mixed: false, ...(item.id === "line" ? { linePattern: linePatternOf(value) } : {}) } : item)) }} onClose={() => onLog?.("close")} /> } -function PropertyStateStory({ example }: { example: PropertyExample }) { - const state = PROPERTY_STATES.find(item => item.example === example)! - const [log, setLog] = useState([]) - return -

{log.join(" → ") || "Callback 없음"}

-
setLog(lines => [...lines.slice(-9), line])} />
-
-} -export const PropertyPanelNone: Story = { name: "Property Panel · 선택 없음", parameters: { controls: { disable: true } }, render: () => } -export const PropertyPanelAll: Story = { name: "Property Panel · 전체 선택", parameters: { controls: { disable: true } }, render: () => } -export const PropertyPanelCircle: Story = { name: "Property Panel · 원 1개", parameters: { controls: { disable: true } }, render: () => } -export const PropertyPanelExpanded: Story = { name: "Property Panel · 모두 펼침", parameters: { controls: { disable: true } }, render: () => } - -/** Design check only: a real header shows one panel for the current selection. */ +/** Design check only: a real header shows one panel for the current selection. + 2 columns × 2 rows at the panels' own size; the Inner scrolls instead of shrinking or wrapping them. */ function PropertyCompare() { const [sizes, setSizes] = useState>({}) + const [log, setLog] = useState([]) const ref = useRef(null) useEffect(() => { const measure = () => setSizes(Object.fromEntries(Array.from(ref.current?.querySelectorAll("[data-compare]") ?? []).map(cell => { @@ -1320,17 +1303,22 @@ function PropertyCompare() { ref.current?.querySelectorAll(".hm-sw-property").forEach(panel => observer.observe(panel)) return () => observer.disconnect() }, []) - return
- {PROPERTY_STATES.map(state =>
-
{state.title}Figma {state.node} · {state.size}측정 {sizes[state.example] ?? "-"}
- -
)} -
+ return <> +

{log.join(" → ") || "Callback 없음"}

+
+
+ {PROPERTY_STATES.map(state =>
+
{state.title}Figma {state.node} · {state.size}측정 {sizes[state.example] ?? "-"}
+ setLog(lines => [...lines.slice(-7), `${state.example}: ${line}`])} /> +
)} +
+
+ } export const PropertyPanelCompare: Story = { name: "Property Panel · 4개 비교", parameters: { controls: { disable: true } }, - render: () => , + render: () => , } /* Shape slot: replaceable area; the values stay in the property rows. */ diff --git a/src/sw/sw-stories.css b/src/sw/sw-stories.css index 7709e14..003e340 100644 --- a/src/sw/sw-stories.css +++ b/src/sw/sw-stories.css @@ -45,6 +45,17 @@ .sw-story-compare { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 24px; } .sw-story-compare__cell { margin: 0; } .sw-story-compare__cell figcaption { display: flex; flex-direction: column; gap: 2px; margin-bottom: 8px; font-size: 12px; color: #3d4a45; } +/* Property panel 4-state comparison (2026-10-19): 2 columns × 2 rows at the panels' own size inside a + viewport-high page. Only the Inner scroller scrolls (both axes); panels are never shrunk or wrapped. */ +.sw-story-compare-page.sb-page { height: 100dvh; min-height: 0; } +.sw-story-compare-page > .sb-page-inner { height: 100%; display: flex; flex-direction: column; } +.sw-story-compare-page .sb-page-header { flex: 0 0 auto; } +.sw-story-compare-page .sw-story-log { flex: 0 0 auto; margin-top: 12px; } +.sw-story-compare-scroll { flex: 1 1 0; min-height: 0; overflow: auto; overscroll-behavior: contain; } +.sw-story-compare.sw-story-compare--grid { display: grid; grid-template-columns: repeat(2, max-content); align-items: start; gap: 24px; width: max-content; } +/* Placement-only exception, same as the Overview Stage: the product clamps a panel to the viewport + height; here the scroller provides the room so the 754px panel keeps its size. */ +.sw-story-compare--grid .hm-sw-property { max-height: none; } .sw-story-detail-comparison { overflow-x: auto; padding: 16px; background: var(--hm-sw-header-layer-menu-background); } .sw-story-detail-row { display: grid; grid-template-columns: 140px repeat(4, 180px); align-items: center; gap: 16px; min-width: 924px; padding: 12px 0; } .sw-story-detail-row > div { display: flex; align-items: center; gap: 8px; }