@hjmds/design-contracts 1.38.1 → 1.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/catalog.d.ts +12 -0
- package/dist/catalog.d.ts.map +1 -1
- package/dist/floating-action-button.d.ts +14 -2
- package/dist/floating-action-button.d.ts.map +1 -1
- package/dist/floating-action-button.js +5 -3
- package/dist/floating-action-button.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/docs/floating-action-button.md +6 -4
- package/docs/generated/component-maturity.md +1 -1
- package/docs/generated/renderer-evidence.json +3 -3
- package/docs/generated/renderer-evidence.md +1 -1
- package/docs/generated/showcase-manifest.json +1 -1
- package/docs/optional-adapters.md +1 -1
- package/docs/toast.md +11 -0
- package/docs/usage/components/chart.md +5 -1
- package/docs/usage/components/floating-action-button.md +5 -4
- package/docs/usage/components/image.md +18 -3
- package/docs/usage/components/sheet.md +1 -0
- package/package.json +1 -1
package/dist/catalog.d.ts
CHANGED
|
@@ -7661,6 +7661,18 @@ export declare const recipeRegistry: {
|
|
|
7661
7661
|
readonly hitSlop: 0;
|
|
7662
7662
|
readonly glyph: "lg";
|
|
7663
7663
|
};
|
|
7664
|
+
readonly sizes: {
|
|
7665
|
+
readonly medium: {
|
|
7666
|
+
readonly diameter: 44;
|
|
7667
|
+
readonly hitSlop: 0;
|
|
7668
|
+
readonly glyph: "md";
|
|
7669
|
+
};
|
|
7670
|
+
readonly large: {
|
|
7671
|
+
readonly diameter: 52;
|
|
7672
|
+
readonly hitSlop: 0;
|
|
7673
|
+
readonly glyph: "lg";
|
|
7674
|
+
};
|
|
7675
|
+
};
|
|
7664
7676
|
readonly tone: {
|
|
7665
7677
|
readonly background: Readonly<{
|
|
7666
7678
|
source: "theme";
|
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GjB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GjB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,cAAc,CAAC"}
|
|
@@ -71,9 +71,9 @@ export declare function resolveFloatingActionButtonLayoutMode(signal: FloatingAc
|
|
|
71
71
|
* inset is additive, matching every other bottom-anchored recipe in this
|
|
72
72
|
* package (BottomNavigation, Sheet, Toast) rather than a `max()` clamp.
|
|
73
73
|
*/
|
|
74
|
-
export declare function resolveFloatingActionButtonContentClearance(safeAreaBottomInset: number): number;
|
|
74
|
+
export declare function resolveFloatingActionButtonContentClearance(safeAreaBottomInset: number, size?: "medium" | "large"): number;
|
|
75
75
|
/**
|
|
76
|
-
* Both layout modes reuse Button/IconButton
|
|
76
|
+
* Both layout modes reuse the selected Button/IconButton tier so the control
|
|
77
77
|
* never changes height while morphing between a circle and a pill — only
|
|
78
78
|
* shape and content change, per the brief's "don't fork the Button recipe."
|
|
79
79
|
*/
|
|
@@ -87,6 +87,18 @@ export declare const floatingActionButtonRecipe: {
|
|
|
87
87
|
readonly hitSlop: 0;
|
|
88
88
|
readonly glyph: "lg";
|
|
89
89
|
};
|
|
90
|
+
readonly sizes: {
|
|
91
|
+
readonly medium: {
|
|
92
|
+
readonly diameter: 44;
|
|
93
|
+
readonly hitSlop: 0;
|
|
94
|
+
readonly glyph: "md";
|
|
95
|
+
};
|
|
96
|
+
readonly large: {
|
|
97
|
+
readonly diameter: 52;
|
|
98
|
+
readonly hitSlop: 0;
|
|
99
|
+
readonly glyph: "lg";
|
|
100
|
+
};
|
|
101
|
+
};
|
|
90
102
|
readonly tone: {
|
|
91
103
|
readonly background: Readonly<{
|
|
92
104
|
source: "theme";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floating-action-button.d.ts","sourceRoot":"","sources":["../src/floating-action-button.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,WAAW,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,MAAM,gCAAgC,GACxC,iBAAiB,GACjB,cAAc,GACd,MAAM,CAAC;AAEX,MAAM,MAAM,kCAAkC,CAC5C,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,0CAA0C,CACpD,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,8BAA8B,CACxC,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,IAAI,EAAE,kCAAkC,CAAC,QAAQ,CAAC,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,8BAA8B,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,MAAM,sCAAsC,CAChD,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,IAAI,EAAE,0CAA0C,CAAC,QAAQ,CAAC,CAAC;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,8BAA8B,CAAC;IAC3C,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC,CAAC;AAEH,eAAO,MAAM,oCAAoC;;CAE4B,CAAC;AAoC9E,wBAAgB,sCAAsC,CAAC,QAAQ,SAAS,MAAM,EAC5E,UAAU,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GACnD,IAAI,CAsBN;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CAAC,QAAQ,SAAS,MAAM,EAC3E,UAAU,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GACnD,sCAAsC,CAAC,QAAQ,CAAC,CASlD;AAED;;;;;;GAMG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,gCAAgC,EACxC,YAAY,GAAE,8BAAgF,GAC7F,8BAA8B,CAYhC;AAED;;;;;;GAMG;AACH,wBAAgB,2CAA2C,CACzD,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"floating-action-button.d.ts","sourceRoot":"","sources":["../src/floating-action-button.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,WAAW,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,MAAM,gCAAgC,GACxC,iBAAiB,GACjB,cAAc,GACd,MAAM,CAAC;AAEX,MAAM,MAAM,kCAAkC,CAC5C,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,0CAA0C,CACpD,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,8BAA8B,CACxC,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,IAAI,EAAE,kCAAkC,CAAC,QAAQ,CAAC,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,8BAA8B,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,MAAM,sCAAsC,CAChD,QAAQ,SAAS,MAAM,GAAG,gBAAgB,IACxC,QAAQ,CAAC;IACX,IAAI,EAAE,0CAA0C,CAAC,QAAQ,CAAC,CAAC;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,8BAA8B,CAAC;IAC3C,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC,CAAC;AAEH,eAAO,MAAM,oCAAoC;;CAE4B,CAAC;AAoC9E,wBAAgB,sCAAsC,CAAC,QAAQ,SAAS,MAAM,EAC5E,UAAU,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GACnD,IAAI,CAsBN;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CAAC,QAAQ,SAAS,MAAM,EAC3E,UAAU,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GACnD,sCAAsC,CAAC,QAAQ,CAAC,CASlD;AAED;;;;;;GAMG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,gCAAgC,EACxC,YAAY,GAAE,8BAAgF,GAC7F,8BAA8B,CAYhC;AAED;;;;;;GAMG;AACH,wBAAgB,2CAA2C,CACzD,mBAAmB,EAAE,MAAM,EAC3B,IAAI,GAAE,QAAQ,GAAG,OAAiB,GACjC,MAAM,CAWR;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQrC;;;;;;;;;OASG;;;;;;;;;;;;IAOH;;;;;OAKG;;;;;;CAEK,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,kaAUxC,CAAC"}
|
|
@@ -89,16 +89,16 @@ export function resolveFloatingActionButtonLayoutMode(signal, previousMode = flo
|
|
|
89
89
|
* inset is additive, matching every other bottom-anchored recipe in this
|
|
90
90
|
* package (BottomNavigation, Sheet, Toast) rather than a `max()` clamp.
|
|
91
91
|
*/
|
|
92
|
-
export function resolveFloatingActionButtonContentClearance(safeAreaBottomInset) {
|
|
92
|
+
export function resolveFloatingActionButtonContentClearance(safeAreaBottomInset, size = "large") {
|
|
93
93
|
if (!Number.isFinite(safeAreaBottomInset) || safeAreaBottomInset < 0) {
|
|
94
94
|
throw new RangeError("FloatingActionButton safeAreaBottomInset must be a non-negative finite number");
|
|
95
95
|
}
|
|
96
|
-
return (floatingActionButtonRecipe.
|
|
96
|
+
return (floatingActionButtonRecipe.sizes[size].diameter +
|
|
97
97
|
floatingActionButtonRecipe.margin * 2 +
|
|
98
98
|
safeAreaBottomInset);
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
101
|
-
* Both layout modes reuse Button/IconButton
|
|
101
|
+
* Both layout modes reuse the selected Button/IconButton tier so the control
|
|
102
102
|
* never changes height while morphing between a circle and a pill — only
|
|
103
103
|
* shape and content change, per the brief's "don't fork the Button recipe."
|
|
104
104
|
*/
|
|
@@ -106,6 +106,8 @@ export const floatingActionButtonRecipe = {
|
|
|
106
106
|
slots: ["root", "icon", "label"],
|
|
107
107
|
defaults: { layoutMode: "expanded" },
|
|
108
108
|
circle: iconButtonRecipe.sizes.large,
|
|
109
|
+
// BurnTok requested a smaller FAB; reuse existing control tiers rather than product overrides.
|
|
110
|
+
sizes: { medium: iconButtonRecipe.sizes.medium, large: iconButtonRecipe.sizes.large },
|
|
109
111
|
tone: iconButtonRecipe.tones.primary,
|
|
110
112
|
shape: iconButtonRecipe.shapes.circle,
|
|
111
113
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floating-action-button.js","sourceRoot":"","sources":["../src/floating-action-button.ts"],"names":[],"mappings":"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","sourcesContent":["import { iconButtonRecipe } from \"./icon-button-recipe.js\";\nimport { motionPreset, shadow, spacing } from \"./foundations.js\";\nimport type { SemanticIconName } from \"./icon.js\";\n\n/**\n * FloatingActionButton is not a smaller BottomCTA. BottomCTA is the screen's\n * conclusion (full-width, end of a flow, `bottomCtaRecipe`'s full-bleed\n * anatomy). FloatingActionButton is a single create action that floats above\n * scrollable content the user is still browsing — it never spans the width\n * and never claims to be the screen's only action. That is the entire\n * justification for a second contract instead of a BottomCTA variant.\n */\nexport type FloatingActionButtonLayoutMode = \"expanded\" | \"collapsed\";\n\n/**\n * The renderer owns scroll listening and thresholding (same boundary as\n * LoadMore's IntersectionObserver/onEndReached and Popover's AnchoredOverlay —\n * this package never touches a scroll container). It only reports a discrete\n * signal; `resolveFloatingActionButtonLayoutMode` turns that into the next\n * mode without the renderer re-deriving the collapse/expand rule itself.\n */\nexport type FloatingActionButtonScrollSignal =\n | \"away-from-start\"\n | \"toward-start\"\n | \"idle\";\n\nexport type FloatingActionButtonIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative?: true;\n accessibilityLabel?: never;\n size?: never;\n tone?: never;\n weight?: never;\n directionality?: never;\n}>;\n\nexport type ResolvedFloatingActionButtonIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{ name: IconName; decorative: true }>;\n\n/**\n * `label` is required even though `collapsed` mode shows only the icon.\n * The action's name must never shrink to nothing just because its visible\n * chrome did — `resolveFloatingActionButtonDescriptor` always reports the\n * full label as the accessible name in both layout modes.\n */\nexport type FloatingActionButtonDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n icon: FloatingActionButtonIconDescriptor<IconName>;\n label: string;\n layoutMode?: FloatingActionButtonLayoutMode;\n}>;\n\nexport type ResolvedFloatingActionButtonDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n icon: ResolvedFloatingActionButtonIconDescriptor<IconName>;\n label: string;\n layoutMode: FloatingActionButtonLayoutMode;\n resolvedAccessibilityLabel: string;\n}>;\n\nexport const floatingActionButtonBehaviorDefaults = {\n layoutMode: \"expanded\",\n} as const satisfies Readonly<{ layoutMode: FloatingActionButtonLayoutMode }>;\n\nfunction validateTrimmedCopy(value: unknown, field: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${field} must not be empty`);\n }\n if (value !== value.trim()) {\n throw new TypeError(`${field} must not start or end with whitespace`);\n }\n}\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction rejectUnknownKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n field: string,\n): void {\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) {\n throw new TypeError(`Unsupported FloatingActionButton ${field} field: ${key}`);\n }\n }\n}\n\nconst descriptorKeys = new Set([\"icon\", \"label\", \"layoutMode\"]);\nconst iconKeys = new Set([\"name\", \"decorative\"]);\nconst layoutModes = new Set<FloatingActionButtonLayoutMode>([\"expanded\", \"collapsed\"]);\nconst scrollSignals = new Set<FloatingActionButtonScrollSignal>([\n \"away-from-start\",\n \"toward-start\",\n \"idle\",\n]);\n\nexport function validateFloatingActionButtonDescriptor<IconName extends string>(\n descriptor: FloatingActionButtonDescriptor<IconName>,\n): void {\n if (!isObject(descriptor)) {\n throw new TypeError(\"FloatingActionButton descriptor must be an object\");\n }\n rejectUnknownKeys(descriptor, descriptorKeys, \"descriptor\");\n validateTrimmedCopy(descriptor.label, \"FloatingActionButton label\");\n if (!isObject(descriptor.icon)) {\n throw new TypeError(\"FloatingActionButton icon must be an object\");\n }\n rejectUnknownKeys(descriptor.icon, iconKeys, \"icon\");\n if (descriptor.icon.decorative !== undefined && descriptor.icon.decorative !== true) {\n throw new TypeError(\"FloatingActionButton icon must be decorative\");\n }\n validateTrimmedCopy(descriptor.icon.name, \"FloatingActionButton icon name\");\n if (\n descriptor.layoutMode !== undefined &&\n !layoutModes.has(descriptor.layoutMode)\n ) {\n throw new TypeError(\n `Unsupported FloatingActionButton layoutMode: ${String(descriptor.layoutMode)}`,\n );\n }\n}\n\n/**\n * The label is the accessible name in every mode — `collapsed` never falls\n * back to the icon name, because an icon-only glyph is not a stable\n * accessible name across products or locales.\n */\nexport function resolveFloatingActionButtonDescriptor<IconName extends string>(\n descriptor: FloatingActionButtonDescriptor<IconName>,\n): ResolvedFloatingActionButtonDescriptor<IconName> {\n validateFloatingActionButtonDescriptor(descriptor);\n return {\n icon: { name: descriptor.icon.name, decorative: true },\n label: descriptor.label,\n layoutMode:\n descriptor.layoutMode ?? floatingActionButtonBehaviorDefaults.layoutMode,\n resolvedAccessibilityLabel: descriptor.label,\n };\n}\n\n/**\n * Collapsing on `away-from-start` and expanding on `toward-start` mirrors the\n * common list-scroll convention (hide the label while the user reads,\n * reintroduce it once they scroll back toward the top). `idle` intentionally\n * keeps whatever mode is already active instead of guessing, so a renderer\n * that reports \"no delta since last frame\" cannot cause the button to flicker.\n */\nexport function resolveFloatingActionButtonLayoutMode(\n signal: FloatingActionButtonScrollSignal,\n previousMode: FloatingActionButtonLayoutMode = floatingActionButtonBehaviorDefaults.layoutMode,\n): FloatingActionButtonLayoutMode {\n if (!scrollSignals.has(signal)) {\n throw new TypeError(`Unsupported FloatingActionButton scroll signal: ${String(signal)}`);\n }\n if (!layoutModes.has(previousMode)) {\n throw new TypeError(\n `Unsupported FloatingActionButton layoutMode: ${String(previousMode)}`,\n );\n }\n if (signal === \"away-from-start\") return \"collapsed\";\n if (signal === \"toward-start\") return \"expanded\";\n return previousMode;\n}\n\n/**\n * Answers \"who reserves the content's bottom padding\" so both platform\n * renderers compute the same number instead of each re-deriving\n * diameter + margin arithmetic independently and drifting apart. The safe-area\n * inset is additive, matching every other bottom-anchored recipe in this\n * package (BottomNavigation, Sheet, Toast) rather than a `max()` clamp.\n */\nexport function resolveFloatingActionButtonContentClearance(\n safeAreaBottomInset: number,\n): number {\n if (!Number.isFinite(safeAreaBottomInset) || safeAreaBottomInset < 0) {\n throw new RangeError(\n \"FloatingActionButton safeAreaBottomInset must be a non-negative finite number\",\n );\n }\n return (\n floatingActionButtonRecipe.circle.diameter +\n floatingActionButtonRecipe.margin * 2 +\n safeAreaBottomInset\n );\n}\n\n/**\n * Both layout modes reuse Button/IconButton's `large` tier so the control\n * never changes height while morphing between a circle and a pill — only\n * shape and content change, per the brief's \"don't fork the Button recipe.\"\n */\nexport const floatingActionButtonRecipe = {\n slots: [\"root\", \"icon\", \"label\"] as const,\n defaults: { layoutMode: \"expanded\" } as const,\n circle: iconButtonRecipe.sizes.large,\n tone: iconButtonRecipe.tones.primary,\n shape: iconButtonRecipe.shapes.circle,\n /**\n * Button의 large 티어와 같은 값이다. 그런데 `buttonRecipe`를 import하지는 않는다 —\n * 그것은 `recipes.ts`에 있고 그 파일은 `component-recipes.ts`를 import하는 **하류**라,\n * 여기서 거슬러 올라가면 순환이 된다(ESM은 재수출을 본문보다 먼저 평가해서\n * `buttonRecipe`가 undefined인 채로 이 모듈이 실행된다).\n *\n * 대신 같은 foundations 토큰을 직접 읽고, **두 값이 어긋나지 않는다는 것은\n * `test/floating-action-button.test.ts`의 불변식으로 강제한다.** 이 저장소가 규칙을\n * 다루는 방식대로 — 지켜야 할 것은 import가 아니라 테스트로 묶는다.\n */\n expandedLabel: {\n textVariant: \"bodyLarge\",\n paddingHorizontal: spacing.lg,\n },\n margin: spacing.md,\n shadow: shadow.floating,\n /**\n * `micro` (120ms, instant under Reduce Motion) rather than `enter`/`exit`:\n * this transition can fire on every scroll-direction change, and a state\n * driven by continuous scrolling should use the fastest state-change tier\n * so it cannot visibly queue behind fast scroll gestures.\n */\n transition: motionPreset.micro,\n} as const;\n\n/**\n * Literal scenario names for behaviorRegistry.floatingActionButton (lead\n * wires into src/behaviors.ts). Kept here, not there, so this module stays\n * self-contained per the authoring brief.\n */\nexport const floatingActionButtonBehaviorScenarios = [\n \"collapses-on-scroll-away-from-start-without-losing-the-44-unit-target\",\n \"expands-on-scroll-toward-start\",\n \"idle-scroll-signal-does-not-change-the-current-mode\",\n \"accessible-name-is-the-full-label-in-both-layout-modes\",\n \"content-clearance-accounts-for-the-safe-area-inset-additively\",\n \"root-sits-after-scrollable-content-in-reading-and-tab-order\",\n // The micro recipe already specifies instant reduced motion; the old\n // crossfade scenario contradicted that choice. See docs/floating-action-button.md.\n \"reduced-motion-switches-instantly-without-a-shape-tween\",\n] as const;\n"]}
|
|
1
|
+
{"version":3,"file":"floating-action-button.js","sourceRoot":"","sources":["../src/floating-action-button.ts"],"names":[],"mappings":"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","sourcesContent":["import { iconButtonRecipe } from \"./icon-button-recipe.js\";\nimport { motionPreset, shadow, spacing } from \"./foundations.js\";\nimport type { SemanticIconName } from \"./icon.js\";\n\n/**\n * FloatingActionButton is not a smaller BottomCTA. BottomCTA is the screen's\n * conclusion (full-width, end of a flow, `bottomCtaRecipe`'s full-bleed\n * anatomy). FloatingActionButton is a single create action that floats above\n * scrollable content the user is still browsing — it never spans the width\n * and never claims to be the screen's only action. That is the entire\n * justification for a second contract instead of a BottomCTA variant.\n */\nexport type FloatingActionButtonLayoutMode = \"expanded\" | \"collapsed\";\n\n/**\n * The renderer owns scroll listening and thresholding (same boundary as\n * LoadMore's IntersectionObserver/onEndReached and Popover's AnchoredOverlay —\n * this package never touches a scroll container). It only reports a discrete\n * signal; `resolveFloatingActionButtonLayoutMode` turns that into the next\n * mode without the renderer re-deriving the collapse/expand rule itself.\n */\nexport type FloatingActionButtonScrollSignal =\n | \"away-from-start\"\n | \"toward-start\"\n | \"idle\";\n\nexport type FloatingActionButtonIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative?: true;\n accessibilityLabel?: never;\n size?: never;\n tone?: never;\n weight?: never;\n directionality?: never;\n}>;\n\nexport type ResolvedFloatingActionButtonIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{ name: IconName; decorative: true }>;\n\n/**\n * `label` is required even though `collapsed` mode shows only the icon.\n * The action's name must never shrink to nothing just because its visible\n * chrome did — `resolveFloatingActionButtonDescriptor` always reports the\n * full label as the accessible name in both layout modes.\n */\nexport type FloatingActionButtonDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n icon: FloatingActionButtonIconDescriptor<IconName>;\n label: string;\n layoutMode?: FloatingActionButtonLayoutMode;\n}>;\n\nexport type ResolvedFloatingActionButtonDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n icon: ResolvedFloatingActionButtonIconDescriptor<IconName>;\n label: string;\n layoutMode: FloatingActionButtonLayoutMode;\n resolvedAccessibilityLabel: string;\n}>;\n\nexport const floatingActionButtonBehaviorDefaults = {\n layoutMode: \"expanded\",\n} as const satisfies Readonly<{ layoutMode: FloatingActionButtonLayoutMode }>;\n\nfunction validateTrimmedCopy(value: unknown, field: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${field} must not be empty`);\n }\n if (value !== value.trim()) {\n throw new TypeError(`${field} must not start or end with whitespace`);\n }\n}\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction rejectUnknownKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n field: string,\n): void {\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) {\n throw new TypeError(`Unsupported FloatingActionButton ${field} field: ${key}`);\n }\n }\n}\n\nconst descriptorKeys = new Set([\"icon\", \"label\", \"layoutMode\"]);\nconst iconKeys = new Set([\"name\", \"decorative\"]);\nconst layoutModes = new Set<FloatingActionButtonLayoutMode>([\"expanded\", \"collapsed\"]);\nconst scrollSignals = new Set<FloatingActionButtonScrollSignal>([\n \"away-from-start\",\n \"toward-start\",\n \"idle\",\n]);\n\nexport function validateFloatingActionButtonDescriptor<IconName extends string>(\n descriptor: FloatingActionButtonDescriptor<IconName>,\n): void {\n if (!isObject(descriptor)) {\n throw new TypeError(\"FloatingActionButton descriptor must be an object\");\n }\n rejectUnknownKeys(descriptor, descriptorKeys, \"descriptor\");\n validateTrimmedCopy(descriptor.label, \"FloatingActionButton label\");\n if (!isObject(descriptor.icon)) {\n throw new TypeError(\"FloatingActionButton icon must be an object\");\n }\n rejectUnknownKeys(descriptor.icon, iconKeys, \"icon\");\n if (descriptor.icon.decorative !== undefined && descriptor.icon.decorative !== true) {\n throw new TypeError(\"FloatingActionButton icon must be decorative\");\n }\n validateTrimmedCopy(descriptor.icon.name, \"FloatingActionButton icon name\");\n if (\n descriptor.layoutMode !== undefined &&\n !layoutModes.has(descriptor.layoutMode)\n ) {\n throw new TypeError(\n `Unsupported FloatingActionButton layoutMode: ${String(descriptor.layoutMode)}`,\n );\n }\n}\n\n/**\n * The label is the accessible name in every mode — `collapsed` never falls\n * back to the icon name, because an icon-only glyph is not a stable\n * accessible name across products or locales.\n */\nexport function resolveFloatingActionButtonDescriptor<IconName extends string>(\n descriptor: FloatingActionButtonDescriptor<IconName>,\n): ResolvedFloatingActionButtonDescriptor<IconName> {\n validateFloatingActionButtonDescriptor(descriptor);\n return {\n icon: { name: descriptor.icon.name, decorative: true },\n label: descriptor.label,\n layoutMode:\n descriptor.layoutMode ?? floatingActionButtonBehaviorDefaults.layoutMode,\n resolvedAccessibilityLabel: descriptor.label,\n };\n}\n\n/**\n * Collapsing on `away-from-start` and expanding on `toward-start` mirrors the\n * common list-scroll convention (hide the label while the user reads,\n * reintroduce it once they scroll back toward the top). `idle` intentionally\n * keeps whatever mode is already active instead of guessing, so a renderer\n * that reports \"no delta since last frame\" cannot cause the button to flicker.\n */\nexport function resolveFloatingActionButtonLayoutMode(\n signal: FloatingActionButtonScrollSignal,\n previousMode: FloatingActionButtonLayoutMode = floatingActionButtonBehaviorDefaults.layoutMode,\n): FloatingActionButtonLayoutMode {\n if (!scrollSignals.has(signal)) {\n throw new TypeError(`Unsupported FloatingActionButton scroll signal: ${String(signal)}`);\n }\n if (!layoutModes.has(previousMode)) {\n throw new TypeError(\n `Unsupported FloatingActionButton layoutMode: ${String(previousMode)}`,\n );\n }\n if (signal === \"away-from-start\") return \"collapsed\";\n if (signal === \"toward-start\") return \"expanded\";\n return previousMode;\n}\n\n/**\n * Answers \"who reserves the content's bottom padding\" so both platform\n * renderers compute the same number instead of each re-deriving\n * diameter + margin arithmetic independently and drifting apart. The safe-area\n * inset is additive, matching every other bottom-anchored recipe in this\n * package (BottomNavigation, Sheet, Toast) rather than a `max()` clamp.\n */\nexport function resolveFloatingActionButtonContentClearance(\n safeAreaBottomInset: number,\n size: \"medium\" | \"large\" = \"large\",\n): number {\n if (!Number.isFinite(safeAreaBottomInset) || safeAreaBottomInset < 0) {\n throw new RangeError(\n \"FloatingActionButton safeAreaBottomInset must be a non-negative finite number\",\n );\n }\n return (\n floatingActionButtonRecipe.sizes[size].diameter +\n floatingActionButtonRecipe.margin * 2 +\n safeAreaBottomInset\n );\n}\n\n/**\n * Both layout modes reuse the selected Button/IconButton tier so the control\n * never changes height while morphing between a circle and a pill — only\n * shape and content change, per the brief's \"don't fork the Button recipe.\"\n */\nexport const floatingActionButtonRecipe = {\n slots: [\"root\", \"icon\", \"label\"] as const,\n defaults: { layoutMode: \"expanded\" } as const,\n circle: iconButtonRecipe.sizes.large,\n // BurnTok requested a smaller FAB; reuse existing control tiers rather than product overrides.\n sizes: { medium: iconButtonRecipe.sizes.medium, large: iconButtonRecipe.sizes.large },\n tone: iconButtonRecipe.tones.primary,\n shape: iconButtonRecipe.shapes.circle,\n /**\n * Button의 large 티어와 같은 값이다. 그런데 `buttonRecipe`를 import하지는 않는다 —\n * 그것은 `recipes.ts`에 있고 그 파일은 `component-recipes.ts`를 import하는 **하류**라,\n * 여기서 거슬러 올라가면 순환이 된다(ESM은 재수출을 본문보다 먼저 평가해서\n * `buttonRecipe`가 undefined인 채로 이 모듈이 실행된다).\n *\n * 대신 같은 foundations 토큰을 직접 읽고, **두 값이 어긋나지 않는다는 것은\n * `test/floating-action-button.test.ts`의 불변식으로 강제한다.** 이 저장소가 규칙을\n * 다루는 방식대로 — 지켜야 할 것은 import가 아니라 테스트로 묶는다.\n */\n expandedLabel: {\n textVariant: \"bodyLarge\",\n paddingHorizontal: spacing.lg,\n },\n margin: spacing.md,\n shadow: shadow.floating,\n /**\n * `micro` (120ms, instant under Reduce Motion) rather than `enter`/`exit`:\n * this transition can fire on every scroll-direction change, and a state\n * driven by continuous scrolling should use the fastest state-change tier\n * so it cannot visibly queue behind fast scroll gestures.\n */\n transition: motionPreset.micro,\n} as const;\n\n/**\n * Literal scenario names for behaviorRegistry.floatingActionButton (lead\n * wires into src/behaviors.ts). Kept here, not there, so this module stays\n * self-contained per the authoring brief.\n */\nexport const floatingActionButtonBehaviorScenarios = [\n \"collapses-on-scroll-away-from-start-without-losing-the-44-unit-target\",\n \"expands-on-scroll-toward-start\",\n \"idle-scroll-signal-does-not-change-the-current-mode\",\n \"accessible-name-is-the-full-label-in-both-layout-modes\",\n \"content-clearance-accounts-for-the-safe-area-inset-additively\",\n \"root-sits-after-scrollable-content-in-reading-and-tab-order\",\n // The micro recipe already specifies instant reduced motion; the old\n // crossfade scenario contradicted that choice. See docs/floating-action-button.md.\n \"reduced-motion-switches-instantly-without-a-shape-tween\",\n] as const;\n"]}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAiB,CAAC","sourcesContent":["/** Package release shown by documentation surfaces. Kept in sync by a test. */\nexport const designSystemVersion = \"1.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAiB,CAAC","sourcesContent":["/** Package release shown by documentation surfaces. Kept in sync by a test. */\nexport const designSystemVersion = \"1.40.0\" as const;\n"]}
|
|
@@ -23,19 +23,21 @@
|
|
|
23
23
|
뜨는 경우). 두 계약을 하나로 합치면 "화면의 결론"과 "콘텐츠 위 생성 행동"이라는
|
|
24
24
|
서로 다른 두 의미를 한 recipe가 떠안게 되므로 분리를 유지한다.
|
|
25
25
|
|
|
26
|
+
2026-10-23 번뜩 버튼 축소 요청: `size="medium"`은 기존 Button/IconButton 티어의 높이 44, 아이콘 `md`, 본문 라벨을 사용한다. 기본 `large`(52)는 유지한다. 두 renderer와 clearance 계산에 같은 크기를 전달하며 제품별 스타일 보정을 두지 않는다. 개발 소스 변경이며 미게시다.
|
|
27
|
+
|
|
26
28
|
## 일반화한 계약
|
|
27
29
|
|
|
28
30
|
### Button/IconButton recipe를 재사용한다 — 새 recipe를 얻지 못한다
|
|
29
31
|
|
|
30
32
|
`floatingActionButtonRecipe`는 새 톤·크기·그림자를 선언하지 않는다.
|
|
31
33
|
|
|
32
|
-
- `circle`은 `iconButtonRecipe.sizes.large`(diameter 52)
|
|
34
|
+
- 기본 `circle`은 `iconButtonRecipe.sizes.large`(diameter 52), `sizes`는 기존 `medium`(44)·`large`(52) 티어를 재사용한다.
|
|
33
35
|
- `tone`은 `iconButtonRecipe.tones.primary` 그대로.
|
|
34
36
|
- `shape`는 `iconButtonRecipe.shapes.circle`(`radius.full`) 그대로.
|
|
35
37
|
- `expandedLabel`은 `buttonRecipe.sizes.large`의 `textVariant`/`paddingHorizontal` 그대로.
|
|
36
38
|
|
|
37
|
-
두 모드(collapsed/expanded) 모두 `large`
|
|
38
|
-
바뀌는 동안 높이(터치 타깃)는 52로 고정된다 — 라벨이 나타나거나 사라질 때 버튼
|
|
39
|
+
두 모드(collapsed/expanded) 모두 선택한 티어(기본 `large`)를 공유하므로 모양이 원 ↔ 알약으로
|
|
40
|
+
바뀌는 동안 높이(터치 타깃)는 기본 52, `medium`에서는 44로 고정된다 — 라벨이 나타나거나 사라질 때 버튼
|
|
39
41
|
전체가 세로로 들썩이지 않는다. `docs/dropdown.md`가 "Menu와 거의 같은 anatomy를
|
|
40
42
|
다시 선언하지 않는다"고 판정한 것과 같은 이유로, 이 모듈도 `Button`의 recipe를
|
|
41
43
|
포크하지 않는다.
|
|
@@ -58,7 +60,7 @@ LoadMore의 `viewport` 신호, Popover의 `AnchoredOverlay`와 같은 경계를
|
|
|
58
60
|
|
|
59
61
|
FAB는 콘텐츠 위에 겹쳐 뜨므로, 스크롤 가능한 콘텐츠는 항상 FAB의 발자국만큼 하단
|
|
60
62
|
여백을 예약해야 한다. 이 계산을 Web/RN 렌더러가 각자 다시 하면 어긋날 수 있으므로
|
|
61
|
-
`resolveFloatingActionButtonContentClearance(safeAreaBottomInset)`이 한 곳에서
|
|
63
|
+
`resolveFloatingActionButtonContentClearance(safeAreaBottomInset, size?)`이 한 곳에서
|
|
62
64
|
`diameter + margin × 2 + safeAreaBottomInset`을 계산해 돌려준다. safe-area
|
|
63
65
|
inset은 BottomNavigation·Sheet·Toast와 같은 **additive** 모드다(base 여백에
|
|
64
66
|
더하지, `max()`로 대체하지 않는다).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Component maturity and evidence manifest
|
|
2
2
|
|
|
3
|
-
> Generated from `@hjmds/design-contracts` 1.
|
|
3
|
+
> Generated from `@hjmds/design-contracts` 1.40.0. Do not edit this file directly; run `pnpm contracts:sync`.
|
|
4
4
|
|
|
5
5
|
This document is the human-readable projection of the same catalog and Showcase manifest consumed by product CI.
|
|
6
6
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"designSystemVersion": "1.
|
|
3
|
+
"designSystemVersion": "1.40.0",
|
|
4
4
|
"source": "packages/design-contracts/docs/generated/showcase-manifest.json",
|
|
5
5
|
"surfaces": {
|
|
6
6
|
"web": {
|
|
7
7
|
"packageName": "@hjmds/react",
|
|
8
|
-
"packageVersion": "1.
|
|
8
|
+
"packageVersion": "1.40.0",
|
|
9
9
|
"activeComponents": 131,
|
|
10
10
|
"claimedComponents": 131,
|
|
11
11
|
"completeScenarioComponents": 130,
|
|
@@ -7062,7 +7062,7 @@
|
|
|
7062
7062
|
},
|
|
7063
7063
|
"native": {
|
|
7064
7064
|
"packageName": "@hjmds/react-native",
|
|
7065
|
-
"packageVersion": "1.
|
|
7065
|
+
"packageVersion": "1.40.0",
|
|
7066
7066
|
"activeComponents": 113,
|
|
7067
7067
|
"claimedComponents": 113,
|
|
7068
7068
|
"completeScenarioComponents": 110,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Renderer evidence coverage
|
|
2
2
|
|
|
3
|
-
> Generated for HJM 1.
|
|
3
|
+
> Generated for HJM 1.40.0. Do not edit directly; run `pnpm evidence:sync`.
|
|
4
4
|
|
|
5
5
|
This projection joins the canonical surface maturity manifest with first-party renderer claims. Missing scenarios are explicit beta promotion debt; stable surfaces are blocked by CI until none remain.
|
|
6
6
|
|
|
@@ -23,7 +23,7 @@ The Native Modal accepts supportedOrientations in fullScreen presentation. Optio
|
|
|
23
23
|
safe-area insets protect controls and feedback in landscape while the gallery remains full width.
|
|
24
24
|
Products must supply updated insets and permit rotation in their manifests; OS rotation lock still applies.
|
|
25
25
|
The additive Native-only props keep this optional subpath and its existing peers; the base Image
|
|
26
|
-
renderers retain their own host APIs.
|
|
26
|
+
renderers retain their own host APIs. The development Web `@hjmds/react/image-viewer` counterpart uses the shared modal focus engine and DOM pointer gestures without optional peers. Its `renderImage(item)` host mounts only the selected photo; Native host/inspection props remain platform-specific.
|
|
27
27
|
|
|
28
28
|
## Current evidence — 2026-09-30
|
|
29
29
|
|
package/docs/toast.md
CHANGED
|
@@ -199,6 +199,17 @@ Web renderer:
|
|
|
199
199
|
|
|
200
200
|
Native renderer:
|
|
201
201
|
|
|
202
|
+
- 2026-10-22 리포트의 플랫폼별 완료 알림 명세를 기존 renderer와 대조했습니다.
|
|
203
|
+
Android는 `accessibilityLiveRegion`을 사용하며 `normal`은 `polite`, `high`는
|
|
204
|
+
`assertive`입니다. 이 속성은 Android 전용이므로 iOS 전달의 근거로 쓰지 않습니다
|
|
205
|
+
([RN Accessibility](https://reactnative.dev/docs/accessibility#accessibilityliveregion-android)).
|
|
206
|
+
- iOS는 `announceForAccessibilityWithOptions`로 `normal`에 `queue: true`, `high`에
|
|
207
|
+
`queue: false`를 전달합니다. RN의 기본 알림은 기존 발화를 중단하므로 비차단 완료에는
|
|
208
|
+
대기열을 명시합니다([RN AccessibilityInfo](https://reactnative.dev/docs/accessibilityinfo#announceforaccessibilitywithoptions)).
|
|
209
|
+
제품은 Toast와 같은 문구를 별도 announcement로 다시 보내지 않습니다. 패널 없는 짧은 결과는
|
|
210
|
+
기존 [StatusText](usage/components/text.md#statustext)를 사용합니다.
|
|
211
|
+
- 시각 표시·보조기술 전달·기존 포커스 유지는 각각 확인합니다. 위 내용은 현재 소스의 매핑이며
|
|
212
|
+
실제 발화 순서·연속 갱신의 중복 여부·VoiceOver/TalkBack 검증 완료를 뜻하지 않습니다.
|
|
202
213
|
- safe-area inset을 recipe inset에 additive로 적용하고 visual root 전체를 하나의 접근성
|
|
203
214
|
요소로 병합하지 않습니다. announcement node와 action/close를 각각 독립 접근성 노드로
|
|
204
215
|
유지하고, 비상호작용 copy만 필요할 때 묶습니다.
|
|
@@ -104,7 +104,7 @@ import { BarChart, Sparkline } from "@hjmds/react-native/chart";
|
|
|
104
104
|
| `missingLabel` | `string` | — (필수) | 텍스트 대안에서 빈 값을 읽는 문구 |
|
|
105
105
|
| `height` | `number` | `chartRecipe.heights.regular` 180 | 가로는 부모 폭을 채운다 |
|
|
106
106
|
| `curve` | `linear` · `monotone` · `step` | `linear` | `monotone`은 데이터 밖으로 넘지 않는 곡선 |
|
|
107
|
-
| `missingConnection` | `none` · `dotted` | `none` | 빈
|
|
107
|
+
| `missingConnection` | `none` · `dotted` · `bridge` | `none` | `none`은 선을 끊어 둔다. `dotted`는 앞·중간·뒤 빈 구간에 인접한 관측값에서 각자의 x 위치를 유지한 채 plot 하단까지 수직 점선을 내리며 양쪽 점선을 서로 연결하지 않는다. 하단은 결측 표시이며 0이 아니다. 값·포커스·영역 채움은 만들지 않으며 앞/뒤 결측을 외삽하지 않는다. Web·Native 지원. `bridge`는 관측 구간 끝과 다음 관측 시작을 옅은 점선으로 안내한다. 원본 null·포커스·영역 채움을 변경하지 않으며 제품은 점선이 미수집 구간이라는 설명을 표시한다. `bridge`는 1.39.0부터 |
|
|
108
108
|
| `area` | `boolean` | 계열이 하나면 `true` | 선 아래 그라데이션(0.32 → 0) |
|
|
109
109
|
| `stacked` | `boolean` | `false` | 쌓은 영역. 0을 항상 포함 |
|
|
110
110
|
| `invert` | `boolean` | `false` | 작을수록 위(순위·평균자책점) |
|
|
@@ -280,3 +280,7 @@ Native centerContent에는 Text 등 Native 노드를 쓴다. 모두 제외하거
|
|
|
280
280
|
### 테마와 글자
|
|
281
281
|
|
|
282
282
|
원형 차트의 비율 라벨은 `chartRecipe.chrome.labelSurface`(`bg`) 판 위에 `labelContent`(`text`)로 표시한다. 제품이 계열색을 바꾸거나 선택하지 않은 조각을 흐리게 해도 라벨 대비가 유지된다. Native SVG 라벨은 프로필의 `caption` 크기와 `ui` 글꼴, Provider의 글자 배율을 따르며 범례 값과 커서 안내도 공통 Text를 사용한다.
|
|
283
|
+
|
|
284
|
+
2026-10-21 포트폴리오의 성긴 일별 관측이 끊겨 읽기 어렵다는 사용자 요청으로 `bridge`를 추가했다. 실제 관측선과 결측 연결 안내선을 구분하며 0 채움·수치 보간은 수행하지 않는다.
|
|
285
|
+
|
|
286
|
+
2026-10-23 오늘야구 선수 최근 7시즌 화면에서 앞쪽 결측의 경계 점선이 빠진 문제를 수정했다(개발 소스, 미게시). 앞·뒤 결측도 실제 관측값 위치에서 하단까지 표시하며, 관측값이 전혀 없으면 점선을 만들지 않는다.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
- 상태: 배포
|
|
5
5
|
- 지원: Web · Native
|
|
6
6
|
- 적용: 1.12.1
|
|
7
|
-
- 검토일: 2026-10-
|
|
7
|
+
- 검토일: 2026-10-23
|
|
8
8
|
- 근거: [FloatingActionButton](../../floating-action-button.md), recipe `floatingActionButtonRecipe`(`src/floating-action-button.ts`)
|
|
9
9
|
- 스토리북: `배포/컴포넌트/동작/플로팅 실행 버튼`
|
|
10
10
|
|
|
@@ -74,6 +74,7 @@ const [clearance, setClearance] = useState(0);
|
|
|
74
74
|
|
|
75
75
|
| prop | 값 | 기본값 | 설명 |
|
|
76
76
|
| --- | --- | --- | --- |
|
|
77
|
+
| `size` | `medium` · `large` | `large` | 높이 44 / 52. 펼침·접힘 모두 같은 크기 티어를 사용한다(개발 소스, 미게시) |
|
|
77
78
|
| `descriptor.layoutMode` | `expanded` · `collapsed` | `expanded` | 직접 고르지 말고 `useFloatingActionButtonScroll` 결과를 넘긴다 |
|
|
78
79
|
| `descriptor.label` | 문구(필수) | — | `collapsed`에서도 접근성 이름은 항상 전체 `label`이다 |
|
|
79
80
|
| `descriptor.icon` | `{ name }` | — | `name`만 받는다(`size`·`tone`·접근성 이름은 넣을 수 없다). 아이콘은 항상 장식이다 |
|
|
@@ -82,14 +83,14 @@ const [clearance, setClearance] = useState(0);
|
|
|
82
83
|
| `onContentClearanceChange` | `(clearance: number) => void` | 필수 | 스크롤 콘텐츠 하단 padding으로 쓴다. 큰 글자·inset이 바뀌면 다시 불린다 |
|
|
83
84
|
| Web `onClick` · Native `onPress` | Button의 같은 이벤트 | — | — |
|
|
84
85
|
|
|
85
|
-
-
|
|
86
|
+
- 톤·모양은 `primary`·`pill`로 고정이다. 2026-10-23 번뜩의 버튼 축소 요청으로 기존 Button/IconButton의 `medium` 티어를 선택할 수 있게 했다(개발 소스, 미게시).
|
|
86
87
|
|
|
87
88
|
## 배치
|
|
88
89
|
|
|
89
90
|
| 항목 | 값 | 근거 |
|
|
90
91
|
| --- | --- | --- |
|
|
91
|
-
| 크기 | 높이·지름 52(IconButton `large`). `expanded`는 알약(아이콘 + 라벨, 라벨 좌우 여백 `spacing.lg` 20), `collapsed`는 지름 52 원이다. 최대 폭은 화면 폭 − 32(여백 양쪽)다 | `floating-action-button.ts` `floatingActionButtonRecipe`, `styles.css` `.hjm-fab` |
|
|
92
|
-
| 간격 | 가장자리 여백 `spacing.md`(16). 하단 거리는 16 + 하단 안전 영역이다(Web은 `safeAreaBottomInset`과 `env(safe-area-inset-bottom)` 중 큰 값, Native는 `safeAreaBottomInset`). 스크롤 콘텐츠 하단에 `onContentClearanceChange` 값을 padding으로 둔다. 기본값은 52 + 16×2 + 하단 inset(= 84 + inset)이다 | `floating-action-button.ts` `resolveFloatingActionButtonContentClearance`, `styles.css` `.hjm-fab`, `react-native/src/floating-action-button.tsx` |
|
|
92
|
+
| 크기 | 높이·지름 기본 52(IconButton `large`), `medium`은 44. `expanded`는 알약(아이콘 + 라벨, 라벨 좌우 여백 기본 `spacing.lg` 20, `medium`은 Button의 해당 티어), `collapsed`는 선택한 티어의 지름 44 / 52 원이다. 최대 폭은 화면 폭 − 32(여백 양쪽)다 | `floating-action-button.ts` `floatingActionButtonRecipe`, `styles.css` `.hjm-fab` |
|
|
93
|
+
| 간격 | 가장자리 여백 `spacing.md`(16). 하단 거리는 16 + 하단 안전 영역이다(Web은 `safeAreaBottomInset`과 `env(safe-area-inset-bottom)` 중 큰 값, Native는 `safeAreaBottomInset`). 스크롤 콘텐츠 하단에 `onContentClearanceChange` 값을 padding으로 둔다. 기본값은 52 + 16×2 + 하단 inset(= 84 + inset), `medium`은 76 + inset이다 | `floating-action-button.ts` `resolveFloatingActionButtonContentClearance`, `styles.css` `.hjm-fab`, `react-native/src/floating-action-button.tsx` |
|
|
93
94
|
| 순서·정렬 | 위치는 스크롤 영역의 **논리적 끝 쪽 하단 모서리**로 고정이다(RTL은 왼쪽) | `styles.css` `.hjm-fab`, `react-native/src/floating-action-button.tsx` |
|
|
94
95
|
| 고정·스크롤 | Web은 `position: fixed`(z-index `layer.sticky` 100)로 창에 붙는다. Native는 positioned 부모(`flex: 1` View) 안에서 `absolute`다. [BottomNavigation](bottom-navigation.md)·도구막대 위에 띄울 때는 그 높이를 `safeAreaBottomInset`에 더한다(Native는 제품이 더한다) | `styles.css` `.hjm-fab`, `react-native/src/floating-action-button.tsx` |
|
|
95
96
|
| 좁은 폭·큰 글자 | 큰 글자로 라벨이 여러 줄이 되면 clearance 값이 커진다 | `react-native/src/floating-action-button.tsx` |
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
| --- | --- | --- | --- |
|
|
32
32
|
| `Image` | 기본 | `@hjmds/react`, `/display` | `@hjmds/react-native`, `/data-display` |
|
|
33
33
|
| `GridReveal` | 확장 — 로드 완료 시 4×4 마스크 연출(optional) | `/grid-reveal` | `/grid-reveal` |
|
|
34
|
-
| `ImageViewer` | 확장 — 전체 화면 넘겨 보기·확대
|
|
34
|
+
| `ImageViewer` | 확장 — 전체 화면 넘겨 보기·확대 | `/image-viewer` (개발 소스) | `/image-viewer` (optional) |
|
|
35
35
|
|
|
36
36
|
`GridReveal`은 추가 peer가 없다. `ImageViewer`는 granular subpath로만 import 되며 optional peer
|
|
37
37
|
`react-native-zoom-toolkit` 5.1.1, `react-native-gesture-handler` 2.32.0과 Reanimated·Worklets 설치가 필요하다.
|
|
@@ -195,7 +195,7 @@ const geometry = resolveImageInspectionGeometry(
|
|
|
195
195
|
| 정보 이미지 이름 | `accessibilityLabel` → `<img alt>`(`alt` prop은 받지 않는다) | `accessibilityLabel` |
|
|
196
196
|
| 이미지 host 스타일 | `imageProps.style`/`className` | `style`(ImageStyle) |
|
|
197
197
|
| 다른 이미지 엔진 | `renderImage`(받은 props를 `<img>`까지 전달) | `renderImage`(예: expo-image), `sourceAdapter`(헤더·캐시) |
|
|
198
|
-
| 확대 보기 |
|
|
198
|
+
| 확대 보기 | `ImageViewer` (개발 소스) | `ImageViewer` |
|
|
199
199
|
|
|
200
200
|
## 함정
|
|
201
201
|
|
|
@@ -206,6 +206,21 @@ const geometry = resolveImageInspectionGeometry(
|
|
|
206
206
|
|
|
207
207
|
### Native 확대 화면의 행동 배치
|
|
208
208
|
|
|
209
|
-
2026-10-20 번뚝 실제 첨부 사진 확인에서 큰 닫기/이전/다음 주 버튼이 사진 영역을 차지한 문제를 반영했다. ImageViewer는
|
|
209
|
+
2026-10-20 번뚝 실제 첨부 사진 확인에서 큰 닫기/이전/다음 주 버튼이 사진 영역을 차지한 문제를 반영했다. ImageViewer는 왼쪽 상단 닫기 IconButton과 하단의 이전·사진 이름/순서·다음 아이콘 행을 제공한다. 제품이 전달한 지역화 label을 접근성 이름으로 유지하고, 한 장이면 페이지 이동 버튼은 표시하지 않는다. 첫/마지막의 disabled, 전체 폭 사진·확대·오류 재시도·좌우 safe area는 유지한다. 현재 개발 소스의 표현 수정이며 공개 prop·플랫폼 지원 범위는 바뀌지 않는다.
|
|
210
210
|
|
|
211
211
|
2026-10-20 번뚝 사진 보기 확인: 고정 크기 뷰어 안에서는 원본 `width`·`height`와 `fit="contain"`을 유지하고 Image 루트의 공개 `style={{ inlineSize: "100%", blockSize: "100%" }}`로 주어진 슬롯을 채울 수 있다. 이 경우에도 실제 이미지의 fit은 HJM이 소유한다. `layoutStyle`은 배치용 `width`만 지원하며 `inlineSize`·`blockSize`를 받는 속성이 아니다.
|
|
212
|
+
|
|
213
|
+
### 앱·웹 공통 사진 확대 — 2026-10-23 개발 소스
|
|
214
|
+
|
|
215
|
+
사용자의 전사 사진 확대 요청에 따라 뷰어가 검은 전체 화면, 원본 비율 `contain`, 왼쪽 상단 닫기,
|
|
216
|
+
하단 사진 이름·여러 장일 때 이전/다음·순서를 제공한다. `actions` 슬롯은 신고 등 제품 행동을 오른쪽 상단에 둔다. 제품별 테마 덮어쓰기는 필요하지 않다.
|
|
217
|
+
사진·사진 선택 미리보기·도구 입력/결과가 대상이며 로고·장식·선택 행동을 가진 그림에는 자동 적용하지 않는다.
|
|
218
|
+
|
|
219
|
+
Web은 `@hjmds/react/image-viewer`에서 `ImageViewer`를 import한다. Native와 같은 `open`,
|
|
220
|
+
`items`(`id`, `uri`, `label`), `initialIndex`, `onClose`, `onIndexChange`, 라벨 6종을 받는다.
|
|
221
|
+
Native의 inset/inspection/이미지 상태 callback은 Web에 전달하지 않는다.
|
|
222
|
+
Web의 `renderImage(item)`은 현재 사진 하나만 마운트하며, 권한 있는 이미지 host가 조회·로딩·오류·재시도를 소유한다.
|
|
223
|
+
기본 host는 img 로드/오류와 재시도를 제공한다. Dialog와 같은 모달 focus·배경 격리·Escape·초점 복귀를 사용한다.
|
|
224
|
+
더블클릭은 맞춤↔2배, 두 손가락은 1~4배, 확대한 사진은 드래그한다. 사진 영역에서 +/− 키도 배율을 바꾼다.
|
|
225
|
+
Native는 기존 Gallery 확대와 제품별 결과 검사 계약을 유지한다.
|
|
226
|
+
새 Web 진입점과 Native 표현 변경은 미게시 개발 소스이며 설치 패키지·운영 배포 반영은 별도다.
|
|
@@ -189,6 +189,7 @@ Native 스크롤 본문은 viewport 높이만큼 content를 채운다(미게시)
|
|
|
189
189
|
|
|
190
190
|
## 근거
|
|
191
191
|
|
|
192
|
+
- 하단 시트의 아래 테두리 없음(개발 소스, 미게시): 2026-10-23 Utilverse 달력 화면에서 화면 끝의 가로선이 잘린 테두리처럼 보인다는 사용자 지적. 하단은 화면에 이어지는 면이므로 Web·Native 모두 아래 선을 그리지 않고, 위·좌우 테두리와 아래 safe area는 유지한다. `start`·`end` 옆 시트의 닫힌 테두리는 유지한다.
|
|
192
193
|
- 시트에 보이는 제목 없음: 2026-10-17 사용자 결정 — 시트 위쪽 제목 줄(예: SearchScreen 필터 시트의 "필터")을 모든 시트에서 없앤다. `title`은 대화상자 접근성 이름으로 남는다. Native Select·Combobox 선택 시트와 GestureSheet도 같다. 같은 작업에서 머리가 손잡이 영역(`.hjm-sheet__drag`, 2026-10-16) 안으로 들어가 `.hjm-sheet > .hjm-sheet__header` 선택자가 맞지 않아 Dialog 위 여백 20이 섞이던 Web 결함을 고쳤다.
|
|
193
194
|
- 가림막 누르면 닫힘: 2026-10-17 사용자 결정 — 하단 시트도 시트 밖을 누르면 닫힌다(2026-10-16의 드래그 전용 기본을 대체). 닫기 경로는 손잡이·드래그와 같은 `requestClose`라 `busy`·`dismissPolicy`·제어형 owner의 확인을 그대로 따른다.
|
|
194
195
|
- 스크롤 영역을 시트 여백 끝까지: 2026-10-17 1.27.2 채택 점검. utilverse 테마·언어 시트(Native `scrollable`)에서 여백 20이 ScrollView 바깥에 있어 ListRow 선택 표면의 양옆이 잘렸다(3x 측정: 선택 테두리 옆 선 없음, 위 선 21–381pt). Web은 본문 스크롤 상자가 이미 여백을 안쪽에 두어 잘림 0(402·1280, LTR·RTL)이었고 Native를 같은 구조로 맞췄다(수정 후 옆 선 13pt·끝 13pt).
|