From cb17578a45c19de9c36885da84a092547e8ebb42 Mon Sep 17 00:00:00 2001 From: MaxLee-dev Date: Wed, 26 Aug 2026 17:51:46 +0900 Subject: [PATCH 01/11] feat(meter): add Meter component --- .changeset/meter-component.md | 5 + .../docs/components/(components)/meter.mdx | 83 ++++++++ .../website/content/docs/components/meta.json | 1 + apps/website/docs-extractor.config.mjs | 3 + .../components/generated/meter-indicator.json | 29 +++ .../components/generated/meter-label.json | 29 +++ .../components/generated/meter-root.json | 87 ++++++++ .../components/generated/meter-track.json | 29 +++ .../components/generated/meter-value.json | 35 ++++ .../demo/examples/meter/default-meter.tsx | 13 ++ .../demo/examples/meter/meter-range.tsx | 19 ++ .../demo/examples/meter/meter-size.tsx | 17 ++ .../demo/examples/meter/meter-variant.tsx | 23 +++ .../meter--test-bed-1-chrome-darwin-.png | Bin 0 -> 18059 bytes .../meter--test-bed-1-edge-darwin-.png | Bin 0 -> 18059 bytes .../meter--test-bed-1-firefox-darwin-.png | Bin 0 -> 20502 bytes .../meter--test-bed-1-safari-darwin-.png | Bin 0 -> 33873 bytes .../core/src/components/meter/index.parts.ts | 7 + packages/core/src/components/meter/index.ts | 1 + .../core/src/components/meter/meter.css.ts | 68 +++++++ .../src/components/meter/meter.stories.tsx | 57 ++++++ .../core/src/components/meter/meter.test.tsx | 108 ++++++++++ packages/core/src/components/meter/meter.tsx | 188 ++++++++++++++++++ packages/core/src/index.ts | 1 + packages/core/src/utils/warn.test.ts | 28 +++ packages/core/src/utils/warn.ts | 14 ++ 26 files changed, 845 insertions(+) create mode 100644 .changeset/meter-component.md create mode 100644 apps/website/content/docs/components/(components)/meter.mdx create mode 100644 apps/website/public/components/generated/meter-indicator.json create mode 100644 apps/website/public/components/generated/meter-label.json create mode 100644 apps/website/public/components/generated/meter-root.json create mode 100644 apps/website/public/components/generated/meter-track.json create mode 100644 apps/website/public/components/generated/meter-value.json create mode 100644 apps/website/src/components/demo/examples/meter/default-meter.tsx create mode 100644 apps/website/src/components/demo/examples/meter/meter-range.tsx create mode 100644 apps/website/src/components/demo/examples/meter/meter-size.tsx create mode 100644 apps/website/src/components/demo/examples/meter/meter-variant.tsx create mode 100644 packages/core/__tests__/screenshots/meter--test-bed-1-chrome-darwin-.png create mode 100644 packages/core/__tests__/screenshots/meter--test-bed-1-edge-darwin-.png create mode 100644 packages/core/__tests__/screenshots/meter--test-bed-1-firefox-darwin-.png create mode 100644 packages/core/__tests__/screenshots/meter--test-bed-1-safari-darwin-.png create mode 100644 packages/core/src/components/meter/index.parts.ts create mode 100644 packages/core/src/components/meter/index.ts create mode 100644 packages/core/src/components/meter/meter.css.ts create mode 100644 packages/core/src/components/meter/meter.stories.tsx create mode 100644 packages/core/src/components/meter/meter.test.tsx create mode 100644 packages/core/src/components/meter/meter.tsx create mode 100644 packages/core/src/utils/warn.test.ts create mode 100644 packages/core/src/utils/warn.ts diff --git a/.changeset/meter-component.md b/.changeset/meter-component.md new file mode 100644 index 000000000..cd24de274 --- /dev/null +++ b/.changeset/meter-component.md @@ -0,0 +1,5 @@ +--- +'@vapor-ui/core': minor +--- + +add new `Meter` component diff --git a/apps/website/content/docs/components/(components)/meter.mdx b/apps/website/content/docs/components/(components)/meter.mdx new file mode 100644 index 000000000..8f6ae545b --- /dev/null +++ b/apps/website/content/docs/components/(components)/meter.mdx @@ -0,0 +1,83 @@ +--- +title: 'Meter' +site_name: 'Meter - Vapor Core' +description: 'Meter는 디스크 사용량이나 점수처럼 알려진 범위 안의 측정값을 표시합니다.' +--- + + +```json doc-gen:file +{ + "file": "./src/components/demo/examples/meter/default-meter.tsx", + "codeblock": true +} +``` + + +`Meter.Label`은 보조기술에 전달되는 이름이기도 합니다. 화면에 이름을 두지 않을 때는 `Meter.Root`에 `aria-label`을 주세요. + +## Property + +--- + +### Size + +`size`로 트랙의 높이를 조절합니다. + + +```json doc-gen:file +{ + "file": "./src/components/demo/examples/meter/meter-size.tsx", + "codeblock": true +} +``` + + +### Variant + +`variant`로 채워진 영역의 색상을 지정합니다. 색만으로는 위험 구간을 알 수 없으므로 레이블에도 함께 적어줍니다. + + +```json doc-gen:file +{ + "file": "./src/components/demo/examples/meter/meter-variant.tsx", + "codeblock": true +} +``` + + +### Range + +`min`, `max`로 범위를, `format`으로 표시 형식을 지정합니다. 값 텍스트가 단위만 담고 있다면 `getAriaValueText`로 무엇을 재는 값인지 함께 읽히도록 합니다. + + +```json doc-gen:file +{ + "file": "./src/components/demo/examples/meter/meter-range.tsx", + "codeblock": true +} +``` + + +## Props Table + +--- + +### Meter.Root + + + +### Meter.Label + + + +### Meter.Value + + + +### Meter.Track + + + +### Meter.Indicator + + diff --git a/apps/website/content/docs/components/meta.json b/apps/website/content/docs/components/meta.json index 022b5f9d7..6319cbecc 100644 --- a/apps/website/content/docs/components/meta.json +++ b/apps/website/content/docs/components/meta.json @@ -30,6 +30,7 @@ "(components)/icon-button.mdx", "(components)/input-group.mdx", "(components)/menu.mdx", + "(components)/meter.mdx", "(components)/multi-select.mdx", "(components)/navigation-menu.mdx", "(components)/pagination.mdx", diff --git a/apps/website/docs-extractor.config.mjs b/apps/website/docs-extractor.config.mjs index f98638287..57c783b62 100644 --- a/apps/website/docs-extractor.config.mjs +++ b/apps/website/docs-extractor.config.mjs @@ -13,5 +13,8 @@ export default defineConfig({ 'button/button.tsx': { include: ['nativeButton'], }, + 'meter/meter.tsx': { + include: ['aria-valuetext'], + }, }, }); diff --git a/apps/website/public/components/generated/meter-indicator.json b/apps/website/public/components/generated/meter-indicator.json new file mode 100644 index 000000000..5fc1bc244 --- /dev/null +++ b/apps/website/public/components/generated/meter-indicator.json @@ -0,0 +1,29 @@ +{ + "name": "Indicator", + "displayName": "Meter.Indicator", + "description": "현재 값에 해당하는 만큼 트랙을 채웁니다. `
` 요소로 렌더링됩니다.", + "props": [ + { + "name": "className", + "type": ["string | ((state: Meter.Indicator.State) => (string | undefined))"], + "required": false, + "description": "요소에 적용된 CSS 클래스 또는 컴포넌트의 상태에 따라 클래스를 반환하는 함수." + }, + { + "name": "style", + "type": [ + "React.CSSProperties | ((state: Meter.Indicator.State) => (React.CSSProperties | undefined))" + ], + "required": false, + "description": "요소에 적용된 인라인 스타일 또는 컴포넌트의 상태에 따라 스타일 객체를 반환하는 함수." + }, + { + "name": "render", + "type": [ + "ReactElement | ((props: HTMLProps, state: Meter.Indicator.State) => ReactElement)" + ], + "required": false, + "description": "컴포넌트의 HTML 요소를 다른 태그로 대체하거나 다른 컴포넌트와 조합할 수 있습니다. 렌더링할 요소를 반환하는 `ReactElement` 또는 함수를 인수로 받습니다." + } + ] +} diff --git a/apps/website/public/components/generated/meter-label.json b/apps/website/public/components/generated/meter-label.json new file mode 100644 index 000000000..95f1e1a05 --- /dev/null +++ b/apps/website/public/components/generated/meter-label.json @@ -0,0 +1,29 @@ +{ + "name": "Label", + "displayName": "Meter.Label", + "description": "미터의 이름을 화면에 보여주고 보조기술에 전달합니다. `` 요소로 렌더링됩니다.", + "props": [ + { + "name": "className", + "type": ["string | ((state: Meter.Label.State) => (string | undefined))"], + "required": false, + "description": "요소에 적용된 CSS 클래스 또는 컴포넌트의 상태에 따라 클래스를 반환하는 함수." + }, + { + "name": "style", + "type": [ + "React.CSSProperties | ((state: Meter.Label.State) => (React.CSSProperties | undefined))" + ], + "required": false, + "description": "요소에 적용된 인라인 스타일 또는 컴포넌트의 상태에 따라 스타일 객체를 반환하는 함수." + }, + { + "name": "render", + "type": [ + "ReactElement | ((props: HTMLProps, state: Meter.Label.State) => ReactElement)" + ], + "required": false, + "description": "컴포넌트의 HTML 요소를 다른 태그로 대체하거나 다른 컴포넌트와 조합할 수 있습니다. 렌더링할 요소를 반환하는 `ReactElement` 또는 함수를 인수로 받습니다." + } + ] +} diff --git a/apps/website/public/components/generated/meter-root.json b/apps/website/public/components/generated/meter-root.json new file mode 100644 index 000000000..2e5124cc5 --- /dev/null +++ b/apps/website/public/components/generated/meter-root.json @@ -0,0 +1,87 @@ +{ + "name": "Root", + "displayName": "Meter.Root", + "description": "알려진 범위 안에서 측정값을 표시하는 컴포넌트입니다. 디스크 사용량이나 점수처럼 값 자체의 크기를 보여줄 때 사용합니다. `
` 요소로 렌더링됩니다.", + "props": [ + { + "name": "value", + "type": ["number"], + "required": true, + "description": "미터의 현재 값" + }, + { + "name": "size", + "type": ["sm", "md", "lg"], + "required": false, + "description": "미터의 크기. 트랙의 높이를 결정합니다.", + "defaultValue": "md" + }, + { + "name": "variant", + "type": ["default", "warning"], + "required": false, + "description": "채워진 영역의 색상", + "defaultValue": "default" + }, + { + "name": "className", + "type": ["string | ((state: Meter.Root.State) => (string | undefined))"], + "required": false, + "description": "요소에 적용된 CSS 클래스 또는 컴포넌트의 상태에 따라 클래스를 반환하는 함수." + }, + { + "name": "aria-valuetext", + "type": ["string"], + "required": false, + "description": "현재 값을 대신해 보조기술에 전달할 텍스트. 값에 따라 달라지는 텍스트가 필요하면 `getAriaValueText`를 사용하세요." + }, + { + "name": "format", + "type": ["Intl.NumberFormatOptions"], + "required": false, + "description": "값의 표시 형식을 지정하는 옵션" + }, + { + "name": "getAriaValueText", + "type": ["(formattedValue: string, value: number) => string"], + "required": false, + "description": "`aria-valuenow`(미터의 현재 값)를 대신할, 사람이 읽을 수 있는 텍스트를 반환하는 함수" + }, + { + "name": "locale", + "type": ["Intl.LocalesArgument"], + "required": false, + "description": "값을 형식화할 때 `Intl.NumberFormat`이 사용할 로케일\n\n기본값은 사용자 런타임의 로케일입니다." + }, + { + "name": "max", + "type": ["number"], + "required": false, + "description": "미터의 최대값", + "defaultValue": "100" + }, + { + "name": "min", + "type": ["number"], + "required": false, + "description": "미터의 최소값", + "defaultValue": "0" + }, + { + "name": "style", + "type": [ + "React.CSSProperties | ((state: Meter.Root.State) => (React.CSSProperties | undefined))" + ], + "required": false, + "description": "요소에 적용된 인라인 스타일 또는 컴포넌트의 상태에 따라 스타일 객체를 반환하는 함수." + }, + { + "name": "render", + "type": [ + "ReactElement | ((props: HTMLProps, state: Meter.Root.State) => ReactElement)" + ], + "required": false, + "description": "컴포넌트의 HTML 요소를 다른 태그로 대체하거나 다른 컴포넌트와 조합할 수 있습니다. 렌더링할 요소를 반환하는 `ReactElement` 또는 함수를 인수로 받습니다." + } + ] +} diff --git a/apps/website/public/components/generated/meter-track.json b/apps/website/public/components/generated/meter-track.json new file mode 100644 index 000000000..dfab9b25c --- /dev/null +++ b/apps/website/public/components/generated/meter-track.json @@ -0,0 +1,29 @@ +{ + "name": "Track", + "displayName": "Meter.Track", + "description": "미터의 전체 범위를 나타내며 Indicator를 담습니다. `
` 요소로 렌더링됩니다.", + "props": [ + { + "name": "className", + "type": ["string | ((state: Meter.Track.State) => (string | undefined))"], + "required": false, + "description": "요소에 적용된 CSS 클래스 또는 컴포넌트의 상태에 따라 클래스를 반환하는 함수." + }, + { + "name": "style", + "type": [ + "React.CSSProperties | ((state: Meter.Track.State) => (React.CSSProperties | undefined))" + ], + "required": false, + "description": "요소에 적용된 인라인 스타일 또는 컴포넌트의 상태에 따라 스타일 객체를 반환하는 함수." + }, + { + "name": "render", + "type": [ + "ReactElement | ((props: HTMLProps, state: Meter.Track.State) => ReactElement)" + ], + "required": false, + "description": "컴포넌트의 HTML 요소를 다른 태그로 대체하거나 다른 컴포넌트와 조합할 수 있습니다. 렌더링할 요소를 반환하는 `ReactElement` 또는 함수를 인수로 받습니다." + } + ] +} diff --git a/apps/website/public/components/generated/meter-value.json b/apps/website/public/components/generated/meter-value.json new file mode 100644 index 000000000..e07825c7c --- /dev/null +++ b/apps/website/public/components/generated/meter-value.json @@ -0,0 +1,35 @@ +{ + "name": "Value", + "displayName": "Meter.Value", + "description": "형식화된 값을 텍스트로 표시합니다. 중복 안내를 막기 위해 보조기술에서는 숨겨집니다. `` 요소로 렌더링됩니다.", + "props": [ + { + "name": "children", + "type": ["(formattedValue: string, value: number) => ReactNode"], + "required": false, + "description": "형식화된 값과 원본 값을 받아 표시할 내용을 반환하는 함수" + }, + { + "name": "className", + "type": ["string | ((state: Meter.Value.State) => (string | undefined))"], + "required": false, + "description": "요소에 적용된 CSS 클래스 또는 컴포넌트의 상태에 따라 클래스를 반환하는 함수." + }, + { + "name": "style", + "type": [ + "React.CSSProperties | ((state: Meter.Value.State) => (React.CSSProperties | undefined))" + ], + "required": false, + "description": "요소에 적용된 인라인 스타일 또는 컴포넌트의 상태에 따라 스타일 객체를 반환하는 함수." + }, + { + "name": "render", + "type": [ + "ReactElement | ((props: HTMLProps, state: Meter.Value.State) => ReactElement)" + ], + "required": false, + "description": "컴포넌트의 HTML 요소를 다른 태그로 대체하거나 다른 컴포넌트와 조합할 수 있습니다. 렌더링할 요소를 반환하는 `ReactElement` 또는 함수를 인수로 받습니다." + } + ] +} diff --git a/apps/website/src/components/demo/examples/meter/default-meter.tsx b/apps/website/src/components/demo/examples/meter/default-meter.tsx new file mode 100644 index 000000000..d415d312f --- /dev/null +++ b/apps/website/src/components/demo/examples/meter/default-meter.tsx @@ -0,0 +1,13 @@ +import { Meter } from '@vapor-ui/core'; + +export default function DefaultMeter() { + return ( + + 저장 공간 + + + + + + ); +} diff --git a/apps/website/src/components/demo/examples/meter/meter-range.tsx b/apps/website/src/components/demo/examples/meter/meter-range.tsx new file mode 100644 index 000000000..765cc68b7 --- /dev/null +++ b/apps/website/src/components/demo/examples/meter/meter-range.tsx @@ -0,0 +1,19 @@ +import { Meter } from '@vapor-ui/core'; + +export default function MeterRange() { + return ( + `8GB 중 ${formattedValue} 사용`} + $css={{ width: '20rem' }} + > + 저장 공간 + + + + + + ); +} diff --git a/apps/website/src/components/demo/examples/meter/meter-size.tsx b/apps/website/src/components/demo/examples/meter/meter-size.tsx new file mode 100644 index 000000000..c316ed590 --- /dev/null +++ b/apps/website/src/components/demo/examples/meter/meter-size.tsx @@ -0,0 +1,17 @@ +import { Meter, VStack } from '@vapor-ui/core'; + +export default function MeterSize() { + return ( + + {(['sm', 'md', 'lg'] as const).map((size) => ( + + {size} + + + + + + ))} + + ); +} diff --git a/apps/website/src/components/demo/examples/meter/meter-variant.tsx b/apps/website/src/components/demo/examples/meter/meter-variant.tsx new file mode 100644 index 000000000..cd503aee1 --- /dev/null +++ b/apps/website/src/components/demo/examples/meter/meter-variant.tsx @@ -0,0 +1,23 @@ +import { Meter, VStack } from '@vapor-ui/core'; + +export default function MeterVariant() { + return ( + + + 저장 공간 + + + + + + + + 저장 공간 부족 + + + + + + + ); +} diff --git a/packages/core/__tests__/screenshots/meter--test-bed-1-chrome-darwin-.png b/packages/core/__tests__/screenshots/meter--test-bed-1-chrome-darwin-.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdb68d74fbbfbf0ea24576d4d8669caeb21bd9c GIT binary patch literal 18059 zcmeI42UL^kw)caKFp7!|kUk@$D0Prtqocy8C>E+TB?2nVfDn36N0crqf>ae11f+-p zp#>E}2Nh`&2oQP+og^eA-+mqEoH^^e=bm-%xp%GaeCy0|4N8E#@AEu+@8ACa_e*hYP#cf@dgwF?wHE%m=EL`E;KP3DqdX|oX4H{G2TXmFr+Nd*3g<@{qj>iR^sT7D>~JI9$UAnA5`6R@BI#S@)6B+d$o6+dp}0qc1ZlSCF+xw zad@QX#XV0ep1tQ(-~(2jf;y)f^o;|0R`k;FizOXza^Ebc&Xsgf7fSnFUfLGEeyzrf zLWMNjE^UD8*!n{VT*t51QG6)W59`+KfLDI{{v5n;_h0*k%!!Vd*2SC_A$jv08^SAc zON_zF#qL**q9~N>Z4_Tt_>TueC4v?|GLvd*YGe!}$G*IoR4SYLR1rW|!H{yS3U}i= zOR&_^tK**vom&Uq-x`gve{K3g4JCfR8=VZ&Klph*VkrSa!Uro`K1H%?TNwLWKT@>meHd$`+VDu zYdSj0&UY1HYGb6)e)B^|?(MEvXwfB5XUb+OeWt&>@t_#+qCz$@-+nh6Zyzi=*+0>) zxgsDap*0&S?#>8xzP%U~dn!gs-@)g8khqbg_veFx`uACq?iEWN8@fI}P_z~%^ptu} zvQuF#^yceiWRtJF3*q7Qp#;(2-r$$^tow1>ZsXf!BP}V`r%!)+eDIe4(!^ofi8KR! zd2uf3g=8KtvS`(UyF=3O9A?mRcZOk0jlTD zM6Bq~R`KfMXf`j;z9FaXSg`XOj+0Fb^yDPC75DlKH^fbLyp&f|j0*6Y;SW3E-j#pe zm5k@E>dusVnPTB6ik}kYkq~Ix(K|&LO$}l#2Q9T*U|L~eKf>Ex{6dY^ReJtP#wa>c ze>63K25TNL{w&^oR@XJvZ{#8GCap*07T?ge6S|60-pt{6kxJc_7a6HKBMBHCpDEvl zy%|kuX!LTVl>SO?8EvJ9!V%_uW`bV5`tix(RTiC6+@w94yf9ZQU8@40T@-arj>X@l zutzj;WULWqq}*=-zO7ViU+{u&=!ULC&y62$wRo;n$ryZ>5+$Y{ZV`FAkK8=gR}w0e z4x5!d^SbSX_hd&9d#+YQ$!3SFFP+v)PHDVNXwLTKd~(PK>&4zFRn7etr$ zUl%B%1ha1UbVc)evg`xrYP#@ak8kz)PrhtURFB}}uoqfm^q0GQeS3=B@=7PNV2_t3 zJM*wq61FP;{CmzyCy~_J-0(_|d;VSih5EZD2F#!Eg=X32TUzHbeM9*+ie0FBzS-Hz z*q^lKWS@7x#R?H6esKS3K{Mb2cVy#&bgdhALQjA8fllj}7 zG7;h7%M?7<@+s-J42Txy3^r;T}7f*kr)yCv)n?-Fr(@;5ZiazBrS?*a88ix6q_Y9gw%k zjojs_P(sZ(bkBn@{9wALI0h9x!I9?Ps(!0zU6f;6R&-dy^_SSn6kVJFd-gqXAORL3 zN>bOS?#_<^Qw2uuCJ;-}5GcMX@S{&e;;DUmh6V=*OP(&xH!9<%x>TNgxhaQ2HN2Qb zMXNW@9T@#LC}F6QU58e!}E_wQHR>Q3b!q$T{?X2~;JglQJz?eR3(=QYx_XVg;{ zQ&isLUN&6h@;S4BMJt2Xi^`WetnK~BpD|_9(*&fuUSDd17&LU^4lCmyYI^i#=T(Z; zI`4m$w9m02QdHFtuFkn7ImcB@LU~ic>b*4fh3uC_4U*d&b)A|LN*uhGyPZW0iVPoi z-Ilk}rIlc8rb}0sdmz|*V`Yr&@T*G@?PC-o9-?fmoL&gVQ@pY5mUOW1m)Dnw>|tdH z&mPN!k;*1*r!3}shscGECR=%I7~|yRgyrqQG)-==w#rD

betL9J9zmRa^YeiDz$ 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 G`u_nU0)%7$ literal 0 HcmV?d00001 diff --git a/packages/core/__tests__/screenshots/meter--test-bed-1-edge-darwin-.png b/packages/core/__tests__/screenshots/meter--test-bed-1-edge-darwin-.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdb68d74fbbfbf0ea24576d4d8669caeb21bd9c GIT binary patch literal 18059 zcmeI42UL^kw)caKFp7!|kUk@$D0Prtqocy8C>E+TB?2nVfDn36N0crqf>ae11f+-p zp#>E}2Nh`&2oQP+og^eA-+mqEoH^^e=bm-%xp%GaeCy0|4N8E#@AEu+@8ACa_e*hYP#cf@dgwF?wHE%m=EL`E;KP3DqdX|oX4H{G2TXmFr+Nd*3g<@{qj>iR^sT7D>~JI9$UAnA5`6R@BI#S@)6B+d$o6+dp}0qc1ZlSCF+xw zad@QX#XV0ep1tQ(-~(2jf;y)f^o;|0R`k;FizOXza^Ebc&Xsgf7fSnFUfLGEeyzrf zLWMNjE^UD8*!n{VT*t51QG6)W59`+KfLDI{{v5n;_h0*k%!!Vd*2SC_A$jv08^SAc zON_zF#qL**q9~N>Z4_Tt_>TueC4v?|GLvd*YGe!}$G*IoR4SYLR1rW|!H{yS3U}i= zOR&_^tK**vom&Uq-x`gve{K3g4JCfR8=VZ&Klph*VkrSa!Uro`K1H%?TNwLWKT@>meHd$`+VDu zYdSj0&UY1HYGb6)e)B^|?(MEvXwfB5XUb+OeWt&>@t_#+qCz$@-+nh6Zyzi=*+0>) zxgsDap*0&S?#>8xzP%U~dn!gs-@)g8khqbg_veFx`uACq?iEWN8@fI}P_z~%^ptu} zvQuF#^yceiWRtJF3*q7Qp#;(2-r$$^tow1>ZsXf!BP}V`r%!)+eDIe4(!^ofi8KR! zd2uf3g=8KtvS`(UyF=3O9A?mRcZOk0jlTD zM6Bq~R`KfMXf`j;z9FaXSg`XOj+0Fb^yDPC75DlKH^fbLyp&f|j0*6Y;SW3E-j#pe zm5k@E>dusVnPTB6ik}kYkq~Ix(K|&LO$}l#2Q9T*U|L~eKf>Ex{6dY^ReJtP#wa>c ze>63K25TNL{w&^oR@XJvZ{#8GCap*07T?ge6S|60-pt{6kxJc_7a6HKBMBHCpDEvl zy%|kuX!LTVl>SO?8EvJ9!V%_uW`bV5`tix(RTiC6+@w94yf9ZQU8@40T@-arj>X@l zutzj;WULWqq}*=-zO7ViU+{u&=!ULC&y62$wRo;n$ryZ>5+$Y{ZV`FAkK8=gR}w0e z4x5!d^SbSX_hd&9d#+YQ$!3SFFP+v)PHDVNXwLTKd~(PK>&4zFRn7etr$ zUl%B%1ha1UbVc)evg`xrYP#@ak8kz)PrhtURFB}}uoqfm^q0GQeS3=B@=7PNV2_t3 zJM*wq61FP;{CmzyCy~_J-0(_|d;VSih5EZD2F#!Eg=X32TUzHbeM9*+ie0FBzS-Hz z*q^lKWS@7x#R?H6esKS3K{Mb2cVy#&bgdhALQjA8fllj}7 zG7;h7%M?7<@+s-J42Txy3^r;T}7f*kr)yCv)n?-Fr(@;5ZiazBrS?*a88ix6q_Y9gw%k zjojs_P(sZ(bkBn@{9wALI0h9x!I9?Ps(!0zU6f;6R&-dy^_SSn6kVJFd-gqXAORL3 zN>bOS?#_<^Qw2uuCJ;-}5GcMX@S{&e;;DUmh6V=*OP(&xH!9<%x>TNgxhaQ2HN2Qb zMXNW@9T@#LC}F6QU58e!}E_wQHR>Q3b!q$T{?X2~;JglQJz?eR3(=QYx_XVg;{ zQ&isLUN&6h@;S4BMJt2Xi^`WetnK~BpD|_9(*&fuUSDd17&LU^4lCmyYI^i#=T(Z; zI`4m$w9m02QdHFtuFkn7ImcB@LU~ic>b*4fh3uC_4U*d&b)A|LN*uhGyPZW0iVPoi z-Ilk}rIlc8rb}0sdmz|*V`Yr&@T*G@?PC-o9-?fmoL&gVQ@pY5mUOW1m)Dnw>|tdH z&mPN!k;*1*r!3}shscGECR=%I7~|yRgyrqQG)-==w#rD

betL9J9zmRa^YeiDz$ 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 G`u_nU0)%7$ literal 0 HcmV?d00001 diff --git a/packages/core/__tests__/screenshots/meter--test-bed-1-firefox-darwin-.png b/packages/core/__tests__/screenshots/meter--test-bed-1-firefox-darwin-.png new file mode 100644 index 0000000000000000000000000000000000000000..69e59b41a2071007eb6060c914e6fea2eb3b63d5 GIT binary patch literal 20502 zcmeIacTiO8w=KE|3W}hpWDpfa1xX?~8URH=&_<9Pl$>*JOem66BuEw{N)XAhF#t-G z3=$A z&|bfG^%jEcfgj0#Q169HtMA|)1UZgezj_JdVK6sH^;&bHPi~HiS^iSYvuB^kO>FW^ z1P&RBJSWaG-wD6Ex&tp|HSzYZ*(MAS69oD!CjFjotF`6^oQEh2qj$n$&Vo9aFu_s z4?(|>R72?x7ew8NTpljSSwXVn==EqcatOWdSNZGL_i+C={dIzouvybJKHcK;q@f>7 zhCVMz-POL^EBUX&WVg;1S$1$YOD$GTn8H?I0+2)gA0N?4o~>H0W3&AFjDEuOcACm{ zCIb)S^2O@y_IgfioY$YtyJI5TKqn0QuQ)JO* zlGeo+QaeT>Zs5{$^()dsIiw=PNEOvP>-~fnxj(LClaHSs^E%7nP(zk^Gf{S!20184 zSo*U$7M4EfJ}i@yU&m@W{_W-T$434e-V0^stQYQGGoaBj^j%|L;w$RBWjSBeqgFED zbYo_)!d(`-x%6xLjd{ZNDOi=d=aYlTnVSi5?==$qwx&C?G~eI#`{KP=<-Ub)#U{|n zZjP+vzri;e5?>Yf+f@(Z2sz$0hU zLd1qj2a?jBaeFbbE|?`;G3;1;T_{Ja+mPqfMZ1AgpOn+b z`tuBN?97U5!(OvFQT)}Lqn#!8!z+07-KhPds8KrRd8#Bw!TRSML5j>suSs_6cgpl+ zti76ZvxpXc6Ps*|c+BP3r`cEIx#Jz{SSD~3O_mz?9@tI7B7Q2db=GWiuAtTFz7dJI zbGtP`2IuXfY@Xn0R{kr1t$lNO%z3G#LrrQTmdTM=^MIlQo;4P00PoPUGee_Hff-KM zOhzEG)U9i;8fD;RnJXWNEPUe%Q{m12aCwWc+S(B+wGbUDIg{bieb;>A#EPzcm1}|& zLs(!|cr>r;w-ZmBTt4_vT4}g`Y!>Z*9TstQLb))zw(>o#Xz%f=jUjK#H}@mYQTfv^ z)egKDKW1wS0q5g~rRN@U=}@)&S!g+JF1LNRd@{z`DWWMeJt2npCtYsBd2A=q;q$&s z?~Mig=*Ca$JXI|N&-+AOar}6A$7dRWIJdt0QBKI_T90A+YO9=FS5ME>YEdIugac`3 zV``1puWqYb5V29Vp*(C`ogbi&-C6V8(Y4MgYHw5GjE^+*!}|zxb+@X;OHPPLcDHGF z!0X5e&7$%bO0+L%7QK-k@1~>U^!@Z|?L9ql#YQ_lOr2h)0+as5k_6w)Ur!~(gFO8l zTaA7nEd|SGC?iHsahW z6V=~4x{=`%$P*cD%&<70NFtb*|4t5S-(JKe(n-yIV5d`zb!@8J>dNzr81mg1bXo5+ zPuJAa7tvZ7gy5YXaBgiDE>u3br0cU>>+ErNKQcxLSCc%~+VQ+h=Y~L)3w{}K{(L6U z=anwj)HbB(YD=TGiO-Ri+1q&+4OiqD@spi}<=%>yLS#*Y{oP8jjxw$yEd+ zg9QKJ<3GyjG4i0&dpyd}?@fZ&Os1axN|%=51R|)@T-<9CMA*41a(zyog(>n^oO8?f z6DF7yk@fX{`*ezf(jUIl^jZA!g(Y{uNr}dW{g{u!5$@CN;X;DT{A_;~;)ho2tnG0- z>z=uqls=1G_Sjf~Bmo>@Mf!+!g6HJ-Fd6u~os+oq)aL==3WYphjeP2S#bULm ztQBVZ2|P?&0~O}mvtO#89D;b zBy6ULszLD>8NR)S2$JJ0T0^qRG79@GQbJa0HrMC-)31kfPasQhE^ajPmFW3>ftPS4 z_jS+*zN<@&pLEWBvp%cioMJ2f^9ftf{t7s8awSYrU!B)yx_GJlt#ixF=vcYl@dnBZ zWNoR*?fhBX<9~wRC*|_eM3iBRZH>?o-WJ?yi_{)}dDZ8U!x<)_#l!f?SOHx9``mJ# zs+9&_{G@W>rYL*fA!CDqqk%2`qi+$E0jwzWz-0s8Ia@JS@4zJ&D%S>1y9X4cmA)8yXc~d|5c!(xcL)2X+ zkHUIibGZ%dz+&NKU1;4G*QZwAmd3V97=0-Exm0SQlnP ze3RQRde!eiqS`S)nDaOb_L}zkHVOGa$yzZxzC64 zITO=oT5}}9so~sov)FJ`9*2|#Ip)?Fi~kXBm2a`9`QQku-XYd*-PO|4BFc!81;(-o zoe@;zeys04D8iTj^>Eo9@$MhYFAsG+MN5og7e&n>Hm3omdo0jD*n*P=hXFeN$379D2*nJ0q z$cIxrs^xC;G4AgO`9oOJPG{U^je=(6qH_6nu+^b|-(~s!~p|h(ibq|x?2fVKXY!wfLYiZYA z&UbQH%#)jR=k_6Qm3JR00!?^2{$aTJf4z9jgfqfII%yqOorpQBKzTLpX~9JFj-}&4c8$}+T#I`AQ2}J z%A~oZM|8^emCK5(LMB)7y|2&RZhyjL5WN7E;LmbBXZkT2uXmRo?M;YAw6 zgM>f*kcR)-V7coJioFM}U3p5kvoQBMO)WmA8%~GI_tR1D?nmht`>>-CX2D1{0$3)3 z@$S8so#n2x4LGaUtTgfVr7uw|$bls+PxqN8@^MmR6#u`0oX%YT zPmq&(Ala5rr^D(}(KpiBkYA(SZRFj7-EU)(>L2q{FLRm2KoM-Rj?Nz&>hQn}Wx+mRY&5W}nPM_f%z z=L(a)kn`d5{%HVgHz8%30;Wu9ziS>J@ueWAWJt0#{(1e?uIo(^lH)I~m`Q3AfsHh4 zp6RzKP{sGYyB^-oUorQJxJV)j@D={JjMuJId+by(U#v^qY2eLk%Hv%9Fgm)H9K^4T z!it&Rd{e&xdL{Oky!w9I{ljU+w*8aqrC7okC*HTt`k4EG<8-ia%QfuItYHU0{YW*L zwN5m{=Usle|ADYr`w%ROq^C^d$c9{;4DEp=ymqfoUOTVzTmdZY} z*wmtK9bOX0NPRhpxV_5CAU9@q{R{HpTt5A^LOg%v(&uR?Cau<5+1HggeO+|?@Dm+( zbZsM!`Tl8xl$BnoSWl?Y?m$Z<3P4lkXA3*jZrtE6yH_0@OjB>s7ZTJE&07Q*ak9Gr z*pXno&&qet1jD$3c4gjF(@+WSr*0a)?XO+C@17a-S#3r!^Mt8!N{Fa(#X`At?yX&l zLmVb;V=X5lv|1SWi~;8~oiIL-9agV+b|c7;a8j!@4hjx_r_MAv9w7T-^IM|>xUda+ zrn(@$Vr^OMgFTGj7KQj9-W31!c(Djk(p04k6cV28!4X}z#=~#61I&tUk(i1j#0Z)5 zer^WXFNKz(>B`lX8(4Vv9T3p*qJ8(m7iIU=VEMb_Ep|eRTzA%bZk~yEX}6)MffFP) zTo@R8gnsjhhtB|E6By7+3_EPvRG7@VcKO!Kdz{n}IJQ=h?U=h<9p7%&P#hdb<{JfY zDmP`;Fm!Fz@EvwU@qHhouFXqaB6Yh7RYU2A1N4y!&zQeVv3YOLmvlU!I@UY>#0E1} zYZvM0hdDk3WpTQw$DmR3iIAA!q*m>ZEgWfQQ6jq^4nV_{9bmCCtHqH=2V0B{r1>9K zG4kn*&wTc1U9L=h!JkEy2yeor-?n7u2EuIXzU(=bh$RwwsSk}k-1>3lpehO^>EyU< z4xmxzY}B_@M&=g`kX}rST`9sKS|1*yL1UV|tIg3l`EBokQ=$^jvwmB4q)n`$ysK4A zBAI6kQrfh;_0kZ2M0j>%rbIRgow%_Sd4Ha=Y2;mVPR zG?O#~VnZHWS`)4d0}@nW^fk3lY^8ILB5H3goYwmK_!iQ;B%`#+w3wF(P}(;6;fGUM zR-+H4CXdxwUoBGovVr@wmu)=Ap6vLNse-F3rJwMTh<2fw_D11~AcN{@%!8MN3FN_$!P#4r`7&kKsr7R$8D#FGbt zX?{sCAc}iNQ1mMheSS>e557HC;%8^5xZ6-v+xs`tP$375ha;9!pPw6?Dl z_60gp{so0MAi^hCFBg*6mpTxe_AMqbFQaQw1ca?B{8I53Z!38UY@o zWCgLymAz|XpFdle21)q0J(oHITX9aD|8t6FS>e8KKrxK>9v7^?m_R0O{Q0q-r{2%r zjQmm!ja`_V^?ocsEjth>la(wZ8-Fb;qqVtB1FEp-`GQa=e;=sp0Vqh02_;OL-t=j- z$E3yWhv*~Dg?uUGWJMHH8!prEz4lvsZx|6K!q^p{@#b(>09t~w^72|Ed^IGr%f&1%>7{NFwHI+D zznS*b8&)9V;CsX9KMm`)SPr4O5nK^Jptz+kofzcXh62OL`@HHHRFGhoRxC0l__fMxjJw@~ z*N8-OkQvc#qiPON`FODlfwb~>w2hy*fPC}LZm_&-sREUIlOn1ACHm?I2%_*|>=|E& zHv9I%<*=ih)@h7Ib8TmuizetZ?eJtpo9js*bV}^vCEXX|(2e-)rwGYj=hhmsw6>#l zW4IcBna}skMJ~Qc-LtOZ^OQlOFzm4~1c`|9{k~{|^J=XRjig zKy}B1en5G>h|j4VCass?Qe}O&UWYX|%_Y3g&#T_zL1njHsnDvw*cQKu<25J&ae88y zjA#Ds(__k1><;n-8}Yn7SW4&q`w)Xm7w3im}H;?l1#9m1{B;jMtjl2-Q9Be|uc&&wnym~fj4;lm>t z8Y%6t);Iw*b91-Wt{*!a!+)uEjKl?Z-1eoZi}yc2-e=h?(xZanmYKc+b2?r_IJAXb zcXT5-DFn}`#)%8rRxZ~~Fb>{=a#i&{`=c_ew1)#7`Hl5qEa{?IQ}jj9<1f0+^%epl zN_QNqn_y#E?)BT*ny3-XB7sg@<+5DMln#tJvXu%}=@g@Ycr=_#e`iqTl?uhev3Ph6 zcLX8MXyFGL; zcU59O*YTH1lMSz;IZ&PWHSg`w{;M zB=|mlJ86lk$Gka(wp>r>iG|Tou?@m(opgHq-d6Iax&m{gYWaWwn;{&3L%m`VEcyp(SeM| zfel|k+vl@|@GZ--2Qj_OD(zGj?U;#o;OWS-RQ@?SMaqD%ZzW_h82@U&A)xOkU4!la zTO1xlRq@p=;R-~syP!A3Sf z2fhto!UTWi4|iN zPbA(WTAe}@KXaLhi$9@t{xfK%hd&8jbSQseR5rr&%@2`i1Obg$_rYnL-H zf$KkCQO}+{Wy6C6%kw`hr(Qr;ub^v(`SNubN|PRO8>mgJzzeQy8)hWH;*s}EX1bH> z2&yp>H|ymlTMy?nk;^A_zZSjloQ)n>qoJSoF7*9k!V%0k-2VFss`5SyEb{yt`UYz~ zYnVmRIVq^f`7iL>J;s~@K_-8{Qw2du&by&1@2Q&{Z|^omJ%8i#))--SewUmh%Cn}N z{6ySrLxc`VVc-j`Eo&?9@6Ar&<@ZW)75iKjz1pKLZC+R<0@39$7BY~`Zfr~$M1QJo zj{|0Z%XuUi7EprIB%{VCWGm5cHmlfNJvwW2_6b%f&lNNc`~tmdP!Ydf!qwgqh|#G* z|FHn&CYdUf(gX2`?@@v!@{FBfLhMQg-7G;_Q8^RmaG4ljVrJMhWSzBV6Qt)xvVKUX zjrFWCu!$ljg^Qw_spR6Em@LnN^5x*R3S8hp1G4@a*Yp)z} zbFA|Ewaq^rH&<7$O2so8C9(boj{O8UcHMFSDO>+(y~=&U@yjVu%b57myQ}{b#)?0I zBrP3sOhyuwbfgz}rGWH#@X03yvTnwphp$gN zpVtxd{SWB-PhEwg1o>_HOYBKih+qo`sLewf;%+-3@sCml`6dy?8fHyVp^K#4iiL)* zCjhv;{A@5{iqw4$dyQ<4tpJCee502i#4VrtH>|A;_sV{$s!3GX7*ys|*dHyTq7CP;AQC(nkdk#ei@LwiGTdDt^oik0cqAp+Ql?XTX7+DIx%s9m^+TUHbMD=A<^~7smIdVp=iOfja>`wCFCQ5`N0uVU{ zl=tOE8|o{8mTCu!`ROUusfc0*Z9 zjgh<kMYI6&9$@n{^D4m0s^~`9XWz zdSW~24NGA|aG|x_iQ^cZ`cRJBQ!VklJ0Bq~n{NRz3{mrz+nK)|fyF3Axt$v0j7BgyK|RV z^;V#I^CT(9cY7U*J*V#<4Xchc)fo37&&GOKM8*NKER7H!Gj?fHnr65I~o+H^;{Pj*b&&BO%5 zYR&g|x_sD>;Z=}vQYq-fkLN|uQq+7oC?_ognaL8gmz&nv`HHL(PWQ@z`nIF;L%;!+ zS3QM5uVkovZtxXhbiC(_I`~QkUU@-3u9Z{P$HQy#jrocMx&{MS1A~^HkXAZjlnH0C z!p08DX*p2l)mlqF@rl>B+aa06w1A02$3qIS9Q_(-2^+#+@;j2e#$s0geuQTG$frln zhqOO}wKp(Ibi@-S4&X3dcgF?kvQ{KLJ;Th~d#ZP-ww9(seWfJO8t&k(7WX;s+Mkpqo>m z$I^?#k~#~_TUT_Yf%kUMiVeJ|3*$_Dgo}6kd9G@6Gzd?4KtYveTQVq0s)VgyQH{3v zOAm&V;77zyNkmKiBl=R+f@P%Jv$zvv?>D?ROx!w8JY~O?s}dO00+ryLYJ#*xNm4xY zk_)nt0i#E>E45QV;xV%8owskMLdCs^!WaC81^o~psdnfHB;GObobWlX(~k;`ge}xC zP!0&X1He@jqn^X3!r9!4NfvEmfSuok^Z23bURXm;^KO_hDK-r+@Vln)a=FH(0(cAQ z01wWW>?pG7>0y*aR4bn{2XnT1gR>wVvf&xD7j20Gp;nIh#xDW1H_#+i{ULPYXvD=H z18-ZD+WQ@-38S}eMg0ueI(A$DnbB<%t``=o`X0ZYtg^CN59nCuM1+FZqY&^%I^ZK7 z8Ss688m#8I6TH?(dk|9TOeXYzEZg5nOIfukFf~8u1!@zmCW{|0{B|+=vKo|1=fTla?umU=C<1a(X2lSWghLca4eW4X=YGt}K ziHa48i_f@1zZHD&1Nl7trY!zcJYd{u@B>_Dvn_1f(DA=1IsJ~{Lw_7)R(M~_^_n@!6JyF&iKUtx$ak#5QK>(e5Xj=1Hi8UxDctldE6Ggo19+@UZz zuqCak25CEwrKvuCl&@y+AC3ipNX+y1QnN}jm;?2>Z*+Om$Dt6#Gr+Lv&GR={jeSh0 ziqBrtd>#SH#kN{TzaYY>$pail-%c|qs0&)?V$Hw{J&k-Z0}*ajD4<;3%cVifjH=0c zgBumYJN!7aNa5kXs?u03ycYYZRt0T(!W)9+s13;0o95%N<2KHno3JU zjV`tXj^zItyt-!O!$~ebf;(a7b@jeew)-x06{)9v*~{kv@*h9v!F-l$*~Yg0#j217 z8?Eu+E=aTw_{vHEi_7?$l-)Czx!!!AV~{eO?=(~T1Ju&hK{ejkpT=NjRXypcVPZGM+%l-*)?n+VDGZGne%~w_#Q#JF{(6 zm$mB9$)+Gzf$mA>H-fwxr#ZSBd-R-DiA-X*0_Zqmdiu4)Oq)Q+0&9aXfSa1Ng+VFo z3^ig}jcMATfy^7t#lYZ5UmkHaRj-N622_4t9rhq+Q$GV!p$|mB$W0LeZPnX=7N?f@ zvgVS@PxEZu(Rb}~LHpXG;{Z5&p4SLHtSx2c-{VhDRG?-)38!Ik7Zyg`@~bX=VF$-U z^ml+1xsvq?+RZj6C`^n%Zz0aT`vBT_H%?^ej4w)x~M3MiCIAMioACp`{p09vmrmsz|$r>0Qb>+fHwcT z&IljLDa-$^)Pw}{)MO|JHsDH)LW)Zd@s$Xz3jFLz&VpbY6X7ZhT5?navx(3VTeo~+ zr@3d+_ZwalJh}cHMaZ2mXI}?jgJPHC+`D75wt#Z-iM1iGUTJfU)m>}a7rcMwP(_*m z^o%@dQR%p&)N#yd?F1SU%i%Q06-o=VFSCkOdhbxUqIe(71cF(r0kmw90@CK(31@VE zj+(fGC~^}DyV=kj*X0^&;^nz-Y^|JRdU^wNfEHReg46}cze=zme(*g2(<=f2lS-#e zD8n`4nSXKDU~m8JPsk^>fch~pY|6As&!zZU%yGZQ8dF8(#(ck+7E@h0``A%f)UKI@ zlo>6=@L(YO@`v7?5-=}L3}dr_l7~o})Hf+-uSOn=Dd{ zJblj5i7LGI85fUMq}Qvy447s4>p5wW*q{vZ;Jg0$re+vg#rvZd8qW(iK1UnI$XR-% zyEMZj_`#Nj1Z?ll_D1WMKWr_#Z3X`~|DxtS$kuAiGADh#CX6k&yz`hg-={?u{uVd1 zDp+sHoad(MZ0~>g8STc*{CIn12B7^fIbL9{IjDiAE!;irrdogbo$7-zZ;ILGV}IH? zY71|7s{3+Cxv4-{X@%`f1Be9rITB>|jeU8-^Tl-9{mUAw>RXA+~ zmPVQ#7Wk^w6Xb=N>VHvnb^J5A`D)ZTbo}A}^Q6y^8AUHWrD{*tVmCQ*h=*I0%u>o| zqtonB74LeCd_x45o>(gfo5_>HO)d{tU|5F`6bAqIH5UILruCvuQ>YH8S#SqpA-M_@&7#aj*>z!SjDk!?5sJ>ZNzWD1Y zry6d1a507uFnV(B`IcLz;-yn7UGFO8}=sChxnJkC+k&NPT-)WaUkGWT-nf*am|4gIt}cn&A- z`~q2;S7zr=2fpAnc}=POE;HCwJI6q1i0Oo0HNnH*stia|$A5w5uP^^6r-tT3@Co0M z1U%lc(kPG!+U0wn)l+pBzRuyIIZHq9=Y72^yMF`+nV!*uJ?-GyePO^2T0(zPkK!y z&wI*&4>Vv1Z~GFCv~uZ%*P8+JA08Gs+tNJf^_c57g8heb<8v*=uNJM zj4ufD;|_w|wb}!s73E54XA(S;2i(|%-;H|QCNuK&^`#p^9i=M+S+77W zKhfG3)IEaQDox=SJLK*U4(cxT2nlN6^gj1ENS_zHupQDFvRV60#hNTEX@qb*JbKDf z+KNw1^u`s}j0#VXULfi;g6h_zd#~H5AJz0i(Q)BQ0{B=weFuQFHP&CT*$d$1XR&Q; zPh|#CibPmltve1!PR}4p3*25Vz;|{h3R>YP7`0>p=+&t+c@!LAY)EOTA=HCGHh~CD zL>53BA;l;ARMyVP-$BaNuQC+NP@KPAv*%tW`qk!;Ny(L0b*JJaO3?<^)3es zM@K{-+yn>xc-GV=lePW8y}+4I@KE)N*PzlcU|=honuA!p>B%FnGAI`|ibC(6VHoUf zPU=0{O=H_Ti`YZ~ha000FJ^&ln$T?T7cL8FZeZ_#I)-8aQW)tl{DR@*z2{FTu_@2Nq;{HZOcfny4*?L66o%x-Zt^G!Z;~;JK7vL zY;BUADraWy3JW93h%g}4fGEp$vW<1^^yC#cVFQ^9wozR}K#(oyxZ~2uC%k#)$J58y z-WpQ+qZWC(-=l`tG3&K9HPJM^AUPKQG9<1d+JnoGZ@0k3B7Lu_s{h@ z%Cyk5?Psqz0N`#C&5vc|Qr%{-WS*2X@|xaDV*E!zWA7>iDmLz^A!N-%UWrPigSDon zDK7v)uPnd%9)2cWRkZIEI?6)j*~ZVViLLTlYalav?5xpunC~k}2&<`&i8~l2Tw*TR zfu2w*3$~4$DUT&Aq`ua>+A)?*-PESQ_teh%0U6D zEO2=I03Eu4n1%R#gL=>PJ~3g#90d6NOpp7GF^;sSotW=0X=N&<|5Iz4qRc%>UFR(U z`qgUPDf&5Euy~^*Af#Jl%uF4R_R=;iq74}VdmeIi8dmV3%>dI8aRNjBInpsMcCa_R zG|!E^+BFQBJz;BoKK4D$Q^4Qv)6lemdb?>A#2Lx-aeg}u^~p2*Sqdi4e6DCjh?&*} zqj?ubZ30D0`1Q-jjq>uT=SE$z*F+5F99SwSl~PS^pS%_)?l`JK8dArc6|J<`d-fr7 z*rAASM~d{fXz#aVr*3Nqb^fB$Mw6AWPo~`lnCaTw*Fw&VFapxbXR1M8TFa>0gttd& zB(gsZBI8g_N&c04g%Py}sz5B6qoR$6ZYc!1X7e6@^oJU3*#BPb^A3<#$dat2^{MGO zdc(A3tiY0(n&#SXOk%N)qay1E7hfw~t*#RCW@S+SQHP=x6mqE83I$tpu%NCxN61DB z?bFh$__vk3i1Aifj*Cn*t-6V7eI{Nr-EYf$OfqOuuP_RYth%x^Z7WXzc{5AmCa<}Y zOB9sZbn+G6EYCdMcwRfP<(PO?tW zJ53WTvU6ZjmZbEDTcH-^AA65u!WoS+==f^>{$!~L=bKPm_JjL4=BcWDlB5keYNA2K z?ngZGS;m12Ytw{z8-zR}Z3}d=q>tb=jazU2Q`kCjr2Tiv{9cv&=P%kTr`s*t!lqrw zqau)IW@c_}EDYWT80m8w?!s{E2$>N|(Xd;MOw&!?XVRCkc|X$A`=;A6Wo?T_gD)CQ zZ*>;u_WAl`#849@-R7dfW0xp~b{mqMpcRTvB_hOaN`LhFFC0UxIVg%AppW+(R~Bh~ zQRZq7M_PcB7ymmY>{hI(Z97;jb!DMhB!3^gJ7=YSCp~Isv#)%K+L2^Mfq%RFdcu?j zLWF=Xm?AQj!j4(~NV;SR)byIGt1Dgz>Zn3F_~LGr*bTP(lTow-lfy|#rGgZh21ri~ zl`Jg5J;BEbhbQR*Y&8MeTIi4;Y3wEe#K!UG;V?xN5vJJ@wj+&nE&ZdIgPuO+O*VpN zi(_DEE`%kdi*##qg|JIp0K|6R63j^|R{{=P??}IS6Y7B%-DaeYRc0XosC4i#o<=pG zL^&|;{b>?z9e0Lp&ZvYe17gfIbm+zlX5wxEH6*3j8^zidUq`##I)H8(>$4`%nJOLE zF3k>@NK&uf+>_x7y(Jac6~{7#lB0;C?jq0o>{oja9*cWa^9mdsav?0j+-S2fghNVn z9ySzh!Qm&Br2p^q^F*Irakdb!eHwTPcwpEu*=cw{iTSLyFG- zjkRR}!ITY(`M`Ws*@X{S5^=cVx-&Ed(%9@uPlRyF$x>mZ<_m9o!FyiCQ&7>Vz+9Ov z(R0wXCsiXwae~npb|EWelDuYP7%PWLqkXgCWc$Z$Aa~2Jpji|4kyAyrOR|`R2n*pv;)JBs;DVqt0R&4 znp6xp_uUaS@e{6#Lo!rB%dGn4F4qAy*(X@9L7O!VVE)NLK<)U4?tnT~0V32%(k~{Mwi+n4XIWI?FyMvdl+)D?wkCxES2Zeq|kXvJ%|= zCFWs@vUTB)_z;tPHl*Gy;_lQLRghFrYU5;tJjOUq;!M z=m4y{Ir_-7@W_gr#ec)~lZzKvOad_M_B=>7I2+#%fVO=*L09uI#caw7KhI|J3jgP- zJ2^TN4)&-O-1ZA-)`q*>74-^F-Hp(3YlWuMpQmz!6NUpYe^p^px2kZ6CHbRZ)?MWj z`j{hig!iaW>6=3;e#qNBXPT@%+$Q)kxIv9LoXLX}=-nQ{7`Iv&aF@6@ITO<{C{S&T{8RNofJX`4M{bH5=(O;a#0@&ub3i8%n$6#hbqeR}6wE2T935GilG_rB zTO?=4NBA$}#E(f~s)1IO(TY#rRY0I2;2z0~n11uU{@4>%rs?|&g}smY-|uL_Kc0&k>dUx6Ir9CD^;Mpui)CLpJW^hUUP@!dsYsneEcQe1580V zE0rVtiwIx?m}c~0X>=%kH3HjTXK;g+hSnKjj_?yI;mM*&`Mdx`(D#@c3EtM^ogs7> zpoFYGxEjP}-je-MATjR=&8m7ujf};?Oa?!R2pz=no;P=qUI(R-O&fahx>^Si7Ec?0 z+2G`JxwPlFV0x|MG1UE$?F%{gK5_BZrhBJ`QiQ!Pj)p+{bBAsb7+2(x^CyR&>ZbROG7o%_y|>3jhRmhdNmnPx@7^?TB#M=O<= z$k25XaJ>^HZ?(fr27?px>2E>zV�d_L-ZIFbkpO6U8YdoL^UKcHPn7*`1Nz`{HH^ zb#+S6q_L>(gD3(w4F(a1^gBgUOZ_8RMwDm6q#IM1hPr2*1dg$>JpnUmM3~sooU*no zw$+T$WMQ+tiV=o$oornJ;9vM&utO)kR3rUVK*v5MM|^Tm9ahOf4D7)@hFF;rE+r}b z!b3{;RhoL9^RSQ|SEmgzN9q=)^EEUqg;VNG=B-Qj)^i_+`ABQ`>?bF(@}ofb7$9fo z;uuX+!EmDI7>)Avxjx~iZbIi}AC{t`2VX(c1qtfln(VjHOw1Ow3n86&MgB z!fGA1G8h9-tk9~)Ts-&GJwLDxd!^}c9Q;`Tx_O?{JjfNxM=w6?nyW&vtFgnc!^j92 zRHVamD-P6H{)Rf=V2jJIF0t;(-JQac$b%DrRx^~DEh?jl@`n4QqEHC+v{;MGMb8R#wRj{;gqm|C^y zwovwnu(k!ltRYDfO(}9+VJJJ056LY13;1s?{%;n}0U1Kxy?MmYli$~=_U&|RPa@xv zmYPV>T(N_duu)iN`EX5Vape$B{3KfWjQ=X@kC@vNg{n$O`y;l${_y`_Il)`ayz0!I9~JMH z+ka$d5@9tN*{~hySYf^@-?=o)pPNcN+tZfCI(#3rW44oKZ#VMG#LT-RUFz`HF3Q~( z6VM5~kSK^Li%5XD2iDfsrVD!N-|dS!_PW}0r_T&8x7XRA(T*lvlw$o_&Ni(I-_ItI zDZ@kGPHxWr&EtkpQsCc^`R1S4`qz4r{_~$a86jEM)7^t0K=$HwhsSt>;mxTa@Sc&H zXmnMGzYrO;ArZuseAnz#M|m9mui$<1=!N-+KY9`5-t|)b`xpPcIsc9vI1m3m9sf=p wXkPqxdi;0oK;z)w_3_`}0p#ERcF1Z^Cw^g?t-|Rk8syg%)UM`UHhTC!03J0%k^lez literal 0 HcmV?d00001 diff --git a/packages/core/__tests__/screenshots/meter--test-bed-1-safari-darwin-.png b/packages/core/__tests__/screenshots/meter--test-bed-1-safari-darwin-.png new file mode 100644 index 0000000000000000000000000000000000000000..c84da179ca5f579fda79640ae78d15501b634969 GIT binary patch literal 33873 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%0DhVk!XRWI1I~@H6gF!a$h9}1121vZrSXBKH>TsbW zzogog*4}>7m2q{`i*o8GFz#Y^moJQ$Gj>BaIqd@Xbi7_Qz1nYFVb-oUd>GVWnQU8W zehw&qBP1B$I1Xg@uM6DQ5U7Ysq(u197n*~COn?v5d~BV=@M}r_o|Q<*vKXNim=E#m z4A@TkEfX-u_aHw@Ki1bDUsQMl*4axZ1JYv$s{OdLCm|FokVKV_4(!jxkfsD;g;d40 zz>{JHCKM}RiS$Q1@N;S?rGr?JtaYL8q*(F)wMPgf2R0gbm`{jz|9ivdiKrsuPeB4I zH}T{!C#~JX4%np$uV0ge66Yc8)HA9RMyC7>4@^7!>q+BDIRZP2BX+_pa3FXHt7LwC z(%ccLMk1#4Jz>Tz(~rPh;NmPNbkx%Wg;nJI3Hj;~9iYV?0PpySU>XF?zeZnI6H$dPO{~I8%7yVm7IF$cZ5C~HLLL8ub|MnmZoPT=| zfHD6-0;R}5knj&Ae23%zKmvgG|3Jb&kno-5{R0VrYW@QW|3Jd`jKe>W@DC*X0|~#x zn|~nTA4vEI5`GDE|3Jb&knj&A{8Fd>$qoPHhVR1OKalVbB>V#j|DS*av>Q9gFc`{f zNzv;{N4yRH{0Sfi{PQP(!vX&pNHB2zJ2-qikv41`UArh<%wgb>; +export type IndicatorVariants = NonNullable>; diff --git a/packages/core/src/components/meter/meter.stories.tsx b/packages/core/src/components/meter/meter.stories.tsx new file mode 100644 index 000000000..480ffa7c9 --- /dev/null +++ b/packages/core/src/components/meter/meter.stories.tsx @@ -0,0 +1,57 @@ +import type { Meta, StoryObj } from '@storybook/react-vite'; + +import { Meter } from '.'; +import { VStack } from '../v-stack'; + +export default { + title: 'Meter', + component: Meter.Root, + argTypes: { + size: { control: 'inline-radio', options: ['sm', 'md', 'lg'] }, + variant: { control: 'inline-radio', options: ['default', 'warning'] }, + value: { control: { type: 'range', min: 0, max: 100 } }, + }, +} as Meta; + +type Story = StoryObj; + +const MeterExample = ({ + label = 'Storage used', + ...args +}: Meter.Root.Props & { label?: string }) => ( + + {label} + + + + + +); + +export const Default: Story = { + args: { value: 42 }, + render: (args) => ( +

+ +
+ ), +}; +export const TestBed: Story = { + render: () => ( + + {(['sm', 'md', 'lg'] as const).map((size) => ( + + {(['default', 'warning'] as const).map((variant) => ( + + ))} + + ))} + + ), +}; diff --git a/packages/core/src/components/meter/meter.test.tsx b/packages/core/src/components/meter/meter.test.tsx new file mode 100644 index 000000000..ea7bafb69 --- /dev/null +++ b/packages/core/src/components/meter/meter.test.tsx @@ -0,0 +1,108 @@ +import { cleanup, render, screen } from '@testing-library/react'; +import { axe } from 'vitest-axe'; + +import { Meter } from '.'; + +const LABEL_TEXT = 'Storage used'; + +const MeterTest = ({ children, ...props }: Partial) => ( + + {children ?? ( + <> + {LABEL_TEXT} + + + + + + )} + +); + +describe('Meter', () => { + afterEach(cleanup); + + it('should have no a11y violations', async () => { + const rendered = render(); + const result = await axe(rendered.container); + + expect(result).toHaveNoViolations(); + }); + + it('should expose role="meter" with the value range', () => { + render(); + const meter = screen.getByRole('meter'); + + expect(meter).toHaveAttribute('aria-valuemin', '0'); + expect(meter).toHaveAttribute('aria-valuemax', '100'); + expect(meter).toHaveAttribute('aria-valuenow', '42'); + }); + + it('should clamp values outside the range', () => { + const { unmount } = render(); + expect(screen.getByRole('meter')).toHaveAttribute('aria-valuenow', '100'); + unmount(); + + render(); + expect(screen.getByRole('meter')).toHaveAttribute('aria-valuenow', '0'); + }); + + it('should use the label as the accessible name', () => { + render(); + + expect(screen.getByRole('meter')).toHaveAccessibleName(LABEL_TEXT); + }); + + it('should format `aria-valuetext` with the given `format` instead of a percentage', () => { + const { unmount } = render(); + expect(screen.getByRole('meter')).toHaveAttribute('aria-valuetext', '42%'); + unmount(); + + render(); + expect(screen.getByRole('meter')).toHaveAttribute('aria-valuetext', '4.2 GB'); + }); + + describe('development warnings', () => { + let warn: ReturnType; + + beforeEach(() => { + warn = vi.spyOn(console, 'warn').mockImplementation(() => {}); + }); + + afterEach(() => { + warn.mockRestore(); + }); + + it('should warn when `min` is not less than `max`', () => { + render(); + + expect(warn).toHaveBeenCalledWith(expect.stringContaining('`min` must be less than')); + }); + + it('should warn when the meter has no accessible name', () => { + render( + + + + + , + ); + + expect(warn).toHaveBeenCalledWith( + expect.stringContaining('Meter has no accessible name'), + ); + }); + + it('should stay silent when only `aria-label` is given', () => { + render( + + + + + , + ); + + expect(warn).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/packages/core/src/components/meter/meter.tsx b/packages/core/src/components/meter/meter.tsx new file mode 100644 index 000000000..4a06932a9 --- /dev/null +++ b/packages/core/src/components/meter/meter.tsx @@ -0,0 +1,188 @@ +'use client'; + +import type { RefObject } from 'react'; +import { forwardRef, useEffect, useRef } from 'react'; + +import { Meter as BaseMeter } from '@base-ui/react/meter'; + +import { createContext } from '~/libs/create-context'; +import { cn } from '~/utils/cn'; +import { createSplitProps } from '~/utils/create-split-props'; +import { resolveStyles } from '~/utils/resolve-styles'; +import type { VaporUIComponentProps } from '~/utils/types'; +import { warn } from '~/utils/warn'; + +import type { IndicatorVariants, TrackVariants } from './meter.css'; +import * as styles from './meter.css'; + +type MeterVariants = TrackVariants & IndicatorVariants; +type MeterSharedProps = MeterVariants; + +type MeterContext = MeterSharedProps & { + /** Set by `Meter.Label` so the root can warn when the meter has no accessible name. */ + labelledRef: RefObject; +}; + +const [MeterProvider, useMeterContext] = createContext({ + name: 'Meter', + hookName: 'useMeterContext', + providerName: 'MeterProvider', +}); + +/* ------------------------------------------------------------------------------------------------- + * Meter.Root + * -----------------------------------------------------------------------------------------------*/ + +/** + * Displays a measurement inside a known range, such as disk usage or a score. Renders a `
` element. + */ +export const MeterRoot = forwardRef((props, ref) => { + const { className, min = 0, max = 100, ...componentProps } = resolveStyles(props); + const [variantProps, otherProps] = createSplitProps()(componentProps, [ + 'variant', + 'size', + ]); + + const labelledRef = useRef(false); + const ariaLabel = otherProps['aria-label']; + const ariaLabelledBy = otherProps['aria-labelledby']; + + useEffect(() => { + if (process.env.NODE_ENV === 'production') return; + + if (min >= max) { + warn( + `Meter received min={${min}} and max={${max}}. \`min\` must be less than \`max\` for the value to be meaningful.`, + ); + } + + if (!labelledRef.current && !ariaLabel && !ariaLabelledBy) { + warn( + 'Meter has no accessible name. Render a `Meter.Label`, or pass `aria-label` / `aria-labelledby` to `Meter.Root`.', + ); + } + }, [min, max, ariaLabel, ariaLabelledBy]); + + return ( + + + + ); +}); +MeterRoot.displayName = 'Meter.Root'; + +/* ------------------------------------------------------------------------------------------------- + * Meter.Label + * -----------------------------------------------------------------------------------------------*/ + +/** + * Names the meter for assistive technology and shows that name on screen. Renders a `` element. + */ +export const MeterLabel = forwardRef((props, ref) => { + const { className, ...componentProps } = resolveStyles(props); + const { labelledRef } = useMeterContext(); + + useEffect(() => { + labelledRef.current = true; + + return () => { + labelledRef.current = false; + }; + }, [labelledRef]); + + return ( + + ); +}); +MeterLabel.displayName = 'Meter.Label'; + +/* ------------------------------------------------------------------------------------------------- + * Meter.Track + * -----------------------------------------------------------------------------------------------*/ + +/** + * Represents the full range of the meter and contains the indicator. Renders a `
` element. + */ +export const MeterTrack = forwardRef((props, ref) => { + const { className, ...componentProps } = resolveStyles(props); + const { size } = useMeterContext(); + + return ( + + ); +}); +MeterTrack.displayName = 'Meter.Track'; + +/* ------------------------------------------------------------------------------------------------- + * Meter.Indicator + * -----------------------------------------------------------------------------------------------*/ + +/** + * Fills the portion of the track that corresponds to the current value. Renders a `
` element. + */ +export const MeterIndicator = forwardRef((props, ref) => { + const { className, ...componentProps } = resolveStyles(props); + const { variant } = useMeterContext(); + + return ( + + ); +}); +MeterIndicator.displayName = 'Meter.Indicator'; + +/* ------------------------------------------------------------------------------------------------- + * Meter.Value + * -----------------------------------------------------------------------------------------------*/ + +/** + * Shows the formatted value as text, hidden from assistive technology to avoid a duplicate announcement. Renders a `` element. + */ +export const MeterValue = forwardRef((props, ref) => { + const { className, ...componentProps } = resolveStyles(props); + + return ( + + ); +}); +MeterValue.displayName = 'Meter.Value'; + +/* -----------------------------------------------------------------------------------------------*/ + +export namespace MeterRoot { + export type State = BaseMeter.Root.State; + export type Props = VaporUIComponentProps & MeterSharedProps; +} + +export namespace MeterLabel { + export type State = BaseMeter.Label.State; + export type Props = VaporUIComponentProps; +} + +export namespace MeterTrack { + export type State = BaseMeter.Track.State; + export type Props = VaporUIComponentProps; +} + +export namespace MeterIndicator { + export type State = BaseMeter.Indicator.State; + export type Props = VaporUIComponentProps; +} + +export namespace MeterValue { + export type State = BaseMeter.Value.State; + export type Props = VaporUIComponentProps; +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 76e3ae689..e1778544e 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -17,6 +17,7 @@ export * from './components/h-stack'; export * from './components/icon-button'; export * from './components/input-group'; export * from './components/menu'; +export * from './components/meter'; export * from './components/multi-select'; export * from './components/navigation-menu'; export * from './components/pagination'; diff --git a/packages/core/src/utils/warn.test.ts b/packages/core/src/utils/warn.test.ts new file mode 100644 index 000000000..4e09ef9ba --- /dev/null +++ b/packages/core/src/utils/warn.test.ts @@ -0,0 +1,28 @@ +import { warn } from './warn'; + +describe('warn', () => { + let warnSpy: ReturnType; + + beforeEach(() => { + warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); + }); + + afterEach(() => { + warnSpy.mockRestore(); + }); + + it('warns once per message', () => { + warn('same message'); + warn('same message'); + + expect(warnSpy).toHaveBeenCalledTimes(1); + expect(warnSpy).toHaveBeenCalledWith('Vapor UI: same message'); + }); + + it('warns for each distinct message', () => { + warn('first message'); + warn('second message'); + + expect(warnSpy).toHaveBeenCalledTimes(2); + }); +}); diff --git a/packages/core/src/utils/warn.ts b/packages/core/src/utils/warn.ts new file mode 100644 index 000000000..8686d2e8e --- /dev/null +++ b/packages/core/src/utils/warn.ts @@ -0,0 +1,14 @@ +const warned = new Set(); + +/** + * Logs a development-only warning, at most once per distinct message. + * + * Guard the call site with `process.env.NODE_ENV !== 'production'` so bundlers + * can drop the message construction from production builds. + */ +export const warn = (message: string) => { + if (process.env.NODE_ENV === 'production' || warned.has(message)) return; + + warned.add(message); + console.warn(`Vapor UI: ${message}`); +}; From 3936204509c08e5428ce08dfb803a48ec92a4de2 Mon Sep 17 00:00:00 2001 From: MaxLee-dev Date: Thu, 27 Aug 2026 10:51:25 +0900 Subject: [PATCH 02/11] feat(meter): add locale of meter format --- apps/website/public/components/generated/meter-root.json | 2 +- packages/core/src/components/meter/meter.test.tsx | 6 ++++++ packages/core/src/components/meter/meter.tsx | 5 ++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/website/public/components/generated/meter-root.json b/apps/website/public/components/generated/meter-root.json index 2e5124cc5..4ed3e6079 100644 --- a/apps/website/public/components/generated/meter-root.json +++ b/apps/website/public/components/generated/meter-root.json @@ -49,7 +49,7 @@ }, { "name": "locale", - "type": ["Intl.LocalesArgument"], + "type": ["ko-KR", "ja-JP", "en-US"], "required": false, "description": "값을 형식화할 때 `Intl.NumberFormat`이 사용할 로케일\n\n기본값은 사용자 런타임의 로케일입니다." }, diff --git a/packages/core/src/components/meter/meter.test.tsx b/packages/core/src/components/meter/meter.test.tsx index ea7bafb69..a9f7b61b4 100644 --- a/packages/core/src/components/meter/meter.test.tsx +++ b/packages/core/src/components/meter/meter.test.tsx @@ -22,6 +22,12 @@ const MeterTest = ({ children, ...props }: Partial) => ( describe('Meter', () => { afterEach(cleanup); + it('should only accept supported locales', () => { + expectTypeOf().toEqualTypeOf< + 'ko-KR' | 'ja-JP' | 'en-US' | undefined + >(); + }); + it('should have no a11y violations', async () => { const rendered = render(); const result = await axe(rendered.container); diff --git a/packages/core/src/components/meter/meter.tsx b/packages/core/src/components/meter/meter.tsx index 4a06932a9..1f83dd217 100644 --- a/packages/core/src/components/meter/meter.tsx +++ b/packages/core/src/components/meter/meter.tsx @@ -164,7 +164,10 @@ MeterValue.displayName = 'Meter.Value'; export namespace MeterRoot { export type State = BaseMeter.Root.State; - export type Props = VaporUIComponentProps & MeterSharedProps; + export type Props = Omit, 'locale'> & + MeterSharedProps & { + locale?: 'ko-KR' | 'ja-JP' | 'en-US'; + }; } export namespace MeterLabel { From 6fc75db1e329f0dcc3d3f6090c23c506c0ee089b Mon Sep 17 00:00:00 2001 From: MaxLee-dev Date: Fri, 28 Aug 2026 16:20:59 +0900 Subject: [PATCH 03/11] style(meter): align styles with Figma spec --- .../meter--test-bed-1-chrome-darwin-.png | Bin 18059 -> 17071 bytes .../meter--test-bed-1-edge-darwin-.png | Bin 18059 -> 17071 bytes .../meter--test-bed-1-firefox-darwin-.png | Bin 20502 -> 19623 bytes .../meter--test-bed-1-safari-darwin-.png | Bin 33873 -> 32752 bytes .../core/src/components/meter/meter.css.ts | 10 +++++----- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/__tests__/screenshots/meter--test-bed-1-chrome-darwin-.png b/packages/core/__tests__/screenshots/meter--test-bed-1-chrome-darwin-.png index 9bdb68d74fbbfbf0ea24576d4d8669caeb21bd9c..b3db171c2dcb414581767d68033894333123b1a4 100644 GIT binary patch literal 17071 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 literal 18059 zcmeI42UL^kw)caKFp7!|kUk@$D0Prtqocy8C>E+TB?2nVfDn36N0crqf>ae11f+-p zp#>E}2Nh`&2oQP+og^eA-+mqEoH^^e=bm-%xp%GaeCy0|4N8E#@AEu+@8ACa_e*hYP#cf@dgwF?wHE%m=EL`E;KP3DqdX|oX4H{G2TXmFr+Nd*3g<@{qj>iR^sT7D>~JI9$UAnA5`6R@BI#S@)6B+d$o6+dp}0qc1ZlSCF+xw zad@QX#XV0ep1tQ(-~(2jf;y)f^o;|0R`k;FizOXza^Ebc&Xsgf7fSnFUfLGEeyzrf zLWMNjE^UD8*!n{VT*t51QG6)W59`+KfLDI{{v5n;_h0*k%!!Vd*2SC_A$jv08^SAc zON_zF#qL**q9~N>Z4_Tt_>TueC4v?|GLvd*YGe!}$G*IoR4SYLR1rW|!H{yS3U}i= zOR&_^tK**vom&Uq-x`gve{K3g4JCfR8=VZ&Klph*VkrSa!Uro`K1H%?TNwLWKT@>meHd$`+VDu zYdSj0&UY1HYGb6)e)B^|?(MEvXwfB5XUb+OeWt&>@t_#+qCz$@-+nh6Zyzi=*+0>) zxgsDap*0&S?#>8xzP%U~dn!gs-@)g8khqbg_veFx`uACq?iEWN8@fI}P_z~%^ptu} zvQuF#^yceiWRtJF3*q7Qp#;(2-r$$^tow1>ZsXf!BP}V`r%!)+eDIe4(!^ofi8KR! zd2uf3g=8KtvS`(UyF=3O9A?mRcZOk0jlTD zM6Bq~R`KfMXf`j;z9FaXSg`XOj+0Fb^yDPC75DlKH^fbLyp&f|j0*6Y;SW3E-j#pe zm5k@E>dusVnPTB6ik}kYkq~Ix(K|&LO$}l#2Q9T*U|L~eKf>Ex{6dY^ReJtP#wa>c ze>63K25TNL{w&^oR@XJvZ{#8GCap*07T?ge6S|60-pt{6kxJc_7a6HKBMBHCpDEvl zy%|kuX!LTVl>SO?8EvJ9!V%_uW`bV5`tix(RTiC6+@w94yf9ZQU8@40T@-arj>X@l zutzj;WULWqq}*=-zO7ViU+{u&=!ULC&y62$wRo;n$ryZ>5+$Y{ZV`FAkK8=gR}w0e z4x5!d^SbSX_hd&9d#+YQ$!3SFFP+v)PHDVNXwLTKd~(PK>&4zFRn7etr$ zUl%B%1ha1UbVc)evg`xrYP#@ak8kz)PrhtURFB}}uoqfm^q0GQeS3=B@=7PNV2_t3 zJM*wq61FP;{CmzyCy~_J-0(_|d;VSih5EZD2F#!Eg=X32TUzHbeM9*+ie0FBzS-Hz z*q^lKWS@7x#R?H6esKS3K{Mb2cVy#&bgdhALQjA8fllj}7 zG7;h7%M?7<@+s-J42Txy3^r;T}7f*kr)yCv)n?-Fr(@;5ZiazBrS?*a88ix6q_Y9gw%k zjojs_P(sZ(bkBn@{9wALI0h9x!I9?Ps(!0zU6f;6R&-dy^_SSn6kVJFd-gqXAORL3 zN>bOS?#_<^Qw2uuCJ;-}5GcMX@S{&e;;DUmh6V=*OP(&xH!9<%x>TNgxhaQ2HN2Qb zMXNW@9T@#LC}F6QU58e!}E_wQHR>Q3b!q$T{?X2~;JglQJz?eR3(=QYx_XVg;{ zQ&isLUN&6h@;S4BMJt2Xi^`WetnK~BpD|_9(*&fuUSDd17&LU^4lCmyYI^i#=T(Z; zI`4m$w9m02QdHFtuFkn7ImcB@LU~ic>b*4fh3uC_4U*d&b)A|LN*uhGyPZW0iVPoi z-Ilk}rIlc8rb}0sdmz|*V`Yr&@T*G@?PC-o9-?fmoL&gVQ@pY5mUOW1m)Dnw>|tdH z&mPN!k;*1*r!3}shscGECR=%I7~|yRgyrqQG)-==w#rD

betL9J9zmRa^YeiDz$ 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 G`u_nU0)%7$ diff --git a/packages/core/__tests__/screenshots/meter--test-bed-1-edge-darwin-.png b/packages/core/__tests__/screenshots/meter--test-bed-1-edge-darwin-.png index 9bdb68d74fbbfbf0ea24576d4d8669caeb21bd9c..b3db171c2dcb414581767d68033894333123b1a4 100644 GIT binary patch literal 17071 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 literal 18059 zcmeI42UL^kw)caKFp7!|kUk@$D0Prtqocy8C>E+TB?2nVfDn36N0crqf>ae11f+-p zp#>E}2Nh`&2oQP+og^eA-+mqEoH^^e=bm-%xp%GaeCy0|4N8E#@AEu+@8ACa_e*hYP#cf@dgwF?wHE%m=EL`E;KP3DqdX|oX4H{G2TXmFr+Nd*3g<@{qj>iR^sT7D>~JI9$UAnA5`6R@BI#S@)6B+d$o6+dp}0qc1ZlSCF+xw zad@QX#XV0ep1tQ(-~(2jf;y)f^o;|0R`k;FizOXza^Ebc&Xsgf7fSnFUfLGEeyzrf zLWMNjE^UD8*!n{VT*t51QG6)W59`+KfLDI{{v5n;_h0*k%!!Vd*2SC_A$jv08^SAc zON_zF#qL**q9~N>Z4_Tt_>TueC4v?|GLvd*YGe!}$G*IoR4SYLR1rW|!H{yS3U}i= zOR&_^tK**vom&Uq-x`gve{K3g4JCfR8=VZ&Klph*VkrSa!Uro`K1H%?TNwLWKT@>meHd$`+VDu zYdSj0&UY1HYGb6)e)B^|?(MEvXwfB5XUb+OeWt&>@t_#+qCz$@-+nh6Zyzi=*+0>) zxgsDap*0&S?#>8xzP%U~dn!gs-@)g8khqbg_veFx`uACq?iEWN8@fI}P_z~%^ptu} zvQuF#^yceiWRtJF3*q7Qp#;(2-r$$^tow1>ZsXf!BP}V`r%!)+eDIe4(!^ofi8KR! zd2uf3g=8KtvS`(UyF=3O9A?mRcZOk0jlTD zM6Bq~R`KfMXf`j;z9FaXSg`XOj+0Fb^yDPC75DlKH^fbLyp&f|j0*6Y;SW3E-j#pe zm5k@E>dusVnPTB6ik}kYkq~Ix(K|&LO$}l#2Q9T*U|L~eKf>Ex{6dY^ReJtP#wa>c ze>63K25TNL{w&^oR@XJvZ{#8GCap*07T?ge6S|60-pt{6kxJc_7a6HKBMBHCpDEvl zy%|kuX!LTVl>SO?8EvJ9!V%_uW`bV5`tix(RTiC6+@w94yf9ZQU8@40T@-arj>X@l zutzj;WULWqq}*=-zO7ViU+{u&=!ULC&y62$wRo;n$ryZ>5+$Y{ZV`FAkK8=gR}w0e z4x5!d^SbSX_hd&9d#+YQ$!3SFFP+v)PHDVNXwLTKd~(PK>&4zFRn7etr$ zUl%B%1ha1UbVc)evg`xrYP#@ak8kz)PrhtURFB}}uoqfm^q0GQeS3=B@=7PNV2_t3 zJM*wq61FP;{CmzyCy~_J-0(_|d;VSih5EZD2F#!Eg=X32TUzHbeM9*+ie0FBzS-Hz z*q^lKWS@7x#R?H6esKS3K{Mb2cVy#&bgdhALQjA8fllj}7 zG7;h7%M?7<@+s-J42Txy3^r;T}7f*kr)yCv)n?-Fr(@;5ZiazBrS?*a88ix6q_Y9gw%k zjojs_P(sZ(bkBn@{9wALI0h9x!I9?Ps(!0zU6f;6R&-dy^_SSn6kVJFd-gqXAORL3 zN>bOS?#_<^Qw2uuCJ;-}5GcMX@S{&e;;DUmh6V=*OP(&xH!9<%x>TNgxhaQ2HN2Qb zMXNW@9T@#LC}F6QU58e!}E_wQHR>Q3b!q$T{?X2~;JglQJz?eR3(=QYx_XVg;{ zQ&isLUN&6h@;S4BMJt2Xi^`WetnK~BpD|_9(*&fuUSDd17&LU^4lCmyYI^i#=T(Z; zI`4m$w9m02QdHFtuFkn7ImcB@LU~ic>b*4fh3uC_4U*d&b)A|LN*uhGyPZW0iVPoi z-Ilk}rIlc8rb}0sdmz|*V`Yr&@T*G@?PC-o9-?fmoL&gVQ@pY5mUOW1m)Dnw>|tdH z&mPN!k;*1*r!3}shscGECR=%I7~|yRgyrqQG)-==w#rD

betL9J9zmRa^YeiDz$ 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 G`u_nU0)%7$ diff --git a/packages/core/__tests__/screenshots/meter--test-bed-1-firefox-darwin-.png b/packages/core/__tests__/screenshots/meter--test-bed-1-firefox-darwin-.png index 69e59b41a2071007eb6060c914e6fea2eb3b63d5..dee0d83817b93c219c56f14479a5954836b9fc7c 100644 GIT binary patch literal 19623 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�d_L-ZIFbkpO6U8YdoL^UKcHPn7*`1Nz`{HH^ zb#+S6q_L>(gD3(w4F(a1^gBgUOZ_8RMwDm6q#IM1hPr2*1dg$>JpnUmM3~sooU*no zw$+T$WMQ+tiV=o$oornJ;9vM&utO)kR3rUVK*v5MM|^Tm9ahOf4D7)@hFF;rE+r}b z!b3{;RhoL9^RSQ|SEmgzN9q=)^EEUqg;VNG=B-Qj)^i_+`ABQ`>?bF(@}ofb7$9fo z;uuX+!EmDI7>)Avxjx~iZbIi}AC{t`2VX(c1qtfln(VjHOw1Ow3n86&MgB z!fGA1G8h9-tk9~)Ts-&GJwLDxd!^}c9Q;`Tx_O?{JjfNxM=w6?nyW&vtFgnc!^j92 zRHVamD-P6H{)Rf=V2jJIF0t;(-JQac$b%DrRx^~DEh?jl@`n4QqEHC+v{;MGMb8R#wRj{;gqm|C^y zwovwnu(k!ltRYDfO(}9+VJJJ056LY13;1s?{%;n}0U1Kxy?MmYli$~=_U&|RPa@xv zmYPV>T(N_duu)iN`EX5Vape$B{3KfWjQ=X@kC@vNg{n$O`y;l${_y`_Il)`ayz0!I9~JMH z+ka$d5@9tN*{~hySYf^@-?=o)pPNcN+tZfCI(#3rW44oKZ#VMG#LT-RUFz`HF3Q~( z6VM5~kSK^Li%5XD2iDfsrVD!N-|dS!_PW}0r_T&8x7XRA(T*lvlw$o_&Ni(I-_ItI zDZ@kGPHxWr&EtkpQsCc^`R1S4`qz4r{_~$a86jEM)7^t0K=$HwhsSt>;mxTa@Sc&H zXmnMGzYrO;ArZuseAnz#M|m9mui$<1=!N-+KY9`5-t|)b`xpPcIsc9vI1m3m9sf=p wXkPqxdi;0oK;z)w_3_`}0p#ERcF1Z^Cw^g?t-|Rk8syg%)UM`UHhTC!03J0%k^lez diff --git a/packages/core/__tests__/screenshots/meter--test-bed-1-safari-darwin-.png b/packages/core/__tests__/screenshots/meter--test-bed-1-safari-darwin-.png index c84da179ca5f579fda79640ae78d15501b634969..087f52cea796ae2c7c9dc117891de36c11f15c7f 100644 GIT binary patch literal 32752 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 literal 33873 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%0DhVk!XRWI1I~@H6gF!a$h9}1121vZrSXBKH>TsbW zzogog*4}>7m2q{`i*o8GFz#Y^moJQ$Gj>BaIqd@Xbi7_Qz1nYFVb-oUd>GVWnQU8W zehw&qBP1B$I1Xg@uM6DQ5U7Ysq(u197n*~COn?v5d~BV=@M}r_o|Q<*vKXNim=E#m z4A@TkEfX-u_aHw@Ki1bDUsQMl*4axZ1JYv$s{OdLCm|FokVKV_4(!jxkfsD;g;d40 zz>{JHCKM}RiS$Q1@N;S?rGr?JtaYL8q*(F)wMPgf2R0gbm`{jz|9ivdiKrsuPeB4I zH}T{!C#~JX4%np$uV0ge66Yc8)HA9RMyC7>4@^7!>q+BDIRZP2BX+_pa3FXHt7LwC z(%ccLMk1#4Jz>Tz(~rPh;NmPNbkx%Wg;nJI3Hj;~9iYV?0PpySU>XF?zeZnI6H$dPO{~I8%7yVm7IF$cZ5C~HLLL8ub|MnmZoPT=| zfHD6-0;R}5knj&Ae23%zKmvgG|3Jb&kno-5{R0VrYW@QW|3Jd`jKe>W@DC*X0|~#x zn|~nTA4vEI5`GDE|3Jb&knj&A{8Fd>$qoPHhVR1OKalVbB>V#j|DS*av>Q9gFc`{f zNzv;{N4yRH{0Sfi{PQP(!vX&pNHB2zJ2-qikv41`UArh<%wgb>; From f00874df36bd6d7a5a32dfb442663d7eaddacf95 Mon Sep 17 00:00:00 2001 From: MaxLee-dev Date: Mon, 31 Aug 2026 08:52:09 +0900 Subject: [PATCH 04/11] refactor(meter): migrate props variant to type --- packages/core/src/components/meter/meter.css.ts | 4 ++-- packages/core/src/components/meter/meter.stories.tsx | 8 ++++---- packages/core/src/components/meter/meter.tsx | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/core/src/components/meter/meter.css.ts b/packages/core/src/components/meter/meter.css.ts index 04bf0d187..ad94dbc83 100644 --- a/packages/core/src/components/meter/meter.css.ts +++ b/packages/core/src/components/meter/meter.css.ts @@ -39,12 +39,12 @@ export const indicator = componentRecipe({ borderRadius: 'inherit', }, - defaultVariants: { variant: 'default' }, + defaultVariants: { type: 'default' }, variants: { /** * Color of the filled portion of the meter. */ - variant: { + type: { default: { backgroundColor: vars.color.background['primary'] }, warning: { backgroundColor: vars.color.background['warning'] }, }, diff --git a/packages/core/src/components/meter/meter.stories.tsx b/packages/core/src/components/meter/meter.stories.tsx index 480ffa7c9..9f02d7441 100644 --- a/packages/core/src/components/meter/meter.stories.tsx +++ b/packages/core/src/components/meter/meter.stories.tsx @@ -41,13 +41,13 @@ export const TestBed: Story = { {(['sm', 'md', 'lg'] as const).map((size) => ( - {(['default', 'warning'] as const).map((variant) => ( + {(['default', 'warning'] as const).map((type) => ( ))} diff --git a/packages/core/src/components/meter/meter.tsx b/packages/core/src/components/meter/meter.tsx index 1f83dd217..cbab8a7d1 100644 --- a/packages/core/src/components/meter/meter.tsx +++ b/packages/core/src/components/meter/meter.tsx @@ -39,7 +39,7 @@ const [MeterProvider, useMeterContext] = createContext({ export const MeterRoot = forwardRef((props, ref) => { const { className, min = 0, max = 100, ...componentProps } = resolveStyles(props); const [variantProps, otherProps] = createSplitProps()(componentProps, [ - 'variant', + 'type', 'size', ]); @@ -132,12 +132,12 @@ MeterTrack.displayName = 'Meter.Track'; */ export const MeterIndicator = forwardRef((props, ref) => { const { className, ...componentProps } = resolveStyles(props); - const { variant } = useMeterContext(); + const { type } = useMeterContext(); return ( ); From c7f2d37a61cc413912c5f2ba64642ace1b97c01f Mon Sep 17 00:00:00 2001 From: MaxLee-dev Date: Mon, 31 Aug 2026 11:28:12 +0900 Subject: [PATCH 05/11] feat(meter): update meter component with new examples and accessibility improvements --- .../docs/components/(components)/meter.mdx | 79 +++++++++++- .../components/generated/meter-root.json | 4 +- .../demo/examples/meter/default-meter.tsx | 2 +- .../demo/examples/meter/meter-auto-update.tsx | 33 +++++ .../demo/examples/meter/meter-range.tsx | 2 +- .../demo/examples/meter/meter-size.tsx | 4 +- .../{meter-variant.tsx => meter-type.tsx} | 6 +- .../core/src/components/meter/meter.test.tsx | 122 ++++++++++++++++++ 8 files changed, 238 insertions(+), 14 deletions(-) create mode 100644 apps/website/src/components/demo/examples/meter/meter-auto-update.tsx rename apps/website/src/components/demo/examples/meter/{meter-variant.tsx => meter-type.tsx} (77%) diff --git a/apps/website/content/docs/components/(components)/meter.mdx b/apps/website/content/docs/components/(components)/meter.mdx index 8f6ae545b..7b8eb8666 100644 --- a/apps/website/content/docs/components/(components)/meter.mdx +++ b/apps/website/content/docs/components/(components)/meter.mdx @@ -13,7 +13,7 @@ description: 'Meter는 디스크 사용량이나 점수처럼 알려진 범위 ``` -`Meter.Label`은 보조기술에 전달되는 이름이기도 합니다. 화면에 이름을 두지 않을 때는 `Meter.Root`에 `aria-label`을 주세요. +`Meter.Label`은 보조기술에 전달되는 이름이기도 합니다. `저장 공간`, `CPU 사용률`처럼 **무엇을 재는 값인지**를 문구에 담으세요. 화면에 이름을 두지 않을 때는 `Meter.Label` 대신 `Meter.Root`에 `aria-label`을 주세요 — 둘을 함께 주면 `aria-label`이 무시됩니다. ## Property @@ -32,14 +32,14 @@ description: 'Meter는 디스크 사용량이나 점수처럼 알려진 범위 ``` -### Variant +### Type -`variant`로 채워진 영역의 색상을 지정합니다. 색만으로는 위험 구간을 알 수 없으므로 레이블에도 함께 적어줍니다. +`type`으로 채워진 영역의 색상을 지정합니다. 색만으로는 위험 구간을 알 수 없으므로 레이블에도 함께 적어줍니다. - + ```json doc-gen:file { - "file": "./src/components/demo/examples/meter/meter-variant.tsx", + "file": "./src/components/demo/examples/meter/meter-type.tsx", "codeblock": true } ``` @@ -58,6 +58,75 @@ description: 'Meter는 디스크 사용량이나 점수처럼 알려진 범위 ``` +## Examples + +--- + +### Auto Update + +값이 스스로 바뀌는 미터에는 갱신을 멈출 수단을 함께 둡니다. 갱신 간격은 초당 3회를 넘기지 않습니다. + + +```json doc-gen:file +{ + "file": "./src/components/demo/examples/meter/meter-auto-update.tsx", + "codeblock": true +} +``` + + +## Accessibility + +--- + +`role="meter"`와 `aria-valuenow` / `aria-valuemin` / `aria-valuemax`는 `Meter`가 알아서 붙입니다. 나머지는 컴포넌트가 대신 지킬 수 없으니 **쓰는 쪽에서 챙겨야 합니다.** + +### 진행률에는 쓰지 마세요 + +`Meter`가 다루는 값은 **범위가 정해진 지금의 측정값**입니다. 디스크 사용량, 점수, 잔량이 여기 해당합니다. 작업이 얼마나 끝났는지 보여주는 진행률이나 상한이 없는 값은 대상이 아닙니다. + +진행률에 `role="meter"`가 붙으면 보조기술은 "완료를 향해 가는 값"이 아니라 "지금 재고 있는 값"으로 읽습니다. `render`로 역할만 갈아끼우지 말고 진행률에 맞는 컴포넌트를 쓰세요. + +### 이름은 하나만 주세요 + +`Meter.Label`을 렌더하면 `Meter.Root`에 준 `aria-label`은 이름 계산에서 밀려납니다. 오류도 경고도 없이 조용히 사라지니 둘 중 하나만 쓰세요. + +- 이름을 화면에 보여준다 → `Meter.Label` +- 화면에 이름을 두지 않는다 → `Meter.Root`의 `aria-label` + +### 같은 값은 같은 문구·같은 형식으로 + +한 측정값이 여러 화면에 나온다면 레이블 문구와 `format`을 맞추세요. 여기서는 `저장 공간 4.2GB`, 저기서는 `디스크 52%`라면 읽는 사람은 둘이 같은 값인지 알 길이 없습니다. + +### 자동으로 갱신된다면 멈출 수단을 두세요 + +값이 5초를 넘겨 저절로 바뀐다면 사용자가 일시정지·정지·숨김 중 하나를 고를 수 있어야 합니다. 갱신 간격은 **초당 3회 이하**로 잡으세요. 그보다 빠르면 화면이 깜빡이는 것처럼 보입니다. 위 [Auto Update](#auto-update)가 그 예입니다. + +### 색을 바꿀 때는 대비를 확인하세요 + +`className`이나 `$css`로 색을 갈아끼우면 기본 색이 맞춰 둔 대비가 무너집니다. + +- `Meter.Label` / `Meter.Value` 텍스트 대 배경 — **4.5:1** 이상 +- `Meter.Indicator` 대 `Meter.Track`, `Meter.Track` 대 페이지 배경 — **3:1** 이상 + +`type="warning"`처럼 색으로 상태를 알린다면 그 상태를 레이블 문구에도 적으세요. 색을 구분하지 못하는 사용자에게는 문구가 유일한 단서입니다. + +### 미터를 가리킬 때 모양·색·위치로만 말하지 마세요 + +"오른쪽 초록 막대를 확인하세요" 같은 안내는 그 색과 위치를 알아채는 사람에게만 통합니다. 미터를 가리킬 때는 레이블 문구를 부르세요. + +### 페이지와 언어가 다르면 표시하세요 + +레이블이 페이지 언어와 다른 언어로 적혀 있다면 그 요소에 `lang`을 주세요. 값 형식도 그 언어를 따라야 한다면 `locale`까지 맞춥니다. + +### 폭을 고정하지 마세요 + +`Meter.Root`는 기본이 `width: 100%`입니다. `width`를 고정하는 대신 `max-width`를 쓰면 320px 폭에서도, 200% 확대에서도 내용이 잘리지 않습니다. + +### 값은 텍스트로 보여주세요 + +`42%` 같은 숫자를 그림으로 만들어 넣지 마세요. `Meter.Value`가 내는 텍스트여야 사용자가 글자 크기나 자간을 바꿨을 때 값도 함께 바뀝니다. + ## Props Table --- diff --git a/apps/website/public/components/generated/meter-root.json b/apps/website/public/components/generated/meter-root.json index 4ed3e6079..af8847db9 100644 --- a/apps/website/public/components/generated/meter-root.json +++ b/apps/website/public/components/generated/meter-root.json @@ -17,10 +17,10 @@ "defaultValue": "md" }, { - "name": "variant", + "name": "type", "type": ["default", "warning"], "required": false, - "description": "채워진 영역의 색상", + "description": "채워진 영역의 색상. 색만으로 상태를 알리지 않도록 레이블 문구에도 함께 적어 주세요.", "defaultValue": "default" }, { diff --git a/apps/website/src/components/demo/examples/meter/default-meter.tsx b/apps/website/src/components/demo/examples/meter/default-meter.tsx index d415d312f..54d43ca38 100644 --- a/apps/website/src/components/demo/examples/meter/default-meter.tsx +++ b/apps/website/src/components/demo/examples/meter/default-meter.tsx @@ -2,7 +2,7 @@ import { Meter } from '@vapor-ui/core'; export default function DefaultMeter() { return ( - + 저장 공간 diff --git a/apps/website/src/components/demo/examples/meter/meter-auto-update.tsx b/apps/website/src/components/demo/examples/meter/meter-auto-update.tsx new file mode 100644 index 000000000..8b6fad100 --- /dev/null +++ b/apps/website/src/components/demo/examples/meter/meter-auto-update.tsx @@ -0,0 +1,33 @@ +import { useEffect, useState } from 'react'; + +import { Button, Meter, VStack } from '@vapor-ui/core'; + +export default function MeterAutoUpdate() { + const [value, setValue] = useState(42); + const [running, setRunning] = useState(true); + + useEffect(() => { + if (!running) return; + + // 1초 간격 — 초당 3회를 넘기지 않는다. + const id = setInterval(() => setValue((prev) => (prev + 7) % 101), 1000); + + return () => clearInterval(id); + }, [running]); + + return ( + + + CPU 사용률 + + + + + + + + + ); +} diff --git a/apps/website/src/components/demo/examples/meter/meter-range.tsx b/apps/website/src/components/demo/examples/meter/meter-range.tsx index 765cc68b7..2a3736f82 100644 --- a/apps/website/src/components/demo/examples/meter/meter-range.tsx +++ b/apps/website/src/components/demo/examples/meter/meter-range.tsx @@ -7,7 +7,7 @@ export default function MeterRange() { max={8} format={{ style: 'unit', unit: 'gigabyte', maximumFractionDigits: 1 }} getAriaValueText={(formattedValue) => `8GB 중 ${formattedValue} 사용`} - $css={{ width: '20rem' }} + $css={{ maxWidth: '20rem' }} > 저장 공간 diff --git a/apps/website/src/components/demo/examples/meter/meter-size.tsx b/apps/website/src/components/demo/examples/meter/meter-size.tsx index c316ed590..da36a9de4 100644 --- a/apps/website/src/components/demo/examples/meter/meter-size.tsx +++ b/apps/website/src/components/demo/examples/meter/meter-size.tsx @@ -2,10 +2,10 @@ import { Meter, VStack } from '@vapor-ui/core'; export default function MeterSize() { return ( - + {(['sm', 'md', 'lg'] as const).map((size) => ( - {size} + 저장 공간 ({size}) diff --git a/apps/website/src/components/demo/examples/meter/meter-variant.tsx b/apps/website/src/components/demo/examples/meter/meter-type.tsx similarity index 77% rename from apps/website/src/components/demo/examples/meter/meter-variant.tsx rename to apps/website/src/components/demo/examples/meter/meter-type.tsx index cd503aee1..4a49ddf2a 100644 --- a/apps/website/src/components/demo/examples/meter/meter-variant.tsx +++ b/apps/website/src/components/demo/examples/meter/meter-type.tsx @@ -1,8 +1,8 @@ import { Meter, VStack } from '@vapor-ui/core'; -export default function MeterVariant() { +export default function MeterType() { return ( - + 저장 공간 @@ -11,7 +11,7 @@ export default function MeterVariant() { - + 저장 공간 부족 diff --git a/packages/core/src/components/meter/meter.test.tsx b/packages/core/src/components/meter/meter.test.tsx index a9f7b61b4..97bb830e6 100644 --- a/packages/core/src/components/meter/meter.test.tsx +++ b/packages/core/src/components/meter/meter.test.tsx @@ -2,6 +2,7 @@ import { cleanup, render, screen } from '@testing-library/react'; import { axe } from 'vitest-axe'; import { Meter } from '.'; +import * as styles from './meter.css'; const LABEL_TEXT = 'Storage used'; @@ -68,6 +69,127 @@ describe('Meter', () => { expect(screen.getByRole('meter')).toHaveAttribute('aria-valuetext', '4.2 GB'); }); + it('should let `getAriaValueText` replace the generated value text', () => { + render( + `${formatted} of 20 GB (${value})`} + />, + ); + + expect(screen.getByRole('meter')).toHaveAttribute( + 'aria-valuetext', + '4.2 GB of 20 GB (4.2)', + ); + }); + + it('should let `aria-valuetext` override the generated value text', () => { + render(); + + expect(screen.getByRole('meter')).toHaveAttribute( + 'aria-valuetext', + '42GB used out of 100GB', + ); + }); + + it('should format the value with the given `locale`', () => { + render( + , + ); + + expect(screen.getByRole('meter')).toHaveAttribute('aria-valuetext', '4.2GB'); + }); + + it('should hide the value text from assistive technology', () => { + render(); + + expect(screen.getByText('42%')).toHaveAttribute('aria-hidden', 'true'); + }); + + it('should not set `aria-labelledby` when no label is rendered', () => { + render( + + + + + , + ); + + expect(screen.getByRole('meter')).not.toHaveAttribute('aria-labelledby'); + }); + + it('should point `aria-labelledby` at the rendered label', () => { + const { container } = render(); + const labelledBy = screen.getByRole('meter').getAttribute('aria-labelledby'); + + expect(labelledBy).toBeTruthy(); + expect(container.querySelector(`#${labelledBy}`)).toHaveTextContent(LABEL_TEXT); + }); + + it('should give each instance its own label id', () => { + const { container } = render( + <> + + + + , + ); + + const ids = screen + .getAllByRole('meter') + .map((meter) => meter.getAttribute('aria-labelledby')); + + expect(new Set(ids).size).toBe(ids.length); + ids.forEach((id) => { + expect(container.querySelector(`#${id}`)).toBeInTheDocument(); + }); + }); + + it('should use `aria-label` as the accessible name', () => { + render( + + + + + , + ); + + expect(screen.getByRole('meter')).toHaveAccessibleName('Disk usage'); + }); + + it('should use `aria-labelledby` as the accessible name', () => { + render( + <> +

Disk usage

+ + + + + + , + ); + + expect(screen.getByRole('meter')).toHaveAccessibleName('Disk usage'); + }); + + it('should apply `size` to the track and `type` to the indicator', () => { + render( + + + + + , + ); + + expect(screen.getByTestId('track')).toHaveClass(styles.track({ size: 'lg' })); + expect(screen.getByTestId('indicator')).toHaveClass(styles.indicator({ type: 'warning' })); + expect(screen.getByTestId('indicator')).not.toHaveClass( + styles.indicator({ type: 'default' }), + ); + }); + describe('development warnings', () => { let warn: ReturnType; From 048e6dd86fab004c9311517a482d69b2d38ba54f Mon Sep 17 00:00:00 2001 From: MaxLee-dev Date: Tue, 1 Sep 2026 11:07:31 +0900 Subject: [PATCH 06/11] refactor(meter): expose Track/Indicator primitives and use typography recipe - Meter.Track now renders Meter.IndicatorPrimitive by default; Meter.TrackPrimitive is exposed for full customization, matching Tabs/Checkbox/Radio - meter.css.ts uses typography({ style }) instead of spreading typographyVariants - meter.stories.tsx argTypes: variant -> type - document the typography() mixin in .claude/rules/styling.md --- .claude/rules/styling.md | 50 +++++++++++- .../docs/components/(components)/meter.mdx | 10 ++- ...or.json => meter-indicator-primitive.json} | 12 +-- .../generated/meter-track-primitive.json | 31 ++++++++ .../components/generated/meter-track.json | 6 +- .../demo/examples/meter/default-meter.tsx | 4 +- .../demo/examples/meter/meter-auto-update.tsx | 4 +- .../demo/examples/meter/meter-range.tsx | 4 +- .../demo/examples/meter/meter-size.tsx | 4 +- .../demo/examples/meter/meter-type.tsx | 8 +- .../core/src/components/meter/index.parts.ts | 3 +- .../core/src/components/meter/meter.css.ts | 28 ++++--- .../src/components/meter/meter.stories.tsx | 6 +- .../core/src/components/meter/meter.test.tsx | 54 ++++++++----- packages/core/src/components/meter/meter.tsx | 79 +++++++++++++------ 15 files changed, 211 insertions(+), 92 deletions(-) rename apps/website/public/components/generated/{meter-indicator.json => meter-indicator-primitive.json} (73%) create mode 100644 apps/website/public/components/generated/meter-track-primitive.json diff --git a/.claude/rules/styling.md b/.claude/rules/styling.md index 2373faf87..742342c42 100644 --- a/.claude/rules/styling.md +++ b/.claude/rules/styling.md @@ -67,12 +67,17 @@ Use when a component part has no variants — a single fixed className is genera import { componentStyle } from '~/styles/mixins/layer-style.css'; export const title = componentStyle({ - fontSize: vars.typography.fontSize['200'], - fontWeight: vars.typography.fontWeight['700'], + paddingInline: vars.size.space['150'], color: vars.color.foreground.normal[200], }); ``` +`componentStyle` also accepts an array — pass mixin classNames alongside the style rule to compose them: + +```ts +export const title = componentStyle([typography({ style: 'subtitle1' }), { gridColumn: '1' }]); +``` + ### `interaction()` mixin — interactive states Include in `base` for any component that responds to hover / active / focus. Implements a `::before` pseudo-element overlay so interaction states work without touching background-color directly. @@ -86,6 +91,47 @@ base: [ ] ``` +### `typography()` mixin — text styles + +Never set `fontSize` / `fontWeight` / `lineHeight` / `letterSpacing` by hand, and never spread `typographyVariants`. Call the `typography()` recipe with one of the named styles (`display1`–`display4`, `heading1`–`heading6`, `subtitle1`–`subtitle2`, `body1`–`body4`, `code1`–`code2`) so every component picks the same four tokens together. + +```ts +import { typography } from '~/styles/mixins/typography.css'; + +// ✅ static part +export const label = componentStyle([typography({ style: 'subtitle1' }), { gridColumn: '1' }]); + +// ✅ inside a recipe — base or a variant value +export const button = componentRecipe({ + base: [typography({ style: 'subtitle1' }), { display: 'inline-flex' }], + variants: { + size: { + sm: [typography({ style: 'subtitle2' }), { height: vars.size.space['300'] }], + md: [typography({ style: 'subtitle1' }), { height: vars.size.space['400'] }], + }, + }, +}); +``` + +```ts +// ❌ raw typography tokens — drifts from the scale +export const label = componentStyle({ + fontSize: vars.typography.fontSize['075'], + fontWeight: vars.typography.fontWeight[500], +}); + +// ❌ spreading the variant map — it exists to feed `variants`, not to style with +export const label = componentStyle({ ...typographyVariants.subtitle1 }); +``` + +`typographyVariants` is the raw style map that backs the recipe. Its only job is to be handed to a `variants` group so a component can expose a `typography` prop (see `Text`, `Field`): + +```ts +export const root = componentRecipe({ + variants: { typography: typographyVariants }, +}); +``` + ## Passing Variants to `recipe` — Two Patterns ### Direct — standalone components or parts that own their variants diff --git a/apps/website/content/docs/components/(components)/meter.mdx b/apps/website/content/docs/components/(components)/meter.mdx index 7b8eb8666..900dcdbca 100644 --- a/apps/website/content/docs/components/(components)/meter.mdx +++ b/apps/website/content/docs/components/(components)/meter.mdx @@ -107,7 +107,7 @@ description: 'Meter는 디스크 사용량이나 점수처럼 알려진 범위 `className`이나 `$css`로 색을 갈아끼우면 기본 색이 맞춰 둔 대비가 무너집니다. - `Meter.Label` / `Meter.Value` 텍스트 대 배경 — **4.5:1** 이상 -- `Meter.Indicator` 대 `Meter.Track`, `Meter.Track` 대 페이지 배경 — **3:1** 이상 +- `Meter.IndicatorPrimitive` 대 `Meter.Track`, `Meter.Track` 대 페이지 배경 — **3:1** 이상 `type="warning"`처럼 색으로 상태를 알린다면 그 상태를 레이블 문구에도 적으세요. 색을 구분하지 못하는 사용자에게는 문구가 유일한 단서입니다. @@ -147,6 +147,10 @@ description: 'Meter는 디스크 사용량이나 점수처럼 알려진 범위 -### Meter.Indicator +### Meter.TrackPrimitive - + + +### Meter.IndicatorPrimitive + + diff --git a/apps/website/public/components/generated/meter-indicator.json b/apps/website/public/components/generated/meter-indicator-primitive.json similarity index 73% rename from apps/website/public/components/generated/meter-indicator.json rename to apps/website/public/components/generated/meter-indicator-primitive.json index 5fc1bc244..ce25e3d17 100644 --- a/apps/website/public/components/generated/meter-indicator.json +++ b/apps/website/public/components/generated/meter-indicator-primitive.json @@ -1,18 +1,20 @@ { - "name": "Indicator", - "displayName": "Meter.Indicator", + "name": "IndicatorPrimitive", + "displayName": "Meter.IndicatorPrimitive", "description": "현재 값에 해당하는 만큼 트랙을 채웁니다. `
` 요소로 렌더링됩니다.", "props": [ { "name": "className", - "type": ["string | ((state: Meter.Indicator.State) => (string | undefined))"], + "type": [ + "string | ((state: Meter.IndicatorPrimitive.State) => (string | undefined))" + ], "required": false, "description": "요소에 적용된 CSS 클래스 또는 컴포넌트의 상태에 따라 클래스를 반환하는 함수." }, { "name": "style", "type": [ - "React.CSSProperties | ((state: Meter.Indicator.State) => (React.CSSProperties | undefined))" + "React.CSSProperties | ((state: Meter.IndicatorPrimitive.State) => (React.CSSProperties | undefined))" ], "required": false, "description": "요소에 적용된 인라인 스타일 또는 컴포넌트의 상태에 따라 스타일 객체를 반환하는 함수." @@ -20,7 +22,7 @@ { "name": "render", "type": [ - "ReactElement | ((props: HTMLProps, state: Meter.Indicator.State) => ReactElement)" + "ReactElement | ((props: HTMLProps, state: Meter.IndicatorPrimitive.State) => ReactElement)" ], "required": false, "description": "컴포넌트의 HTML 요소를 다른 태그로 대체하거나 다른 컴포넌트와 조합할 수 있습니다. 렌더링할 요소를 반환하는 `ReactElement` 또는 함수를 인수로 받습니다." diff --git a/apps/website/public/components/generated/meter-track-primitive.json b/apps/website/public/components/generated/meter-track-primitive.json new file mode 100644 index 000000000..c8777e92f --- /dev/null +++ b/apps/website/public/components/generated/meter-track-primitive.json @@ -0,0 +1,31 @@ +{ + "name": "TrackPrimitive", + "displayName": "Meter.TrackPrimitive", + "description": "미터의 전체 범위를 나타내며, 내부에 인디케이터를 포함하지 않습니다. `
` 요소로 렌더링됩니다.", + "props": [ + { + "name": "className", + "type": [ + "string | ((state: Meter.TrackPrimitive.State) => (string | undefined))" + ], + "required": false, + "description": "요소에 적용된 CSS 클래스 또는 컴포넌트의 상태에 따라 클래스를 반환하는 함수." + }, + { + "name": "style", + "type": [ + "React.CSSProperties | ((state: Meter.TrackPrimitive.State) => (React.CSSProperties | undefined))" + ], + "required": false, + "description": "요소에 적용된 인라인 스타일 또는 컴포넌트의 상태에 따라 스타일 객체를 반환하는 함수." + }, + { + "name": "render", + "type": [ + "ReactElement | ((props: HTMLProps, state: Meter.TrackPrimitive.State) => ReactElement)" + ], + "required": false, + "description": "컴포넌트의 HTML 요소를 다른 태그로 대체하거나 다른 컴포넌트와 조합할 수 있습니다. 렌더링할 요소를 반환하는 `ReactElement` 또는 함수를 인수로 받습니다." + } + ] +} diff --git a/apps/website/public/components/generated/meter-track.json b/apps/website/public/components/generated/meter-track.json index dfab9b25c..5ef69243e 100644 --- a/apps/website/public/components/generated/meter-track.json +++ b/apps/website/public/components/generated/meter-track.json @@ -1,11 +1,13 @@ { "name": "Track", "displayName": "Meter.Track", - "description": "미터의 전체 범위를 나타내며 Indicator를 담습니다. `
` 요소로 렌더링됩니다.", + "description": "미터의 전체 범위를 나타내며, 내부적으로 `Meter.IndicatorPrimitive`를 포함합니다. `
` 요소로 렌더링됩니다.", "props": [ { "name": "className", - "type": ["string | ((state: Meter.Track.State) => (string | undefined))"], + "type": [ + "string | ((state: Meter.Track.State) => (string | undefined))" + ], "required": false, "description": "요소에 적용된 CSS 클래스 또는 컴포넌트의 상태에 따라 클래스를 반환하는 함수." }, diff --git a/apps/website/src/components/demo/examples/meter/default-meter.tsx b/apps/website/src/components/demo/examples/meter/default-meter.tsx index 54d43ca38..d45e3deba 100644 --- a/apps/website/src/components/demo/examples/meter/default-meter.tsx +++ b/apps/website/src/components/demo/examples/meter/default-meter.tsx @@ -5,9 +5,7 @@ export default function DefaultMeter() { 저장 공간 - - - + ); } diff --git a/apps/website/src/components/demo/examples/meter/meter-auto-update.tsx b/apps/website/src/components/demo/examples/meter/meter-auto-update.tsx index 8b6fad100..e75195306 100644 --- a/apps/website/src/components/demo/examples/meter/meter-auto-update.tsx +++ b/apps/website/src/components/demo/examples/meter/meter-auto-update.tsx @@ -20,9 +20,7 @@ export default function MeterAutoUpdate() { CPU 사용률 - - - +