@bug-on/m3-expressive 1.2.1 → 1.2.2
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/CHANGELOG.md +6 -0
- package/dist/buttons.d.mts +26 -5
- package/dist/buttons.d.ts +26 -5
- package/dist/buttons.js +581 -345
- package/dist/buttons.js.map +1 -1
- package/dist/buttons.mjs +573 -345
- package/dist/buttons.mjs.map +1 -1
- package/dist/core.js +52 -13
- package/dist/core.js.map +1 -1
- package/dist/core.mjs +52 -13
- package/dist/core.mjs.map +1 -1
- package/dist/feedback.js +52 -13
- package/dist/feedback.js.map +1 -1
- package/dist/feedback.mjs +52 -13
- package/dist/feedback.mjs.map +1 -1
- package/dist/forms.js +4 -1
- package/dist/forms.js.map +1 -1
- package/dist/forms.mjs +4 -1
- package/dist/forms.mjs.map +1 -1
- package/dist/{icon-button-sSt6PPLg.d.mts → icon-button-CSsDmuQC.d.mts} +13 -0
- package/dist/{icon-button-sSt6PPLg.d.ts → icon-button-CSsDmuQC.d.ts} +13 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1268 -1005
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1127 -865
- package/dist/index.mjs.map +1 -1
- package/dist/layout.js +15 -7
- package/dist/layout.js.map +1 -1
- package/dist/layout.mjs +15 -7
- package/dist/layout.mjs.map +1 -1
- package/dist/navigation.d.mts +1 -1
- package/dist/navigation.d.ts +1 -1
- package/dist/navigation.js +66 -16
- package/dist/navigation.js.map +1 -1
- package/dist/navigation.mjs +66 -16
- package/dist/navigation.mjs.map +1 -1
- package/dist/overlays.js +52 -13
- package/dist/overlays.js.map +1 -1
- package/dist/overlays.mjs +52 -13
- package/dist/overlays.mjs.map +1 -1
- package/dist/pickers.js +177 -111
- package/dist/pickers.js.map +1 -1
- package/dist/pickers.mjs +177 -111
- package/dist/pickers.mjs.map +1 -1
- package/dist/{split-button-trailing-uncheckable-BcPD_7uK.d.ts → split-button-trailing-uncheckable-C-qQlyZx.d.ts} +74 -19
- package/dist/{split-button-trailing-uncheckable-DtFJkTFr.d.mts → split-button-trailing-uncheckable-DHJqNeq_.d.mts} +74 -19
- package/package.json +3 -3
package/dist/buttons.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/ui/loading-indicator.tsx","../src/ui/progress-indicator/utils.ts","../src/ui/progress-indicator/circular.tsx","../src/ui/progress-indicator/hooks.ts","../src/ui/progress-indicator/linear-flat.tsx","../src/ui/progress-indicator/linear-wavy.tsx","../src/ui/progress-indicator/linear.tsx","../src/ui/progress-indicator/index.tsx","../src/ui/ripple.tsx","../src/ui/shared/motion-tokens.ts","../src/ui/shared/constants.ts","../src/ui/shared/touch-target.tsx","../src/ui/buttons/button/button-tokens.ts","../src/ui/buttons/button/button.tsx","../src/ui/icon.tsx","../src/ui/buttons/button-group/button-group-tokens.ts","../src/ui/buttons/button-group/button-group-defaults.ts","../src/ui/buttons/button-group/button-group.tsx","../src/ui/buttons/fabs/extended-fab/extended-fab.tsx","../src/ui/buttons/fabs/fab/fab.tsx","../src/ui/buttons/fabs/fab-menu/fab-menu.tsx","../src/ui/buttons/icon-button/icon-button.tsx","../src/ui/buttons/split-button/split-button-context.ts","../src/ui/buttons/split-button/split-button.tsx","../src/ui/shared/state-layer.tsx","../src/ui/buttons/split-button/split-button-tokens.ts","../src/ui/buttons/split-button/split-button-variants.ts","../src/ui/buttons/split-button/split-button-leading.tsx","../src/ui/buttons/split-button/split-button-trailing.tsx","../src/ui/buttons/split-button/split-button-trailing-uncheckable.tsx"],"names":["React","IndeterminateSvg","DeterminateSvg","React2","jsx","jsxs","React3","React4","FlatLinearTrack","Fragment","m","React5","WavyLinearTrack","React6","LazyMotion","domMax","React7","React8","RippleItem","animate","React9","_a","_b","useMotionValue","AnimatePresence","React10","cornerRadius","React11","AnimatedCheckLabel","React12","Slot","SIZE_ICON","MORPH_RADIUS","COLOR_CLASSES","React13","useReducedMotion","SIZE_STYLES","React15","React16","React17","React18","React19","React20","React21"],"mappings":"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","file":"buttons.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Loading Indicator\n//\n// Spec references:\n// • Loading Indicator Overview (190326 PDF)\n// • Loading Indicator Specs (190326 PDF)\n// • Loading Indicator Accessibility (190326 PDF)\n// • LoadingIndicator.kt (Android reference)\n//\n// Two operational modes:\n// 1. Indeterminate — no `progress` prop → 7-shape morph + SMIL rotation loop\n// 2. Determinate — `progress` (0-1) → Circle→SoftBurst morph + counterclockwise rotation\n//\n// Responsive sizing: strictly [24dp, 240dp]. Container/indicator ratio is preserved.\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ─── Indeterminate: Shape & Rotation Keyframe Data (from official MD3 SVG) ──\nconst SHAPE_KEY_TIMES =\n\t\"0; 0.14; 0.14; 0.29; 0.29; 0.43; 0.43; 0.57; 0.57; 0.71; 0.71; 0.86; 0.86; 1\";\n\nconst SHAPE_KEY_SPLINES = [\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n].join(\"; \");\n\n// 7 MD3 morphing shapes, each repeated twice for a smooth hold-and-morph\nconst SHAPE_VALUES = [\n\t\"M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z\",\n\t\"M20.3 8.6 21.1 8 22 7.6 23 7.3 23 7.3 24 7.2 25 7.3 25.9 7.5 26.8 8 27.6 8.6 28.4 9.1 28.4 9.1 29.3 9.6 30.3 9.8 31.3 9.9 32.3 10 33.3 10.2 34.2 10.6 34.2 10.6 35 11.2 35.7 11.9 36.3 12.7 36.7 13.6 36.9 14.6 37.2 15.5 37.2 15.5 37.6 16.5 38.2 17.3 38.9 18 39.6 18.7 40.2 19.5 40.6 20.4 40.6 20.4 40.9 21.3 41 22.3 40.9 23.3 40.6 24.3 40.2 25.2 39.8 26.1 39.8 26.1 39.5 27 39.4 28 39.5 29 39.6 30 39.5 31 39.3 32 39.3 32 38.9 32.9 38.3 33.7 37.6 34.4 36.8 35 35.9 35.4 35 35.8 35 35.8 34.1 36.3 33.4 37 32.9 37.9 32.3 38.7 31.6 39.4 30.8 40 30.8 40 29.9 40.4 28.9 40.7 27.9 40.8 27 40.7 26 40.4 25 40.1 25 40.1 24 40 23 40.1 22.1 40.4 21.1 40.7 20.1 40.8 19.1 40.7 19.1 40.7 18.2 40.5 17.3 40 16.4 39.5 15.7 38.8 15.2 37.9 14.6 37.1 14.6 37.1 13.9 36.4 13.1 35.8 12.2 35.4 11.3 35 10.5 34.4 9.7 33.8 9.7 33.8 9.1 32.9 8.7 32 8.5 31.1 8.4 30.1 8.5 29.1 8.6 28.1 8.6 28.1 8.5 27.1 8.3 26.1 7.8 25.2 7.4 24.3 7.1 23.4 7 22.4 7 22.4 7.1 21.4 7.3 20.4 7.8 19.5 8.3 18.7 9.1 18 9.8 17.3 9.8 17.3 10.4 16.5 10.8 15.6 11 14.6 11.3 13.7 11.7 12.8 12.2 11.9 12.2 11.9 12.9 11.2 13.8 10.7 14.7 10.2 15.6 10 16.6 9.9 17.6 9.8 17.6 9.8 18.6 9.6 19.5 9.2Z\",\n\t\"M18.6 9.6 19.5 9.2 20.3 8.6 21.1 8 22 7.6 23 7.3 24 7.2 25 7.3 25.9 7.5 26.8 8 27.6 8.6 28.4 9.1 29.3 9.6 30.3 9.8 31.3 9.9 32.3 10 33.3 10.2 34.2 10.6 35 11.2 35.7 11.9 36.3 12.7 36.7 13.6 36.9 14.6 37.2 15.5 37.6 16.4 38.2 17.3 38.9 18 39.6 18.7 40.2 19.5 40.6 20.4 40.9 21.3 41 22.3 40.9 23.3 40.6 24.3 40.2 25.2 39.8 26.1 39.5 27 39.4 28 39.5 29 39.6 30 39.5 31 39.3 32 38.9 32.9 38.3 33.7 37.6 34.4 36.8 35 35.9 35.4 35 35.8 34.1 36.3 33.4 37 32.9 37.9 32.3 38.7 31.6 39.4 30.8 40 29.9 40.4 28.9 40.7 27.9 40.8 27 40.7 26 40.4 25 40.1 24 40 23 40.1 22.1 40.4 21.1 40.7 20.1 40.8 19.1 40.7 18.2 40.5 17.3 40 16.4 39.5 15.7 38.8 15.2 37.9 14.6 37.1 13.9 36.4 13.1 35.8 12.2 35.4 11.3 35 10.5 34.4 9.7 33.8 9.1 32.9 8.7 32 8.5 31.1 8.4 30.1 8.5 29.1 8.6 28.1 8.5 27.1 8.3 26.1 7.8 25.2 7.4 24.3 7.1 23.4 7 22.4 7.1 21.4 7.3 20.4 7.8 19.5 8.3 18.7 9.1 18 9.8 17.3 10.4 16.5 10.8 15.6 11 14.6 11.3 13.7 11.7 12.8 12.2 11.9 12.9 11.2 13.8 10.7 14.7 10.2 15.6 10 16.6 9.9 17.6 9.8Z\",\n\t\"M18.6 9.9 19.5 9.4 20.3 8.8 21.1 8.2 22 7.8 23 7.6 23.9 7.5 24.9 7.6 25.9 7.8 26.8 8.2 27.6 8.7 28.5 9.3 29.3 9.9 30.1 10.5 30.9 11 31.7 11.6 32.5 12.2 33.3 12.8 33.7 13.1 34.1 13.3 34.9 13.9 35.7 14.5 36.6 15 37.4 15.6 38.2 16.2 39 16.8 39.7 17.5 40.2 18.3 40.7 19.2 40.9 20.1 41 21.1 40.9 22.1 40.7 23.1 40.3 24 40 24.9 39.7 25.9 39.4 26.8 39 27.8 38.7 28.7 38.4 29.6 38.1 30.6 37.8 31.5 37.5 32.5 37.2 33.4 36.9 34.4 36.6 35.3 36.2 36.2 35.7 37.1 35 37.8 34.3 38.4 33.4 38.9 32.5 39.3 31.5 39.5 30.5 39.5 30 39.5 29.5 39.5 28.5 39.5 27.5 39.5 26.5 39.5 25.5 39.4 24.5 39.4 23.6 39.4 22.6 39.4 21.6 39.5 20.6 39.5 19.6 39.5 18.6 39.5 17.6 39.5 16.6 39.5 15.6 39.3 14.7 39 13.8 38.5 13.1 37.9 12.4 37.2 11.9 36.3 11.5 35.4 11.2 34.5 10.9 33.5 10.6 32.6 10.3 31.6 10 30.7 9.7 29.7 9.3 28.8 9 27.9 8.7 26.9 8.4 26 8 25 7.7 24.1 7.4 23.2 7.1 22.2 7.1 21.7 7 21.2 7.1 20.2 7.3 19.3 7.7 18.4 8.3 17.5 8.9 16.8 9.7 16.2 10.5 15.6 11.4 15.1 12.2 14.5 13 14 13.8 13.4 14.6 12.8 15.4 12.3 16.2 11.7 17 11.1 17.8 10.5Z\",\n\t\"M15.4 12.3 16.2 11.7 17 11.1 17.8 10.5 18.6 9.9 19.5 9.4 20.3 8.8 21.1 8.3 22 7.8 23 7.6 23.9 7.5 24.9 7.6 25.9 7.8 26.8 8.2 27.6 8.7 28.5 9.3 29.3 9.9 30.1 10.5 30.9 11 31.7 11.6 32.5 12.2 33.3 12.8 34.1 13.3 34.9 13.9 35.7 14.5 36.6 15 37.4 15.6 38.2 16.2 39 16.8 39.7 17.5 40.2 18.3 40.7 19.2 40.9 20.1 41 21.1 40.9 22.1 40.7 23.1 40.3 24 40 24.9 39.7 25.9 39.4 26.8 39 27.8 38.7 28.7 38.4 29.6 38.1 30.6 37.8 31.5 37.5 32.5 37.2 33.4 36.9 34.4 36.6 35.3 36.2 36.2 35.7 37.1 35 37.8 34.3 38.4 33.4 38.9 32.5 39.3 31.5 39.4 30.5 39.5 29.5 39.5 28.5 39.5 27.5 39.5 26.5 39.5 25.5 39.4 24.5 39.4 23.6 39.4 22.6 39.4 21.6 39.5 20.6 39.5 19.6 39.5 18.6 39.5 17.6 39.5 16.6 39.5 15.6 39.3 14.7 39 13.8 38.5 13.1 37.9 12.4 37.2 11.9 36.3 11.5 35.4 11.2 34.5 10.9 33.5 10.6 32.6 10.3 31.6 10 30.7 9.7 29.7 9.3 28.8 9 27.9 8.7 26.9 8.4 26 8 25 7.7 24.1 7.4 23.2 7.1 22.2 7 21.2 7.1 20.2 7.3 19.3 7.7 18.4 8.3 17.5 8.9 16.8 9.7 16.2 10.5 15.6 11.4 15.1 12.2 14.5 13 14 13.8 13.4 14.6 12.8Z\",\n\t\"M17 12.8 17.7 12.1 18.5 11.5 19.3 10.9 20.1 10.5 20.2 10.4 21.1 10 22 9.7 23 9.4 24 9.2 25 9 26 9 27 9 27.6 9.1 28 9.1 28.9 9.3 29.9 9.6 30.9 9.9 31.8 10.3 32.6 10.8 33.5 11.3 34.3 11.9 34.6 12.2 35 12.6 35.7 13.3 36.4 14.1 36.9 14.9 37.4 15.8 37.9 16.6 38.3 17.6 38.6 18.5 38.6 18.7 38.8 19.5 38.9 20.5 39 21.5 39 22.5 38.9 23.5 38.7 24.5 38.5 25.4 38.2 26.3 38.2 26.4 37.8 27.3 37.4 28.2 36.8 29.1 36.2 29.9 35.6 30.6 34.9 31.3 34.2 32 33.8 32.5 33.5 32.8 32.8 33.5 32.1 34.2 31.4 34.9 30.7 35.6 29.9 36.2 29.1 36.8 28.2 37.3 27.9 37.5 27.4 37.8 26.4 38.2 25.5 38.5 24.5 38.7 23.5 38.9 22.5 39 21.5 39 20.5 38.9 20.4 38.9 19.5 38.8 18.6 38.6 17.6 38.3 16.7 37.9 15.8 37.5 14.9 37 14.1 36.4 13.4 35.8 13.3 35.8 12.6 35.1 12 34.3 11.3 33.5 10.8 32.7 10.3 31.8 9.9 30.9 9.6 30 9.4 29.3 9.3 29 9.1 28 9 27 9 26 9 25 9.2 24 9.4 23 9.6 22.1 9.8 21.7 10 21.1 10.4 20.2 10.9 19.4 11.4 18.5 12.1 17.8 12.7 17 13.4 16.3 14.2 15.6 14.2 15.5 14.9 14.9 15.6 14.2 16.3 13.5Z\",\n\t\"M33.5 11.3 34.3 11.9 35 12.6 35.3 12.8 35.7 13.3 36.4 14.1 36.9 14.9 37.4 15.8 37.9 16.6 38.3 17.6 38.3 17.7 38.6 18.5 38.8 19.5 38.9 20.5 39 21.5 39 22.5 38.9 23.5 38.9 23.5 38.7 24.5 38.5 25.4 38.2 26.4 37.8 27.3 37.4 28.2 36.9 28.9 36.8 29.1 36.2 29.9 35.6 30.6 34.9 31.3 34.2 32 33.5 32.8 33.1 33.2 32.8 33.5 32.1 34.2 31.4 34.9 30.7 35.6 29.9 36.2 29.1 36.8 28.7 37 28.2 37.3 27.4 37.8 26.4 38.2 25.5 38.5 24.5 38.7 23.5 38.9 23.3 38.9 22.5 39 21.5 39 20.5 38.9 19.5 38.8 18.6 38.6 17.6 38.3 17.6 38.3 16.7 37.9 15.8 37.5 14.9 37 14.1 36.4 13.3 35.8 12.7 35.2 12.6 35.1 12 34.3 11.3 33.5 10.8 32.7 10.3 31.8 9.9 30.9 9.7 30.3 9.6 29.9 9.3 29 9.1 28 9 27 9 26 9 25 9.1 24.5 9.2 24 9.4 23 9.6 22.1 10 21.1 10.4 20.2 10.9 19.4 11.1 19.1 11.5 18.5 12.1 17.7 12.7 17 13.5 16.3 14.2 15.6 14.9 14.9 14.9 14.8 15.6 14.2 16.3 13.5 17 12.8 17.7 12.1 18.5 11.5 19.3 11 19.3 10.9 20.2 10.4 21.1 10 22 9.7 23 9.4 24 9.2 24.7 9.1 25 9 26 9 27 9 28 9.1 28.9 9.3 29.9 9.6 30.4 9.7 30.9 9.9 31.8 10.3 32.6 10.8Z\",\n\t\"M33.2 11.1 34.2 11.2 35.1 11.4 36 11.9 36.6 12.7 36.8 13.7 36.9 14.7 36.9 15.7 37 16.7 37.1 17.7 37.3 18.6 37.9 19.4 38.5 20.2 39.2 20.9 39.8 21.7 40.5 22.4 40.9 23.3 41 24.3 40.7 25.2 40.1 26 39.4 26.8 38.8 27.5 38.1 28.3 37.5 29.1 37.1 30 37 31 37 31.9 36.9 32.9 36.8 33.9 36.7 34.9 36.2 35.8 35.5 36.4 34.5 36.8 33.6 36.8 32.6 36.9 31.6 37 30.6 37.1 29.6 37.2 28.8 37.7 28 38.4 27.3 39 26.5 39.7 25.8 40.3 24.9 40.8 23.9 41 23 40.8 22.1 40.2 21.4 39.6 20.6 38.9 19.9 38.3 19.1 37.6 18.3 37.2 17.3 37 16.3 37 15.3 36.9 14.3 36.8 13.3 36.7 12.4 36.4 11.7 35.7 11.3 34.8 11.2 33.8 11.1 32.8 11 31.8 11 30.8 10.9 29.9 10.4 29 9.8 28.2 9.1 27.5 8.5 26.7 7.8 26 7.3 25.1 7 24.2 7.1 23.2 7.6 22.3 8.2 21.6 8.9 20.8 9.5 20.1 10.2 19.3 10.7 18.5 10.9 17.5 11 16.6 11.1 15.6 11.1 14.6 11.2 13.6 11.5 12.6 12.1 11.9 13 11.4 13.9 11.2 14.9 11.1 15.9 11 16.9 11 17.9 10.9 18.8 10.6 19.6 10 20.4 9.3 21.1 8.6 21.9 8 22.6 7.4 23.6 7 24.6 7.1 25.5 7.5 26.2 8.1 27 8.7 27.7 9.4 28.5 10 29.3 10.6 30.2 10.9 31.2 11 32.2 11.1Z\",\n\t\"M27.7 9.4 28.5 10 29.3 10.6 30.2 10.9 31.2 11 32.2 11.1 33.2 11.1 34.2 11.2 35.1 11.4 36 11.9 36.6 12.7 36.8 13.7 36.9 14.7 36.9 15.7 37 16.7 37.1 17.7 37.3 18.6 37.9 19.4 38.5 20.2 39.2 20.9 39.8 21.7 40.5 22.4 40.9 23.3 41 24.3 40.7 25.2 40.1 26 39.4 26.8 38.8 27.5 38.1 28.3 37.5 29.1 37.1 30 37 31 37 31.9 36.9 32.9 36.8 33.9 36.7 34.9 36.2 35.8 35.5 36.4 34.5 36.8 33.6 36.9 32.6 36.9 31.6 37 30.6 37.1 29.6 37.2 28.8 37.7 28 38.4 27.3 39 26.5 39.7 25.8 40.3 24.9 40.8 23.9 41 23 40.8 22.1 40.2 21.4 39.6 20.6 38.9 19.9 38.3 19.1 37.6 18.3 37.2 17.3 37 16.3 37 15.3 36.9 14.3 36.8 13.3 36.7 12.4 36.4 11.7 35.7 11.3 34.8 11.2 33.8 11.1 32.8 11 31.8 11 30.8 10.9 29.9 10.4 29 9.8 28.2 9.1 27.5 8.5 26.7 7.8 26 7.3 25.1 7 24.2 7.1 23.2 7.6 22.3 8.2 21.6 8.9 20.8 9.5 20.1 10.2 19.3 10.7 18.5 10.9 17.5 11 16.5 11.1 15.6 11.1 14.6 11.2 13.6 11.5 12.6 12.1 11.9 13 11.4 13.9 11.2 14.9 11.1 15.9 11 16.9 11 17.9 10.9 18.8 10.6 19.6 10 20.4 9.3 21.1 8.6 21.9 8 22.6 7.4 23.6 7 24.6 7.1 25.5 7.5 26.2 8.1 27 8.7Z\",\n\t\"M27.9 10.6 28.8 10.3 29.8 10.1 30.8 10 31.8 10.1 32.7 10.3 33.7 10.6 34.6 11.1 34.8 11.3 35.4 11.7 36.1 12.4 36.7 13.1 37.2 14 37.6 14.9 37.9 15.9 38 16.9 38 17.9 37.8 18.8 37.5 19.8 37.1 20.7 36.8 21.6 36.5 22.6 36.4 23.6 36.4 24.4 36.4 24.6 36.5 25.5 36.8 26.5 37.2 27.4 37.6 28.3 37.8 29.3 38 30.3 38 31.3 37.8 32.3 37.6 33.2 37.2 34.1 36.6 35 36 35.7 35.3 36.4 34.4 37 34.1 37.2 33.6 37.4 32.6 37.8 31.6 37.9 30.6 38 29.7 37.9 28.7 37.7 27.8 37.3 26.8 36.9 25.9 36.6 24.9 36.4 23.9 36.4 22.9 36.4 22 36.6 21 37 20.1 37.4 20.1 37.4 19.2 37.7 18.2 37.9 17.2 38 16.2 37.9 15.3 37.7 14.3 37.4 13.4 36.9 12.6 36.3 11.9 35.6 11.3 34.9 10.8 34 10.4 33.1 10.1 32.1 10 31.1 10 30.6 10 30.1 10.2 29.2 10.5 28.2 10.9 27.3 11.2 26.4 11.5 25.4 11.6 24.4 11.6 23.4 11.5 22.5 11.2 21.5 10.8 20.6 10.4 19.7 10.2 18.7 10 17.7 10 16.7 10 16.6 10.2 15.7 10.4 14.8 10.8 13.9 11.4 13 12 12.3 12.7 11.6 13.6 11 14.4 10.6 15.4 10.2 16.4 10.1 17.4 10 18.3 10.1 19.3 10.3 20.2 10.7 20.9 11 21.2 11.1 22.1 11.4 23.1 11.6 24.1 11.6 25.1 11.6 26 11.4 27 11Z\",\n\t\"M36 35.7 35.3 36.4 34.4 37 33.6 37.4 32.6 37.8 31.6 37.9 30.6 38 29.7 37.9 28.7 37.7 27.8 37.3 26.8 36.9 25.9 36.6 24.9 36.4 23.9 36.4 22.9 36.4 22 36.6 21 37 20.1 37.4 19.2 37.7 18.2 37.9 17.2 38 16.2 37.9 15.3 37.7 14.3 37.4 13.4 36.9 12.6 36.3 11.9 35.6 11.3 34.9 10.8 34 10.4 33.1 10.1 32.1 10 31.1 10 30.2 10.2 29.2 10.5 28.2 10.9 27.3 11.2 26.4 11.5 25.4 11.6 24.4 11.6 23.4 11.5 22.5 11.2 21.5 10.8 20.6 10.4 19.7 10.2 18.7 10 17.7 10 16.7 10.2 15.7 10.4 14.8 10.8 13.9 11.4 13 12 12.3 12.7 11.6 13.6 11 14.4 10.6 15.4 10.2 16.4 10.1 17.4 10 18.3 10.1 19.3 10.3 20.2 10.7 21.2 11.1 22.1 11.4 23.1 11.6 24.1 11.6 25.1 11.6 26 11.4 27 11 27.9 10.6 28.8 10.3 29.8 10.1 30.8 10 31.8 10.1 32.7 10.3 33.7 10.6 34.6 11.1 35.4 11.7 36.1 12.4 36.7 13.1 37.2 14 37.6 14.9 37.9 15.9 38 16.9 38 17.8 37.8 18.8 37.5 19.8 37.1 20.7 36.8 21.6 36.5 22.6 36.4 23.6 36.4 24.6 36.5 25.5 36.8 26.5 37.2 27.4 37.6 28.3 37.8 29.3 38 30.3 38 31.3 37.8 32.3 37.6 33.2 37.2 34.1 36.6 35Z\",\n\t\"M32.1 32.1 31.4 32.8 30.7 33.5 29.9 34.1 29.1 34.7 28.3 35.3 27.6 35.8 27.5 35.8 26.6 36.4 25.8 36.8 24.9 37.3 24 37.7 23.1 38 22.1 38.3 21.2 38.6 20.2 38.8 19.2 38.9 18.2 39 17.2 39 16.6 38.9 16.3 38.9 15.3 38.7 14.3 38.4 13.4 38 12.5 37.5 11.7 36.9 11.1 36.3 10.5 35.5 10 34.6 9.6 33.7 9.3 32.7 9.1 31.7 9.1 31.4 9 30.8 9 29.8 9.1 28.8 9.2 27.8 9.4 26.8 9.7 25.9 10 24.9 10.3 24 10.7 23.1 11.2 22.2 11.6 21.4 12.2 20.5 12.2 20.4 12.7 19.7 13.3 18.9 13.9 18.1 14.5 17.3 15.2 16.6 15.9 15.9 16.6 15.2 17.3 14.5 18.1 13.9 18.9 13.3 19.7 12.7 20.4 12.2 20.5 12.2 21.4 11.6 22.2 11.2 23.1 10.7 24 10.3 24.9 10 25.9 9.7 26.8 9.4 27.8 9.2 28.8 9.1 29.8 9 30.8 9 31.4 9.1 31.7 9.1 32.7 9.3 33.7 9.6 34.6 10 35.5 10.5 36.3 11.1 36.9 11.7 37.5 12.5 38 13.4 38.4 14.3 38.7 15.3 38.9 16.3 38.9 16.6 39 17.2 39 18.2 38.9 19.2 38.8 20.2 38.6 21.2 38.3 22.1 38 23.1 37.7 24 37.3 24.9 36.8 25.8 36.4 26.6 35.8 27.5 35.8 27.6 35.3 28.3 34.7 29.1 34.1 29.9 33.5 30.7 32.8 31.4Z\",\n\t\"M24.3 10.2 24.9 10 25.9 9.7 26.8 9.4 27.1 9.4 27.8 9.2 28.8 9.1 29.8 9 29.9 9 30.8 9 31.7 9.1 32.7 9.3 32.8 9.3 33.7 9.6 34.6 10 35.5 10.5 35.5 10.5 36.3 11.1 36.9 11.7 37.5 12.5 37.5 12.5 38 13.4 38.4 14.3 38.7 15.2 38.7 15.3 38.9 16.3 39 17.2 39 18.1 39 18.2 38.9 19.2 38.8 20.2 38.6 20.9 38.6 21.2 38.3 22.1 38 23.1 37.8 23.7 37.7 24 37.3 24.9 36.8 25.8 36.5 26.4 36.4 26.6 35.8 27.5 35.3 28.3 35 28.8 34.7 29.1 34.1 29.9 33.5 30.7 33.1 31.1 32.8 31.4 32.1 32.1 31.4 32.8 31.1 33.1 30.7 33.5 29.9 34.1 29.1 34.7 28.8 35 28.3 35.3 27.5 35.8 26.6 36.4 26.4 36.5 25.8 36.8 24.9 37.3 24 37.7 23.7 37.8 23.1 38 22.1 38.3 21.2 38.6 20.9 38.6 20.2 38.8 19.2 38.9 18.2 39 18.1 39 17.2 39 16.3 38.9 15.3 38.7 15.2 38.7 14.3 38.4 13.4 38 12.5 37.5 12.5 37.5 11.7 36.9 11.1 36.3 10.5 35.5 10.5 35.5 10 34.6 9.6 33.7 9.3 32.8 9.3 32.7 9.1 31.7 9 30.8 9 29.9 9 29.8 9.1 28.8 9.2 27.8 9.4 27.1 9.4 26.8 9.7 25.9 10 24.9 10.2 24.3 10.3 24 10.7 23.1 11.2 22.2 11.5 21.6 11.6 21.4 12.2 20.5 12.7 19.7 13 19.2 13.3 18.9 13.9 18.1 14.5 17.3 14.9 16.9 15.2 16.6 15.9 15.9 16.6 15.2 16.9 14.9 17.3 14.5 18.1 13.9 18.9 13.3 19.2 13 19.7 12.7 20.5 12.2 21.4 11.6 21.6 11.5 22.2 11.2 23.1 10.7 24 10.3Z\",\n\t\"M22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.3 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.4 38.9 26.2 39.6 27 40.2 27.7 40.5 28.6 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.8 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.6 9.1 21.8 8.4 21 7.8 20.3 7.5 19.4 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.2 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1 20.9 10.4 21.4 9.5 21.9 8.7Z\",\n].join(\";\");\n\nconst ROTATE_KEY_TIMES = \"0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1\";\nconst ROTATE_KEY_SPLINES = [\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n].join(\"; \");\nconst ROTATE_VALUES =\n\t\"0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24\";\n\n// ─── Determinate: Circle → SoftBurst path data (viewBox 4 4 40 40, cx=24, cy=24) ─\n// Circle: perfect circle, r≈17 → matches the contained indicator's visual weight\nconst DETERMINATE_CIRCLE =\n\t\"M24 7 C34.49 7 41 13.51 41 24 C41 34.49 34.49 41 24 41 C13.51 41 7 34.49 7 24 C7 13.51 13.51 7 24 7 Z\";\n\n// SoftBurst: shape 1 from the indeterminate sequence (same visual as the spec)\nconst DETERMINATE_SOFT_BURST =\n\t\"M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\nexport interface LoadingIndicatorProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n\t/**\n\t * Visual style variant.\n\t * - `uncontained` (default): bare indicator, no container background\n\t * - `contained`: indicator inside a circular container\n\t * (MD3 spec: 38dp container / 24dp active indicator)\n\t */\n\tvariant?: \"uncontained\" | \"contained\";\n\n\t/**\n\t * Indicator size in dp (pixels). Clamped to the MD3 spec range [24dp, 240dp].\n\t * Defaults to 48dp.\n\t *\n\t * Size guidelines:\n\t * - Small displays: 24–48dp\n\t * - Medium displays: 48–80dp\n\t * - Large/XL displays (desktop): up to 240dp\n\t *\n\t * @default 48\n\t */\n\tsize?: number;\n\n\t/**\n\t * Determinate progress value between 0 and 1.\n\t * - **Omit** (default) for indeterminate mode: continuous morphing loop.\n\t * - **Provide** for determinate mode: Circle→SoftBurst morph + counterclockwise rotation.\n\t *\n\t * @example `progress={0.7}` shows 70% progress\n\t */\n\tprogress?: number;\n\n\t/**\n\t * Active indicator color override. Falls back to MD3 system color tokens.\n\t * Supports any valid CSS color value or CSS variable.\n\t * @example \"#ff5722\" | \"var(--brand-color)\"\n\t */\n\tcolor?: string;\n\n\t/**\n\t * Required accessible label describing what is loading.\n\t * @example \"Loading news article\"\n\t */\n\t\"aria-label\": string;\n}\n\n// ─── Indeterminate SVG (pure SMIL, zero JS overhead) ─────────────────────────\nconst IndeterminateSvg = React.memo(function IndeterminateSvg({\n\tsize,\n}: {\n\tsize: number;\n}) {\n\t// Delays <animate> tag insertion by 1 frame via requestAnimationFrame\n\t// to bypass Chromium SMIL freezing bugs when parent container executes CSS transforms/animations.\n\n\tconst [ready, setReady] = React.useState(false);\n\tReact.useEffect(() => {\n\t\tconst raf = requestAnimationFrame(() => setReady(true));\n\t\treturn () => cancelAnimationFrame(raf);\n\t}, []);\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"4 4 40 40\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tfill=\"currentColor\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t>\n\t\t\t<path d={SHAPE_VALUES.split(\";\")[0]}>\n\t\t\t\t{ready && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\tdur=\"5s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tkeySplines={SHAPE_KEY_SPLINES}\n\t\t\t\t\t\t\tkeyTimes={SHAPE_KEY_TIMES}\n\t\t\t\t\t\t\tvalues={SHAPE_VALUES}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tattributeType=\"XML\"\n\t\t\t\t\t\t\ttype=\"rotate\"\n\t\t\t\t\t\t\tdur=\"5s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tkeySplines={ROTATE_KEY_SPLINES}\n\t\t\t\t\t\t\tkeyTimes={ROTATE_KEY_TIMES}\n\t\t\t\t\t\t\tvalues={ROTATE_VALUES}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</path>\n\t\t</svg>\n\t);\n});\n\n// ─── Determinate SVG (React-controlled morph + counterclockwise rotation) ────\n// Uses CSS transition for smooth d attribute changes where supported (Chromium),\n// with a style-based transform fallback for rotation.\nconst DeterminateSvg = React.memo(function DeterminateSvg({\n\tsize,\n\tprogress,\n}: {\n\tsize: number;\n\tprogress: number;\n}) {\n\t// Clamp and interpolate progress between 0 (circle) and 1 (soft burst)\n\tconst p = Math.min(1, Math.max(0, progress));\n\n\t// Counterclockwise rotation: 0° at 0% → -180° at 100% (per Android spec)\n\tconst rotation = -180 * p;\n\n\t// The path morphs from circle (p=0) to soft-burst (p=1).\n\t// We use a SMIL animate with begin=\"indefinite\" that we snap to progress.\n\t// For maximum compatibility, render the correct endpoint shape based on progress,\n\t// relying on the CSS `d` property transition for smooth animation.\n\tconst pathD = p < 0.5 ? DETERMINATE_CIRCLE : DETERMINATE_SOFT_BURST;\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"4 4 40 40\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tfill=\"currentColor\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tstyle={{\n\t\t\t\ttransform: `rotate(${rotation}deg)`,\n\t\t\t\ttransition: \"transform 0.3s ease\",\n\t\t\t}}\n\t\t>\n\t\t\t<path d={pathD} style={{ transition: \"d 0.3s ease\" }} />\n\t\t</svg>\n\t);\n});\n\n// ─── Main Component ───────────────────────────────────────────────────────────\nexport const LoadingIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tLoadingIndicatorProps\n>(\n\t(\n\t\t{\n\t\t\tvariant = \"uncontained\",\n\t\t\tsize = 48,\n\t\t\tprogress,\n\t\t\tcolor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isContained = variant === \"contained\";\n\t\tconst isDeterminate = progress !== undefined;\n\n\t\t// MD3 spec: strict size range [24dp, 240dp]\n\t\tconst clampedSize = Math.min(240, Math.max(24, size));\n\n\t\t// Proportional scaling based on the default 48dp spec size\n\t\tconst scaleFactor = clampedSize / 48;\n\n\t\t// MD3 spec: contained → 38dp container, 24dp active indicator\n\t\t// Ratio: 38/24 = 1.583 — preserved at all sizes\n\t\tconst containerSize = isContained ? 38 * scaleFactor : undefined;\n\t\tconst indicatorSize = isContained ? 24 * scaleFactor : clampedSize;\n\n\t\t// MD3 color tokens (with per-variant defaults)\n\t\tconst activeColor = isContained\n\t\t\t? (color ?? \"var(--md-sys-color-indicator-contained-active)\")\n\t\t\t: (color ?? \"var(--md-sys-color-indicator-active)\");\n\n\t\t// aria-valuenow is only set in determinate mode (per ARIA spec)\n\t\tconst ariaNow = isDeterminate\n\t\t\t? Math.round(Math.min(1, Math.max(0, progress)) * 100)\n\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\taria-valuenow={ariaNow}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: clampedSize,\n\t\t\t\t\theight: clampedSize,\n\t\t\t\t\tcolor: activeColor,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{isContained ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex items-center justify-center rounded-full\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: containerSize,\n\t\t\t\t\t\t\theight: containerSize,\n\t\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\t\t\"var(--md-sys-color-indicator-contained-container)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\t<DeterminateSvg size={indicatorSize} progress={progress} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<IndeterminateSvg size={indicatorSize} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : isDeterminate ? (\n\t\t\t\t\t<DeterminateSvg size={indicatorSize} progress={progress} />\n\t\t\t\t) : (\n\t\t\t\t\t<IndeterminateSvg size={indicatorSize} />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nLoadingIndicator.displayName = \"LoadingIndicator\";\n","export function easeInOutCubic(x: number): number {\n\treturn x < 0.5 ? 4 * x * x * x : 1 - (-2 * x + 2) ** 3 / 2;\n}\n\nexport function generateWavyCircularPath(\n\tcenter: number,\n\tradius: number,\n\tamplitude: number,\n\twavelength: number,\n): string {\n\tconst circumference = 2 * Math.PI * radius;\n\tconst numWaves = Math.max(\n\t\t3,\n\t\tMath.round(circumference / Math.max(1, wavelength)),\n\t);\n\tconst steps = numWaves * 4;\n\tconst dt = (2 * Math.PI) / steps;\n\n\tconst rAt = (t: number) => radius + amplitude * Math.sin(numWaves * t);\n\tconst drAt = (t: number) => amplitude * numWaves * Math.cos(numWaves * t);\n\tconst xAt = (t: number) => center + rAt(t) * Math.cos(t);\n\tconst yAt = (t: number) => center + rAt(t) * Math.sin(t);\n\tconst dxAt = (t: number) => drAt(t) * Math.cos(t) - rAt(t) * Math.sin(t);\n\tconst dyAt = (t: number) => drAt(t) * Math.sin(t) + rAt(t) * Math.cos(t);\n\n\tlet d = \"\";\n\tconst tStart = 0;\n\n\tfor (let i = 0; i < steps; i++) {\n\t\tconst t0 = tStart + i * dt;\n\t\tconst t1 = tStart + (i + 1) * dt;\n\n\t\tconst scale = dt / 3;\n\t\tconst cp1x = xAt(t0) + scale * dxAt(t0);\n\t\tconst cp1y = yAt(t0) + scale * dyAt(t0);\n\t\tconst cp2x = xAt(t1) - scale * dxAt(t1);\n\t\tconst cp2y = yAt(t1) - scale * dyAt(t1);\n\n\t\tif (i === 0) d += `M ${xAt(t0).toFixed(2)} ${yAt(t0).toFixed(2)}`;\n\t\td += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${xAt(t1).toFixed(2)} ${yAt(t1).toFixed(2)}`;\n\t}\n\td += \" Z\";\n\treturn d;\n}\n\nexport function getSinePath(\n\tstartX: number,\n\tendX: number,\n\tphase: number,\n\twl: number,\n\tamp: number,\n) {\n\tif (startX >= endX) return \"\";\n\tlet d = \"\";\n\tconst step = amp === 0 ? Math.max(10, endX - startX) : 1;\n\n\tconst yStart = Math.sin(((startX + phase) / wl) * 2 * Math.PI) * amp;\n\td += `M ${startX.toFixed(2)} ${yStart.toFixed(2)}`;\n\n\tlet nextX = Math.ceil(startX / step) * step;\n\tif (nextX === startX) nextX += step;\n\n\twhile (nextX < endX) {\n\t\tconst y = Math.sin(((nextX + phase) / wl) * 2 * Math.PI) * amp;\n\t\td += ` L ${nextX.toFixed(2)} ${y.toFixed(2)}`;\n\t\tnextX += step;\n\t}\n\n\tconst yEnd = Math.sin(((endX + phase) / wl) * 2 * Math.PI) * amp;\n\td += ` L ${endX.toFixed(2)} ${yEnd.toFixed(2)}`;\n\n\treturn d;\n}\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { CircularProgressProps } from \"./types\";\nimport { generateWavyCircularPath } from \"./utils\";\n\nexport const CircularProgress = React.forwardRef<\n\tHTMLDivElement,\n\tCircularProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tsize = 48,\n\t\t\ttrackHeight = 4,\n\t\t\tshape = \"flat\",\n\t\t\tamplitude,\n\t\t\twavelength,\n\t\t\tgapSize = 4,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst radius = (size - trackHeight) / 2;\n\t\tconst center = size / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\tconst isWavy = shape === \"wavy\";\n\n\t\tconst BASELINE_SIZE = 48;\n\t\tconst scaleFactor = size / BASELINE_SIZE;\n\t\tconst effectiveAmplitude = React.useMemo(\n\t\t\t() => amplitude ?? 1.6 * scaleFactor,\n\t\t\t[amplitude, scaleFactor],\n\t\t);\n\t\tconst effectiveWavelength = React.useMemo(\n\t\t\t() => wavelength ?? 15 * scaleFactor,\n\t\t\t[wavelength, scaleFactor],\n\t\t);\n\n\t\tconst wavyActivePath = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisWavy\n\t\t\t\t\t? generateWavyCircularPath(\n\t\t\t\t\t\t\tcenter,\n\t\t\t\t\t\t\tradius,\n\t\t\t\t\t\t\teffectiveAmplitude,\n\t\t\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null,\n\t\t\t[isWavy, center, radius, effectiveAmplitude, effectiveWavelength],\n\t\t);\n\n\t\tconst circumference = React.useMemo(() => 2 * Math.PI * radius, [radius]);\n\t\tconst gapForTrack = React.useMemo(\n\t\t\t() => (gapSize + trackHeight) / circumference,\n\t\t\t[gapSize, trackHeight, circumference],\n\t\t);\n\t\tconst activeAngularFraction = isDeterminate ? clampedValue / 100 : 0;\n\n\t\tconst trackOffset = isDeterminate ? activeAngularFraction + gapForTrack : 0;\n\t\tconst trackLength = isDeterminate\n\t\t\t? Math.max(0.001, 1 - activeAngularFraction - 2 * gapForTrack)\n\t\t\t: 1;\n\n\t\tconst ActiveCircleElem = m.circle;\n\t\tconst ActivePathElem = m.path;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\theight={size}\n\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{ transform: \"rotate(-90deg)\", overflow: \"visible\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\tinitial={{ pathLength: trackLength, pathOffset: trackOffset }}\n\t\t\t\t\t\t\t\tanimate={{ pathLength: trackLength, pathOffset: trackOffset }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isDeterminate &&\n\t\t\t\t\t\t\t(isWavy ? (\n\t\t\t\t\t\t\t\t<ActivePathElem\n\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</svg>\n\n\t\t\t\t\t{!isDeterminate && (\n\t\t\t\t\t\t<m.svg\n\t\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\t\theight={size}\n\t\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\t\t\trotate: \"-90deg\",\n\t\t\t\t\t\t\t\ttransformOrigin: \"center\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tanimate={{ rotate: [\"-90deg\", \"270deg\"] }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\trotate: {\n\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\tease: \"linear\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tpathLength: [\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.1 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.75 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.1 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\trotate: [\n\t\t\t\t\t\t\t\t\t\t`${(0.1 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t\t`${(1.0 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t\t`${(1.1 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{isWavy ? (\n\t\t\t\t\t\t\t\t<ActivePathElem\n\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\tpathLength: [0.1, 0.75, 0.1],\n\t\t\t\t\t\t\t\t\t\trotate: [\"0deg\", \"90deg\", \"360deg\"],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\tpathLength: [0.1, 0.75, 0.1],\n\t\t\t\t\t\t\t\t\t\trotate: [\"0deg\", \"90deg\", \"360deg\"],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.svg>\n\t\t\t\t\t)}\n\t\t\t\t</LazyMotion>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCircularProgress.displayName = \"CircularProgress\";\n","import * as React from \"react\";\n\nexport function useContainerWidth() {\n\tconst [width, setWidth] = React.useState(0);\n\tconst observerRef = React.useRef<ResizeObserver | null>(null);\n\n\tconst ref = React.useCallback((node: HTMLDivElement | null) => {\n\t\tif (observerRef.current) {\n\t\t\tobserverRef.current.disconnect();\n\t\t\tobserverRef.current = null;\n\t\t}\n\n\t\tif (node) {\n\t\t\tconst obs = new ResizeObserver((entries) => {\n\t\t\t\tconst contentRect = entries[0].contentRect;\n\t\t\t\tsetWidth(contentRect.width);\n\t\t\t});\n\t\t\tobs.observe(node);\n\t\t\tobserverRef.current = obs;\n\t\t}\n\t}, []);\n\n\t// Cleanup on unmount\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (observerRef.current) {\n\t\t\t\tobserverRef.current.disconnect();\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn [ref, width] as const;\n}\n\nexport function useMergedRef<T>(\n\t...refs: (React.Ref<T> | undefined | null)[]\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t\t(ref as React.MutableRefObject<T | null>).current = node;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[refs],\n\t);\n}\n","import { m } from \"motion/react\";\nimport * as React from \"react\";\n\nexport const FlatLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\tcrawlerSpeed: number;\n}>(function FlatLinearTrack({\n\ttrackHeight,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\tcrawlerSpeed,\n}) {\n\tconst isDeterminate = value !== undefined;\n\tconst radius = trackHeight / 2;\n\tconst minActiveWidth = trackHeight;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: trackHeight, borderRadius: radius }}\n\t\t>\n\t\t\t{isDeterminate ? (\n\t\t\t\t<>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: trackColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, 0%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, ${value}%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\tminWidth: minActiveWidth,\n\t\t\t\t\t\t\t...(isRtl ? { right: 0 } : { left: 0 }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{ width: `${minActiveWidth}px` }}\n\t\t\t\t\t\tanimate={{ width: `${value}%` }}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: trackColor, borderRadius: radius }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: activeColor, borderRadius: radius }}\n\t\t\t\t\t\tinitial={{ left: \"-40%\", width: \"40%\" }}\n\t\t\t\t\t\tanimate={{ left: [\"-40%\", \"100%\"], width: [\"40%\", \"20%\", \"40%\"] }}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { animate, useAnimationFrame, useMotionValue } from \"motion/react\";\nimport * as React from \"react\";\nimport { useContainerWidth } from \"./hooks\";\nimport { easeInOutCubic, getSinePath } from \"./utils\";\n\nexport const WavyLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tsvgHeight: number;\n\tamplitude: number;\n\twavelength: number;\n\tindeterminateWavelength: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\twaveSpeed: number;\n\tcrawlerSpeed: number;\n\tdeterminateAnimation: \"md3\" | \"continuous\";\n\tindeterminateAnimation: \"md3\" | \"continuous\";\n\ttrackShape: \"flat\" | \"wavy\";\n}>(function WavyLinearTrack({\n\ttrackHeight,\n\tsvgHeight,\n\tamplitude,\n\twavelength,\n\tindeterminateWavelength,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\twaveSpeed,\n\tcrawlerSpeed,\n\tdeterminateAnimation,\n\tindeterminateAnimation,\n\ttrackShape,\n}) {\n\tconst isDeterminate = typeof value === \"number\";\n\tconst clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 100;\n\tconst titleId = React.useId();\n\n\tconst [containerRef, width] = useContainerWidth();\n\n\tconst activePathRef = React.useRef<SVGPathElement>(null);\n\tconst trackPathRef = React.useRef<SVGPathElement>(null);\n\n\tconst amplitudeMV = useMotionValue(amplitude);\n\tconst fractionMV = useMotionValue(isDeterminate ? clampedValue / 100 : 1);\n\n\tReact.useEffect(() => {\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = clampedValue / 100;\n\n\t\t\t// Handle Flattening Logic based on determinateAnimation prop\n\t\t\tlet targetAmp = amplitude;\n\t\t\tif (determinateAnimation === \"md3\") {\n\t\t\t\ttargetAmp = fraction <= 0.1 || fraction >= 0.95 ? 0 : amplitude;\n\t\t\t}\n\n\t\t\tanimate(amplitudeMV, targetAmp, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t\tanimate(fractionMV, fraction, { duration: 0.4, ease: [0.2, 0, 0, 1] });\n\t\t}\n\t}, [\n\t\tclampedValue,\n\t\tisDeterminate,\n\t\tamplitude,\n\t\tamplitudeMV,\n\t\tfractionMV,\n\t\tdeterminateAnimation,\n\t]);\n\n\tconst activeWavelength = Math.max(\n\t\t1,\n\t\tisDeterminate ? wavelength : indeterminateWavelength,\n\t);\n\tconst trackAmp = trackShape === \"wavy\" ? amplitude : 0;\n\n\tuseAnimationFrame((time) => {\n\t\tif (width === 0) return;\n\n\t\tconst currentAmp = amplitudeMV.get();\n\t\tconst phase = (time / 1000) * waveSpeed * activeWavelength;\n\t\tconst capWidth = trackHeight / 2;\n\n\t\tlet activePathD = \"\";\n\t\tlet trackD = \"\";\n\t\tconst totalGap = gapSize + trackHeight;\n\n\t\t// 1. DETERMINATE MODE\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = fractionMV.get();\n\t\t\tconst barHead = fraction * width;\n\n\t\t\tconst adjHead = Math.max(capWidth, Math.min(width - capWidth, barHead));\n\t\t\tconst adjTail = capWidth;\n\n\t\t\tif (fraction > 0 && adjHead - adjTail > 0.1) {\n\t\t\t\tactivePathD = getSinePath(\n\t\t\t\t\tadjTail,\n\t\t\t\t\tadjHead,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\tcurrentAmp,\n\t\t\t\t);\n\t\t\t} else if (fraction === 0) {\n\t\t\t\tactivePathD = `M ${capWidth} 0 L ${capWidth + 0.01} 0`;\n\t\t\t}\n\n\t\t\tconst trackStart = adjHead + totalGap;\n\t\t\tif (trackStart < width - capWidth) {\n\t\t\t\ttrackD = getSinePath(\n\t\t\t\t\ttrackStart,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// 2. INDETERMINATE MODE\n\t\telse {\n\t\t\tconst safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);\n\t\t\tconst activeLines: { tail: number; head: number }[] = [];\n\n\t\t\tif (indeterminateAnimation === \"continuous\") {\n\t\t\t\tconst cycle = 2000 / safeCrawlerSpeed;\n\t\t\t\tconst fraction = (time % cycle) / cycle;\n\t\t\t\tactiveLines.push({\n\t\t\t\t\ttail: easeInOutCubic(Math.max(0, fraction * 1.5 - 0.5)),\n\t\t\t\t\thead: easeInOutCubic(Math.min(1, fraction * 1.5)),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst cycle = 1750 / safeCrawlerSpeed;\n\t\t\t\tconst t = (time % cycle) * safeCrawlerSpeed;\n\n\t\t\t\tconst l1H = easeInOutCubic(Math.max(0, Math.min(1, t / 1000)));\n\t\t\t\tconst l1T = easeInOutCubic(Math.max(0, Math.min(1, (t - 250) / 1000)));\n\t\t\t\tconst l2H = easeInOutCubic(Math.max(0, Math.min(1, (t - 650) / 850)));\n\t\t\t\tconst l2T = easeInOutCubic(Math.max(0, Math.min(1, (t - 900) / 850)));\n\n\t\t\t\tactiveLines.push({ tail: l1T, head: l1H });\n\t\t\t\tactiveLines.push({ tail: l2T, head: l2H });\n\t\t\t}\n\n\t\t\tconst segments = activeLines\n\t\t\t\t.map((line) => {\n\t\t\t\t\tconst barTail = line.tail * width;\n\t\t\t\t\tconst barHead = line.head * width;\n\t\t\t\t\tconst adjTail = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, barTail),\n\t\t\t\t\t);\n\t\t\t\t\tconst adjHead = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, barHead),\n\t\t\t\t\t);\n\t\t\t\t\treturn { adjTail, adjHead };\n\t\t\t\t})\n\t\t\t\t.filter((seg) => seg.adjHead - seg.adjTail > 0.1);\n\n\t\t\tactivePathD = segments\n\t\t\t\t.map((seg) =>\n\t\t\t\t\tgetSinePath(\n\t\t\t\t\t\tseg.adjTail,\n\t\t\t\t\t\tseg.adjHead,\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tactiveWavelength,\n\t\t\t\t\t\tcurrentAmp,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\" \");\n\n\t\t\tlet currentTrackX = capWidth;\n\t\t\tfor (const seg of segments) {\n\t\t\t\tconst trackEnd = seg.adjTail - totalGap;\n\t\t\t\tif (trackEnd > currentTrackX) {\n\t\t\t\t\ttrackD += `${getSinePath(currentTrackX, trackEnd, phase, activeWavelength, trackAmp)} `;\n\t\t\t\t}\n\t\t\t\tcurrentTrackX = Math.max(currentTrackX, seg.adjHead + totalGap);\n\t\t\t}\n\t\t\tif (currentTrackX < width - capWidth) {\n\t\t\t\ttrackD += getSinePath(\n\t\t\t\t\tcurrentTrackX,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (activePathRef.current)\n\t\t\tactivePathRef.current.setAttribute(\"d\", activePathD);\n\t\tif (trackPathRef.current)\n\t\t\ttrackPathRef.current.setAttribute(\"d\", trackD.trim());\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: svgHeight }}\n\t\t>\n\t\t\t{width > 0 && (\n\t\t\t\t<svg\n\t\t\t\t\tclassName=\"absolute inset-0 w-full h-full\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\ttransform: isRtl ? \"scaleX(-1)\" : undefined,\n\t\t\t\t\t}}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t>\n\t\t\t\t\t<title id={titleId}>\n\t\t\t\t\t\t{isDeterminate\n\t\t\t\t\t\t\t? `Progress: ${clampedValue}%`\n\t\t\t\t\t\t\t: \"Indeterminate loading progress\"}\n\t\t\t\t\t</title>\n\t\t\t\t\t<g transform={`translate(0, ${svgHeight / 2})`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={trackPathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={trackColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={activePathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useMergedRef } from \"./hooks\";\nimport { FlatLinearTrack } from \"./linear-flat\";\nimport { WavyLinearTrack } from \"./linear-wavy\";\nimport type { LinearProgressProps } from \"./types\";\n\nexport const LinearProgress = React.forwardRef<\n\tHTMLDivElement,\n\tLinearProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tshape = \"flat\",\n\t\t\ttrackShape,\n\t\t\ttrackHeight = 4,\n\t\t\tamplitude,\n\t\t\twavelength = 40,\n\t\t\tindeterminateWavelength = 20,\n\t\t\twaveSpeed = 1,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tdeterminateAnimation = \"md3\",\n\t\t\tindeterminateAnimation = \"continuous\",\n\t\t\tgapSize = 4,\n\t\t\tshowStopIndicator = \"auto\",\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, containerRef);\n\t\tconst [isRtl, setIsRtl] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (containerRef.current) {\n\t\t\t\tconst dir = getComputedStyle(containerRef.current).direction;\n\t\t\t\tsetIsRtl(dir === \"rtl\");\n\t\t\t}\n\t\t}, []);\n\n\t\tconst isWavy = shape === \"wavy\";\n\t\tconst resolvedTrackShape = trackShape ?? shape;\n\n\t\tconst effectiveAmplitude = React.useMemo(() => amplitude ?? 3, [amplitude]);\n\t\tconst svgHeight = React.useMemo(\n\t\t\t() => (isWavy ? trackHeight + effectiveAmplitude * 2 : trackHeight),\n\t\t\t[isWavy, trackHeight, effectiveAmplitude],\n\t\t);\n\n\t\tconst shouldShowStop = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisDeterminate &&\n\t\t\t\tresolvedTrackShape === \"flat\" &&\n\t\t\t\t(showStopIndicator === true ||\n\t\t\t\t\t(showStopIndicator === \"auto\" && isDeterminate)),\n\t\t\t[isDeterminate, resolvedTrackShape, showStopIndicator],\n\t\t);\n\n\t\tconst stopSize = React.useMemo(\n\t\t\t() => Math.max(2, trackHeight > 4 ? 4 : trackHeight / 2),\n\t\t\t[trackHeight],\n\t\t);\n\n\t\tconst stopOffset = (trackHeight - stopSize) / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex w-full flex-col justify-center\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: svgHeight }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{isWavy ? (\n\t\t\t\t\t\t<WavyLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tsvgHeight={svgHeight}\n\t\t\t\t\t\t\tamplitude={effectiveAmplitude}\n\t\t\t\t\t\t\twavelength={wavelength}\n\t\t\t\t\t\t\tindeterminateWavelength={indeterminateWavelength}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\twaveSpeed={waveSpeed}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t\tdeterminateAnimation={determinateAnimation}\n\t\t\t\t\t\t\tindeterminateAnimation={indeterminateAnimation}\n\t\t\t\t\t\t\ttrackShape={resolvedTrackShape}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<FlatLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{shouldShowStop && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"absolute rounded-full\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: stopSize,\n\t\t\t\t\t\t\t\theight: stopSize,\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--md-sys-color-indicator-stop)\",\n\t\t\t\t\t\t\t\ttop: svgHeight / 2 - stopSize / 2,\n\t\t\t\t\t\t\t\t...(isRtl ? { left: stopOffset } : { right: stopOffset }),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nLinearProgress.displayName = \"LinearProgress\";\n","import * as React from \"react\";\nimport { CircularProgress } from \"./circular\";\nimport { LinearProgress } from \"./linear\";\nimport type { ProgressIndicatorProps } from \"./types\";\n\n/**\n * Progress Indicator component based on Material Design 3 Expressive guidelines.\n * Flexible support for 2 presentation variants: Linear and Circular,\n * with smooth dynamic Wavy shape profiles.\n *\n * @example\n * ```tsx\n * // Determinate Flat Linear\n * <ProgressIndicator variant=\"linear\" value={60} aria-label=\"Loading profile...\" />\n *\n * // Indeterminate Wavy Linear\n * <ProgressIndicator variant=\"linear\" shape=\"wavy\" aria-label=\"Connecting to server...\" />\n *\n * // Determinate Flat Circular\n * <ProgressIndicator variant=\"circular\" value={45} size={48} aria-label=\"Syncing...\" />\n * ```\n */\n\nexport const ProgressIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tProgressIndicatorProps\n>((props, ref) => {\n\tif (props.variant === \"circular\") {\n\t\treturn <CircularProgress ref={ref} {...props} />;\n\t}\n\treturn <LinearProgress ref={ref} {...props} />;\n});\n\nProgressIndicator.displayName = \"ProgressIndicator\";\n\nexport type {\n\tCircularProgressProps,\n\tLinearProgressProps,\n\tProgressIndicatorProps,\n} from \"./types\";\n","import { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Ripple\n//\n// - Origin: pointer-down coordinates (x, y) relative to container\n// - Shape: perfectly round circle, expands from origin to diagonally fill btn\n// - Color: currentColor at 12% opacity (matches MD3 state layer spec)\n// - A11y: disabled when `prefers-reduced-motion` is active (configurable)\n// - Clipping: caller wraps in overflow-hidden; border-radius handled on parent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Represents a single ripple wave instance with position and size metadata.\n *\n * @example\n * ```tsx\n * const ripple: RippleOrigin = { id: Date.now(), x: 50, y: 30, size: 200 };\n * ```\n */\nexport interface RippleOrigin {\n\t/** Unique identifier used as React key and for removal. */\n\tid: number;\n\t/** X coordinate of the pointer event relative to the container's left edge (px). */\n\tx: number;\n\t/** Y coordinate of the pointer event relative to the container's top edge (px). */\n\ty: number;\n\t/**\n\t * Diameter of the ripple circle (px).\n\t * Typically `Math.hypot(width, height) * 2` to ensure it fills the container.\n\t */\n\tsize: number;\n}\n\n/** @internal Props for a single animated ripple element. */\ninterface RippleItemProps {\n\tripple: RippleOrigin;\n\tonDone: (id: number) => void;\n}\n\n/** @internal Memoized single ripple wave — minimises re-renders. */\nconst RippleItem = React.memo(function RippleItem({\n\tripple,\n\tonDone,\n}: RippleItemProps) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={ripple.id}\n\t\t\taria-hidden=\"true\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: ripple.x - ripple.size / 2,\n\t\t\t\ttop: ripple.y - ripple.size / 2,\n\t\t\t\twidth: ripple.size,\n\t\t\t\theight: ripple.size,\n\t\t\t\tborderRadius: \"50%\",\n\t\t\t\tbackgroundColor: \"currentColor\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\ttransformOrigin: \"center\",\n\t\t\t}}\n\t\t\tinitial={{ scale: 0, opacity: 0.12 }}\n\t\t\tanimate={{ scale: 1, opacity: 0 }}\n\t\t\texit={{ opacity: 0 }}\n\t\t\ttransition={{\n\t\t\t\tscale: { duration: 0.5, ease: [0.2, 0, 0, 1] },\n\t\t\t\topacity: { duration: 0.4, ease: \"easeOut\", delay: 0.1 },\n\t\t\t}}\n\t\t\tonAnimationComplete={() => onDone(ripple.id)}\n\t\t/>\n\t);\n});\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Ripple Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the `Ripple` presentation component.\n */\nexport interface RippleProps {\n\t/** Active ripple instances to render. Managed by the parent via `useRipple`. */\n\tripples: RippleOrigin[];\n\t/** Called when a ripple's exit animation completes — remove it from state. */\n\tonRippleDone: (id: number) => void;\n\t/**\n\t * Completely disables the ripple effect.\n\t * Use this when the parent element is disabled or interaction is not desired.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * When `true`, the ripple respects the user's OS-level\n\t * `prefers-reduced-motion` accessibility setting and renders nothing if active.\n\t *\n\t * Set to `false` to always show ripples regardless of system preference.\n\t * @default true\n\t */\n\trespectSystemMotion?: boolean;\n}\n\n/**\n * MD3 Expressive Ripple — animated touch-feedback wave layer.\n *\n * Renders absolutely-positioned ripple circles inside an `overflow-hidden`\n * container. Must be placed as a direct child of the interactive element.\n *\n * @remarks\n * - The parent element **must** have `overflow: hidden` and `position: relative`\n * (or equivalent) for clipping to work correctly.\n * - Set `disabled` to `true` on parent's disabled state to avoid stale ripples.\n * - The ripple color is `currentColor` at 12% opacity — matching MD3 state layer spec.\n *\n * @example\n * ```tsx\n * const { ripples, onPointerDown, removeRipple } = useRippleState();\n *\n * <button onPointerDown={onPointerDown} className=\"relative overflow-hidden\">\n * <Ripple ripples={ripples} onRippleDone={removeRipple} />\n * Click me\n * </button>\n * ```\n *\n * @see {@link useRippleState} for the state management hook\n * @see https://m3.material.io/foundations/interaction/states/overview\n */\nexport function Ripple({\n\tripples,\n\tonRippleDone,\n\tdisabled = false,\n\trespectSystemMotion = true,\n}: RippleProps) {\n\tconst prefersReduced = useReducedMotion();\n\n\t// Disabled prop: explicitly turned off by consumer\n\tif (disabled) return null;\n\n\t// Respect system prefers-reduced-motion when opted-in\n\tif (respectSystemMotion && prefersReduced) return null;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{ripples.map((r) => (\n\t\t\t\t<RippleItem key={r.id} ripple={r} onDone={onRippleDone} />\n\t\t\t))}\n\t\t</AnimatePresence>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useRippleState Hook\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Options for configuring `useRippleState` behaviour.\n */\nexport interface UseRippleStateOptions {\n\t/**\n\t * When `true`, the ripple is suppressed — `onPointerDown` becomes a no-op.\n\t * Use this to sync the ripple with the parent element's `disabled` state.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n}\n\n/**\n * `useRippleState` — state manager for MD3 Expressive ripple waves.\n *\n * Tracks active ripple instances and provides pointer event handlers.\n * Pair with the `<Ripple>` component for rendering.\n *\n * @remarks\n * This hook only manages ripple *state* (coordinates, size, lifecycle).\n * The actual animation is handled by `<Ripple>` via Framer Motion.\n * Respecting `prefers-reduced-motion` is handled by `<Ripple>` itself.\n *\n * @param options - Configuration options. See {@link UseRippleStateOptions}.\n * @returns `{ ripples, onPointerDown, removeRipple }` — bind to the interactive element.\n *\n * @example\n * ```tsx\n * function MyButton({ disabled, children }) {\n * const { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });\n *\n * return (\n * <button\n * disabled={disabled}\n * onPointerDown={onPointerDown}\n * className=\"relative overflow-hidden\"\n * >\n * <Ripple ripples={ripples} onRippleDone={removeRipple} disabled={disabled} />\n * {children}\n * </button>\n * );\n * }\n * ```\n *\n * @see {@link Ripple} for the rendering component\n */\nexport function useRippleState(options: UseRippleStateOptions = {}) {\n\tconst { disabled = false } = options;\n\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\n\tconst onPointerDown = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\tif (disabled) return;\n\t\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\t\tconst x = e.clientX - rect.left;\n\t\t\tconst y = e.clientY - rect.top;\n\t\t\tconst rippleSize = Math.hypot(rect.width, rect.height) * 2;\n\t\t\tsetRipples((prev) => [\n\t\t\t\t...prev,\n\t\t\t\t{ id: Date.now(), x, y, size: rippleSize },\n\t\t\t]);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst removeRipple = React.useCallback((id: number) => {\n\t\tsetRipples((prev) => prev.filter((r) => r.id !== id));\n\t}, []);\n\n\treturn { ripples, onPointerDown, removeRipple };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Legacy alias — preserved for backward-compatibility\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * @deprecated Use `useRippleState` instead. This alias will be removed in a future version.\n * @see {@link useRippleState}\n */\nexport const useRipple = useRippleState;\n","/**\n * @file ui/shared/motion-tokens.ts\n *\n * Framer Motion spring presets derived from the official MD3 Expressive\n * motion physics system (May 2025).\n *\n * Usage hierarchy:\n * 1. Import a named preset (e.g. `FAST_SPATIAL_SPRING`) for convenience.\n * 2. Call `getMotionSpring(speed, type)` when you need to pick dynamically.\n * 3. Call `getMotionTransitionCSS(speed, type, scheme?)` for pure-CSS contexts.\n *\n * @see https://m3.material.io/styles/motion/overview/how-it-works\n * @see https://m3.material.io/styles/motion/overview/specs\n */\n\nimport type { Transition } from \"motion/react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Spring Token Structure\n//\n// MD3 defines springs as dampingRatio (0–1) + stiffness.\n// Framer Motion uses absolute `damping` coefficient.\n//\n// Conversion (with Framer's default mass = 1):\n// damping = 2 × dampingRatio × √stiffness\n//\n// Computed values (rounded to 2 decimal places):\n//\n// fast spatial: 2 × 0.6 × √800 = 2 × 0.6 × 28.28 ≈ 33.94\n// fast effects: 2 × 1.0 × √3800 = 2 × 61.64 ≈ 123.29\n// default spatial: 2 × 0.8 × √380 = 2 × 0.8 × 19.49 ≈ 31.19\n// default effects: 2 × 1.0 × √1600 = 2 × 40 = 80\n// slow spatial: 2 × 0.8 × √200 = 2 × 0.8 × 14.14 ≈ 22.63\n// slow effects: 2 × 1.0 × √800 = 2 × 28.28 ≈ 56.57\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ── Spatial springs — use for position, size, border-radius, rotation, scale ─\n\n/**\n * MD3 Expressive — Fast Spatial Spring\n * `md.sys.motion.spring.fast.spatial` (dampingRatio: 0.6, stiffness: 800)\n *\n * Use for: small components (buttons, switches, chips).\n * Has notable bounce/overshoot — feels snappy and expressive.\n */\nexport const FAST_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 33.94,\n} as const;\n\n/**\n * MD3 Expressive — Default Spatial Spring\n * `md.sys.motion.spring.default.spatial` (dampingRatio: 0.8, stiffness: 380)\n *\n * Use for: medium elements (bottom sheets, menus, navigation rail).\n * Gentle overshoot — the go-to spring for most UI animations.\n */\nexport const DEFAULT_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 380,\n\tdamping: 31.19,\n} as const;\n\n/**\n * MD3 Expressive — Slow Spatial Spring\n * `md.sys.motion.spring.slow.spatial` (dampingRatio: 0.8, stiffness: 200)\n *\n * Use for: full-screen transitions and large layout shifts.\n * Subtle, slow overshoot.\n */\nexport const SLOW_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 22.63,\n} as const;\n\n// ── Effects springs — use for color, opacity (critically damped, no bounce) ──\n\n/**\n * MD3 Expressive — Fast Effects Spring\n * `md.sys.motion.spring.fast.effects` (dampingRatio: 1.0, stiffness: 3800)\n *\n * Use for: color changes on switches, icon swaps, badge counts.\n * Critically damped — very fast, no overshoot.\n */\nexport const FAST_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 3800,\n\tdamping: 123.29,\n} as const;\n\n/**\n * MD3 Expressive — Default Effects Spring\n * `md.sys.motion.spring.default.effects` (dampingRatio: 1.0, stiffness: 1600)\n *\n * Use for: opacity fades, color transitions for medium-sized elements.\n * Critically damped — smooth with no overshoot.\n */\nexport const DEFAULT_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 1600,\n\tdamping: 80,\n} as const;\n\n/**\n * MD3 Expressive — Slow Effects Spring\n * `md.sys.motion.spring.slow.effects` (dampingRatio: 1.0, stiffness: 800)\n *\n * Use for: full-screen opacity/color transitions.\n * Critically damped — slow and smooth.\n */\nexport const SLOW_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 56.57,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dynamic helper\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type SpringSpeed = \"fast\" | \"default\" | \"slow\";\nexport type SpringAnimationType = \"spatial\" | \"effects\";\n\nconst springMap = {\n\tfast: { spatial: FAST_SPATIAL_SPRING, effects: FAST_EFFECTS_SPRING },\n\tdefault: { spatial: DEFAULT_SPATIAL_SPRING, effects: DEFAULT_EFFECTS_SPRING },\n\tslow: { spatial: SLOW_SPATIAL_SPRING, effects: SLOW_EFFECTS_SPRING },\n} as const;\n\n/**\n * Pick a Framer Motion spring by speed and type.\n *\n * @example\n * ```tsx\n * transition={getMotionSpring(\"fast\", \"spatial\")}\n * ```\n */\nexport function getMotionSpring(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n): Transition {\n\treturn springMap[speed][type];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CSS transition strings\n// For contexts where Framer Motion is not used (plain CSS / Tailwind).\n// Uses official Web spring → CSS cubic-bezier conversion table.\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst CSS_CURVES = {\n\texpressive: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.42, 1.67, 0.21, 0.90)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.38, 1.21, 0.22, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.39, 1.29, 0.35, 0.98)\",\n\t\t\t\tdurationMs: 650,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n\tstandard: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 750,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n} as const;\n\nexport type MotionScheme = \"expressive\" | \"standard\";\n\n/**\n * Returns a CSS `transition` value string using the official MD3 web curve\n * conversion, e.g. `\"500ms cubic-bezier(0.38, 1.21, 0.22, 1.00)\"`.\n *\n * @example\n * ```ts\n * element.style.transition = `border-radius ${getMotionTransitionCSS(\"default\", \"spatial\")}`;\n * ```\n */\nexport function getMotionTransitionCSS(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n\tscheme: MotionScheme = \"expressive\",\n): string {\n\tconst { curve, durationMs } = CSS_CURVES[scheme][speed][type];\n\treturn `${durationMs}ms ${curve}`;\n}\n","/**\n * @file shared/constants.ts\n *\n * Shared animation constants for MD3 Expressive UI components.\n * Centralises spring transition configs and motion variant objects to avoid\n * duplication across button, icon-button, FAB, and other interactive components.\n *\n * @see https://m3.material.io/foundations/animation/overview\n */\n\nimport type { Target, TargetAndTransition, Transition } from \"motion/react\";\nimport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n} from \"./motion-tokens\";\n\nexport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n\tgetMotionSpring,\n\tgetMotionTransitionCSS,\n\tSLOW_EFFECTS_SPRING,\n\tSLOW_SPATIAL_SPRING,\n} from \"./motion-tokens\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Spring Transitions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Fast spring — used for border-radius morphing, icon swaps.\n * Maps to MD3 `fast.effects` (critically damped, stiffness 3800).\n *\n * @example\n * ```tsx\n * <m.button transition={{ borderRadius: SPRING_TRANSITION_FAST }}>...</m.button>\n * ```\n */\nexport const SPRING_TRANSITION_FAST: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Standard spring — used for icon/content scale animations.\n * Maps to MD3 `default.effects` (critically damped, stiffness 1600).\n *\n * @example\n * ```tsx\n * <m.span transition={SPRING_TRANSITION}>...</m.span>\n * ```\n */\nexport const SPRING_TRANSITION: Transition = DEFAULT_EFFECTS_SPRING;\n\n/**\n * MD3 Expressive spring — active indicator expand/collapse.\n * Maps to MD3 `default.spatial` (dampingRatio: 0.8, stiffness: 380).\n * Gentle bounce for the \"pop\" effect per MD3 Expressive spec.\n */\nexport const SPRING_TRANSITION_EXPRESSIVE: Transition = DEFAULT_SPATIAL_SPRING;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Icon Span Motion Variants\n// Used for icon/loading indicator swap animation inside FAB and IconButton.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Framer Motion variants for animating icon spans in/out.\n *\n * Scale from near-zero → 1 on enter; back to near-zero on exit.\n * The near-zero value (0.01) avoids the SMIL freeze bug on Chromium\n * that occurs when an element starts at exactly `scale(0)`.\n *\n * @example\n * ```tsx\n * <AnimatePresence mode=\"wait\">\n * {loading ? (\n * <m.span key=\"loading\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n * <LoadingIndicator />\n * </m.span>\n * ) : (\n * <m.span key=\"icon\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n * {icon}\n * </m.span>\n * )}\n * </AnimatePresence>\n * ```\n */\nexport const ICON_SPAN_VARIANTS: {\n\tinitial: Target;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { scale: 0.01 },\n\tanimate: { scale: 1 },\n\texit: { scale: 0.01 },\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 TextField Animation Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Standard easing curve — used for label float, active indicator expand.\n * cubic-bezier(0.2, 0, 0, 1)\n *\n * @see https://m3.material.io/foundations/animation/easing-and-duration\n */\nexport const MD3_STANDARD_EASING: [number, number, number, number] = [\n\t0.2, 0, 0, 1,\n];\n\n/**\n * Duration for floating label transition: 150ms.\n * Used when label moves between inline position ↔ floated position.\n */\nexport const MD3_LABEL_FLOAT_DURATION = 0.15;\n\n/**\n * Duration for active indicator expand/collapse: 200ms.\n * Used for the bottom border (filled) and outline (outlined) on focus.\n */\nexport const MD3_INDICATOR_DURATION = 0.2;\n\n/**\n * Duration for supporting text / error text appear/disappear: 120ms.\n */\nexport const MD3_SUPPORTING_DURATION = 0.12;\n\n/**\n * Duration for trailing icon appear/disappear (clear button, password toggle): 100ms.\n */\nexport const MD3_ICON_SWAP_DURATION = 0.1;\n","/**\n * @file shared/touch-target.tsx\n *\n * Invisible 48×48dp touch-target expander for small interactive elements.\n *\n * WCAG 2.5.5 (Level AA) requires interactive targets to be at least 44×44 CSS pixels.\n * MD3 specifies a minimum 48dp touch target for all interactive components.\n * For button sizes XS (32dp) and SM (40dp) that are smaller than this minimum,\n * an invisible absolutely-positioned `<span>` is overlaid to extend the\n * effective tap area without affecting visual layout.\n *\n * @see https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html\n * @see https://m3.material.io/foundations/accessible-design/accessibility-basics\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TouchTarget Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Invisible 48×48dp touch area expander — satisfies WCAG 2.5.5 + MD3 spec.\n *\n * Place as a direct child of any interactive element whose visual size is\n * smaller than 48dp (e.g. `xs`/`sm` buttons and icon buttons).\n * The parent element **must** have `position: relative`.\n *\n * @remarks\n * - Hidden from assistive technologies via `aria-hidden=\"true\"`.\n * - `pointer-events: none` ensures it does not intercept click events.\n * - Centred with `left: 50% / top: 50%` + negative translate for symmetry.\n *\n * @example\n * ```tsx\n * // Used inside a 32dp XS button:\n * <button className=\"relative h-8 w-auto ...\">\n * <TouchTarget />\n * Label\n * </button>\n * ```\n *\n * @see https://m3.material.io/components/buttons/specs (Touch target section)\n */\nexport function TouchTarget() {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 min-w-12 min-h-12 cursor-pointer pointer-events-none\"\n\t\t/>\n\t);\n}\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\nimport type { Transition } from \"motion\";\nimport {\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n} from \"../../shared/motion-tokens\";\n\n/**\n * Shape morphing spring animation for layout/width morphing.\n * MD3: `fast.spatial` — stiffness 800, dampingRatio 0.6 (has bounce).\n */\nexport const BUTTON_SHAPE_MORPH_SPRING: Transition = FAST_SPATIAL_SPRING;\n\n/**\n * Spring for border-radius changes on press/release and shape toggle.\n * MD3: `fast.effects` — stiffness 3800, critically damped (dampingRatio 1.0).\n * No overshoot; border-radius never goes negative.\n */\nexport const BUTTON_RADIUS_SPRING: Transition = FAST_EFFECTS_SPRING;\n\nexport const ROUND_SHAPE_RADIUS = 9999;\n\nexport const BUTTON_SIZE_TOKENS = {\n\txs: {\n\t\theight: \"2rem\", // 32dp\n\t\tleadingSpace: \"1rem\", // 16dp\n\t\ttrailingSpace: \"1rem\", // 16dp\n\t\ticonSize: \"1.25rem\", // 20dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.medium, // 12dp\n\t\tpressedShapeRadius: cornerRadius.small, // 8dp\n\t\troundShapeRadius: 16,\n\t},\n\tsm: {\n\t\theight: \"2.5rem\", // 40dp\n\t\tleadingSpace: \"1rem\", // 16dp\n\t\ttrailingSpace: \"1rem\", // 16dp\n\t\ticonSize: \"1.25rem\", // 20dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.medium, // 12dp\n\t\tpressedShapeRadius: cornerRadius.small, // 8dp\n\t\troundShapeRadius: 20,\n\t},\n\tmd: {\n\t\theight: \"3.5rem\", // 56dp\n\t\tleadingSpace: \"1.5rem\", // 24dp\n\t\ttrailingSpace: \"1.5rem\", // 24dp\n\t\ticonSize: \"1.5rem\", // 24dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.large, // 16dp\n\t\tpressedShapeRadius: cornerRadius.medium, // 12dp\n\t\troundShapeRadius: 28,\n\t},\n\tlg: {\n\t\theight: \"6rem\", // 96dp\n\t\tleadingSpace: \"3rem\", // 48dp\n\t\ttrailingSpace: \"3rem\", // 48dp\n\t\ticonSize: \"2rem\", // 32dp\n\t\ticonLabelSpace: \"0.75rem\", // 12dp\n\t\toutlineWidth: 2, // 2dp\n\t\tsquareShapeRadius: cornerRadius.extraLarge, // 28dp\n\t\tpressedShapeRadius: cornerRadius.large, // 16dp\n\t\troundShapeRadius: 48,\n\t},\n\txl: {\n\t\theight: \"8.5rem\", // 136dp\n\t\tleadingSpace: \"4rem\", // 64dp\n\t\ttrailingSpace: \"4rem\", // 64dp\n\t\ticonSize: \"2.5rem\", // 40dp\n\t\ticonLabelSpace: \"1rem\", // 16dp\n\t\toutlineWidth: 3, // 3dp\n\t\tsquareShapeRadius: cornerRadius.extraLarge, // 28dp\n\t\tpressedShapeRadius: cornerRadius.large, // 16dp\n\t\troundShapeRadius: 68,\n\t},\n} as const;\n\nexport const BUTTON_TYPOGRAPHY_TOKENS = {\n\txs: \"text-sm font-medium tracking-wide\", // labelLarge\n\tsm: \"text-sm font-medium tracking-wide\", // labelLarge\n\tmd: \"text-base font-medium\", // titleMedium\n\tlg: \"text-xl font-normal\", // headlineSmall\n\txl: \"text-[2rem] font-normal leading-none\", // headlineLarge\n} as const;\n\nexport const BUTTON_COLOR_TOKENS = {\n\televated: {\n\t\tdefault: \"bg-m3-surface-container-low text-m3-primary shadow-md\",\n\t\tselected: \"bg-m3-primary text-m3-on-primary shadow-md\",\n\t\tunselected: \"bg-m3-surface-container-low text-m3-primary shadow-md\",\n\t},\n\tfilled: {\n\t\tdefault: \"bg-m3-primary text-m3-on-primary\",\n\t\tselected: \"bg-m3-primary text-m3-on-primary\",\n\t\tunselected: \"bg-m3-surface-container text-m3-on-surface-variant\",\n\t},\n\ttonal: {\n\t\tdefault: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\tselected: \"bg-m3-secondary text-m3-on-secondary\",\n\t\tunselected: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t},\n\toutlined: {\n\t\tdefault:\n\t\t\t\"bg-transparent text-m3-on-surface-variant border-m3-outline-variant\",\n\t\tselected:\n\t\t\t\"bg-m3-inverse-surface text-m3-inverse-on-surface border-transparent\",\n\t\tunselected:\n\t\t\t\"bg-transparent text-m3-on-surface-variant border-m3-outline-variant\",\n\t},\n\ttext: {\n\t\tdefault: \"bg-transparent text-m3-primary\",\n\t\tselected: \"bg-transparent text-m3-primary\",\n\t\tunselected: \"bg-transparent text-m3-primary\",\n\t},\n\n\t// ── MD3 Expressive accent variants ──────────────────────────────────────\n\t/**\n\t * High-chroma tertiary tone. Use for hero CTAs and expressive moments where\n\t * a distinct accent beyond primary is needed (e.g., hero chip, highlight fab).\n\t */\n\ttertiary: {\n\t\tdefault: \"bg-m3-tertiary text-m3-on-tertiary\",\n\t\tselected: \"bg-m3-tertiary text-m3-on-tertiary\",\n\t\tunselected: \"bg-m3-tertiary-container text-m3-on-tertiary-container\",\n\t},\n\n\t/**\n\t * Brand-stable primary fixed. Hue stays consistent across light and dark modes.\n\t * Ideal for badges, pill chips, and elements that must carry the brand color\n\t * regardless of the active theme.\n\t */\n\t\"primary-fixed\": {\n\t\tdefault: \"bg-m3-primary-fixed text-m3-on-primary-fixed\",\n\t\tselected: \"bg-m3-primary-fixed text-m3-on-primary-fixed\",\n\t\tunselected: \"bg-m3-primary-fixed text-m3-on-primary-fixed-variant\",\n\t},\n\n\t/**\n\t * Brand-stable tertiary fixed. Use for special-state indicators, achievement\n\t * badges, or accent pills that need a fixed tertiary hue across themes.\n\t */\n\t\"tertiary-fixed\": {\n\t\tdefault: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed\",\n\t\tselected: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed\",\n\t\tunselected: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed-variant\",\n\t},\n} as const;\n","/**\n * @file button.tsx\n *\n * MD3 Expressive Button component.\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tAnimatePresence,\n\tanimate,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseMotionValue,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { LoadingIndicator } from \"../../loading-indicator\";\nimport { ProgressIndicator } from \"../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { SPRING_TRANSITION } from \"../../shared/constants\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport {\n\tBUTTON_COLOR_TOKENS,\n\tBUTTON_RADIUS_SPRING,\n\tBUTTON_SHAPE_MORPH_SPRING,\n\tBUTTON_SIZE_TOKENS,\n\tBUTTON_TYPOGRAPHY_TOKENS,\n} from \"./button-tokens\";\nimport type { ButtonProps } from \"./types\";\n\nconst MOTION_PROP_KEYS = [\n\t\"animate\",\n\t\"exit\",\n\t\"initial\",\n\t\"transition\",\n\t\"variants\",\n\t\"whileHover\",\n\t\"whileTap\",\n\t\"whileFocus\",\n\t\"whileDrag\",\n\t\"whileInView\",\n\t\"onAnimationStart\",\n\t\"onAnimationComplete\",\n\t\"onUpdate\",\n\t\"onDragStart\",\n\t\"onDragEnd\",\n\t\"onDrag\",\n\t\"onDirectionLock\",\n\t\"onDragTransitionEnd\",\n\t\"layout\",\n\t\"layoutId\",\n\t\"onLayoutAnimationComplete\",\n] as const;\n\nfunction springAnimate(\n\tvalue: ReturnType<typeof useMotionValue<number>>,\n\tto: number,\n) {\n\treturn animate(value, to, { ...BUTTON_RADIUS_SPRING, type: \"spring\" });\n}\n\ninterface AnimatedIconSlotProps {\n\ticonSize: string;\n\tchildren: React.ReactNode;\n\tariaHidden?: boolean;\n\ttransition?: Transition;\n}\n\nfunction AnimatedIconSlot({\n\ticonSize,\n\tchildren,\n\tariaHidden,\n\ttransition,\n}: AnimatedIconSlotProps) {\n\treturn (\n\t\t<m.span\n\t\t\tlayout=\"position\"\n\t\t\tinitial={{ width: 0, opacity: 0, scale: 0.5 }}\n\t\t\tanimate={{ width: iconSize, opacity: 1, scale: 1 }}\n\t\t\texit={{ width: 0, opacity: 0, scale: 0.5 }}\n\t\t\ttransition={transition}\n\t\t\taria-hidden={ariaHidden ? \"true\" : undefined}\n\t\t\tstyle={{ height: iconSize }}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden\",\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</m.span>\n\t);\n}\n\nconst ButtonComponent = React.forwardRef<HTMLButtonElement, ButtonProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"default\",\n\t\t\tcolorStyle = \"filled\",\n\t\t\tselectedColorStyle: _selectedColorStyle, // Deprecated — destructured to strip from restProps\n\t\t\tsize = \"sm\",\n\t\t\tshape = \"round\",\n\t\t\tselected,\n\t\t\ticon,\n\t\t\ticonPosition = \"leading\",\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tasChild = false,\n\t\t\toutlineWidth,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabelProp,\n\t\t\ttransition: customTransition,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isToggle = variant === \"toggle\";\n\t\tconst isSelected = isToggle ? !!selected : false;\n\n\t\tconst effectiveShape = isSelected\n\t\t\t? shape === \"round\"\n\t\t\t\t? \"square\"\n\t\t\t\t: \"round\"\n\t\t\t: shape;\n\n\t\tconst sizeTokens = BUTTON_SIZE_TOKENS[size] ?? BUTTON_SIZE_TOKENS.sm;\n\t\tconst animateRadius =\n\t\t\teffectiveShape === \"round\"\n\t\t\t\t? sizeTokens.roundShapeRadius\n\t\t\t\t: sizeTokens.squareShapeRadius;\n\t\tconst pressedRadius = sizeTokens.pressedShapeRadius;\n\n\t\tconst colorState = isToggle\n\t\t\t? isSelected\n\t\t\t\t? \"selected\"\n\t\t\t\t: \"unselected\"\n\t\t\t: \"default\";\n\t\tconst colorClass = BUTTON_COLOR_TOKENS[colorStyle][colorState];\n\t\tconst typographyClass =\n\t\t\tBUTTON_TYPOGRAPHY_TOKENS[size] ?? BUTTON_TYPOGRAPHY_TOKENS.sm;\n\n\t\tconst mergedStyle = {\n\t\t\theight: sizeTokens.height,\n\t\t\tpaddingInlineStart: sizeTokens.leadingSpace,\n\t\t\tpaddingInlineEnd: sizeTokens.trailingSpace,\n\t\t\tgap: sizeTokens.iconLabelSpace,\n\t\t\tborderWidth:\n\t\t\t\toutlineWidth ??\n\t\t\t\t(colorStyle === \"outlined\" ? sizeTokens.outlineWidth : 0),\n\t\t\tborderStyle: colorStyle === \"outlined\" ? \"solid\" : undefined,\n\t\t\t...style,\n\t\t};\n\n\t\tconst labelText = React.useMemo(() => {\n\t\t\tif (asChild) {\n\t\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t}>;\n\t\t\t\treturn child.props.children;\n\t\t\t}\n\t\t\treturn children;\n\t\t}, [children, asChild]);\n\t\tconst computedAriaLabel =\n\t\t\tariaLabelProp || (typeof children === \"string\" ? children : undefined);\n\t\tconst needsTouchTarget = size === \"xs\" || size === \"sm\";\n\n\t\tconst motionRadius = useMotionValue<number>(animateRadius);\n\t\tconst asChildRef = React.useRef<HTMLElement | null>(null);\n\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLElement | null) => {\n\t\t\t\tasChildRef.current = node;\n\t\t\t\tif (typeof ref === \"function\") ref(node as HTMLButtonElement);\n\t\t\t\telse if (ref)\n\t\t\t\t\t(ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n\t\t\t\t\t\tnode as HTMLButtonElement;\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!asChild) return;\n\t\t\treturn motionRadius.on(\"change\", (v) => {\n\t\t\t\tif (asChildRef.current)\n\t\t\t\t\tasChildRef.current.style.borderRadius = `${v}px`;\n\t\t\t});\n\t\t}, [motionRadius, asChild]);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!asChild) return;\n\t\t\tconst controls = springAnimate(motionRadius, animateRadius);\n\t\t\treturn () => controls.stop();\n\t\t}, [animateRadius, motionRadius, asChild]);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return e.preventDefault();\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\tif (onClick && (e.key === \"Enter\" || e.key === \" \")) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst buttonClassName = cn(\n\t\t\t\"relative w-fit shrink-0 inline-flex flex-row items-center justify-center\",\n\t\t\t\"whitespace-nowrap select-none cursor-pointer\",\n\t\t\t\"transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200\",\n\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\"disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none\",\n\t\t\tcolorClass,\n\t\t\t\"overflow-hidden\",\n\t\t\ttypographyClass,\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst sharedTransition = customTransition ?? {\n\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\tlayout: BUTTON_SHAPE_MORPH_SPRING,\n\t\t\tdefault: SPRING_TRANSITION,\n\t\t};\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<AnimatePresence initial={false} mode=\"popLayout\">\n\t\t\t\t\t{(loading || (icon && iconPosition === \"leading\")) && (\n\t\t\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\t\t\ticonSize={sizeTokens.iconSize}\n\t\t\t\t\t\t\tariaHidden={!loading}\n\t\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\tloadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\t\tsize={parseFloat(sizeTokens.iconSize) * 16}\n\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\t\tsize={parseFloat(sizeTokens.iconSize) * 16}\n\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\ticon\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{labelText && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\tclassName=\"inline-flex items-center h-full gap-[inherit]\"\n\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labelText}\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t<AnimatePresence initial={false} mode=\"popLayout\">\n\t\t\t\t\t{icon && iconPosition === \"trailing\" && (\n\t\t\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\t\t\ticonSize={sizeTokens.iconSize}\n\t\t\t\t\t\t\tariaHidden\n\t\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\tconst handleAsChildPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tspringAnimate(motionRadius, pressedRadius);\n\t\t\t\t(onPointerDown as React.PointerEventHandler<HTMLElement>)?.(e);\n\t\t\t},\n\t\t\t[motionRadius, pressedRadius, onPointerDown],\n\t\t);\n\n\t\tconst handleAsChildPointerUp = React.useCallback(() => {\n\t\t\tspringAnimate(motionRadius, animateRadius);\n\t\t}, [motionRadius, animateRadius]);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonPointerDown(e);\n\t\t\t},\n\t\t\t[onPointerDown],\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst strippedProps = { ...restProps } as Record<string, unknown>;\n\t\t\tfor (const key of MOTION_PROP_KEYS) delete strippedProps[key];\n\t\t\tconst htmlProps =\n\t\t\t\tstrippedProps as React.ButtonHTMLAttributes<HTMLButtonElement>;\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={mergedRef as React.Ref<HTMLButtonElement>}\n\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLElement>}\n\t\t\t\t\t\tonPointerDown={handleAsChildPointerDown}\n\t\t\t\t\t\tonPointerUp={handleAsChildPointerUp}\n\t\t\t\t\t\tonPointerLeave={handleAsChildPointerUp}\n\t\t\t\t\t\tonPointerCancel={handleAsChildPointerUp}\n\t\t\t\t\t\tonKeyDown={handleKeyDown as React.KeyboardEventHandler<HTMLElement>}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...(mergedStyle as React.CSSProperties),\n\t\t\t\t\t\t\tborderRadius: `${animateRadius}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={buttonClassName}\n\t\t\t\t\t\t{...htmlProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\tlayout\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\taria-busy={loading ? true : undefined}\n\t\t\t\t\taria-disabled={loading ? true : restProps.disabled}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\tanimate={{ borderRadius: animateRadius }}\n\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\tclassName={buttonClassName}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{innerContent}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nButtonComponent.displayName = \"Button\";\n\nexport const Button = React.memo(ButtonComponent);\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SPRING_TRANSITION_FAST } from \"./shared/constants\";\n\n// @internal — font must be loaded via '@bug-on/m3-expressive/material-symbols.css'\nconst VARIANT_FONT: Record<NonNullable<IconProps[\"variant\"]>, string> = {\n\toutlined: \"'Material Symbols Outlined'\",\n\trounded: \"'Material Symbols Rounded'\",\n\tsharp: \"'Material Symbols Sharp'\",\n};\n\n/**\n * Props cho component {@link Icon}.\n *\n * All variable font axes are mapped directly to `font-variation-settings`.\n */\nexport interface IconProps extends React.HTMLAttributes<HTMLSpanElement> {\n\t/**\n\t * Name of the Material Symbol in snake_case format.\n\t * @example \"home\", \"arrow_forward\", \"settings\"\n\t * @see https://fonts.google.com/icons\n\t */\n\tname: string;\n\n\t/**\n\t * Geometric style variant — maps to font family.\n\t * @default \"outlined\"\n\t */\n\tvariant?: \"outlined\" | \"rounded\" | \"sharp\";\n\n\t/**\n\t * `FILL` axis. `0` = outlined, `1` = filled.\n\t * Features spring animation when `animateFill` is true.\n\t * @default 0\n\t */\n\tfill?: 0 | 1;\n\n\t/**\n\t * `wght` axis — stroke weight. Should match surrounding text weight.\n\t * @default 400\n\t */\n\tweight?: 100 | 200 | 300 | 400 | 500 | 600 | 700;\n\n\t/**\n\t * `GRAD` axis — fine-tunes visual weight without affecting layout dimensions.\n\t * Use `-25` on dark backgrounds to offset light halation effects.\n\t * @default 0\n\t */\n\tgrade?: -50 | -25 | 0 | 100 | 200;\n\n\t/**\n\t * `opsz` axis — optical size in dp. Used to set `font-size` if `size` is not specified.\n\t * Match rendered pixel size for best quality.\n\t * @default 24\n\t */\n\topticalSize?: 20 | 24 | 40 | 48;\n\n\t/**\n\t * Direct `font-size` override in px. `opsz` axis still respects `opticalSize`.\n\t * @example size={18} opticalSize={20}\n\t */\n\tsize?: number | \"inherit\";\n\n\t/**\n\t * Enables smooth spring animation when toggling FILL axis (uses `SPRING_TRANSITION_FAST`).\n\t * Requires `motion` dependency.\n\t * @default false\n\t * @example <Icon name=\"favorite\" fill={isLiked ? 1 : 0} animateFill />\n\t */\n\tanimateFill?: boolean;\n}\n\nconst IconComponent = React.forwardRef<HTMLSpanElement, IconProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tvariant = \"outlined\",\n\t\t\tfill = 0,\n\t\t\tweight = 400,\n\t\t\tgrade = 0,\n\t\t\topticalSize = 24,\n\t\t\tsize,\n\t\t\tanimateFill = false,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst fontVariationSettings = `'FILL' ${fill}, 'wght' ${weight}, 'GRAD' ${grade}, 'opsz' ${opticalSize}`;\n\n\t\tconst computedStyle: React.CSSProperties = {\n\t\t\tfontFamily: VARIANT_FONT[variant],\n\t\t\tfontSize:\n\t\t\t\tsize === \"inherit\"\n\t\t\t\t\t? \"inherit\"\n\t\t\t\t\t: size != null\n\t\t\t\t\t\t? `${size}px`\n\t\t\t\t\t\t: `${opticalSize}px`,\n\t\t\tfontVariationSettings,\n\t\t\t...style,\n\t\t};\n\n\t\tif (animateFill) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tanimate={{ fontVariationSettings }}\n\t\t\t\t\t\ttransition={SPRING_TRANSITION_FAST}\n\t\t\t\t\t\tstyle={computedStyle}\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: motion v12 HTMLMotionProps conflicts with React's event types\n\t\t\t\t\t\t{...(restProps as any)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</m.span>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={computedStyle}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</span>\n\t\t);\n\t},\n);\n\nIconComponent.displayName = \"Icon\";\n\n/**\n * Material Symbols (variable font) Icon component.\n *\n * Make sure to import the icon font CSS before usage:\n * ```ts\n * import '@bug-on/m3-expressive/material-symbols-cdn.css';\n * ```\n *\n * @remarks\n * - Use snake_case for icon names: `\"arrow_forward\"`, NOT `\"ArrowForward\"`.\n * - `aria-hidden=\"true\"` is attached automatically — provide screen reader labels on parent elements.\n *\n * @example\n * ```tsx\n * // Basic Icon\n * <Icon name=\"home\" />\n *\n * // Visual customization (filled, heavy weight)\n * <Icon name=\"favorite\" variant=\"rounded\" fill={1} weight={300} />\n *\n * // Animated transition on state change\n * <Icon name=\"bookmark\" fill={saved ? 1 : 0} animateFill />\n *\n * // Custom size override\n * <Icon name=\"close\" size={18} opticalSize={20} />\n *\n * // Combination with other components\n * <Button icon={<Icon name=\"add\" />}>Add to cart</Button>\n * ```\n *\n * @see https://fonts.google.com/icons\n * @see https://m3.material.io/styles/icons/overview\n */\nexport const Icon = React.memo(IconComponent);\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\n\n/**\n * MD3 Expressive Button Group Tokens\n * Ported from ButtonGroupSmallTokens.kt and ConnectedButtonGroupSmallTokens.kt\n */\nexport const BUTTON_GROUP_TOKENS = {\n\tstandard: {\n\t\tbetweenSpace: 12, // 12dp / 0.75rem / gap-3\n\t\tcontainerHeight: 40, // 40dp / 2.5rem\n\t},\n\tconnected: {\n\t\tbetweenSpace: 2, // 2dp / 0.125rem / gap-0.5\n\t\tcontainerHeight: 40, // 40dp / 2.5rem\n\t\tcontainerShape: cornerRadius.full, // 9999px\n\t\tinnerCorner: cornerRadius.small, // 8dp\n\t\tpressedInnerCorner: cornerRadius.extraSmall, // 4dp\n\t\tselectedCornerPercent: 50, // 50% -> full pill\n\t},\n} as const;\n","import type { MD3Size } from \"../../../types/md3\";\nimport { BUTTON_GROUP_TOKENS } from \"./button-group-tokens\";\n\n/** Pill radius (height / 2) per size. */\nexport const PILL_RADIUS_MAP: Record<MD3Size, number> = {\n\txs: 16,\n\tsm: 20,\n\tmd: 28,\n\tlg: 48,\n\txl: 68,\n};\n\n/** Morphing target radius when a standard button is pressed. */\nexport const PRESSED_RADIUS_MAP: Record<MD3Size, number> = {\n\txs: 8,\n\tsm: 10,\n\tmd: 16,\n\tlg: 28,\n\txl: 40,\n};\n\nexport interface Corners {\n\ttl: number;\n\ttr: number;\n\tbr: number;\n\tbl: number;\n}\n\nexport interface ShapeSet {\n\tdefault: Corners;\n\tpressed: Corners;\n\tchecked: Corners;\n}\n\nconst PILL_CORNERS = {\n\ttl: 9999,\n\ttr: 9999,\n\tbr: 9999,\n\tbl: 9999,\n} as const satisfies Corners;\n\nfunction buildConnectedShapes(\n\tsize: MD3Size,\n\tdefaultCorners: (outer: number, inner: number) => Corners,\n\tpressedCorners: (outer: number, pressedInner: number) => Corners,\n): ShapeSet {\n\tconst outer = PILL_RADIUS_MAP[size];\n\tconst inner = BUTTON_GROUP_TOKENS.connected.innerCorner;\n\tconst pressedInner = BUTTON_GROUP_TOKENS.connected.pressedInnerCorner;\n\treturn {\n\t\tdefault: defaultCorners(outer, inner),\n\t\tpressed: pressedCorners(outer, pressedInner),\n\t\tchecked: { ...PILL_CORNERS },\n\t};\n}\n\nexport const ButtonGroupDefaults = {\n\texpandedRatio: 0.15,\n\n\tconnectedLeadingButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: o, tr: i, br: i, bl: o }),\n\t\t\t(o, pi) => ({ tl: o, tr: pi, br: pi, bl: o }),\n\t\t),\n\n\tconnectedMiddleButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(_o, i) => ({ tl: i, tr: i, br: i, bl: i }),\n\t\t\t(_o, pi) => ({ tl: pi, tr: pi, br: pi, bl: pi }),\n\t\t),\n\n\tconnectedTrailingButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: i, tr: o, br: o, bl: i }),\n\t\t\t(o, pi) => ({ tl: pi, tr: o, br: o, bl: pi }),\n\t\t),\n\n\t/** For orientation=\"vertical\". */\n\tconnectedTopButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: o, tr: o, br: i, bl: i }),\n\t\t\t(o, pi) => ({ tl: o, tr: o, br: pi, bl: pi }),\n\t\t),\n\n\tconnectedBottomButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: i, tr: i, br: o, bl: o }),\n\t\t\t(o, pi) => ({ tl: pi, tr: pi, br: o, bl: o }),\n\t\t),\n};\n","import {\n\tAnimatePresence,\n\tm,\n\ttype TargetAndTransition,\n\ttype Transition,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { MD3Size } from \"../../../types/md3\";\nimport { Icon } from \"../../icon\";\nimport type { ButtonProps } from \"../button\";\nimport {\n\tBUTTON_RADIUS_SPRING,\n\tBUTTON_SHAPE_MORPH_SPRING,\n\tBUTTON_SIZE_TOKENS,\n} from \"../button/button-tokens\";\nimport {\n\tButtonGroupDefaults,\n\tPRESSED_RADIUS_MAP,\n\ttype ShapeSet,\n} from \"./button-group-defaults\";\nimport type { ButtonGroupProps } from \"./types\";\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst PILL_BORDER_RADIUS = 9999;\nconst MIN_FLEX_GROW = 0.01;\nconst PADDING_EXPAND_MULTIPLIER = 4;\n\nconst CHECK_ICON_SIZE = 24;\nconst CHECK_ICON = (\n\t<Icon name=\"check\" variant=\"rounded\" size={CHECK_ICON_SIZE} weight={700} />\n);\n\nconst CHECK_ICON_GAP_MAP: Record<string, number> = {\n\txs: 6,\n\tsm: 8,\n\tmd: 8,\n\tlg: 12,\n\txl: 12,\n};\n\nconst CHECK_ICON_MOTION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 420,\n\tdamping: 34,\n\tmass: 0.75,\n};\n\nconst WIDTH_MORPH_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 360,\n\tdamping: 38,\n\tmass: 0.85,\n};\n\n// ─── Sub-components ──────────────────────────────────────────────────────────\n\nconst AnimatedCheckLabel = React.memo(function AnimatedCheckLabel({\n\tselected,\n\tsize,\n\tchildren,\n}: {\n\tselected: boolean;\n\tsize: string;\n\tchildren: React.ReactNode;\n}) {\n\tconst gap = CHECK_ICON_GAP_MAP[size] ?? CHECK_ICON_GAP_MAP.sm;\n\n\treturn (\n\t\t<m.span\n\t\t\tlayout\n\t\t\tclassName=\"inline-flex min-w-0 items-center justify-center whitespace-nowrap align-middle\"\n\t\t>\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{selected && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tkey=\"selected-check\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tinitial={{ width: 0, opacity: 0, marginRight: 0, x: -4 }}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\twidth: CHECK_ICON_SIZE,\n\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\tmarginRight: gap,\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\texit={{ width: 0, opacity: 0, marginRight: 0, x: -4 }}\n\t\t\t\t\t\ttransition={CHECK_ICON_MOTION}\n\t\t\t\t\t\tclassName=\"inline-flex shrink-0 items-center justify-center overflow-hidden\"\n\t\t\t\t\t\tstyle={{ willChange: \"width, opacity, transform, margin-right\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"inline-flex h-6 w-6 items-center justify-center\">\n\t\t\t\t\t\t\t{CHECK_ICON}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t\t<m.span layout=\"position\" className=\"min-w-0 truncate\">\n\t\t\t\t{children}\n\t\t\t</m.span>\n\t\t</m.span>\n\t);\n});\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction resolveConnectedShapes(\n\tvariant: string,\n\torientation: string,\n\tisFirst: boolean,\n\tisLast: boolean,\n\titemSize: MD3Size,\n): ShapeSet {\n\tconst defaults = ButtonGroupDefaults.connectedLeadingButtonShapes(itemSize);\n\tif (variant !== \"connected\") return defaults;\n\n\tif (orientation === \"horizontal\") {\n\t\tif (isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedLeadingButtonShapes(itemSize);\n\t\tif (!isFirst && isLast)\n\t\t\treturn ButtonGroupDefaults.connectedTrailingButtonShapes(itemSize);\n\t\tif (!isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedMiddleButtonShapes(itemSize);\n\t} else {\n\t\tif (isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedTopButtonShapes(itemSize);\n\t\tif (!isFirst && isLast)\n\t\t\treturn ButtonGroupDefaults.connectedBottomButtonShapes(itemSize);\n\t\tif (!isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedMiddleButtonShapes(itemSize);\n\t}\n\n\treturn defaults;\n}\n\ninterface ResolvedIcon {\n\ticon: React.ReactNode;\n\tlabel: React.ReactNode;\n}\n\nfunction resolveIconAndLabel(\n\telement: React.ReactElement<ButtonProps>,\n\tisSelected: boolean,\n\titemSize: string,\n\tshowCheck: boolean,\n\ticonBehavior: ButtonGroupProps[\"iconBehavior\"],\n\tlabelBehavior: ButtonGroupProps[\"labelBehavior\"],\n): ResolvedIcon {\n\tlet icon: React.ReactNode = element.props.icon;\n\tlet label: React.ReactNode = element.props.children;\n\n\tconst animateCheckInLabel =\n\t\tshowCheck &&\n\t\ticonBehavior !== \"none\" &&\n\t\ticonBehavior !== \"selected\" &&\n\t\tlabel !== undefined;\n\n\tif (iconBehavior === \"none\" || animateCheckInLabel) {\n\t\ticon = undefined;\n\t} else if (iconBehavior === \"selected\") {\n\t\ticon = isSelected ? element.props.icon : undefined;\n\t}\n\n\tif (labelBehavior === \"none\") {\n\t\tlabel = undefined;\n\t} else if (labelBehavior === \"selected\") {\n\t\tlabel = isSelected ? element.props.children : undefined;\n\t}\n\n\tif (animateCheckInLabel && label !== undefined) {\n\t\tlabel = (\n\t\t\t<AnimatedCheckLabel selected={isSelected} size={itemSize}>\n\t\t\t\t{label}\n\t\t\t</AnimatedCheckLabel>\n\t\t);\n\t}\n\n\treturn { icon, label };\n}\n\ninterface FlexTargets {\n\tflexGrow?: number;\n\tpaddingInline?: string;\n}\n\nfunction resolveFlexTargets(\n\tvariant: string,\n\torientation: string,\n\tisSelected: boolean,\n\tisPressed: boolean,\n\thasSelected: boolean,\n\tcount: number,\n\tfullWidth: boolean,\n\tactiveMorphing: boolean,\n\tmorphingWidth: boolean,\n\texpandedRatio: number,\n\tbasePx: string,\n): FlexTargets {\n\tconst increment = expandedRatio * PADDING_EXPAND_MULTIPLIER;\n\n\tif (activeMorphing) {\n\t\tconst isFlexLayout =\n\t\t\tfullWidth || (variant === \"connected\" && orientation === \"horizontal\");\n\n\t\tif (isFlexLayout) {\n\t\t\tif (isSelected) return { flexGrow: 1 + expandedRatio };\n\t\t\tif (hasSelected && count > 1)\n\t\t\t\treturn {\n\t\t\t\t\tflexGrow: Math.max(MIN_FLEX_GROW, 1 - expandedRatio / (count - 1)),\n\t\t\t\t};\n\t\t\treturn { flexGrow: 1 };\n\t\t}\n\n\t\tif (isSelected)\n\t\t\treturn { paddingInline: `calc(${basePx} + ${increment}rem)` };\n\t\tif (hasSelected && count > 1) {\n\t\t\tconst decrement = increment / (count - 1);\n\t\t\treturn { paddingInline: `calc(${basePx} - ${decrement}rem)` };\n\t\t}\n\t\treturn { paddingInline: basePx };\n\t}\n\n\tif (morphingWidth && variant === \"standard\") {\n\t\tif (fullWidth) return { flexGrow: isPressed ? 1 + expandedRatio : 1 };\n\t\treturn {\n\t\t\tpaddingInline: isPressed ? `calc(${basePx} + ${increment}rem)` : basePx,\n\t\t};\n\t}\n\n\treturn {};\n}\n\ntype MotionOverrides = {\n\tanimate: TargetAndTransition;\n\twhileTap?: TargetAndTransition;\n\ttransition?: Transition;\n\tlayout?: boolean | \"position\" | \"size\" | \"preserve-aspect\";\n};\n\nfunction buildMotionProps(\n\tvariant: string,\n\tisSelected: boolean,\n\tisPressed: boolean,\n\titemSize: MD3Size,\n\tshapes: ShapeSet,\n\tflex: FlexTargets,\n\texistingAnimate: TargetAndTransition,\n\texistingWhileTap: TargetAndTransition,\n): MotionOverrides {\n\tconst props: MotionOverrides = { animate: { ...existingAnimate } };\n\n\tif (flex.flexGrow !== undefined) {\n\t\tprops.animate.flexGrow = flex.flexGrow;\n\t}\n\tif (flex.paddingInline !== undefined) {\n\t\tprops.animate.paddingInline = flex.paddingInline;\n\t}\n\n\tif (variant === \"standard\") {\n\t\tconst pressedRadius = PRESSED_RADIUS_MAP[itemSize] ?? PRESSED_RADIUS_MAP.sm;\n\t\tconst itemSizeTokens =\n\t\t\tBUTTON_SIZE_TOKENS[itemSize] ?? BUTTON_SIZE_TOKENS.sm;\n\t\tconst isSquish = isSelected || isPressed;\n\n\t\tprops.animate.borderRadius = isSquish\n\t\t\t? pressedRadius\n\t\t\t: itemSizeTokens.roundShapeRadius;\n\t\tprops.whileTap = {\n\t\t\tscale: 0.98,\n\t\t\t...existingWhileTap,\n\t\t};\n\t\tprops.transition = {\n\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\tflexGrow: WIDTH_MORPH_SPRING,\n\t\t\tpaddingInline: WIDTH_MORPH_SPRING,\n\t\t\tlayout: WIDTH_MORPH_SPRING,\n\t\t\tdefault: BUTTON_SHAPE_MORPH_SPRING,\n\t\t};\n\t\tprops.layout = true;\n\t}\n\n\tif (variant === \"connected\") {\n\t\tconst { tl, tr, br, bl } = isSelected\n\t\t\t? {\n\t\t\t\t\ttl: PILL_BORDER_RADIUS,\n\t\t\t\t\ttr: PILL_BORDER_RADIUS,\n\t\t\t\t\tbr: PILL_BORDER_RADIUS,\n\t\t\t\t\tbl: PILL_BORDER_RADIUS,\n\t\t\t\t}\n\t\t\t: shapes.default;\n\n\t\tprops.animate = {\n\t\t\t...props.animate,\n\t\t\tborderRadius: undefined,\n\t\t\tborderTopLeftRadius: tl,\n\t\t\tborderTopRightRadius: tr,\n\t\t\tborderBottomRightRadius: br,\n\t\t\tborderBottomLeftRadius: bl,\n\t\t};\n\t\tprops.whileTap = {\n\t\t\tborderRadius: undefined,\n\t\t\tborderTopLeftRadius: shapes.pressed.tl,\n\t\t\tborderTopRightRadius: shapes.pressed.tr,\n\t\t\tborderBottomRightRadius: shapes.pressed.br,\n\t\t\tborderBottomLeftRadius: shapes.pressed.bl,\n\t\t\t...existingWhileTap,\n\t\t};\n\t\tprops.transition = {\n\t\t\t...BUTTON_SHAPE_MORPH_SPRING,\n\t\t\tflexGrow: WIDTH_MORPH_SPRING,\n\t\t\tpaddingInline: WIDTH_MORPH_SPRING,\n\t\t\tborderTopLeftRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderTopRightRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderBottomRightRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderBottomLeftRadius: BUTTON_RADIUS_SPRING,\n\t\t\tlayout: WIDTH_MORPH_SPRING,\n\t\t};\n\t\tprops.layout = true;\n\t}\n\n\treturn props;\n}\n\n// ─── Main Component ───────────────────────────────────────────────────────────\n\nconst ButtonGroupComponent = React.forwardRef<\n\tHTMLFieldSetElement,\n\tButtonGroupProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant = \"standard\",\n\t\t\torientation = \"horizontal\",\n\t\t\tfullWidth = false,\n\t\t\tsize,\n\t\t\tmorphingWidth = true,\n\t\t\tactiveMorphing = false,\n\t\t\titemClassName,\n\t\t\texpandedRatio = ButtonGroupDefaults.expandedRatio,\n\t\t\tshowCheck = false,\n\t\t\tchildren,\n\t\t\ticonBehavior,\n\t\t\tlabelBehavior,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [pressedIndex, setPressedIndex] = React.useState<number | null>(null);\n\t\tconst [lockedGroupSize, setLockedGroupSize] = React.useState<number | null>(\n\t\t\tnull,\n\t\t);\n\t\tconst rootRef = React.useRef<HTMLFieldSetElement | null>(null);\n\n\t\tconst setRootRef = React.useCallback(\n\t\t\t(node: HTMLFieldSetElement | null) => {\n\t\t\t\trootRef.current = node;\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref) {\n\t\t\t\t\t(ref as React.MutableRefObject<HTMLFieldSetElement | null>).current =\n\t\t\t\t\t\tnode;\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\tconst childrenArray = React.useMemo(\n\t\t\t() => React.Children.toArray(children).filter(React.isValidElement),\n\t\t\t[children],\n\t\t);\n\t\tconst count = childrenArray.length;\n\n\t\tconst groupSizeSignature = React.useMemo(\n\t\t\t() =>\n\t\t\t\t`${childrenArray\n\t\t\t\t\t.map((child, index) => {\n\t\t\t\t\t\tconst element = child as React.ReactElement<ButtonProps>;\n\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\ttypeof element.props.children === \"string\" ||\n\t\t\t\t\t\t\ttypeof element.props.children === \"number\"\n\t\t\t\t\t\t\t\t? element.props.children\n\t\t\t\t\t\t\t\t: (element.key ?? index);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\telement.key ?? index,\n\t\t\t\t\t\t\telement.props.size ?? size ?? \"\",\n\t\t\t\t\t\t\tlabel,\n\t\t\t\t\t\t\tBoolean(element.props.icon),\n\t\t\t\t\t\t\telement.props.className ?? \"\",\n\t\t\t\t\t\t].join(\":\");\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"|\")}|${variant}|${orientation}|${showCheck}`,\n\t\t\t[childrenArray, orientation, showCheck, size, variant],\n\t\t);\n\n\t\tconst groupSizeSignatureRef = React.useRef(groupSizeSignature);\n\t\tReact.useLayoutEffect(() => {\n\t\t\tif (groupSizeSignatureRef.current !== groupSizeSignature) {\n\t\t\t\tgroupSizeSignatureRef.current = groupSizeSignature;\n\t\t\t\tsetLockedGroupSize(null);\n\t\t\t}\n\t\t}, [groupSizeSignature]);\n\n\t\tconst hasExplicitGroupSize =\n\t\t\torientation === \"horizontal\"\n\t\t\t\t? style?.width !== undefined || style?.inlineSize !== undefined\n\t\t\t\t: style?.height !== undefined || style?.blockSize !== undefined;\n\t\tconst shouldLockGroupSize =\n\t\t\tactiveMorphing && !fullWidth && !hasExplicitGroupSize && count > 1;\n\n\t\tReact.useLayoutEffect(() => {\n\t\t\tif (!shouldLockGroupSize) {\n\t\t\t\tif (lockedGroupSize !== null) setLockedGroupSize(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (lockedGroupSize !== null) return;\n\n\t\t\tconst node = rootRef.current;\n\t\t\tif (!node) return;\n\n\t\t\tconst rect = node.getBoundingClientRect();\n\t\t\tconst nextSize = orientation === \"horizontal\" ? rect.width : rect.height;\n\t\t\tif (nextSize > 0) {\n\t\t\t\tsetLockedGroupSize(Math.ceil(nextSize * 100) / 100);\n\t\t\t}\n\t\t}, [lockedGroupSize, orientation, shouldLockGroupSize]);\n\n\t\tconst groupStyle = React.useMemo<React.CSSProperties>(() => {\n\t\t\tconst nextStyle: React.CSSProperties = { ...style };\n\t\t\tif (shouldLockGroupSize && lockedGroupSize !== null) {\n\t\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\t\tnextStyle.inlineSize = `${lockedGroupSize}px`;\n\t\t\t\t} else {\n\t\t\t\t\tnextStyle.blockSize = `${lockedGroupSize}px`;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nextStyle;\n\t\t}, [lockedGroupSize, orientation, shouldLockGroupSize, style]);\n\n\t\tconst hasSelected = React.useMemo(\n\t\t\t() =>\n\t\t\t\tchildrenArray.some(\n\t\t\t\t\t(child) => (child as React.ReactElement<ButtonProps>).props.selected,\n\t\t\t\t),\n\t\t\t[childrenArray],\n\t\t);\n\n\t\tconst handlePointerLeaveAndUp = React.useCallback(() => {\n\t\t\tsetPressedIndex(null);\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\tref={setRootRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex p-0 m-0 border-none max-w-full [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n\t\t\t\t\torientation === \"vertical\"\n\t\t\t\t\t\t? \"flex-col items-stretch overflow-y-auto overflow-x-hidden\"\n\t\t\t\t\t\t: \"flex-row overflow-x-auto overflow-y-hidden\",\n\t\t\t\t\tvariant === \"standard\" ? \"gap-3\" : \"gap-0.5\",\n\t\t\t\t\tfullWidth && \"w-full\",\n\t\t\t\t\tfullWidth && orientation === \"vertical\" && \"h-full\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={groupStyle}\n\t\t\t\tonPointerLeave={handlePointerLeaveAndUp}\n\t\t\t\tonPointerUp={handlePointerLeaveAndUp}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{childrenArray.map((child, index) => {\n\t\t\t\t\tconst element = child as React.ReactElement<ButtonProps>;\n\t\t\t\t\tconst isSelected = element.props.selected === true;\n\t\t\t\t\tconst isFirst = index === 0;\n\t\t\t\t\tconst isLast = index === count - 1;\n\t\t\t\t\tconst itemSize = (size || element.props.size || \"sm\") as MD3Size;\n\t\t\t\t\tconst basePx = BUTTON_SIZE_TOKENS[itemSize]?.leadingSpace || \"1rem\";\n\t\t\t\t\tconst isPressed = pressedIndex === index;\n\n\t\t\t\t\tconst { icon: explicitIcon, label: explicitLabel } =\n\t\t\t\t\t\tresolveIconAndLabel(\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\titemSize,\n\t\t\t\t\t\t\tshowCheck,\n\t\t\t\t\t\t\ticonBehavior,\n\t\t\t\t\t\t\tlabelBehavior,\n\t\t\t\t\t\t);\n\n\t\t\t\t\tconst shapes = resolveConnectedShapes(\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\torientation,\n\t\t\t\t\t\tisFirst,\n\t\t\t\t\t\tisLast,\n\t\t\t\t\t\titemSize,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst flex = resolveFlexTargets(\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\torientation,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisPressed,\n\t\t\t\t\t\thasSelected,\n\t\t\t\t\t\tcount,\n\t\t\t\t\t\tfullWidth,\n\t\t\t\t\t\tactiveMorphing,\n\t\t\t\t\t\tmorphingWidth,\n\t\t\t\t\t\texpandedRatio,\n\t\t\t\t\t\tbasePx,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst dynamicStyle: React.CSSProperties = {\n\t\t\t\t\t\t...element.props.style,\n\t\t\t\t\t} as React.CSSProperties;\n\n\t\t\t\t\tif (flex.flexGrow !== undefined && fullWidth) {\n\t\t\t\t\t\tdynamicStyle.flexBasis = 0;\n\t\t\t\t\t\tdynamicStyle.flexShrink = 1;\n\t\t\t\t\t\tdynamicStyle.minWidth = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst existingAnimate =\n\t\t\t\t\t\ttypeof element.props.animate === \"object\" &&\n\t\t\t\t\t\t!Array.isArray(element.props.animate)\n\t\t\t\t\t\t\t? element.props.animate\n\t\t\t\t\t\t\t: {};\n\t\t\t\t\tconst existingWhileTap =\n\t\t\t\t\t\ttypeof element.props.whileTap === \"object\" &&\n\t\t\t\t\t\t!Array.isArray(element.props.whileTap)\n\t\t\t\t\t\t\t? element.props.whileTap\n\t\t\t\t\t\t\t: {};\n\n\t\t\t\t\tconst motionProps = buildMotionProps(\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisPressed,\n\t\t\t\t\t\titemSize,\n\t\t\t\t\t\tshapes,\n\t\t\t\t\t\tflex,\n\t\t\t\t\t\texistingAnimate as TargetAndTransition,\n\t\t\t\t\t\texistingWhileTap as TargetAndTransition,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst connectedClasses =\n\t\t\t\t\t\tvariant === \"connected\" && isSelected ? \"z-20\" : \"\";\n\n\t\t\t\t\tconst clonedElement = React.cloneElement(element, {\n\t\t\t\t\t\tkey: element.key ?? index,\n\t\t\t\t\t\ttabIndex: isFirst ? 0 : -1,\n\t\t\t\t\t\tsize: size || element.props.size,\n\t\t\t\t\t\ticon: explicitIcon,\n\t\t\t\t\t\tchildren: explicitLabel,\n\t\t\t\t\t\t...(variant === \"connected\" && {\n\t\t\t\t\t\t\tcolorStyle: element.props.colorStyle || \"tonal\",\n\t\t\t\t\t\t\tselectedColorStyle: element.props.selectedColorStyle || \"filled\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t\telement.props.className,\n\t\t\t\t\t\t\tconnectedClasses,\n\t\t\t\t\t\t\t\"focus-visible:z-10 hover:z-10 relative min-w-0\",\n\t\t\t\t\t\t\torientation === \"vertical\" && \"w-full\",\n\t\t\t\t\t\t\titemClassName,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tstyle: dynamicStyle,\n\t\t\t\t\t\tonPointerDown: (e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\t\t\t\tsetPressedIndex(index);\n\t\t\t\t\t\t\tif (element.props.onPointerDown) element.props.onPointerDown(e);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...motionProps,\n\t\t\t\t\t} as Partial<ButtonProps>);\n\n\t\t\t\t\treturn clonedElement;\n\t\t\t\t})}\n\t\t\t</fieldset>\n\t\t);\n\t},\n);\n\nButtonGroupComponent.displayName = \"ButtonGroup\";\n\nexport const ButtonGroup = React.memo(ButtonGroupComponent);\n","/**\n * @file extended-fab.tsx\n * MD3 Expressive Extended Floating Action Button.\n * @see https://m3.material.io/components/extended-fab/specs\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { LoadingIndicator } from \"../../../loading-indicator\";\nimport { ProgressIndicator } from \"../../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../../ripple\";\nimport {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n} from \"../../../shared/constants\";\n\nconst SIZE_HEIGHT: Record<string, string> = {\n\tsm: \"h-14\",\n\tmd: \"h-20\",\n\tlg: \"h-24\",\n};\n\nconst SIZE_WIDTH_COLLAPSED: Record<string, string> = {\n\tsm: \"w-14\",\n\tmd: \"w-20\",\n\tlg: \"w-24\",\n};\n\nconst SIZE_PADDING: Record<string, string> = {\n\tsm: \"px-4\",\n\tmd: \"px-[26px]\",\n\tlg: \"px-7\",\n};\n\nconst SIZE_GAP: Record<string, string> = {\n\tsm: \"gap-2\",\n\tmd: \"gap-3\",\n\tlg: \"gap-4\",\n};\n\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-7\", px: 28 },\n\tlg: { cls: \"size-9\", px: 36 },\n};\n\nconst SIZE_TEXT: Record<string, string> = {\n\tsm: \"text-base font-medium\",\n\tmd: \"text-lg font-medium\",\n\tlg: \"text-xl font-normal\",\n};\n\nconst MORPH_RADIUS: Record<string, { default: number; pressed: number }> = {\n\tsm: { default: 16, pressed: 10 },\n\tmd: { default: 20, pressed: 14 },\n\tlg: { default: 28, pressed: 18 },\n};\n\nconst COLOR_CLASSES: Record<string, { bg: string; text: string }> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t},\n\tsurface: {\n\t\tbg: \"bg-m3-surface-container-high\",\n\t\ttext: \"text-m3-on-surface\",\n\t},\n};\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/** Props for the `ExtendedFAB` component. */\nexport interface ExtendedFABProps extends MotionButtonProps {\n\t/** Required text label. Keep it short (1-2 words); it does not wrap. */\n\tlabel: string;\n\t/** Icon to render. Automatically replaced by a spinner when `loading={true}`. */\n\ticon?: React.ReactNode;\n\t/** Button size per MD3 Expressive spec. @default \"sm\" */\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\t/** MD3 color role for the container surface. @default \"primary\" */\n\tcolorStyle?: \"primary\" | \"secondary\" | \"tertiary\" | \"surface\";\n\t/** Reduces shadow to the lower elevation variant. @default false */\n\tlowered?: boolean;\n\t/** Replaces the icon with a spinner and blocks interaction. @default false */\n\tloading?: boolean;\n\t/** Spinner style shown while loading. @default \"loading-indicator\" */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/** Mounts/unmounts with an entrance/exit animation. @default true */\n\tvisible?: boolean;\n\t/** Collapses to icon-only when the user scrolls down. @default false */\n\tcollapseOnScroll?: boolean;\n\t/** Minimum scroll delta (px) required to trigger collapse/expand. @default 50 */\n\tscrollThreshold?: number;\n\t/** Controlled collapsed state. Overrides internal scroll-driven state when provided. */\n\tcollapsed?: boolean;\n\t/** Callback fired when the internal collapsed state changes. */\n\tonCollapsedChange?: (collapsed: boolean) => void;\n\t/** Layout ID for Framer Motion Container Transform transitions. */\n\tlayoutId?: string;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\n/**\n * Internal hook that listens to scroll events and manages the collapsed state.\n * @internal\n */\nfunction useScrollCollapse(\n\tenabled: boolean,\n\tscrollThreshold: number,\n\tonCollapsedChange?: (collapsed: boolean) => void,\n) {\n\tconst [collapsed, setCollapsed] = React.useState(false);\n\tconst lastScrollY = React.useRef(0);\n\n\tReact.useEffect(() => {\n\t\tif (!enabled || typeof window === \"undefined\") return;\n\n\t\tlastScrollY.current = window.scrollY;\n\n\t\tconst handleScroll = () => {\n\t\t\tconst currentScrollY = window.scrollY;\n\t\t\tconst diff = currentScrollY - lastScrollY.current;\n\n\t\t\tif (Math.abs(diff) < scrollThreshold) return;\n\n\t\t\tif (diff > 0 && !collapsed) {\n\t\t\t\tsetCollapsed(true);\n\t\t\t\tonCollapsedChange?.(true);\n\t\t\t} else if (diff < 0 && collapsed) {\n\t\t\t\tsetCollapsed(false);\n\t\t\t\tonCollapsedChange?.(false);\n\t\t\t}\n\n\t\t\tlastScrollY.current = currentScrollY;\n\t\t};\n\n\t\twindow.addEventListener(\"scroll\", handleScroll, { passive: true });\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t}, [enabled, scrollThreshold, collapsed, onCollapsedChange]);\n\n\treturn collapsed;\n}\n\nconst ExtendedFABComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tExtendedFABProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tlabel,\n\t\t\ticon,\n\t\t\tsize = \"sm\",\n\t\t\tcolorStyle = \"primary\",\n\t\t\tlowered = false,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tvisible = true,\n\t\t\tcollapseOnScroll = false,\n\t\t\tscrollThreshold = 50,\n\t\t\tcollapsed,\n\t\t\tonCollapsedChange,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\tlayoutId,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst localRef = React.useRef<HTMLButtonElement>(null);\n\t\tReact.useImperativeHandle(ref, () => localRef.current as HTMLButtonElement);\n\n\t\tconst [dir, setDir] = React.useState<\"ltr\" | \"rtl\">(\"ltr\");\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!localRef.current) return;\n\t\t\tconst closestDir = localRef.current.closest(\"[dir]\")?.getAttribute(\"dir\");\n\t\t\tif (closestDir === \"rtl\" || closestDir === \"ltr\") {\n\t\t\t\tsetDir(closestDir);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst internalCollapsed = useScrollCollapse(\n\t\t\tcollapseOnScroll,\n\t\t\tscrollThreshold,\n\t\t\tonCollapsedChange,\n\t\t);\n\n\t\tconst isCollapsed = collapsed !== undefined ? collapsed : internalCollapsed;\n\t\tconst hasIcon = !!icon || loading;\n\n\t\tconst colors = COLOR_CLASSES[colorStyle] ?? COLOR_CLASSES.primary;\n\t\tconst radiusConfig = MORPH_RADIUS[size] ?? MORPH_RADIUS.sm;\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.sm;\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\tif ((e.key === \"Enter\" || e.key === \" \") && onClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\t\"relative shrink-0 inline-flex items-center select-none cursor-pointer overflow-hidden\",\n\t\t\t\"transition-[box-shadow,filter] duration-200\",\n\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\"disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none\",\n\t\t\tcolors.bg,\n\t\t\tcolors.text,\n\t\t\tlowered ? \"shadow-sm\" : \"shadow-md\",\n\t\t\tSIZE_HEIGHT[size] ?? \"h-14\",\n\t\t\tSIZE_TEXT[size],\n\t\t\tisCollapsed\n\t\t\t\t? cn(\"px-0 justify-center\", SIZE_WIDTH_COLLAPSED[size])\n\t\t\t\t: cn(\n\t\t\t\t\t\thasIcon ? \"justify-start\" : \"justify-center\",\n\t\t\t\t\t\tSIZE_PADDING[size],\n\t\t\t\t\t\thasIcon && SIZE_GAP[size],\n\t\t\t\t\t),\n\t\t\tdir === \"rtl\" || restProps.dir === \"rtl\"\n\t\t\t\t? \"flex-row-reverse\"\n\t\t\t\t: \"flex-row\",\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{hasIcon && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\tsizeIcon.cls,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-full h-full\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\t\t\tsize={sizeIcon.px}\n\t\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\t\t\tsize={sizeIcon.px}\n\t\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\ticon && (\n\t\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-full h-full [&>svg]:w-full [&>svg]:h-full\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0, width: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, width: \"auto\" }}\n\t\t\t\t\t\t\texit={{ opacity: 0, width: 0 }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\topacity: { duration: 0.15, ease: \"linear\" },\n\t\t\t\t\t\t\t\twidth: SPRING_TRANSITION,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"overflow-hidden whitespace-nowrap\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{visible && !(isCollapsed && !hasIcon) && (\n\t\t\t\t\t\tasChild ? (\n\t\t\t\t\t\t\t<Slot\n\t\t\t\t\t\t\t\tref={localRef}\n\t\t\t\t\t\t\t\taria-label={ariaLabel || label}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\tborderRadius: `${radiusConfig.default}px`,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Slot>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<m.button\n\t\t\t\t\t\t\t\tref={localRef}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tlayout\n\t\t\t\t\t\t\t\tlayoutId={layoutId}\n\t\t\t\t\t\t\t\taria-label={ariaLabel || label}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\tscale: 0.6,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\tborderRadius: radiusConfig.default,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\tborderRadius: radiusConfig.default,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{ scale: 0.6, opacity: 0 }}\n\t\t\t\t\t\t\t\twhileTap={{ borderRadius: radiusConfig.pressed }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\tborderRadius: { type: \"spring\", stiffness: 500, damping: 30 },\n\t\t\t\t\t\t\t\t\tscale: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.2, ease: \"linear\" },\n\t\t\t\t\t\t\t\t\tlayout: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t\t\t</m.button>\n\t\t\t\t\t\t)\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nExtendedFABComponent.displayName = \"ExtendedFAB\";\n\nexport const ExtendedFAB = React.memo(ExtendedFABComponent);\n","/**\n * @file fab.tsx\n *\n * MD3 Expressive Floating Action Button (FAB).\n *\n * Supports four sizes, an extended variant with animated label reveal,\n * shape morphing, a `lowered` elevation variant, and an optional\n * `FABPosition` container for absolute positioning within a layout.\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { LoadingIndicator } from \"../../../loading-indicator\";\nimport { ProgressIndicator } from \"../../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../../ripple\";\nimport {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../../shared/constants\";\nimport { TouchTarget } from \"../../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size layout classes for the FAB container.\n * MD3 sizes: SM=40dp, MD=56dp, LG=96dp, XL=136dp.\n * Extended FABs use `w-full` + `px-*` via the caller.\n * @internal\n */\nconst SIZE_STYLES: Record<string, string> = {\n\tsm: \"h-10 w-10\",\n\tmd: \"h-14 w-14\",\n\tlg: \"h-24 w-24\",\n\txl: \"h-[8.5rem] w-[8.5rem]\",\n};\n\n/**\n * Per-size icon dimensions (Tailwind class + pixel value).\n * MD3 icon sizes: SM=24dp, MD=24dp, LG=32dp, XL=40dp.\n * @internal\n */\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-6\", px: 24 },\n\tlg: { cls: \"size-8\", px: 32 },\n\txl: { cls: \"size-10\", px: 40 },\n};\n\n/**\n * Per-size label typography classes used in the extended variant.\n * @internal\n */\nconst SIZE_TEXT_CLASS: Record<string, string> = {\n\tsm: \"text-sm font-medium\",\n\tmd: \"text-base font-medium\",\n\tlg: \"text-xl font-semibold\",\n\txl: \"text-2xl font-semibold\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Shape Morphing — Border Radius Map\n//\n// IMPORTANT: Use exact height/2 values for \"round\" radii to avoid the dead-zone\n// artefact: CSS clips any radius > height/2 identically, so animating from\n// 9999 → small value produces a jump/snap at the threshold.\n// Heights: SM=40dp, MD=56dp, LG=96dp, XL=136dp\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size border-radius tokens for all interaction / selection states.\n *\n * - `default`: idle pill radius (height / 2).\n * - `pressed`: compressed on `whileTap`.\n * - `extended`: radius for the extended (label-visible) state.\n * - `extended_pressed`: compressed extended state on `whileTap`.\n *\n * @internal\n */\nconst MORPH_RADIUS: Record<\n\tstring,\n\t{\n\t\tdefault: number;\n\t\tpressed: number;\n\t\textended: number;\n\t\textended_pressed: number;\n\t}\n> = {\n\tsm: { default: 12, pressed: 8, extended: 12, extended_pressed: 8 },\n\tmd: { default: 16, pressed: 10, extended: 16, extended_pressed: 10 },\n\tlg: { default: 28, pressed: 20, extended: 28, extended_pressed: 20 },\n\txl: { default: 40, pressed: 28, extended: 40, extended_pressed: 28 },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Color Roles\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Color-role Tailwind class map for each FAB color variant.\n * @internal\n */\nconst COLOR_CLASSES: Record<\n\tstring,\n\t{ bg: string; text: string; shadow: string }\n> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\tsurface: {\n\t\tbg: \"bg-m3-surface-container-high\",\n\t\ttext: \"text-m3-primary\",\n\t\tshadow: \"shadow-md\",\n\t},\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/**\n * Props for `FAB` Floating Action Button component.\n *\n * @remarks\n * - Ensure icon-only FABs specify `aria-label` for accessibility.\n * - In extended mode (`extended={true}`), text passed to `children` acts as the label, so `aria-label` may be omitted if children is string.\n * - `lowered` prop reduces the container shadow to MD3 \"lowered\" FAB specification;\n * useful when placed on surface containers like Bottom App Bars for visual balance.\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport interface FABProps extends MotionButtonProps {\n\t/**\n\t * Icon element to render — typically an Icon component.\n\t * Swapped for loading spinner when `loading={true}`.\n\t */\n\ticon: React.ReactNode;\n\t/**\n\t * FAB size variant according to MD3 specification.\n\t * - `sm`: Small (40dp) — Recommended for tight layouts / inside content.\n\t * - `md`: Regular (56dp) — Standard primary action.\n\t * - `lg`: Large (96dp) — High-emphasis action.\n\t * - `xl`: Extra-large (136dp) — Spotlight action element.\n\t * @default \"md\"\n\t */\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n\t/**\n\t * MD3 color role container style.\n\t * @default \"primary\"\n\t */\n\tcolorStyle?: \"primary\" | \"secondary\" | \"tertiary\" | \"surface\";\n\t/**\n\t * When `true`, expands FAB to display label text alongside icon.\n\t * Width automatically expands to fit `children`.\n\t * @default false\n\t */\n\textended?: boolean;\n\t/**\n\t * Label content rendered when `extended={true}`.\n\t * Plain string recommended.\n\t */\n\tchildren?: React.ReactNode;\n\t/**\n\t * When `true`, reduces container shadow to lowered elevation.\n\t * @default false\n\t */\n\tlowered?: boolean;\n\t/**\n\t * When `true`, displays loading spinner and disables click interactions.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Loading spinner variant.\n\t * @default \"loading-indicator\"\n\t */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/**\n\t * Controls FAB visibility in layout using scale motion animation.\n\t * @default true\n\t */\n\tvisible?: boolean;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FABPosition — Layout Wrapper\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for `FABPosition` layout wrapper component.\n * Position absolute wrapper to anchor FAB to a screen corner.\n *\n * @see {@link FABPosition}\n */\nexport interface FABPositionProps {\n\t/**\n\t * Screen corner position for FAB.\n\t * @default \"bottom-right\"\n\t */\n\tposition?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\t/** Child elements — typically a `<FAB>` component */\n\tchildren: React.ReactNode;\n\t/** Additional CSS class */\n\tclassName?: string;\n}\n\nconst POSITION_CLASS: Record<string, string> = {\n\t\"bottom-right\": \"bottom-4 right-4 sm:bottom-6 sm:right-6\",\n\t\"bottom-left\": \"bottom-4 left-4 sm:bottom-6 sm:left-6\",\n\t\"top-right\": \"top-4 right-4 sm:top-6 sm:right-6\",\n\t\"top-left\": \"top-4 left-4 sm:top-6 sm:left-6\",\n};\n\n/**\n * Absolute position wrapper component for `<FAB>`.\n *\n * Anchors FAB to a screen corner with responsive offset padding.\n * Requires parent element to have `position: relative`.\n *\n * @see https://m3.material.io/components/floating-action-button/guidelines\n */\n\nexport function FABPosition({\n\tposition = \"bottom-right\",\n\tchildren,\n\tclassName,\n}: FABPositionProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute z-10\",\n\t\t\t\tPOSITION_CLASS[position] ?? POSITION_CLASS[\"bottom-right\"],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FAB Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst FABComponent = React.forwardRef<HTMLButtonElement, FABProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\ticon,\n\t\t\tsize = \"md\",\n\t\t\tcolorStyle = \"primary\",\n\t\t\textended = false,\n\t\t\tchildren,\n\t\t\tlowered = false,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tvisible = true,\n\t\t\tasChild = false,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst colors = COLOR_CLASSES[colorStyle] ?? COLOR_CLASSES.primary;\n\t\tconst radiusConfig = MORPH_RADIUS[size] ?? MORPH_RADIUS.md;\n\n\t\tconst animateRadius = extended\n\t\t\t? radiusConfig.extended\n\t\t\t: radiusConfig.default;\n\t\tconst pressedRadius = extended\n\t\t\t? radiusConfig.extended_pressed\n\t\t\t: radiusConfig.pressed;\n\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.md;\n\t\tconst iconClass = sizeIcon.cls;\n\t\tconst iconPx = sizeIcon.px;\n\n\t\t// xs/sm share the SM token; only MD FAB (40dp) needs the touch target\n\t\tconst needsTouchTarget = size === \"sm\";\n\n\t\t// ── Ripple ───────────────────────────────────────────────────────\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\tif ((e.key === \"Enter\" || e.key === \" \") && onClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst labelContent = asChild\n\t\t\t? (\n\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t}>\n\t\t\t\t).props.children\n\t\t\t: children;\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{/* Icon / Loading swap */}\n\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\ticonClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\tsize={iconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\tsize={iconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full\",\n\t\t\t\t\t\t\t\ticonClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{/* Extended label — animates in/out with the `extended` prop */}\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{extended && labelContent && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\tinitial={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ width: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\texit={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\tclassName=\"overflow-hidden whitespace-nowrap ml-3\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labelContent}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\t\"transition-[box-shadow,opacity,filter] duration-200\",\n\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\"disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none\",\n\t\t\tcolors.bg,\n\t\t\tcolors.text,\n\t\t\tlowered ? \"shadow-sm\" : colors.shadow,\n\t\t\tSIZE_STYLES[size] ?? \"h-14 w-14\",\n\t\t\textended && \"w-auto px-6\",\n\t\t\tSIZE_TEXT_CLASS[size],\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst computedAriaLabel =\n\t\t\tariaLabel || (typeof children === \"string\" ? children : undefined);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{visible &&\n\t\t\t\t\t\t(asChild ? (\n\t\t\t\t\t\t\t<Slot\n\t\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\tborderRadius: `${animateRadius}px`,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Slot>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<m.button\n\t\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t\t\t\t// ── Entrance / Exit (FAB visibility) ────────────────\n\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\tscale: 0.5,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\tborderRadius: animateRadius,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1, borderRadius: animateRadius }}\n\t\t\t\t\t\t\t\texit={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t// ── Shape Morphing (extended toggle) ────────────────\n\t\t\t\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\tborderRadius: SPRING_TRANSITION_FAST,\n\t\t\t\t\t\t\t\t\tscale: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.25, ease: \"easeOut\" },\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t\t\t</m.button>\n\t\t\t\t\t\t))}\n\t\t\t\t</AnimatePresence>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nFABComponent.displayName = \"FAB\";\n\n/**\n * Primary Floating Action Button (FAB) component adhering to MD3 Expressive.\n *\n * Supports sizes from SM to XL, multiple color roles, extended label expansion,\n * loading states, and entrance/exit scale motion animations.\n *\n * @remarks\n * - Requires `aria-label` for icon-only FABs.\n * - When `extended={true}`, string `children` is automatically used as the accessible label.\n * - Animates scale out when `visible={false}` using fluid spring animation.\n * - Combine with `FABPosition` to anchor to screen corners.\n *\n * @example\n * ```tsx\n * // Basic small icon-only FAB\n * <FAB icon={<Icon name=\"search\" />} aria-label=\"Search\" size=\"sm\" />\n *\n * // Extended FAB with label\n * const [isOpen, setOpen] = React.useState(false);\n * <FAB\n * icon={<Icon name=\"edit\" />}\n * extended={isOpen}\n * onClick={() => setOpen(!isOpen)}\n * >\n * Compose\n * </FAB>\n *\n * // Large FAB with loading state\n * <FAB\n * icon={<Icon name=\"upload\" />}\n\n * size=\"lg\"\n * loading={isUploading}\n * colorStyle=\"secondary\"\n * aria-label=\"Upload files\"\n * />\n *\n * // Fixed at bottom right\n * <FABPosition position=\"bottom-right\">\n * <FAB icon={<Icon name=\"add\" />} aria-label=\"Add item\" />\n * </FABPosition>\n * ```\n\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport const FAB = React.memo(FABComponent);\n","/**\n * @file fab-menu.tsx\n *\n * FAB Menu component adhering to MD3 Expressive.\n *\n * Provides a toggle Floating Action Button (FAB) that expands a list of action items with staggered animation.\n * Complies with MD3 FloatingActionButtonMenu specification with full accessibility support\n * (keyboard navigation, focus management, ARIA roles).\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n\tAnimatePresence,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseReducedMotion,\n\tuseSpring,\n\tuseTransform,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../../ripple\";\nimport {\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../../shared/constants\";\nimport { TouchTarget } from \"../../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens — MD3 FAB Menu Spec\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst SPRING_NORMAL = { stiffness: 700, damping: 40 } as const;\nconst SPRING_REDUCED = { stiffness: 10000, damping: 100 } as const;\nconst FOCUS_DELAY_MS = 50;\n\nconst TOGGLE_FAB_COLORS: Record<\n\tstring,\n\t{\n\t\tcontainerBg: string;\n\t\tcontainerText: string;\n\t\tcheckedBg: string;\n\t\tcheckedText: string;\n\t}\n> = {\n\tprimary: {\n\t\tcontainerBg: \"bg-m3-primary-container\",\n\t\tcontainerText: \"text-m3-on-primary-container\",\n\t\tcheckedBg: \"bg-m3-primary\",\n\t\tcheckedText: \"text-m3-on-primary\",\n\t},\n\tsecondary: {\n\t\tcontainerBg: \"bg-m3-secondary-container\",\n\t\tcontainerText: \"text-m3-on-secondary-container\",\n\t\tcheckedBg: \"bg-m3-secondary\",\n\t\tcheckedText: \"text-m3-on-secondary\",\n\t},\n\ttertiary: {\n\t\tcontainerBg: \"bg-m3-tertiary-container\",\n\t\tcontainerText: \"text-m3-on-tertiary-container\",\n\t\tcheckedBg: \"bg-m3-tertiary\",\n\t\tcheckedText: \"text-m3-on-tertiary\",\n\t},\n};\n\n/**\n * Size tokens for ToggleFAB.\n *\n * MD3 Kotlin reference:\n * - Baseline: 56dp, cornerRadius 16dp → 28dp (fully round)\n * - Medium: ~80dp (FabMediumTokens.ContainerHeight), cornerRadius 20dp → 40dp\n * - Large: 96dp, cornerRadius 28dp → 48dp\n * @internal\n */\nconst TOGGLE_FAB_SIZES: Record<\n\tstring,\n\t{\n\t\tsizeClass: string;\n\t\tinitialRadius: number;\n\t\tfinalRadius: number;\n\t}\n> = {\n\tbaseline: { sizeClass: \"h-14 w-14\", initialRadius: 16, finalRadius: 28 },\n\tmedium: { sizeClass: \"h-20 w-20\", initialRadius: 20, finalRadius: 40 },\n\tlarge: { sizeClass: \"h-24 w-24\", initialRadius: 28, finalRadius: 48 },\n};\n\nconst MENU_ITEM_STYLES = {\n\tpadding: \"ps-4 pe-6\",\n\tgap: \"gap-3\",\n\tsize: \"h-14 min-w-14\",\n\tcornerRadius: 999,\n} as const;\n\nconst MENU_ITEM_COLORS: Record<string, { bg: string; text: string }> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t},\n};\n\nconst ALIGNMENT_CONTAINER_CLASSES: Record<string, string> = {\n\tend: \"items-end bottom-4 right-4 sm:bottom-6 sm:right-6\",\n\tstart: \"items-start bottom-4 left-4 sm:bottom-6 sm:left-6\",\n\tcenter: \"items-center bottom-4 left-1/2 -translate-x-1/2 sm:bottom-6\",\n};\n\nconst ALIGNMENT_ITEMS_CLASSES: Record<string, string> = {\n\tend: \"items-end\",\n\tstart: \"items-start\",\n\tcenter: \"items-center\",\n};\n\nconst ALIGNMENT_TRANSFORM_ORIGIN: Record<string, string> = {\n\tend: \"right\",\n\tstart: \"left\",\n\tcenter: \"bottom\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Data interface for each action item in FAB menu.\n *\n * If `label` is omitted, renders as an icon-only item.\n */\nexport interface FABMenuItemData {\n\t/** Unique ID used for React keys and focus tracking. */\n\tid: string;\n\t/** Label displayed adjacent to icon (optional). Omit for icon-only item. */\n\tlabel?: string;\n\t/** Icon node — typically an SVG icon component. */\n\ticon: React.ReactNode;\n\t/** Callback invoked when item is activated (click, Enter, or Space). */\n\tonClick: () => void;\n\t/**\n\t * When `true`, visually and interactively disables the item.\n\t * Uses `aria-disabled` instead of HTML `disabled` to preserve focusability for accessibility.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/** Additional CSS class names for item wrapper. */\n\tclassName?: string;\n}\n\n/**\n * Props controlling the main `FABMenu` component.\n *\n * @remarks\n * FABMenu manages menu open/close lifecycle, focus trapping, keyboard control,\n * and staggered motion transitions. `expanded` state is controlled externally.\n */\nexport interface FABMenuProps {\n\t/** Whether the FAB Menu is open (expanded). */\n\texpanded: boolean;\n\t/** Callback invoked when Toggle FAB is interacted with or backdrop dismissed. */\n\tonToggle: (expanded: boolean) => void;\n\t/** List of action items (MD3 spec recommends 2–6 items). */\n\titems: FABMenuItemData[];\n\t/**\n\t * MD3 container color role for trigger FAB and menu items.\n\t * @default \"primary\"\n\t */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/**\n\t * Initial size variant for ToggleFAB (morphs into close icon when expanded).\n\t * @default \"baseline\"\n\t */\n\tfabSize?: \"baseline\" | \"medium\" | \"large\";\n\t/**\n\t * Menu items alignment relative to Toggle FAB.\n\t * - `\"end\"`: Items align to right edge (trailing edge, recommended for RTL).\n\t * - `\"start\"`: Items align along left edge.\n\t * - `\"center\"`: Items align vertically centered above FAB.\n\t * @default \"end\"\n\t */\n\talignment?: \"start\" | \"end\" | \"center\";\n\t/** Custom CSS className for root component. */\n\tclassName?: string;\n\t/**\n\t * When `true`, clicking backdrop overlay closes menu.\n\t * @default true\n\t */\n\tcloseOnBackdropClick?: boolean;\n\t/**\n\t * When `true`, focus automatically moves to the LAST item (closest above FAB) when expanded.\n\t * If `false`, focus moves to the FIRST item in list.\n\n\t * @default true\n\t */\n\tfocusLast?: boolean;\n\t/** Required `aria-label` for ToggleFAB for accessibility. */\n\t\"aria-label\"?: string;\n}\n\n/**\n * Props for standalone `ToggleFAB` component.\n */\nexport interface ToggleFABProps {\n\t/** Whether the button is in expanded/active state. */\n\texpanded: boolean;\n\t/** Callback fired when button toggle state changes. */\n\tonToggle: (expanded: boolean) => void;\n\t/**\n\t * Icon generator function receiving `progress` between `0` -> `1` (collapsed -> expanded).\n\t * Useful for icon morphing effects during animation (e.g., plus to close icon).\n\t *\n\t * @example\n\t * ```tsx\n\t * icon={(progress) => progress > 0.5 ? <Icon name=\"close\" /> : <Icon name=\"add\" />}\n\t * ```\n\t */\n\ticon: (progress: number) => React.ReactNode;\n\t/** MD3 container color role. @default \"primary\" */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/** Initial FAB size variant. @default \"baseline\" */\n\tfabSize?: \"baseline\" | \"medium\" | \"large\";\n\t/** Additional CSS class name. */\n\tclassName?: string;\n\t/** Accessible label requirement. Required. */\n\t\"aria-label\"?: string;\n\t/** ID link for aria-controls attribute to reference menu. */\n\t\"aria-controls\"?: string;\n\t/** Component ID. */\n\tid?: string;\n}\n\n/**\n * Props for an individual `FABMenuItem`.\n */\nexport interface FABMenuItemProps {\n\t/** Icon node to display. */\n\ticon: React.ReactNode;\n\t/** Descriptive label text adjacent to icon. */\n\tlabel?: string;\n\t/** Callback fired when item is clicked. */\n\tonClick: () => void;\n\t/** Disables interaction while keeping element focusable in tab order. @default false */\n\tdisabled?: boolean;\n\t/** Container color role. @default \"primary\" */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/** Custom CSS className. */\n\tclassName?: string;\n\t/** Item index used for staggered animation delay. */\n\tindex?: number;\n\t/** Total items count in menu array. */\n\ttotalItems?: number;\n\t/** Logic `tabIndex` value for manual keyboard navigation. */\n\ttabIndex?: number;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Animation Variants\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ITEM_SPRING = { type: \"spring\" as const, stiffness: 700, damping: 25 };\n\nconst MENU_CONTAINER_VARIANTS = {\n\topen: { transition: { staggerChildren: 0.033, staggerDirection: 1 } },\n\tclosed: { transition: { staggerChildren: 0.02, staggerDirection: -1 } },\n} as const;\n\nconst MENU_ITEM_VARIANTS = {\n\topen: { scaleX: 1, opacity: 1, transition: ITEM_SPRING },\n\tclosed: { scaleX: 0, opacity: 0, transition: ITEM_SPRING },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal Icon Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction AddIcon() {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t>\n\t\t\t<title>Add</title>\n\t\t\t<path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n\t\t</svg>\n\t);\n}\n\nfunction CloseIcon() {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t>\n\t\t\t<title>Close</title>\n\t\t\t<path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n\t\t</svg>\n\t);\n}\n\nfunction defaultFabIcon(progress: number) {\n\treturn progress > 0.5 ? <CloseIcon /> : <AddIcon />;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// ToggleFAB Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ToggleFABComponent = React.forwardRef<HTMLButtonElement, ToggleFABProps>(\n\t(\n\t\t{\n\t\t\texpanded,\n\t\t\tonToggle,\n\t\t\ticon,\n\t\t\tcolorVariant = \"primary\",\n\t\t\tfabSize = \"baseline\",\n\t\t\tclassName,\n\t\t\tid,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-controls\": ariaControls,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst prefersReduced = useReducedMotion();\n\t\tconst colors = TOGGLE_FAB_COLORS[colorVariant] ?? TOGGLE_FAB_COLORS.primary;\n\t\tconst sizeTokens = TOGGLE_FAB_SIZES[fabSize] ?? TOGGLE_FAB_SIZES.baseline;\n\n\t\tconst springConfig = prefersReduced ? SPRING_REDUCED : SPRING_NORMAL;\n\t\tconst checkedProgress = useSpring(expanded ? 1 : 0, springConfig);\n\n\t\tReact.useEffect(() => {\n\t\t\tcheckedProgress.set(expanded ? 1 : 0);\n\t\t}, [expanded, checkedProgress]);\n\n\t\tconst borderRadius = useTransform(\n\t\t\tcheckedProgress,\n\t\t\t[0, 1],\n\t\t\t[`${sizeTokens.initialRadius}px`, `${sizeTokens.finalRadius}px`],\n\t\t);\n\n\t\tconst [iconProgress, setIconProgress] = React.useState(expanded ? 1 : 0);\n\n\t\tReact.useEffect(() => {\n\t\t\treturn checkedProgress.on(\"change\", setIconProgress);\n\t\t}, [checkedProgress]);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState();\n\n\t\tconst handleClick = React.useCallback(() => {\n\t\t\tonToggle(!expanded);\n\t\t}, [expanded, onToggle]);\n\n\t\treturn (\n\t\t\t<m.button\n\t\t\t\tref={ref}\n\t\t\t\tid={id}\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-expanded={expanded}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\taria-label={ariaLabel ?? (expanded ? \"Close menu\" : \"Open menu\")}\n\t\t\t\taria-controls={ariaControls}\n\t\t\t\tdata-expanded={expanded ? \"true\" : \"false\"}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\tstyle={{ borderRadius }}\n\t\t\t\tanimate={{\n\t\t\t\t\tboxShadow: expanded\n\t\t\t\t\t\t? \"0 4px 8px 3px rgba(0,0,0,0.15), 0 1px 3px rgba(0,0,0,0.3)\"\n\t\t\t\t\t\t: \"0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)\",\n\t\t\t\t}}\n\t\t\t\twhileTap={{ scale: 0.95, transition: SPRING_TRANSITION_FAST }}\n\t\t\t\ttransition={{ boxShadow: SPRING_TRANSITION }}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\t\t\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\t\t\t\"transition-colors duration-200\",\n\t\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\t\tsizeTokens.sizeClass,\n\t\t\t\t\texpanded ? colors.checkedBg : colors.containerBg,\n\t\t\t\t\texpanded ? colors.checkedText : colors.containerText,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<TouchTarget />\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"relative z-10 flex items-center justify-center size-6 pointer-events-none\"\n\t\t\t\t>\n\t\t\t\t\t{icon(iconProgress)}\n\t\t\t\t</span>\n\t\t\t</m.button>\n\t\t);\n\t},\n);\n\nToggleFABComponent.displayName = \"ToggleFAB\";\n\n/**\n * Toggle FAB button (Morphing FAB) usable as standalone or trigger for `FABMenu`.\n *\n * Container shape transitions from squircle to circle (square → circle) and shifts colors\n * when `expanded` state changes from false → true.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n * <ToggleFAB\n * expanded={open}\n * onToggle={setOpen}\n * colorVariant=\"primary\"\n * aria-label=\"Toggle actions\"\n * icon={(progress) => progress > 0.5 ? <Icon name=\"close\" /> : <Icon name=\"add\" />}\n * />\n * ```\n */\nexport const ToggleFAB = React.memo(ToggleFABComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FABMenuItem Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Single action item within a `FABMenu`.\n *\n * Renders a pill shape enclosing icon and optional label text.\n * When `label` is omitted, renders as a square item containing only icon.\n * Includes MD3 Ripple and 48dp touch target area per WCAG 2.5.5 touch target guidelines.\n *\n * @remarks\n * Disabled items use `aria-disabled=\"true\"` rather than native HTML `disabled`\n * so they remain focusable in the tab sequence per MD3 specification.\n */\nexport function FABMenuItem({\n\ticon,\n\tlabel,\n\tonClick,\n\tdisabled = false,\n\tcolorVariant = \"primary\",\n\tclassName,\n\ttabIndex = 0,\n\tasChild = false,\n\tchildren,\n}: FABMenuItemProps) {\n\tconst colors = MENU_ITEM_COLORS[colorVariant] ?? MENU_ITEM_COLORS.primary;\n\n\tconst { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });\n\n\tconst handleClick = React.useCallback(\n\t\t(e: React.MouseEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClick();\n\t\t},\n\t\t[disabled, onClick],\n\t);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) return;\n\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonClick();\n\t\t\t}\n\t\t},\n\t\t[disabled, onClick],\n\t);\n\n\tconst innerContent = (\n\t\t<>\n\t\t\t<TouchTarget />\n\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"relative z-10 flex items-center justify-center size-6 shrink-0 [&>svg]:w-full [&>svg]:h-full pointer-events-none\"\n\t\t\t>\n\t\t\t\t{icon}\n\t\t\t</span>\n\t\t\t{label && (\n\t\t\t\t<span className=\"relative z-10 text-base font-medium leading-none pointer-events-none\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</>\n\t);\n\n\tconst containerClassName = cn(\n\t\t\"relative inline-flex flex-row items-center\",\n\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\"whitespace-nowrap\",\n\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1\",\n\t\tMENU_ITEM_STYLES.size,\n\t\tMENU_ITEM_STYLES.gap,\n\t\tlabel ? MENU_ITEM_STYLES.padding : \"px-4\",\n\t\t!label && \"justify-center\",\n\t\tcolors.bg,\n\t\tcolors.text,\n\t\tdisabled && \"opacity-[0.38] pointer-events-none\",\n\t\tclassName,\n\t);\n\n\tconst containerStyle = {\n\t\ttransformOrigin: \"right\",\n\t\tborderRadius: `${MENU_ITEM_STYLES.cornerRadius}px`,\n\t};\n\n\tif (asChild) {\n\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\tchildren?: React.ReactNode;\n\t\t}>;\n\t\treturn (\n\t\t\t<m.div variants={MENU_ITEM_VARIANTS} style={containerStyle}>\n\t\t\t\t<Slot\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\taria-disabled={disabled ? \"true\" : undefined}\n\t\t\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t>\n\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t</Slot>\n\t\t\t</m.div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<m.div\n\t\t\trole=\"menuitem\"\n\t\t\ttabIndex={tabIndex}\n\t\t\taria-disabled={disabled ? \"true\" : undefined}\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tonClick={handleClick}\n\t\t\tonPointerDown={onPointerDown}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tvariants={MENU_ITEM_VARIANTS}\n\t\t\tstyle={containerStyle}\n\t\t\tclassName={containerClassName}\n\t\t>\n\t\t\t{innerContent}\n\t\t</m.div>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FABMenu Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive FAB Menu.\n *\n * Floating Action Button expansion menu. Toggling trigger button reveals vertically stacked action items.\n *\n * Full MD3 Accessibility implementation:\n * - `role=\"menu\"` assigned to container\n * - `role=\"menuitem\"` assigned to child action items\n * - Focus lifecycle management: Open -> Focus first/last menu item; Close -> Restore focus to ToggleFAB\n * - Keyboard navigation: Escape key closes menu, ArrowUp/Down navigates items, Tab moves focus.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n *\n * const items = [\n * { id: 'share', icon: <Icon name=\"share\" />, label: 'Share', onClick: () => console.log('Share') },\n * { id: 'edit', icon: <Icon name=\"edit\" />, label: 'Edit', onClick: () => console.log('Edit') },\n * { id: 'delete', icon: <Icon name=\"delete\" />, label: 'Delete', disabled: true, onClick: () => {} }\n * ];\n *\n * <FABMenu\n * expanded={open}\n * onToggle={setOpen}\n * aria-label=\"Quick actions\"\n * alignment=\"center\"\n * colorVariant=\"tertiary\"\n\n * items={items}\n * />\n * ```\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport function FABMenu({\n\texpanded,\n\tonToggle,\n\titems,\n\tcolorVariant = \"primary\",\n\tfabSize = \"baseline\",\n\talignment = \"end\",\n\tclassName,\n\tcloseOnBackdropClick = true,\n\tfocusLast = true,\n\t\"aria-label\": ariaLabel,\n}: FABMenuProps) {\n\tconst fabId = React.useId();\n\tconst menuId = React.useId();\n\tconst toggleRef = React.useRef<HTMLButtonElement>(null);\n\tconst itemRefs = React.useRef<(HTMLDivElement | null)[]>([]);\n\tconst [focusedIndex, setFocusedIndex] = React.useState<number>(-1);\n\n\tconst reversedItems = React.useMemo(() => [...items].reverse(), [items]);\n\n\tconst focusItem = React.useCallback((index: number) => {\n\t\tconst clampedIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(index, itemRefs.current.length - 1),\n\t\t);\n\t\tsetFocusedIndex(clampedIndex);\n\t\titemRefs.current[clampedIndex]?.focus();\n\t}, []);\n\n\t// Track whether menu was previously open so we only return focus\n\t// to the toggle button after a user-initiated close, not on initial mount.\n\tconst wasExpandedRef = React.useRef(false);\n\n\tReact.useEffect(() => {\n\t\tif (expanded) {\n\t\t\twasExpandedRef.current = true;\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tfocusItem(focusLast ? items.length - 1 : 0);\n\t\t\t}, FOCUS_DELAY_MS);\n\t\t\treturn () => clearTimeout(timer);\n\t\t}\n\n\t\tif (wasExpandedRef.current) {\n\t\t\ttoggleRef.current?.focus();\n\t\t}\n\t\twasExpandedRef.current = false;\n\t\tsetFocusedIndex(-1);\n\t}, [expanded, focusLast, items.length, focusItem]);\n\n\tconst handleMenuKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (!expanded) return;\n\n\t\t\tconst lastIndex = items.length - 1;\n\n\t\t\tswitch (e.key) {\n\t\t\t\tcase \"Escape\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonToggle(false);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfocusItem(focusedIndex <= 0 ? lastIndex : focusedIndex - 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowDown\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfocusItem(focusedIndex >= lastIndex ? 0 : focusedIndex + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"Tab\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tfocusItem(focusedIndex <= 0 ? lastIndex : focusedIndex - 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfocusItem(focusedIndex >= lastIndex ? 0 : focusedIndex + 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[expanded, focusedIndex, items.length, focusItem, onToggle],\n\t);\n\n\treturn (\n\t\t<LazyMotion features={domMax} strict>\n\t\t\t{expanded && closeOnBackdropClick && (\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"fixed inset-0 z-40\"\n\t\t\t\t\tonClick={() => onToggle(false)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* biome-ignore lint/a11y/useSemanticElements: FAB menu container needs div, not fieldset — this is not a form group */}\n\t\t\t<div\n\t\t\t\trole=\"group\"\n\t\t\t\taria-label={ariaLabel ?? \"Actions menu\"}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"fixed z-50 flex flex-col gap-2\",\n\t\t\t\t\tALIGNMENT_CONTAINER_CLASSES[alignment],\n\t\t\t\t\t\"*:shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonKeyDown={handleMenuKeyDown}\n\t\t\t>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{expanded && (\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tid={menuId}\n\t\t\t\t\t\t\trole=\"menu\"\n\t\t\t\t\t\t\taria-labelledby={fabId}\n\t\t\t\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\t\t\t\tvariants={MENU_CONTAINER_VARIANTS}\n\t\t\t\t\t\t\tinitial=\"closed\"\n\t\t\t\t\t\t\tanimate=\"open\"\n\t\t\t\t\t\t\texit=\"closed\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex flex-col-reverse gap-2\",\n\t\t\t\t\t\t\t\tALIGNMENT_ITEMS_CLASSES[alignment],\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{reversedItems.map((item, reversedIndex) => {\n\t\t\t\t\t\t\t\tconst originalIndex = items.length - 1 - reversedIndex;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\t\t\tvariants={MENU_ITEM_VARIANTS}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\t\t\t\t\tALIGNMENT_TRANSFORM_ORIGIN[alignment] ?? \"right\",\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\t\t\t\titemRefs.current[originalIndex] = el;\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<FABMenuItem\n\t\t\t\t\t\t\t\t\t\t\ticon={item.icon}\n\t\t\t\t\t\t\t\t\t\t\tlabel={item.label}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (!item.disabled) {\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t\t\t\t\t\t\t\t\tonToggle(false);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\t\t\t\t\t\t\t\tclassName={item.className}\n\t\t\t\t\t\t\t\t\t\t\ttabIndex={expanded ? 0 : -1}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</m.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t<ToggleFAB\n\t\t\t\t\tref={toggleRef}\n\t\t\t\t\tid={fabId}\n\t\t\t\t\texpanded={expanded}\n\t\t\t\t\tonToggle={onToggle}\n\t\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\t\tfabSize={fabSize}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tariaLabel ?? (expanded ? \"Close actions menu\" : \"Open actions menu\")\n\t\t\t\t\t}\n\t\t\t\t\taria-controls={menuId}\n\t\t\t\t\ticon={defaultFabIcon}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</LazyMotion>\n\t);\n}\n","/**\n * @file icon-button.tsx\n *\n * MD3 Expressive Icon Button component.\n *\n * An icon-only button with shape morphing, ripple effect, loading state,\n * and toggle variant. Requires `aria-label` for accessibility since there\n * is no visible text label.\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { LoadingIndicator } from \"../../loading-indicator\";\nimport { ProgressIndicator } from \"../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../shared/constants\";\nimport { TouchTarget } from \"../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size container dimensions (Tailwind utility classes).\n * MD3 Expressive sizing tokens (v14.1.0): XS=32dp, SM=40dp, MD=56dp, LG=96dp, XL=136dp.\n * @internal\n */\nconst SIZE_STYLES: Record<string, string> = {\n\txs: \"h-8 w-8\",\n\tsm: \"h-10 w-10\",\n\tmd: \"h-14 w-14\",\n\tlg: \"h-24 w-24\",\n\txl: \"h-[8.5rem] w-[8.5rem]\",\n};\n\n/**\n * Per-size icon dimensions — Tailwind class + pixel value.\n * Single source of truth to keep icon class and LoadingIndicator size in sync.\n * @internal\n */\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\txs: { cls: \"size-5\", px: 20 },\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-6\", px: 24 },\n\tlg: { cls: \"size-8\", px: 32 },\n\txl: { cls: \"size-10\", px: 40 },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Shape Morphing — Border Radius Map\n// Keys: round=CornerFull, square=CornerMedium–XL, pressed, selectedRound, selectedSquare\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size shape morphing radius configuration for all interaction states.\n *\n * - `round` / `square`: idle border-radius per shape variant.\n * - `pressed`: compressed radius on whileTap.\n * - `selectedRound` / `selectedSquare`: radius when toggle is selected\n * (shape flips — round selected → selectedRound which is squarer).\n *\n * @internal\n */\nconst RADIUS_MAP: Record<\n\tstring,\n\t{\n\t\tround: number;\n\t\tsquare: number;\n\t\tpressed: number;\n\t\tselectedRound: number;\n\t\tselectedSquare: number;\n\t}\n> = {\n\txs: {\n\t\tround: 16,\n\t\tsquare: 12,\n\t\tpressed: 8,\n\t\tselectedRound: 12,\n\t\tselectedSquare: 16,\n\t},\n\tsm: {\n\t\tround: 20,\n\t\tsquare: 12,\n\t\tpressed: 8,\n\t\tselectedRound: 12,\n\t\tselectedSquare: 20,\n\t},\n\tmd: {\n\t\tround: 28,\n\t\tsquare: 16,\n\t\tpressed: 12,\n\t\tselectedRound: 16,\n\t\tselectedSquare: 28,\n\t},\n\tlg: {\n\t\tround: 48,\n\t\tsquare: 28,\n\t\tpressed: 16,\n\t\tselectedRound: 28,\n\t\tselectedSquare: 48,\n\t},\n\txl: {\n\t\tround: 68,\n\t\tsquare: 28,\n\t\tpressed: 16,\n\t\tselectedRound: 28,\n\t\tselectedSquare: 68,\n\t},\n};\n\n/**\n * Outline border width per size for the `outlined` color style.\n * XS/SM/MD = 1dp, LG = 2dp, XL = 3dp.\n * @internal\n */\nconst SIZE_OUTLINE_WIDTH: Record<string, string> = {\n\txs: \"border\",\n\tsm: \"border\",\n\tmd: \"border\",\n\tlg: \"border-2\",\n\txl: \"border-[3px]\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Color Variants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Color-role class pairs for each `colorStyle` × selection state combination.\n * @internal\n */\nconst colorStyles = {\n\tstandard: {\n\t\tdefault:\n\t\t\t\"text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected: \"text-m3-primary hover:bg-m3-primary/8 active:bg-m3-primary/12\",\n\t},\n\tfilled: {\n\t\tdefault:\n\t\t\t\"bg-m3-surface-container text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected:\n\t\t\t\"bg-m3-primary text-m3-on-primary hover:brightness-95 active:brightness-90\",\n\t},\n\ttonal: {\n\t\tdefault:\n\t\t\t\"bg-m3-secondary-container text-m3-on-secondary-container hover:bg-m3-on-secondary-container/8 active:bg-m3-on-secondary-container/12\",\n\t\tselected:\n\t\t\t\"bg-m3-secondary text-m3-on-secondary hover:brightness-95 active:brightness-90\",\n\t},\n\toutlined: {\n\t\tdefault:\n\t\t\t\"border-m3-outline-variant text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected:\n\t\t\t\"bg-m3-inverse-surface text-m3-inverse-on-surface border-transparent hover:brightness-95 active:brightness-90\",\n\t},\n};\n\n/**\n * Base Tailwind classes shared by all icon button variants.\n * Separated from CVA to keep bundle output lean (no runtime variant lookups needed here).\n * @internal\n */\nconst baseIconButtonClasses = [\n\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\"select-none cursor-pointer\",\n\t\"transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200\",\n\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\"disabled:pointer-events-none disabled:opacity-[0.38]\",\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/**\n * Base props for the Icon Button component.\n *\n * @see {@link IconButtonProps} for the full discriminated union.\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport interface BaseIconButtonProps extends MotionButtonProps {\n\t/**\n\t * Visual color style following MD3 color roles.\n\t * @default \"standard\"\n\t */\n\tcolorStyle?: \"standard\" | \"filled\" | \"tonal\" | \"outlined\";\n\t/**\n\t * Button container size.\n\t * Sizes: XS=32dp, SM=40dp, MD=56dp, LG=96dp, XL=136dp.\n\t * @default \"sm\"\n\t */\n\tsize?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\t/**\n\t * Container shape controlling border-radius morphing.\n\t * - `round`: fully circular (CornerFull).\n\t * - `square`: rounded square (CornerMedium–CornerExtraLarge per size).\n\t * @default \"round\"\n\t */\n\tshape?: \"round\" | \"square\";\n\t/**\n\t * When `true`, replaces the icon with an animated loading indicator.\n\t * Interaction is blocked and `aria-busy` is set.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Spinner style shown while `loading={true}`.\n\t * @default \"loading-indicator\"\n\t */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/** Explicit icon size override in px */\n\ticonSize?: number | \"inherit\";\n\t/** Icon content — typically a single SVG icon component. */\n\tchildren: React.ReactNode;\n\t/**\n\t * Accessible label — **REQUIRED** because icon buttons have no visible text.\n\t *\n\t * @example \"Close\", \"Add to favourites\", \"Toggle dark mode\"\n\t * @see https://m3.material.io/components/icon-buttons/accessibility\n\t */\n\t\"aria-label\": string;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n}\n\n/**\n * Complete `IconButton` props — discriminated union that enforces\n * `selected` is only valid with `variant=\"toggle\"`.\n *\n * @example\n * ```tsx\n * // Standard\n * <IconButton aria-label=\"Close\" onClick={handleClose}>\n * <XIcon />\n * </IconButton>\n *\n * // Toggle\n * <IconButton\n * variant=\"toggle\"\n * selected={isLiked}\n * aria-label={isLiked ? \"Unlike\" : \"Like\"}\n * colorStyle=\"filled\"\n * onClick={() => setIsLiked(!isLiked)}\n * >\n * <HeartIcon />\n * </IconButton>\n * ```\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport type IconButtonProps = BaseIconButtonProps &\n\t(\n\t\t| { variant?: \"default\"; selected?: never }\n\t\t| { variant: \"toggle\"; selected: boolean }\n\t);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolves the animated border-radius based on shape and toggle state.\n *\n * @param radiusConfig - The radius map entry for the current size.\n * @param shape - Current shape variant.\n * @param isToggle - Whether the button is a toggle variant.\n * @param isSelected - Current toggle selection state.\n * @returns Border radius in px.\n * @internal\n */\nfunction resolveAnimateRadius(\n\tradiusConfig: (typeof RADIUS_MAP)[string],\n\tshape: \"round\" | \"square\",\n\tisToggle: boolean,\n\tisSelected: boolean,\n): number {\n\tif (isToggle && isSelected) {\n\t\treturn shape === \"round\"\n\t\t\t? radiusConfig.selectedRound\n\t\t\t: radiusConfig.selectedSquare;\n\t}\n\treturn shape === \"round\" ? radiusConfig.round : radiusConfig.square;\n}\n\n/**\n * Returns extra disabled-state classes specific to background-bearing color styles.\n *\n * `filled` and `tonal` need a dimmed background; `outlined` needs a dimmed border.\n * `standard` only dims the icon colour (handled by global `disabled:opacity-[0.38]`).\n *\n * @param colorStyle - Current color style.\n * @returns Tailwind disabled-state override classes.\n * @internal\n */\nfunction resolveDisabledBgClass(colorStyle: string): string {\n\tif (colorStyle === \"filled\" || colorStyle === \"tonal\") {\n\t\treturn \"disabled:bg-m3-on-surface/12 disabled:text-m3-on-surface/[0.38]\";\n\t}\n\tif (colorStyle === \"outlined\") {\n\t\treturn \"disabled:text-m3-on-surface/[0.38] disabled:border-m3-on-surface/[0.12]\";\n\t}\n\treturn \"disabled:text-m3-on-surface/[0.38]\";\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst IconButtonComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tIconButtonProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"default\",\n\t\t\tcolorStyle = \"standard\",\n\t\t\tsize = \"sm\",\n\t\t\tshape = \"round\",\n\t\t\tselected,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\ticonSize,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isToggle = variant === \"toggle\";\n\t\tconst isSelected = isToggle && !!selected;\n\n\t\t// Derived display values — memoized to avoid recalculation on every render\n\t\tconst resolvedColorClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisSelected\n\t\t\t\t\t? colorStyles[colorStyle].selected\n\t\t\t\t\t: colorStyles[colorStyle].default,\n\t\t\t[isSelected, colorStyle],\n\t\t);\n\n\t\tconst outlineWidthClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcolorStyle === \"outlined\" && !isSelected\n\t\t\t\t\t? (SIZE_OUTLINE_WIDTH[size] ?? \"border\")\n\t\t\t\t\t: \"\",\n\t\t\t[colorStyle, isSelected, size],\n\t\t);\n\n\t\tconst disabledBgClass = React.useMemo(\n\t\t\t() => resolveDisabledBgClass(colorStyle),\n\t\t\t[colorStyle],\n\t\t);\n\n\t\tconst radiusConfig = RADIUS_MAP[size] ?? RADIUS_MAP.sm;\n\t\tconst animateRadius = resolveAnimateRadius(\n\t\t\tradiusConfig,\n\t\t\tshape,\n\t\t\tisToggle,\n\t\t\tisSelected,\n\t\t);\n\t\tconst pressedRadius = radiusConfig.pressed;\n\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.sm;\n\t\tconst iconClass = sizeIcon.cls;\n\t\tconst defaultIconPx = sizeIcon.px;\n\t\tconst iconPx = iconSize ?? defaultIconPx;\n\t\tconst isCustomSize = iconSize != null && iconSize !== \"inherit\";\n\n\t\t// xs/sm need 48dp touch target (WCAG 2.5.5 + MD3 a11y)\n\t\tconst needsTouchTarget = size === \"xs\" || size === \"sm\";\n\n\t\t// ── Ripple ───────────────────────────────────────────────────────\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\t// Manually trigger click for Enter/Space — needed because JSDOM does not\n\t\t\t\t// fire native click events from keyboard, and some custom scroll containers\n\t\t\t\t// suppress the default browser behaviour.\n\t\t\t\tif ((e.key === \"Enter\" || e.key === \" \") && onClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{/* Extended 48dp touch target for xs/sm (WCAG 2.5.5) */}\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\ticonSize != null ? undefined : iconClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tisCustomSize\n\t\t\t\t\t\t\t\t\t? { width: `${iconSize}px`, height: `${iconSize}px` }\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\tsize={typeof iconPx === \"number\" ? iconPx : defaultIconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\tsize={typeof iconPx === \"number\" ? iconPx : defaultIconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"content\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 [&_svg]:w-full [&_svg]:h-full [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\ticonSize != null ? undefined : iconClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: typeof iconPx === \"number\" ? `${iconPx}px` : iconPx,\n\t\t\t\t\t\t\t\twidth: isCustomSize ? `${iconSize}px` : undefined,\n\t\t\t\t\t\t\t\theight: isCustomSize ? `${iconSize}px` : undefined,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{asChild\n\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t).props.children\n\t\t\t\t\t\t\t\t: children}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tbaseIconButtonClasses,\n\t\t\tresolvedColorClass,\n\t\t\toutlineWidthClass,\n\t\t\tdisabledBgClass,\n\t\t\t\"overflow-hidden\",\n\t\t\tSIZE_STYLES[size],\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tstyle={{ ...(style as React.CSSProperties), borderRadius: `${animateRadius}px` }}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tstyle={style}\n\t\t\t\t\tanimate={{ borderRadius: animateRadius }}\n\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\ttransition={{ borderRadius: SPRING_TRANSITION_FAST }}\n\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{innerContent}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nIconButtonComponent.displayName = \"IconButton\";\n\n/**\n * MD3 Expressive Icon Button.\n *\n * An icon-only button with spring shape morphing, ripple effect, loading state support,\n * and an optional toggle variant. Compliant with MD3 Expressive sizing and WCAG 2.5.5\n * (touch target minimum for XS and SM sizes).\n *\n * @remarks\n * - `aria-label` is **required** — icon buttons have no visible text label.\n * - `variant=\"toggle\"` requires `selected: boolean`.\n * - Touch target is automatically extended to 48dp for `xs` and `sm` sizes.\n *\n * @example\n * ```tsx\n * <IconButton aria-label=\"Close\" onClick={handleClose}>\n * <XIcon />\n * </IconButton>\n *\n * <IconButton\n * variant=\"toggle\"\n * selected={isBookmarked}\n * aria-label={isBookmarked ? \"Remove bookmark\" : \"Bookmark\"}\n * colorStyle=\"filled\"\n * onClick={toggleBookmark}\n * >\n * <BookmarkIcon />\n * </IconButton>\n * ```\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport const IconButton = React.memo(IconButtonComponent);\n","import * as React from \"react\";\nimport type { SplitButtonSize, SplitButtonVariant } from \"./split-button-types\";\n\nexport interface SplitButtonContextValue {\n\tsize?: SplitButtonSize;\n\tvariant?: SplitButtonVariant;\n}\n\nexport const SplitButtonContext =\n\tReact.createContext<SplitButtonContextValue | null>(null);\n\nexport function useSplitButtonContext() {\n\treturn React.useContext(SplitButtonContext);\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { SplitButtonContext } from \"./split-button-context\";\nimport type {\n\tSplitButtonLayoutProps,\n\tSplitButtonSize,\n\tSplitButtonVariant,\n} from \"./split-button-types\";\n\n/**\n * SplitButtonLayout renders a split button group consisting of a leading\n * action button and a trailing menu toggle button.\n *\n * @example\n * <SplitButtonLayout\n * leadingButton={<SplitButtonLeading onClick={handleSave}>Save</SplitButtonLeading>}\n * trailingButton={\n * <SplitButtonTrailing\n * checked={open}\n * onCheckedChange={setOpen}\n * aria-label=\"More save options\"\n * />\n * }\n * />\n */\nconst SplitButtonLayoutComponent = React.forwardRef<\n\tHTMLDivElement,\n\tSplitButtonLayoutProps\n>(\n\t(\n\t\t{\n\t\t\tleadingButton,\n\t\t\ttrailingButton,\n\t\t\tclassName,\n\t\t\tspacing = 2,\n\t\t\tvariant: layoutVariant,\n\t\t\tsize: layoutSize,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Extract size and variant from the leading button props\n\t\tconst leadingProps = React.isValidElement<{\n\t\t\tsize?: SplitButtonSize;\n\t\t\tvariant?: SplitButtonVariant;\n\t\t}>(leadingButton)\n\t\t\t? leadingButton.props\n\t\t\t: {};\n\n\t\tconst size = layoutSize || leadingProps.size;\n\t\tconst variant = layoutVariant || leadingProps.variant;\n\n\t\tconst contextValue = React.useMemo(\n\t\t\t() => ({\n\t\t\t\tsize,\n\t\t\t\tvariant,\n\t\t\t}),\n\t\t\t[size, variant],\n\t\t);\n\n\t\treturn (\n\t\t\t<SplitButtonContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"inline-flex flex-row items-stretch justify-center w-fit shrink-0 relative\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ gap: `${spacing}px` }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{leadingButton}\n\t\t\t\t\t{trailingButton}\n\t\t\t\t</div>\n\t\t\t</SplitButtonContext.Provider>\n\t\t);\n\t},\n);\n\nSplitButtonLayoutComponent.displayName = \"SplitButtonLayout\";\n\nexport const SplitButtonLayout = React.memo(SplitButtonLayoutComponent);\n","import { domMax, type HTMLMotionProps, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface StateLayerProps extends HTMLMotionProps<\"div\"> {\n\thovered?: boolean;\n\tfocused?: boolean;\n\tpressed?: boolean;\n}\n\n/**\n * StateLayer provides a standardized visual overlay for interactive states (hover, focus, pressed)\n * following MD3 specifications.\n */\nexport const StateLayer = React.forwardRef<HTMLDivElement, StateLayerProps>(\n\t({ className, hovered, focused, pressed, ...props }, ref) => {\n\t\t// Determine opacity based on MD3 specs\n\t\tlet opacity = 0;\n\t\tif (pressed) {\n\t\t\topacity = 0.12;\n\t\t} else if (focused) {\n\t\t\topacity = 0.1;\n\t\t} else if (hovered) {\n\t\t\topacity = 0.08;\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute inset-0 bg-current pointer-events-none rounded-[inherit]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tanimate={{ opacity }}\n\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nStateLayer.displayName = \"StateLayer\";\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\nimport type { Transition } from \"motion/react\";\nimport { FAST_EFFECTS_SPRING } from \"../../shared/constants\";\nimport type {\n\tSplitButtonSize,\n\tSplitButtonSizeTokens,\n} from \"./split-button-types\";\n\n// Standard (non-expressive) spring for chevron rotation per M3 spec\nexport const SPLIT_BUTTON_CHEVRON_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 20,\n\tmass: 1,\n};\n\n// Use fast effects spring (critically damped, no bounce) for border radius morphing\nexport const SPLIT_BUTTON_RADIUS_SPRING: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Split Button Tokens (Expressive)\n * Source: SplitButtonXSmallTokens.kt, SplitButtonSmallTokens.kt,\n * SplitButtonMediumTokens.kt, SplitButtonLargeTokens.kt,\n * SplitButtonXLargeTokens.kt (Android/Compose reference)\n */\nexport const SPLIT_BUTTON_TOKENS = {\n\txs: {\n\t\tcontainerHeight: 32, // XSmallTokens: ContainerHeight = 32.0.dp\n\t\tbetweenSpace: 2, // XSmallTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.small, // 8dp\n\t\t\tpressed: cornerRadius.small, // 8dp\n\t\t},\n\t\touterCornerPercent: 50, // XSmallTokens: OuterCornerCornerSizePercent = 50.0f → full pill\n\t\tleadingPadding: {\n\t\t\tstart: 12, // XSmallTokens: LeadingButtonLeadingSpace = 12.0.dp\n\t\t\tend: 10, // XSmallTokens: LeadingButtonTrailingSpace = 10.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 13, // XSmallTokens: TrailingButtonLeadingSpace = 13.0.dp\n\t\t\tend: 13, // XSmallTokens: TrailingButtonTrailingSpace = 13.0.dp\n\t\t},\n\t\ttrailingIconSize: 22, // XSmallTokens: TrailingIconSize = 22.0.dp\n\t\topticalCenterOffset: -1, // Spec: XS = -1dp from center\n\t},\n\tsm: {\n\t\tcontainerHeight: 40, // SmallTokens: ContainerHeight = 40.0.dp\n\t\tbetweenSpace: 2, // SmallTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.medium, // 12dp\n\t\t\tpressed: cornerRadius.medium, // 12dp\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 16, // SmallTokens: LeadingButtonLeadingSpace = 16.0.dp\n\t\t\tend: 12, // SmallTokens: LeadingButtonTrailingSpace = 12.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 13, // SmallTokens: TrailingButtonLeadingSpace = 13.0.dp\n\t\t\tend: 13, // SmallTokens: TrailingButtonTrailingSpace = 13.0.dp\n\t\t},\n\t\ttrailingIconSize: 22, // SmallTokens: TrailingIconSize = 22.0.dp\n\t\topticalCenterOffset: -1, // Spec: S = -1dp from center\n\t},\n\tmd: {\n\t\tcontainerHeight: 56, // MediumTokens: ContainerHeight = 56.0.dp\n\t\tbetweenSpace: 2, // MediumTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.medium, // 12dp\n\t\t\tpressed: cornerRadius.medium, // 12dp\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 24, // MediumTokens: LeadingButtonLeadingSpace = 24.0.dp\n\t\t\tend: 24, // MediumTokens: LeadingButtonTrailingSpace = 24.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 15, // MediumTokens: TrailingButtonLeadingSpace = 15.0.dp\n\t\t\tend: 15, // MediumTokens: TrailingButtonTrailingSpace = 15.0.dp\n\t\t},\n\t\ttrailingIconSize: 26, // MediumTokens: TrailingIconSize = 26.0.dp\n\t\topticalCenterOffset: -2, // Spec: M = -2dp from center\n\t},\n\tlg: {\n\t\tcontainerHeight: 96, // LargeTokens: ContainerHeight = 96.0.dp\n\t\tbetweenSpace: 2, // LargeTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.small, // 8dp\n\t\t\thovered: 28, // LargeTokens: InnerHoveredCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t\tpressed: 28, // LargeTokens: InnerPressedCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 48, // LargeTokens: LeadingButtonLeadingSpace = 48.0.dp\n\t\t\tend: 48, // LargeTokens: LeadingButtonTrailingSpace = 48.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 29, // LargeTokens: TrailingButtonLeadingSpace = 29.0.dp\n\t\t\tend: 29, // LargeTokens: TrailingButtonTrailingSpace = 29.0.dp\n\t\t},\n\t\ttrailingIconSize: 38, // LargeTokens: TrailingIconSize = 38.0.dp\n\t\topticalCenterOffset: -3, // Spec: L = -3dp from center\n\t},\n\txl: {\n\t\tcontainerHeight: 136, // XLargeTokens: ContainerHeight = 136.0.dp\n\t\tbetweenSpace: 2, // XLargeTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.medium, // 12dp\n\t\t\thovered: 28, // XLargeTokens: InnerHoveredCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t\tpressed: 28, // XLargeTokens: InnerPressedCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 64, // XLargeTokens: LeadingButtonLeadingSpace = 64.0.dp\n\t\t\tend: 64, // XLargeTokens: LeadingButtonTrailingSpace = 64.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 43, // XLargeTokens: TrailingButtonLeadingSpace = 43.0.dp\n\t\t\tend: 43, // XLargeTokens: TrailingButtonTrailingSpace = 43.0.dp\n\t\t},\n\t\ttrailingIconSize: 50, // XLargeTokens: TrailingIconSize = 50.0.dp\n\t\topticalCenterOffset: -6, // Spec: XL = -6dp from center\n\t},\n} as const satisfies Record<SplitButtonSize, SplitButtonSizeTokens>;\n\n/**\n * Leading icon size per size variant.\n * From Compose ButtonDefaults.iconSizeFor logic.\n */\nexport const LEADING_ICON_SIZE_FOR_SIZE = {\n\txs: 18,\n\tsm: 20,\n\tmd: 24,\n\tlg: 32,\n\txl: 40,\n} as const;\n","import { cva } from \"class-variance-authority\";\n\n/**\n * Size variants for the Split Button components.\n * These map to the MD3 Expressive container heights.\n */\nconst splitButtonSizeVariants = {\n\txs: \"min-h-[32px]\",\n\tsm: \"min-h-[40px]\",\n\tmd: \"min-h-[56px]\",\n\tlg: \"min-h-[96px]\",\n\txl: \"min-h-[136px]\",\n};\n\n/**\n * Color variants for the Split Button components using CVA.\n */\nexport const splitButtonVariants = cva(\n\t\"group relative w-fit shrink-0 inline-flex flex-row items-center justify-center whitespace-nowrap select-none cursor-pointer transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-m3-primary z-10 overflow-hidden\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tfilled: \"bg-m3-primary text-m3-on-primary\",\n\t\t\t\ttonal: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\t\t\televated:\n\t\t\t\t\t\"bg-m3-surface-container-low text-m3-primary shadow-md hover:shadow-lg\",\n\t\t\t\toutlined: \"bg-transparent text-m3-primary border border-m3-outline\",\n\t\t\t},\n\t\t\tsize: splitButtonSizeVariants,\n\t\t\tdisabled: {\n\t\t\t\ttrue: \"pointer-events-none\",\n\t\t\t\tfalse: \"\",\n\t\t\t},\n\t\t},\n\t\tcompoundVariants: [\n\t\t\t{\n\t\t\t\tvariant: \"filled\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"tonal\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"elevated\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38] shadow-none\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"outlined\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"text-m3-on-surface/[0.38] border-m3-on-surface/[0.12]\",\n\t\t\t},\n\t\t],\n\t\tdefaultVariants: {\n\t\t\tvariant: \"filled\",\n\t\t\tsize: \"sm\",\n\t\t\tdisabled: false,\n\t\t},\n\t},\n);\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { BUTTON_TYPOGRAPHY_TOKENS } from \"../button/button-tokens\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tLEADING_ICON_SIZE_FOR_SIZE,\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonLeadingProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonLeadingComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonLeadingProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\ticon,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tasChild = false,\n\t\t\tonClick,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst typographyClass =\n\t\t\tBUTTON_TYPOGRAPHY_TOKENS[actualSize] ?? BUTTON_TYPOGRAPHY_TOKENS.sm;\n\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\t// Outer corner is always a full pill (50% of height)\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Format: TL TR BR BL\n\t\t// Left outer corners are fully rounded, right inner corners animate\n\t\tconst borderRadius = `${outerRadius}px ${innerCornerRadius}px ${innerCornerRadius}px ${outerRadius}px`;\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (disabled) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[disabled, onClick],\n\t\t);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\tconst leadingIconSize = LEADING_ICON_SIZE_FOR_SIZE[actualSize];\n\n\t\tconst labelContent = asChild\n\t\t\t? (\n\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t}>\n\t\t\t\t).props.children\n\t\t\t: children;\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<StateLayer\n\t\t\t\t\thovered={isHovered}\n\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\tpressed={isPressed}\n\t\t\t\t/>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{icon && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden [&_.md-icon]:text-[length:inherit]!\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: leadingIconSize,\n\t\t\t\t\t\t\twidth: leadingIconSize,\n\t\t\t\t\t\t\theight: leadingIconSize,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t{labelContent && (\n\t\t\t\t\t<span className=\"inline-flex items-center h-full gap-[inherit]\">\n\t\t\t\t\t\t{labelContent}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tsplitButtonVariants({\n\t\t\t\tvariant: actualVariant,\n\t\t\t\tsize: actualSize,\n\t\t\t\tdisabled,\n\t\t\t}),\n\t\t\ttypographyClass,\n\t\t\tclassName,\n\t\t);\n\n\t\tconst mergedStyle = {\n\t\t\tpaddingInlineStart: tokens.leadingPadding.start,\n\t\t\tpaddingInlineEnd: tokens.leadingPadding.end,\n\t\t\tgap: \"8px\",\n\t\t\tborderRadius,\n\t\t\t...(style as React.CSSProperties),\n\t\t};\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t{asChild ? (\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Slot>\n\t\t\t\t) : (\n\t\t\t\t\t<m.button\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpaddingInlineStart: tokens.leadingPadding.start,\n\t\t\t\t\t\t\tpaddingInlineEnd: tokens.leadingPadding.end,\n\t\t\t\t\t\t\tgap: \"8px\",\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t</m.button>\n\t\t\t\t)}\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonLeadingComponent.displayName = \"SplitButtonLeading\";\n\nexport const SplitButtonLeading = React.memo(SplitButtonLeadingComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => <SplitButtonLeading ref={ref} variant=\"filled\" {...props} />);\nFilledSplitButtonLeading.displayName = \"FilledSplitButtonLeading\";\n\nexport const TonalSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => <SplitButtonLeading ref={ref} variant=\"tonal\" {...props} />);\nTonalSplitButtonLeading.displayName = \"TonalSplitButtonLeading\";\n\nexport const ElevatedSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonLeading ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonLeading.displayName = \"ElevatedSplitButtonLeading\";\n\nexport const OutlinedSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonLeading ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonLeading.displayName = \"OutlinedSplitButtonLeading\";\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { domMax, LazyMotion, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Icon } from \"../../icon\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tSPLIT_BUTTON_CHEVRON_SPRING,\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonTrailingProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonTrailingComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonTrailingProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\tchecked,\n\t\t\tonCheckedChange,\n\t\t\ticon,\n\t\t\tdisabled,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst prefersReducedMotion = useReducedMotion();\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Format: TL TR BR BL\n\t\t// If checked (menu open), it morphs into a full circle (pill)\n\t\t// If unchecked, the left inner corners are animated, right outer are pill\n\t\tconst borderRadius = checked\n\t\t\t? `${outerRadius}px ${outerRadius}px ${outerRadius}px ${outerRadius}px`\n\t\t\t: `${innerCornerRadius}px ${outerRadius}px ${outerRadius}px ${innerCornerRadius}px`;\n\n\t\tconst handleToggle = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tonCheckedChange(!checked);\n\t\t\t}\n\t\t}, [disabled, checked, onCheckedChange]);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<StateLayer\n\t\t\t\t\thovered={isHovered}\n\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\tpressed={isPressed}\n\t\t\t\t/>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<m.div\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\trotate: checked ? 180 : 0,\n\t\t\t\t\t\tx: checked ? 0 : tokens.opticalCenterOffset,\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tprefersReducedMotion\n\t\t\t\t\t\t\t? { duration: 0 }\n\t\t\t\t\t\t\t: SPLIT_BUTTON_CHEVRON_SPRING\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0\"\n\t\t\t\t>\n\t\t\t\t\t{icon ?? (\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tname=\"arrow_drop_down\"\n\t\t\t\t\t\t\tsize={tokens.trailingIconSize}\n\t\t\t\t\t\t\topticalSize={24}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</m.div>\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tsplitButtonVariants({\n\t\t\t\tvariant: actualVariant,\n\t\t\t\tsize: actualSize,\n\t\t\t\tdisabled,\n\t\t\t}),\n\t\t\tclassName,\n\t\t);\n\n\t\tconst mergedStyle = {\n\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\tborderRadius,\n\t\t\t...(style as React.CSSProperties),\n\t\t};\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t{asChild ? (\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-expanded={checked}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Slot>\n\t\t\t\t) : (\n\t\t\t\t\t<m.button\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-expanded={checked}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\t\t\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t</m.button>\n\t\t\t\t)}\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonTrailingComponent.displayName = \"SplitButtonTrailing\";\n\nexport const SplitButtonTrailing = React.memo(SplitButtonTrailingComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"filled\" {...props} />\n));\nFilledSplitButtonTrailing.displayName = \"FilledSplitButtonTrailing\";\n\nexport const TonalSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => <SplitButtonTrailing ref={ref} variant=\"tonal\" {...props} />);\nTonalSplitButtonTrailing.displayName = \"TonalSplitButtonTrailing\";\n\nexport const ElevatedSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonTrailing.displayName = \"ElevatedSplitButtonTrailing\";\n\nexport const OutlinedSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonTrailing.displayName = \"OutlinedSplitButtonTrailing\";\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonTrailingUncheckableProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonTrailingUncheckableComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonTrailingUncheckableProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\ticon,\n\t\t\tdisabled,\n\t\t\tonClick,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Uncheckable variant always has the asymmetric shape\n\t\tconst borderRadius = `${innerCornerRadius}px ${outerRadius}px ${outerRadius}px ${innerCornerRadius}px`;\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\t\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\t\t\t\t...style,\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tsplitButtonVariants({\n\t\t\t\t\t\t\tvariant: actualVariant,\n\t\t\t\t\t\t\tsize: actualSize,\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t\t<StateLayer\n\t\t\t\t\t\thovered={isHovered}\n\t\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\t\tpressed={isPressed}\n\t\t\t\t\t/>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tanimate={{ x: tokens.opticalCenterOffset }}\n\t\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: tokens.trailingIconSize,\n\t\t\t\t\t\t\theight: tokens.trailingIconSize,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</m.div>\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonTrailingUncheckableComponent.displayName =\n\t\"SplitButtonTrailingUncheckable\";\n\nexport const SplitButtonTrailingUncheckable = React.memo(\n\tSplitButtonTrailingUncheckableComponent,\n);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"filled\" {...props} />\n));\nFilledSplitButtonTrailingUncheckable.displayName =\n\t\"FilledSplitButtonTrailingUncheckable\";\n\nexport const TonalSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"tonal\" {...props} />\n));\nTonalSplitButtonTrailingUncheckable.displayName =\n\t\"TonalSplitButtonTrailingUncheckable\";\n\nexport const ElevatedSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonTrailingUncheckable.displayName =\n\t\"ElevatedSplitButtonTrailingUncheckable\";\n\nexport const OutlinedSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonTrailingUncheckable.displayName =\n\t\"OutlinedSplitButtonTrailingUncheckable\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/ui/loading-indicator.tsx","../src/ui/progress-indicator/utils.ts","../src/ui/progress-indicator/circular.tsx","../src/ui/progress-indicator/hooks.ts","../src/ui/progress-indicator/linear-flat.tsx","../src/ui/progress-indicator/linear-wavy.tsx","../src/ui/progress-indicator/linear.tsx","../src/ui/progress-indicator/index.tsx","../src/ui/ripple.tsx","../src/ui/shared/motion-tokens.ts","../src/ui/shared/constants.ts","../src/ui/shared/touch-target.tsx","../src/ui/buttons/button/button-tokens.ts","../src/ui/buttons/button/button.tsx","../src/ui/buttons/button-distribute/button-distribute-tokens.ts","../src/ui/buttons/button-distribute/use-distribute-weights.ts","../src/ui/buttons/button-distribute/button-distribute.tsx","../src/ui/icon.tsx","../src/ui/buttons/button-group/button-group-tokens.ts","../src/ui/buttons/button-group/button-group-defaults.ts","../src/ui/buttons/button-group/button-group.tsx","../src/ui/buttons/fabs/extended-fab/extended-fab.tsx","../src/ui/buttons/fabs/fab/fab.tsx","../src/ui/buttons/fabs/fab-menu/fab-menu.tsx","../src/ui/buttons/icon-button/icon-button.tsx","../src/ui/buttons/split-button/split-button-context.ts","../src/ui/buttons/split-button/split-button.tsx","../src/ui/shared/state-layer.tsx","../src/ui/buttons/split-button/split-button-tokens.ts","../src/ui/buttons/split-button/split-button-variants.ts","../src/ui/buttons/split-button/split-button-leading.tsx","../src/ui/buttons/split-button/split-button-trailing.tsx","../src/ui/buttons/split-button/split-button-trailing-uncheckable.tsx"],"names":["React","IndeterminateSvg","DeterminateSvg","React2","jsx","jsxs","React3","React4","FlatLinearTrack","Fragment","m","React5","WavyLinearTrack","React6","LazyMotion","domMax","React7","React8","RippleItem","animate","React9","_a","_b","useMotionValue","AnimatePresence","React10","baseWeights","result","expandAmount","React11","React12","cornerRadius","React13","AnimatedCheckLabel","React14","Slot","SIZE_ICON","MORPH_RADIUS","COLOR_CLASSES","React15","useReducedMotion","React17","React18","React19","React20","React21","React22","React23"],"mappings":"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","file":"buttons.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Loading Indicator\n//\n// Spec references:\n// • Loading Indicator Overview (190326 PDF)\n// • Loading Indicator Specs (190326 PDF)\n// • Loading Indicator Accessibility (190326 PDF)\n// • LoadingIndicator.kt (Android reference)\n//\n// Two operational modes:\n// 1. Indeterminate — no `progress` prop → 7-shape morph + SMIL rotation loop\n// 2. Determinate — `progress` (0-1) → Circle→SoftBurst morph + counterclockwise rotation\n//\n// Responsive sizing: strictly [24dp, 240dp]. Container/indicator ratio is preserved.\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ─── Indeterminate: Shape & Rotation Keyframe Data (from official MD3 SVG) ──\nconst SHAPE_KEY_TIMES =\n\t\"0; 0.14; 0.14; 0.29; 0.29; 0.43; 0.43; 0.57; 0.57; 0.71; 0.71; 0.86; 0.86; 1\";\n\nconst SHAPE_KEY_SPLINES = [\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n].join(\"; \");\n\n// 7 MD3 morphing shapes, each repeated twice for a smooth hold-and-morph\nconst SHAPE_VALUES = [\n\t\"M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z\",\n\t\"M20.3 8.6 21.1 8 22 7.6 23 7.3 23 7.3 24 7.2 25 7.3 25.9 7.5 26.8 8 27.6 8.6 28.4 9.1 28.4 9.1 29.3 9.6 30.3 9.8 31.3 9.9 32.3 10 33.3 10.2 34.2 10.6 34.2 10.6 35 11.2 35.7 11.9 36.3 12.7 36.7 13.6 36.9 14.6 37.2 15.5 37.2 15.5 37.6 16.5 38.2 17.3 38.9 18 39.6 18.7 40.2 19.5 40.6 20.4 40.6 20.4 40.9 21.3 41 22.3 40.9 23.3 40.6 24.3 40.2 25.2 39.8 26.1 39.8 26.1 39.5 27 39.4 28 39.5 29 39.6 30 39.5 31 39.3 32 39.3 32 38.9 32.9 38.3 33.7 37.6 34.4 36.8 35 35.9 35.4 35 35.8 35 35.8 34.1 36.3 33.4 37 32.9 37.9 32.3 38.7 31.6 39.4 30.8 40 30.8 40 29.9 40.4 28.9 40.7 27.9 40.8 27 40.7 26 40.4 25 40.1 25 40.1 24 40 23 40.1 22.1 40.4 21.1 40.7 20.1 40.8 19.1 40.7 19.1 40.7 18.2 40.5 17.3 40 16.4 39.5 15.7 38.8 15.2 37.9 14.6 37.1 14.6 37.1 13.9 36.4 13.1 35.8 12.2 35.4 11.3 35 10.5 34.4 9.7 33.8 9.7 33.8 9.1 32.9 8.7 32 8.5 31.1 8.4 30.1 8.5 29.1 8.6 28.1 8.6 28.1 8.5 27.1 8.3 26.1 7.8 25.2 7.4 24.3 7.1 23.4 7 22.4 7 22.4 7.1 21.4 7.3 20.4 7.8 19.5 8.3 18.7 9.1 18 9.8 17.3 9.8 17.3 10.4 16.5 10.8 15.6 11 14.6 11.3 13.7 11.7 12.8 12.2 11.9 12.2 11.9 12.9 11.2 13.8 10.7 14.7 10.2 15.6 10 16.6 9.9 17.6 9.8 17.6 9.8 18.6 9.6 19.5 9.2Z\",\n\t\"M18.6 9.6 19.5 9.2 20.3 8.6 21.1 8 22 7.6 23 7.3 24 7.2 25 7.3 25.9 7.5 26.8 8 27.6 8.6 28.4 9.1 29.3 9.6 30.3 9.8 31.3 9.9 32.3 10 33.3 10.2 34.2 10.6 35 11.2 35.7 11.9 36.3 12.7 36.7 13.6 36.9 14.6 37.2 15.5 37.6 16.4 38.2 17.3 38.9 18 39.6 18.7 40.2 19.5 40.6 20.4 40.9 21.3 41 22.3 40.9 23.3 40.6 24.3 40.2 25.2 39.8 26.1 39.5 27 39.4 28 39.5 29 39.6 30 39.5 31 39.3 32 38.9 32.9 38.3 33.7 37.6 34.4 36.8 35 35.9 35.4 35 35.8 34.1 36.3 33.4 37 32.9 37.9 32.3 38.7 31.6 39.4 30.8 40 29.9 40.4 28.9 40.7 27.9 40.8 27 40.7 26 40.4 25 40.1 24 40 23 40.1 22.1 40.4 21.1 40.7 20.1 40.8 19.1 40.7 18.2 40.5 17.3 40 16.4 39.5 15.7 38.8 15.2 37.9 14.6 37.1 13.9 36.4 13.1 35.8 12.2 35.4 11.3 35 10.5 34.4 9.7 33.8 9.1 32.9 8.7 32 8.5 31.1 8.4 30.1 8.5 29.1 8.6 28.1 8.5 27.1 8.3 26.1 7.8 25.2 7.4 24.3 7.1 23.4 7 22.4 7.1 21.4 7.3 20.4 7.8 19.5 8.3 18.7 9.1 18 9.8 17.3 10.4 16.5 10.8 15.6 11 14.6 11.3 13.7 11.7 12.8 12.2 11.9 12.9 11.2 13.8 10.7 14.7 10.2 15.6 10 16.6 9.9 17.6 9.8Z\",\n\t\"M18.6 9.9 19.5 9.4 20.3 8.8 21.1 8.2 22 7.8 23 7.6 23.9 7.5 24.9 7.6 25.9 7.8 26.8 8.2 27.6 8.7 28.5 9.3 29.3 9.9 30.1 10.5 30.9 11 31.7 11.6 32.5 12.2 33.3 12.8 33.7 13.1 34.1 13.3 34.9 13.9 35.7 14.5 36.6 15 37.4 15.6 38.2 16.2 39 16.8 39.7 17.5 40.2 18.3 40.7 19.2 40.9 20.1 41 21.1 40.9 22.1 40.7 23.1 40.3 24 40 24.9 39.7 25.9 39.4 26.8 39 27.8 38.7 28.7 38.4 29.6 38.1 30.6 37.8 31.5 37.5 32.5 37.2 33.4 36.9 34.4 36.6 35.3 36.2 36.2 35.7 37.1 35 37.8 34.3 38.4 33.4 38.9 32.5 39.3 31.5 39.5 30.5 39.5 30 39.5 29.5 39.5 28.5 39.5 27.5 39.5 26.5 39.5 25.5 39.4 24.5 39.4 23.6 39.4 22.6 39.4 21.6 39.5 20.6 39.5 19.6 39.5 18.6 39.5 17.6 39.5 16.6 39.5 15.6 39.3 14.7 39 13.8 38.5 13.1 37.9 12.4 37.2 11.9 36.3 11.5 35.4 11.2 34.5 10.9 33.5 10.6 32.6 10.3 31.6 10 30.7 9.7 29.7 9.3 28.8 9 27.9 8.7 26.9 8.4 26 8 25 7.7 24.1 7.4 23.2 7.1 22.2 7.1 21.7 7 21.2 7.1 20.2 7.3 19.3 7.7 18.4 8.3 17.5 8.9 16.8 9.7 16.2 10.5 15.6 11.4 15.1 12.2 14.5 13 14 13.8 13.4 14.6 12.8 15.4 12.3 16.2 11.7 17 11.1 17.8 10.5Z\",\n\t\"M15.4 12.3 16.2 11.7 17 11.1 17.8 10.5 18.6 9.9 19.5 9.4 20.3 8.8 21.1 8.3 22 7.8 23 7.6 23.9 7.5 24.9 7.6 25.9 7.8 26.8 8.2 27.6 8.7 28.5 9.3 29.3 9.9 30.1 10.5 30.9 11 31.7 11.6 32.5 12.2 33.3 12.8 34.1 13.3 34.9 13.9 35.7 14.5 36.6 15 37.4 15.6 38.2 16.2 39 16.8 39.7 17.5 40.2 18.3 40.7 19.2 40.9 20.1 41 21.1 40.9 22.1 40.7 23.1 40.3 24 40 24.9 39.7 25.9 39.4 26.8 39 27.8 38.7 28.7 38.4 29.6 38.1 30.6 37.8 31.5 37.5 32.5 37.2 33.4 36.9 34.4 36.6 35.3 36.2 36.2 35.7 37.1 35 37.8 34.3 38.4 33.4 38.9 32.5 39.3 31.5 39.4 30.5 39.5 29.5 39.5 28.5 39.5 27.5 39.5 26.5 39.5 25.5 39.4 24.5 39.4 23.6 39.4 22.6 39.4 21.6 39.5 20.6 39.5 19.6 39.5 18.6 39.5 17.6 39.5 16.6 39.5 15.6 39.3 14.7 39 13.8 38.5 13.1 37.9 12.4 37.2 11.9 36.3 11.5 35.4 11.2 34.5 10.9 33.5 10.6 32.6 10.3 31.6 10 30.7 9.7 29.7 9.3 28.8 9 27.9 8.7 26.9 8.4 26 8 25 7.7 24.1 7.4 23.2 7.1 22.2 7 21.2 7.1 20.2 7.3 19.3 7.7 18.4 8.3 17.5 8.9 16.8 9.7 16.2 10.5 15.6 11.4 15.1 12.2 14.5 13 14 13.8 13.4 14.6 12.8Z\",\n\t\"M17 12.8 17.7 12.1 18.5 11.5 19.3 10.9 20.1 10.5 20.2 10.4 21.1 10 22 9.7 23 9.4 24 9.2 25 9 26 9 27 9 27.6 9.1 28 9.1 28.9 9.3 29.9 9.6 30.9 9.9 31.8 10.3 32.6 10.8 33.5 11.3 34.3 11.9 34.6 12.2 35 12.6 35.7 13.3 36.4 14.1 36.9 14.9 37.4 15.8 37.9 16.6 38.3 17.6 38.6 18.5 38.6 18.7 38.8 19.5 38.9 20.5 39 21.5 39 22.5 38.9 23.5 38.7 24.5 38.5 25.4 38.2 26.3 38.2 26.4 37.8 27.3 37.4 28.2 36.8 29.1 36.2 29.9 35.6 30.6 34.9 31.3 34.2 32 33.8 32.5 33.5 32.8 32.8 33.5 32.1 34.2 31.4 34.9 30.7 35.6 29.9 36.2 29.1 36.8 28.2 37.3 27.9 37.5 27.4 37.8 26.4 38.2 25.5 38.5 24.5 38.7 23.5 38.9 22.5 39 21.5 39 20.5 38.9 20.4 38.9 19.5 38.8 18.6 38.6 17.6 38.3 16.7 37.9 15.8 37.5 14.9 37 14.1 36.4 13.4 35.8 13.3 35.8 12.6 35.1 12 34.3 11.3 33.5 10.8 32.7 10.3 31.8 9.9 30.9 9.6 30 9.4 29.3 9.3 29 9.1 28 9 27 9 26 9 25 9.2 24 9.4 23 9.6 22.1 9.8 21.7 10 21.1 10.4 20.2 10.9 19.4 11.4 18.5 12.1 17.8 12.7 17 13.4 16.3 14.2 15.6 14.2 15.5 14.9 14.9 15.6 14.2 16.3 13.5Z\",\n\t\"M33.5 11.3 34.3 11.9 35 12.6 35.3 12.8 35.7 13.3 36.4 14.1 36.9 14.9 37.4 15.8 37.9 16.6 38.3 17.6 38.3 17.7 38.6 18.5 38.8 19.5 38.9 20.5 39 21.5 39 22.5 38.9 23.5 38.9 23.5 38.7 24.5 38.5 25.4 38.2 26.4 37.8 27.3 37.4 28.2 36.9 28.9 36.8 29.1 36.2 29.9 35.6 30.6 34.9 31.3 34.2 32 33.5 32.8 33.1 33.2 32.8 33.5 32.1 34.2 31.4 34.9 30.7 35.6 29.9 36.2 29.1 36.8 28.7 37 28.2 37.3 27.4 37.8 26.4 38.2 25.5 38.5 24.5 38.7 23.5 38.9 23.3 38.9 22.5 39 21.5 39 20.5 38.9 19.5 38.8 18.6 38.6 17.6 38.3 17.6 38.3 16.7 37.9 15.8 37.5 14.9 37 14.1 36.4 13.3 35.8 12.7 35.2 12.6 35.1 12 34.3 11.3 33.5 10.8 32.7 10.3 31.8 9.9 30.9 9.7 30.3 9.6 29.9 9.3 29 9.1 28 9 27 9 26 9 25 9.1 24.5 9.2 24 9.4 23 9.6 22.1 10 21.1 10.4 20.2 10.9 19.4 11.1 19.1 11.5 18.5 12.1 17.7 12.7 17 13.5 16.3 14.2 15.6 14.9 14.9 14.9 14.8 15.6 14.2 16.3 13.5 17 12.8 17.7 12.1 18.5 11.5 19.3 11 19.3 10.9 20.2 10.4 21.1 10 22 9.7 23 9.4 24 9.2 24.7 9.1 25 9 26 9 27 9 28 9.1 28.9 9.3 29.9 9.6 30.4 9.7 30.9 9.9 31.8 10.3 32.6 10.8Z\",\n\t\"M33.2 11.1 34.2 11.2 35.1 11.4 36 11.9 36.6 12.7 36.8 13.7 36.9 14.7 36.9 15.7 37 16.7 37.1 17.7 37.3 18.6 37.9 19.4 38.5 20.2 39.2 20.9 39.8 21.7 40.5 22.4 40.9 23.3 41 24.3 40.7 25.2 40.1 26 39.4 26.8 38.8 27.5 38.1 28.3 37.5 29.1 37.1 30 37 31 37 31.9 36.9 32.9 36.8 33.9 36.7 34.9 36.2 35.8 35.5 36.4 34.5 36.8 33.6 36.8 32.6 36.9 31.6 37 30.6 37.1 29.6 37.2 28.8 37.7 28 38.4 27.3 39 26.5 39.7 25.8 40.3 24.9 40.8 23.9 41 23 40.8 22.1 40.2 21.4 39.6 20.6 38.9 19.9 38.3 19.1 37.6 18.3 37.2 17.3 37 16.3 37 15.3 36.9 14.3 36.8 13.3 36.7 12.4 36.4 11.7 35.7 11.3 34.8 11.2 33.8 11.1 32.8 11 31.8 11 30.8 10.9 29.9 10.4 29 9.8 28.2 9.1 27.5 8.5 26.7 7.8 26 7.3 25.1 7 24.2 7.1 23.2 7.6 22.3 8.2 21.6 8.9 20.8 9.5 20.1 10.2 19.3 10.7 18.5 10.9 17.5 11 16.6 11.1 15.6 11.1 14.6 11.2 13.6 11.5 12.6 12.1 11.9 13 11.4 13.9 11.2 14.9 11.1 15.9 11 16.9 11 17.9 10.9 18.8 10.6 19.6 10 20.4 9.3 21.1 8.6 21.9 8 22.6 7.4 23.6 7 24.6 7.1 25.5 7.5 26.2 8.1 27 8.7 27.7 9.4 28.5 10 29.3 10.6 30.2 10.9 31.2 11 32.2 11.1Z\",\n\t\"M27.7 9.4 28.5 10 29.3 10.6 30.2 10.9 31.2 11 32.2 11.1 33.2 11.1 34.2 11.2 35.1 11.4 36 11.9 36.6 12.7 36.8 13.7 36.9 14.7 36.9 15.7 37 16.7 37.1 17.7 37.3 18.6 37.9 19.4 38.5 20.2 39.2 20.9 39.8 21.7 40.5 22.4 40.9 23.3 41 24.3 40.7 25.2 40.1 26 39.4 26.8 38.8 27.5 38.1 28.3 37.5 29.1 37.1 30 37 31 37 31.9 36.9 32.9 36.8 33.9 36.7 34.9 36.2 35.8 35.5 36.4 34.5 36.8 33.6 36.9 32.6 36.9 31.6 37 30.6 37.1 29.6 37.2 28.8 37.7 28 38.4 27.3 39 26.5 39.7 25.8 40.3 24.9 40.8 23.9 41 23 40.8 22.1 40.2 21.4 39.6 20.6 38.9 19.9 38.3 19.1 37.6 18.3 37.2 17.3 37 16.3 37 15.3 36.9 14.3 36.8 13.3 36.7 12.4 36.4 11.7 35.7 11.3 34.8 11.2 33.8 11.1 32.8 11 31.8 11 30.8 10.9 29.9 10.4 29 9.8 28.2 9.1 27.5 8.5 26.7 7.8 26 7.3 25.1 7 24.2 7.1 23.2 7.6 22.3 8.2 21.6 8.9 20.8 9.5 20.1 10.2 19.3 10.7 18.5 10.9 17.5 11 16.5 11.1 15.6 11.1 14.6 11.2 13.6 11.5 12.6 12.1 11.9 13 11.4 13.9 11.2 14.9 11.1 15.9 11 16.9 11 17.9 10.9 18.8 10.6 19.6 10 20.4 9.3 21.1 8.6 21.9 8 22.6 7.4 23.6 7 24.6 7.1 25.5 7.5 26.2 8.1 27 8.7Z\",\n\t\"M27.9 10.6 28.8 10.3 29.8 10.1 30.8 10 31.8 10.1 32.7 10.3 33.7 10.6 34.6 11.1 34.8 11.3 35.4 11.7 36.1 12.4 36.7 13.1 37.2 14 37.6 14.9 37.9 15.9 38 16.9 38 17.9 37.8 18.8 37.5 19.8 37.1 20.7 36.8 21.6 36.5 22.6 36.4 23.6 36.4 24.4 36.4 24.6 36.5 25.5 36.8 26.5 37.2 27.4 37.6 28.3 37.8 29.3 38 30.3 38 31.3 37.8 32.3 37.6 33.2 37.2 34.1 36.6 35 36 35.7 35.3 36.4 34.4 37 34.1 37.2 33.6 37.4 32.6 37.8 31.6 37.9 30.6 38 29.7 37.9 28.7 37.7 27.8 37.3 26.8 36.9 25.9 36.6 24.9 36.4 23.9 36.4 22.9 36.4 22 36.6 21 37 20.1 37.4 20.1 37.4 19.2 37.7 18.2 37.9 17.2 38 16.2 37.9 15.3 37.7 14.3 37.4 13.4 36.9 12.6 36.3 11.9 35.6 11.3 34.9 10.8 34 10.4 33.1 10.1 32.1 10 31.1 10 30.6 10 30.1 10.2 29.2 10.5 28.2 10.9 27.3 11.2 26.4 11.5 25.4 11.6 24.4 11.6 23.4 11.5 22.5 11.2 21.5 10.8 20.6 10.4 19.7 10.2 18.7 10 17.7 10 16.7 10 16.6 10.2 15.7 10.4 14.8 10.8 13.9 11.4 13 12 12.3 12.7 11.6 13.6 11 14.4 10.6 15.4 10.2 16.4 10.1 17.4 10 18.3 10.1 19.3 10.3 20.2 10.7 20.9 11 21.2 11.1 22.1 11.4 23.1 11.6 24.1 11.6 25.1 11.6 26 11.4 27 11Z\",\n\t\"M36 35.7 35.3 36.4 34.4 37 33.6 37.4 32.6 37.8 31.6 37.9 30.6 38 29.7 37.9 28.7 37.7 27.8 37.3 26.8 36.9 25.9 36.6 24.9 36.4 23.9 36.4 22.9 36.4 22 36.6 21 37 20.1 37.4 19.2 37.7 18.2 37.9 17.2 38 16.2 37.9 15.3 37.7 14.3 37.4 13.4 36.9 12.6 36.3 11.9 35.6 11.3 34.9 10.8 34 10.4 33.1 10.1 32.1 10 31.1 10 30.2 10.2 29.2 10.5 28.2 10.9 27.3 11.2 26.4 11.5 25.4 11.6 24.4 11.6 23.4 11.5 22.5 11.2 21.5 10.8 20.6 10.4 19.7 10.2 18.7 10 17.7 10 16.7 10.2 15.7 10.4 14.8 10.8 13.9 11.4 13 12 12.3 12.7 11.6 13.6 11 14.4 10.6 15.4 10.2 16.4 10.1 17.4 10 18.3 10.1 19.3 10.3 20.2 10.7 21.2 11.1 22.1 11.4 23.1 11.6 24.1 11.6 25.1 11.6 26 11.4 27 11 27.9 10.6 28.8 10.3 29.8 10.1 30.8 10 31.8 10.1 32.7 10.3 33.7 10.6 34.6 11.1 35.4 11.7 36.1 12.4 36.7 13.1 37.2 14 37.6 14.9 37.9 15.9 38 16.9 38 17.8 37.8 18.8 37.5 19.8 37.1 20.7 36.8 21.6 36.5 22.6 36.4 23.6 36.4 24.6 36.5 25.5 36.8 26.5 37.2 27.4 37.6 28.3 37.8 29.3 38 30.3 38 31.3 37.8 32.3 37.6 33.2 37.2 34.1 36.6 35Z\",\n\t\"M32.1 32.1 31.4 32.8 30.7 33.5 29.9 34.1 29.1 34.7 28.3 35.3 27.6 35.8 27.5 35.8 26.6 36.4 25.8 36.8 24.9 37.3 24 37.7 23.1 38 22.1 38.3 21.2 38.6 20.2 38.8 19.2 38.9 18.2 39 17.2 39 16.6 38.9 16.3 38.9 15.3 38.7 14.3 38.4 13.4 38 12.5 37.5 11.7 36.9 11.1 36.3 10.5 35.5 10 34.6 9.6 33.7 9.3 32.7 9.1 31.7 9.1 31.4 9 30.8 9 29.8 9.1 28.8 9.2 27.8 9.4 26.8 9.7 25.9 10 24.9 10.3 24 10.7 23.1 11.2 22.2 11.6 21.4 12.2 20.5 12.2 20.4 12.7 19.7 13.3 18.9 13.9 18.1 14.5 17.3 15.2 16.6 15.9 15.9 16.6 15.2 17.3 14.5 18.1 13.9 18.9 13.3 19.7 12.7 20.4 12.2 20.5 12.2 21.4 11.6 22.2 11.2 23.1 10.7 24 10.3 24.9 10 25.9 9.7 26.8 9.4 27.8 9.2 28.8 9.1 29.8 9 30.8 9 31.4 9.1 31.7 9.1 32.7 9.3 33.7 9.6 34.6 10 35.5 10.5 36.3 11.1 36.9 11.7 37.5 12.5 38 13.4 38.4 14.3 38.7 15.3 38.9 16.3 38.9 16.6 39 17.2 39 18.2 38.9 19.2 38.8 20.2 38.6 21.2 38.3 22.1 38 23.1 37.7 24 37.3 24.9 36.8 25.8 36.4 26.6 35.8 27.5 35.8 27.6 35.3 28.3 34.7 29.1 34.1 29.9 33.5 30.7 32.8 31.4Z\",\n\t\"M24.3 10.2 24.9 10 25.9 9.7 26.8 9.4 27.1 9.4 27.8 9.2 28.8 9.1 29.8 9 29.9 9 30.8 9 31.7 9.1 32.7 9.3 32.8 9.3 33.7 9.6 34.6 10 35.5 10.5 35.5 10.5 36.3 11.1 36.9 11.7 37.5 12.5 37.5 12.5 38 13.4 38.4 14.3 38.7 15.2 38.7 15.3 38.9 16.3 39 17.2 39 18.1 39 18.2 38.9 19.2 38.8 20.2 38.6 20.9 38.6 21.2 38.3 22.1 38 23.1 37.8 23.7 37.7 24 37.3 24.9 36.8 25.8 36.5 26.4 36.4 26.6 35.8 27.5 35.3 28.3 35 28.8 34.7 29.1 34.1 29.9 33.5 30.7 33.1 31.1 32.8 31.4 32.1 32.1 31.4 32.8 31.1 33.1 30.7 33.5 29.9 34.1 29.1 34.7 28.8 35 28.3 35.3 27.5 35.8 26.6 36.4 26.4 36.5 25.8 36.8 24.9 37.3 24 37.7 23.7 37.8 23.1 38 22.1 38.3 21.2 38.6 20.9 38.6 20.2 38.8 19.2 38.9 18.2 39 18.1 39 17.2 39 16.3 38.9 15.3 38.7 15.2 38.7 14.3 38.4 13.4 38 12.5 37.5 12.5 37.5 11.7 36.9 11.1 36.3 10.5 35.5 10.5 35.5 10 34.6 9.6 33.7 9.3 32.8 9.3 32.7 9.1 31.7 9 30.8 9 29.9 9 29.8 9.1 28.8 9.2 27.8 9.4 27.1 9.4 26.8 9.7 25.9 10 24.9 10.2 24.3 10.3 24 10.7 23.1 11.2 22.2 11.5 21.6 11.6 21.4 12.2 20.5 12.7 19.7 13 19.2 13.3 18.9 13.9 18.1 14.5 17.3 14.9 16.9 15.2 16.6 15.9 15.9 16.6 15.2 16.9 14.9 17.3 14.5 18.1 13.9 18.9 13.3 19.2 13 19.7 12.7 20.5 12.2 21.4 11.6 21.6 11.5 22.2 11.2 23.1 10.7 24 10.3Z\",\n\t\"M22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.3 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.4 38.9 26.2 39.6 27 40.2 27.7 40.5 28.6 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.8 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.6 9.1 21.8 8.4 21 7.8 20.3 7.5 19.4 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.2 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1 20.9 10.4 21.4 9.5 21.9 8.7Z\",\n].join(\";\");\n\nconst ROTATE_KEY_TIMES = \"0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1\";\nconst ROTATE_KEY_SPLINES = [\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n].join(\"; \");\nconst ROTATE_VALUES =\n\t\"0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24\";\n\n// ─── Determinate: Circle → SoftBurst path data (viewBox 4 4 40 40, cx=24, cy=24) ─\n// Circle: perfect circle, r≈17 → matches the contained indicator's visual weight\nconst DETERMINATE_CIRCLE =\n\t\"M24 7 C34.49 7 41 13.51 41 24 C41 34.49 34.49 41 24 41 C13.51 41 7 34.49 7 24 C7 13.51 13.51 7 24 7 Z\";\n\n// SoftBurst: shape 1 from the indeterminate sequence (same visual as the spec)\nconst DETERMINATE_SOFT_BURST =\n\t\"M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\nexport interface LoadingIndicatorProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n\t/**\n\t * Visual style variant.\n\t * - `uncontained` (default): bare indicator, no container background\n\t * - `contained`: indicator inside a circular container\n\t * (MD3 spec: 38dp container / 24dp active indicator)\n\t */\n\tvariant?: \"uncontained\" | \"contained\";\n\n\t/**\n\t * Indicator size in dp (pixels). Clamped to the MD3 spec range [24dp, 240dp].\n\t * Defaults to 48dp.\n\t *\n\t * Size guidelines:\n\t * - Small displays: 24–48dp\n\t * - Medium displays: 48–80dp\n\t * - Large/XL displays (desktop): up to 240dp\n\t *\n\t * @default 48\n\t */\n\tsize?: number;\n\n\t/**\n\t * Determinate progress value between 0 and 1.\n\t * - **Omit** (default) for indeterminate mode: continuous morphing loop.\n\t * - **Provide** for determinate mode: Circle→SoftBurst morph + counterclockwise rotation.\n\t *\n\t * @example `progress={0.7}` shows 70% progress\n\t */\n\tprogress?: number;\n\n\t/**\n\t * Active indicator color override. Falls back to MD3 system color tokens.\n\t * Supports any valid CSS color value or CSS variable.\n\t * @example \"#ff5722\" | \"var(--brand-color)\"\n\t */\n\tcolor?: string;\n\n\t/**\n\t * Required accessible label describing what is loading.\n\t * @example \"Loading news article\"\n\t */\n\t\"aria-label\": string;\n}\n\n// ─── Indeterminate SVG (pure SMIL, zero JS overhead) ─────────────────────────\nconst IndeterminateSvg = React.memo(function IndeterminateSvg({\n\tsize,\n}: {\n\tsize: number;\n}) {\n\t// Delays <animate> tag insertion by 1 frame via requestAnimationFrame\n\t// to bypass Chromium SMIL freezing bugs when parent container executes CSS transforms/animations.\n\n\tconst [ready, setReady] = React.useState(false);\n\tReact.useEffect(() => {\n\t\tconst raf = requestAnimationFrame(() => setReady(true));\n\t\treturn () => cancelAnimationFrame(raf);\n\t}, []);\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"4 4 40 40\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tfill=\"currentColor\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t>\n\t\t\t<path d={SHAPE_VALUES.split(\";\")[0]}>\n\t\t\t\t{ready && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\tdur=\"5s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tkeySplines={SHAPE_KEY_SPLINES}\n\t\t\t\t\t\t\tkeyTimes={SHAPE_KEY_TIMES}\n\t\t\t\t\t\t\tvalues={SHAPE_VALUES}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tattributeType=\"XML\"\n\t\t\t\t\t\t\ttype=\"rotate\"\n\t\t\t\t\t\t\tdur=\"5s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tkeySplines={ROTATE_KEY_SPLINES}\n\t\t\t\t\t\t\tkeyTimes={ROTATE_KEY_TIMES}\n\t\t\t\t\t\t\tvalues={ROTATE_VALUES}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</path>\n\t\t</svg>\n\t);\n});\n\n// ─── Determinate SVG (React-controlled morph + counterclockwise rotation) ────\n// Uses CSS transition for smooth d attribute changes where supported (Chromium),\n// with a style-based transform fallback for rotation.\nconst DeterminateSvg = React.memo(function DeterminateSvg({\n\tsize,\n\tprogress,\n}: {\n\tsize: number;\n\tprogress: number;\n}) {\n\t// Clamp and interpolate progress between 0 (circle) and 1 (soft burst)\n\tconst p = Math.min(1, Math.max(0, progress));\n\n\t// Counterclockwise rotation: 0° at 0% → -180° at 100% (per Android spec)\n\tconst rotation = -180 * p;\n\n\t// The path morphs from circle (p=0) to soft-burst (p=1).\n\t// We use a SMIL animate with begin=\"indefinite\" that we snap to progress.\n\t// For maximum compatibility, render the correct endpoint shape based on progress,\n\t// relying on the CSS `d` property transition for smooth animation.\n\tconst pathD = p < 0.5 ? DETERMINATE_CIRCLE : DETERMINATE_SOFT_BURST;\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"4 4 40 40\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tfill=\"currentColor\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tstyle={{\n\t\t\t\ttransform: `rotate(${rotation}deg)`,\n\t\t\t\ttransition: \"transform 0.3s ease\",\n\t\t\t}}\n\t\t>\n\t\t\t<path d={pathD} style={{ transition: \"d 0.3s ease\" }} />\n\t\t</svg>\n\t);\n});\n\n// ─── Main Component ───────────────────────────────────────────────────────────\nexport const LoadingIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tLoadingIndicatorProps\n>(\n\t(\n\t\t{\n\t\t\tvariant = \"uncontained\",\n\t\t\tsize = 48,\n\t\t\tprogress,\n\t\t\tcolor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isContained = variant === \"contained\";\n\t\tconst isDeterminate = progress !== undefined;\n\n\t\t// MD3 spec: strict size range [24dp, 240dp]\n\t\tconst clampedSize = Math.min(240, Math.max(24, size));\n\n\t\t// Proportional scaling based on the default 48dp spec size\n\t\tconst scaleFactor = clampedSize / 48;\n\n\t\t// MD3 spec: contained → 38dp container, 24dp active indicator\n\t\t// Ratio: 38/24 = 1.583 — preserved at all sizes\n\t\tconst containerSize = isContained ? 38 * scaleFactor : undefined;\n\t\tconst indicatorSize = isContained ? 24 * scaleFactor : clampedSize;\n\n\t\t// MD3 color tokens (with per-variant defaults)\n\t\tconst activeColor = isContained\n\t\t\t? (color ?? \"var(--md-sys-color-indicator-contained-active)\")\n\t\t\t: (color ?? \"var(--md-sys-color-indicator-active)\");\n\n\t\t// aria-valuenow is only set in determinate mode (per ARIA spec)\n\t\tconst ariaNow = isDeterminate\n\t\t\t? Math.round(Math.min(1, Math.max(0, progress)) * 100)\n\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\taria-valuenow={ariaNow}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: clampedSize,\n\t\t\t\t\theight: clampedSize,\n\t\t\t\t\tcolor: activeColor,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{isContained ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex items-center justify-center rounded-full\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: containerSize,\n\t\t\t\t\t\t\theight: containerSize,\n\t\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\t\t\"var(--md-sys-color-indicator-contained-container)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\t<DeterminateSvg size={indicatorSize} progress={progress} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<IndeterminateSvg size={indicatorSize} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : isDeterminate ? (\n\t\t\t\t\t<DeterminateSvg size={indicatorSize} progress={progress} />\n\t\t\t\t) : (\n\t\t\t\t\t<IndeterminateSvg size={indicatorSize} />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nLoadingIndicator.displayName = \"LoadingIndicator\";\n","export function easeInOutCubic(x: number): number {\n\treturn x < 0.5 ? 4 * x * x * x : 1 - (-2 * x + 2) ** 3 / 2;\n}\n\nexport function generateWavyCircularPath(\n\tcenter: number,\n\tradius: number,\n\tamplitude: number,\n\twavelength: number,\n): string {\n\tconst circumference = 2 * Math.PI * radius;\n\tconst numWaves = Math.max(\n\t\t3,\n\t\tMath.round(circumference / Math.max(1, wavelength)),\n\t);\n\tconst steps = numWaves * 4;\n\tconst dt = (2 * Math.PI) / steps;\n\n\tconst rAt = (t: number) => radius + amplitude * Math.sin(numWaves * t);\n\tconst drAt = (t: number) => amplitude * numWaves * Math.cos(numWaves * t);\n\tconst xAt = (t: number) => center + rAt(t) * Math.cos(t);\n\tconst yAt = (t: number) => center + rAt(t) * Math.sin(t);\n\tconst dxAt = (t: number) => drAt(t) * Math.cos(t) - rAt(t) * Math.sin(t);\n\tconst dyAt = (t: number) => drAt(t) * Math.sin(t) + rAt(t) * Math.cos(t);\n\n\tlet d = \"\";\n\tconst tStart = 0;\n\n\tfor (let i = 0; i < steps; i++) {\n\t\tconst t0 = tStart + i * dt;\n\t\tconst t1 = tStart + (i + 1) * dt;\n\n\t\tconst scale = dt / 3;\n\t\tconst cp1x = xAt(t0) + scale * dxAt(t0);\n\t\tconst cp1y = yAt(t0) + scale * dyAt(t0);\n\t\tconst cp2x = xAt(t1) - scale * dxAt(t1);\n\t\tconst cp2y = yAt(t1) - scale * dyAt(t1);\n\n\t\tif (i === 0) d += `M ${xAt(t0).toFixed(2)} ${yAt(t0).toFixed(2)}`;\n\t\td += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${xAt(t1).toFixed(2)} ${yAt(t1).toFixed(2)}`;\n\t}\n\td += \" Z\";\n\treturn d;\n}\n\nexport function getSinePath(\n\tstartX: number,\n\tendX: number,\n\tphase: number,\n\twl: number,\n\tamp: number,\n) {\n\tif (startX >= endX) return \"\";\n\tlet d = \"\";\n\tconst step = amp === 0 ? Math.max(10, endX - startX) : 1;\n\n\tconst yStart = Math.sin(((startX + phase) / wl) * 2 * Math.PI) * amp;\n\td += `M ${startX.toFixed(2)} ${yStart.toFixed(2)}`;\n\n\tlet nextX = Math.ceil(startX / step) * step;\n\tif (nextX === startX) nextX += step;\n\n\twhile (nextX < endX) {\n\t\tconst y = Math.sin(((nextX + phase) / wl) * 2 * Math.PI) * amp;\n\t\td += ` L ${nextX.toFixed(2)} ${y.toFixed(2)}`;\n\t\tnextX += step;\n\t}\n\n\tconst yEnd = Math.sin(((endX + phase) / wl) * 2 * Math.PI) * amp;\n\td += ` L ${endX.toFixed(2)} ${yEnd.toFixed(2)}`;\n\n\treturn d;\n}\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { CircularProgressProps } from \"./types\";\nimport { generateWavyCircularPath } from \"./utils\";\n\nexport const CircularProgress = React.forwardRef<\n\tHTMLDivElement,\n\tCircularProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tsize = 48,\n\t\t\ttrackHeight = 4,\n\t\t\tshape = \"flat\",\n\t\t\tamplitude,\n\t\t\twavelength,\n\t\t\tgapSize = 4,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst radius = (size - trackHeight) / 2;\n\t\tconst center = size / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\tconst isWavy = shape === \"wavy\";\n\n\t\tconst BASELINE_SIZE = 48;\n\t\tconst scaleFactor = size / BASELINE_SIZE;\n\t\tconst effectiveAmplitude = React.useMemo(\n\t\t\t() => amplitude ?? 1.6 * scaleFactor,\n\t\t\t[amplitude, scaleFactor],\n\t\t);\n\t\tconst effectiveWavelength = React.useMemo(\n\t\t\t() => wavelength ?? 15 * scaleFactor,\n\t\t\t[wavelength, scaleFactor],\n\t\t);\n\n\t\tconst wavyActivePath = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisWavy\n\t\t\t\t\t? generateWavyCircularPath(\n\t\t\t\t\t\t\tcenter,\n\t\t\t\t\t\t\tradius,\n\t\t\t\t\t\t\teffectiveAmplitude,\n\t\t\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null,\n\t\t\t[isWavy, center, radius, effectiveAmplitude, effectiveWavelength],\n\t\t);\n\n\t\tconst circumference = React.useMemo(() => 2 * Math.PI * radius, [radius]);\n\t\tconst gapForTrack = React.useMemo(\n\t\t\t() => (gapSize + trackHeight) / circumference,\n\t\t\t[gapSize, trackHeight, circumference],\n\t\t);\n\t\tconst activeAngularFraction = isDeterminate ? clampedValue / 100 : 0;\n\n\t\tconst trackOffset = isDeterminate ? activeAngularFraction + gapForTrack : 0;\n\t\tconst trackLength = isDeterminate\n\t\t\t? Math.max(0.001, 1 - activeAngularFraction - 2 * gapForTrack)\n\t\t\t: 1;\n\n\t\tconst ActiveCircleElem = m.circle;\n\t\tconst ActivePathElem = m.path;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\theight={size}\n\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{ transform: \"rotate(-90deg)\", overflow: \"visible\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\tinitial={{ pathLength: trackLength, pathOffset: trackOffset }}\n\t\t\t\t\t\t\t\tanimate={{ pathLength: trackLength, pathOffset: trackOffset }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isDeterminate &&\n\t\t\t\t\t\t\t(isWavy ? (\n\t\t\t\t\t\t\t\t<ActivePathElem\n\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</svg>\n\n\t\t\t\t\t{!isDeterminate && (\n\t\t\t\t\t\t<m.svg\n\t\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\t\theight={size}\n\t\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\t\t\trotate: \"-90deg\",\n\t\t\t\t\t\t\t\ttransformOrigin: \"center\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tanimate={{ rotate: [\"-90deg\", \"270deg\"] }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\trotate: {\n\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\tease: \"linear\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tpathLength: [\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.1 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.75 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.1 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\trotate: [\n\t\t\t\t\t\t\t\t\t\t`${(0.1 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t\t`${(1.0 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t\t`${(1.1 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{isWavy ? (\n\t\t\t\t\t\t\t\t<ActivePathElem\n\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\tpathLength: [0.1, 0.75, 0.1],\n\t\t\t\t\t\t\t\t\t\trotate: [\"0deg\", \"90deg\", \"360deg\"],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\tpathLength: [0.1, 0.75, 0.1],\n\t\t\t\t\t\t\t\t\t\trotate: [\"0deg\", \"90deg\", \"360deg\"],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.svg>\n\t\t\t\t\t)}\n\t\t\t\t</LazyMotion>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCircularProgress.displayName = \"CircularProgress\";\n","import * as React from \"react\";\n\nexport function useContainerWidth() {\n\tconst [width, setWidth] = React.useState(0);\n\tconst observerRef = React.useRef<ResizeObserver | null>(null);\n\n\tconst ref = React.useCallback((node: HTMLDivElement | null) => {\n\t\tif (observerRef.current) {\n\t\t\tobserverRef.current.disconnect();\n\t\t\tobserverRef.current = null;\n\t\t}\n\n\t\tif (node) {\n\t\t\tconst obs = new ResizeObserver((entries) => {\n\t\t\t\tconst contentRect = entries[0].contentRect;\n\t\t\t\tsetWidth(contentRect.width);\n\t\t\t});\n\t\t\tobs.observe(node);\n\t\t\tobserverRef.current = obs;\n\t\t}\n\t}, []);\n\n\t// Cleanup on unmount\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (observerRef.current) {\n\t\t\t\tobserverRef.current.disconnect();\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn [ref, width] as const;\n}\n\nexport function useMergedRef<T>(\n\t...refs: (React.Ref<T> | undefined | null)[]\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t\t(ref as React.MutableRefObject<T | null>).current = node;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[refs],\n\t);\n}\n","import { m } from \"motion/react\";\nimport * as React from \"react\";\n\nexport const FlatLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\tcrawlerSpeed: number;\n}>(function FlatLinearTrack({\n\ttrackHeight,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\tcrawlerSpeed,\n}) {\n\tconst isDeterminate = value !== undefined;\n\tconst radius = trackHeight / 2;\n\tconst minActiveWidth = trackHeight;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: trackHeight, borderRadius: radius }}\n\t\t>\n\t\t\t{isDeterminate ? (\n\t\t\t\t<>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: trackColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, 0%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, ${value}%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\tminWidth: minActiveWidth,\n\t\t\t\t\t\t\t...(isRtl ? { right: 0 } : { left: 0 }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{ width: `${minActiveWidth}px` }}\n\t\t\t\t\t\tanimate={{ width: `${value}%` }}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: trackColor, borderRadius: radius }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: activeColor, borderRadius: radius }}\n\t\t\t\t\t\tinitial={{ left: \"-40%\", width: \"40%\" }}\n\t\t\t\t\t\tanimate={{ left: [\"-40%\", \"100%\"], width: [\"40%\", \"20%\", \"40%\"] }}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { animate, useAnimationFrame, useMotionValue } from \"motion/react\";\nimport * as React from \"react\";\nimport { useContainerWidth } from \"./hooks\";\nimport { easeInOutCubic, getSinePath } from \"./utils\";\n\nexport const WavyLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tsvgHeight: number;\n\tamplitude: number;\n\twavelength: number;\n\tindeterminateWavelength: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\twaveSpeed: number;\n\tcrawlerSpeed: number;\n\tdeterminateAnimation: \"md3\" | \"continuous\";\n\tindeterminateAnimation: \"md3\" | \"continuous\";\n\ttrackShape: \"flat\" | \"wavy\";\n}>(function WavyLinearTrack({\n\ttrackHeight,\n\tsvgHeight,\n\tamplitude,\n\twavelength,\n\tindeterminateWavelength,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\twaveSpeed,\n\tcrawlerSpeed,\n\tdeterminateAnimation,\n\tindeterminateAnimation,\n\ttrackShape,\n}) {\n\tconst isDeterminate = typeof value === \"number\";\n\tconst clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 100;\n\tconst titleId = React.useId();\n\n\tconst [containerRef, width] = useContainerWidth();\n\n\tconst activePathRef = React.useRef<SVGPathElement>(null);\n\tconst trackPathRef = React.useRef<SVGPathElement>(null);\n\n\tconst amplitudeMV = useMotionValue(amplitude);\n\tconst fractionMV = useMotionValue(isDeterminate ? clampedValue / 100 : 1);\n\n\tReact.useEffect(() => {\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = clampedValue / 100;\n\n\t\t\t// Handle Flattening Logic based on determinateAnimation prop\n\t\t\tlet targetAmp = amplitude;\n\t\t\tif (determinateAnimation === \"md3\") {\n\t\t\t\ttargetAmp = fraction <= 0.1 || fraction >= 0.95 ? 0 : amplitude;\n\t\t\t}\n\n\t\t\tanimate(amplitudeMV, targetAmp, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t\tanimate(fractionMV, fraction, { duration: 0.4, ease: [0.2, 0, 0, 1] });\n\t\t}\n\t}, [\n\t\tclampedValue,\n\t\tisDeterminate,\n\t\tamplitude,\n\t\tamplitudeMV,\n\t\tfractionMV,\n\t\tdeterminateAnimation,\n\t]);\n\n\tconst activeWavelength = Math.max(\n\t\t1,\n\t\tisDeterminate ? wavelength : indeterminateWavelength,\n\t);\n\tconst trackAmp = trackShape === \"wavy\" ? amplitude : 0;\n\n\tuseAnimationFrame((time) => {\n\t\tif (width === 0) return;\n\n\t\tconst currentAmp = amplitudeMV.get();\n\t\tconst phase = (time / 1000) * waveSpeed * activeWavelength;\n\t\tconst capWidth = trackHeight / 2;\n\n\t\tlet activePathD = \"\";\n\t\tlet trackD = \"\";\n\t\tconst totalGap = gapSize + trackHeight;\n\n\t\t// 1. DETERMINATE MODE\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = fractionMV.get();\n\t\t\tconst barHead = fraction * width;\n\n\t\t\tconst adjHead = Math.max(capWidth, Math.min(width - capWidth, barHead));\n\t\t\tconst adjTail = capWidth;\n\n\t\t\tif (fraction > 0 && adjHead - adjTail > 0.1) {\n\t\t\t\tactivePathD = getSinePath(\n\t\t\t\t\tadjTail,\n\t\t\t\t\tadjHead,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\tcurrentAmp,\n\t\t\t\t);\n\t\t\t} else if (fraction === 0) {\n\t\t\t\tactivePathD = `M ${capWidth} 0 L ${capWidth + 0.01} 0`;\n\t\t\t}\n\n\t\t\tconst trackStart = adjHead + totalGap;\n\t\t\tif (trackStart < width - capWidth) {\n\t\t\t\ttrackD = getSinePath(\n\t\t\t\t\ttrackStart,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// 2. INDETERMINATE MODE\n\t\telse {\n\t\t\tconst safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);\n\t\t\tconst activeLines: { tail: number; head: number }[] = [];\n\n\t\t\tif (indeterminateAnimation === \"continuous\") {\n\t\t\t\tconst cycle = 2000 / safeCrawlerSpeed;\n\t\t\t\tconst fraction = (time % cycle) / cycle;\n\t\t\t\tactiveLines.push({\n\t\t\t\t\ttail: easeInOutCubic(Math.max(0, fraction * 1.5 - 0.5)),\n\t\t\t\t\thead: easeInOutCubic(Math.min(1, fraction * 1.5)),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst cycle = 1750 / safeCrawlerSpeed;\n\t\t\t\tconst t = (time % cycle) * safeCrawlerSpeed;\n\n\t\t\t\tconst l1H = easeInOutCubic(Math.max(0, Math.min(1, t / 1000)));\n\t\t\t\tconst l1T = easeInOutCubic(Math.max(0, Math.min(1, (t - 250) / 1000)));\n\t\t\t\tconst l2H = easeInOutCubic(Math.max(0, Math.min(1, (t - 650) / 850)));\n\t\t\t\tconst l2T = easeInOutCubic(Math.max(0, Math.min(1, (t - 900) / 850)));\n\n\t\t\t\tactiveLines.push({ tail: l1T, head: l1H });\n\t\t\t\tactiveLines.push({ tail: l2T, head: l2H });\n\t\t\t}\n\n\t\t\tconst segments = activeLines\n\t\t\t\t.map((line) => {\n\t\t\t\t\tconst barTail = line.tail * width;\n\t\t\t\t\tconst barHead = line.head * width;\n\t\t\t\t\tconst adjTail = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, barTail),\n\t\t\t\t\t);\n\t\t\t\t\tconst adjHead = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, barHead),\n\t\t\t\t\t);\n\t\t\t\t\treturn { adjTail, adjHead };\n\t\t\t\t})\n\t\t\t\t.filter((seg) => seg.adjHead - seg.adjTail > 0.1);\n\n\t\t\tactivePathD = segments\n\t\t\t\t.map((seg) =>\n\t\t\t\t\tgetSinePath(\n\t\t\t\t\t\tseg.adjTail,\n\t\t\t\t\t\tseg.adjHead,\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tactiveWavelength,\n\t\t\t\t\t\tcurrentAmp,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\" \");\n\n\t\t\tlet currentTrackX = capWidth;\n\t\t\tfor (const seg of segments) {\n\t\t\t\tconst trackEnd = seg.adjTail - totalGap;\n\t\t\t\tif (trackEnd > currentTrackX) {\n\t\t\t\t\ttrackD += `${getSinePath(currentTrackX, trackEnd, phase, activeWavelength, trackAmp)} `;\n\t\t\t\t}\n\t\t\t\tcurrentTrackX = Math.max(currentTrackX, seg.adjHead + totalGap);\n\t\t\t}\n\t\t\tif (currentTrackX < width - capWidth) {\n\t\t\t\ttrackD += getSinePath(\n\t\t\t\t\tcurrentTrackX,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (activePathRef.current)\n\t\t\tactivePathRef.current.setAttribute(\"d\", activePathD);\n\t\tif (trackPathRef.current)\n\t\t\ttrackPathRef.current.setAttribute(\"d\", trackD.trim());\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: svgHeight }}\n\t\t>\n\t\t\t{width > 0 && (\n\t\t\t\t<svg\n\t\t\t\t\tclassName=\"absolute inset-0 w-full h-full\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\ttransform: isRtl ? \"scaleX(-1)\" : undefined,\n\t\t\t\t\t}}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t>\n\t\t\t\t\t<title id={titleId}>\n\t\t\t\t\t\t{isDeterminate\n\t\t\t\t\t\t\t? `Progress: ${clampedValue}%`\n\t\t\t\t\t\t\t: \"Indeterminate loading progress\"}\n\t\t\t\t\t</title>\n\t\t\t\t\t<g transform={`translate(0, ${svgHeight / 2})`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={trackPathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={trackColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={activePathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useMergedRef } from \"./hooks\";\nimport { FlatLinearTrack } from \"./linear-flat\";\nimport { WavyLinearTrack } from \"./linear-wavy\";\nimport type { LinearProgressProps } from \"./types\";\n\nexport const LinearProgress = React.forwardRef<\n\tHTMLDivElement,\n\tLinearProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tshape = \"flat\",\n\t\t\ttrackShape,\n\t\t\ttrackHeight = 4,\n\t\t\tamplitude,\n\t\t\twavelength = 40,\n\t\t\tindeterminateWavelength = 20,\n\t\t\twaveSpeed = 1,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tdeterminateAnimation = \"md3\",\n\t\t\tindeterminateAnimation = \"continuous\",\n\t\t\tgapSize = 4,\n\t\t\tshowStopIndicator = \"auto\",\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, containerRef);\n\t\tconst [isRtl, setIsRtl] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (containerRef.current) {\n\t\t\t\tconst dir = getComputedStyle(containerRef.current).direction;\n\t\t\t\tsetIsRtl(dir === \"rtl\");\n\t\t\t}\n\t\t}, []);\n\n\t\tconst isWavy = shape === \"wavy\";\n\t\tconst resolvedTrackShape = trackShape ?? shape;\n\n\t\tconst effectiveAmplitude = React.useMemo(() => amplitude ?? 3, [amplitude]);\n\t\tconst svgHeight = React.useMemo(\n\t\t\t() => (isWavy ? trackHeight + effectiveAmplitude * 2 : trackHeight),\n\t\t\t[isWavy, trackHeight, effectiveAmplitude],\n\t\t);\n\n\t\tconst shouldShowStop = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisDeterminate &&\n\t\t\t\tresolvedTrackShape === \"flat\" &&\n\t\t\t\t(showStopIndicator === true ||\n\t\t\t\t\t(showStopIndicator === \"auto\" && isDeterminate)),\n\t\t\t[isDeterminate, resolvedTrackShape, showStopIndicator],\n\t\t);\n\n\t\tconst stopSize = React.useMemo(\n\t\t\t() => Math.max(2, trackHeight > 4 ? 4 : trackHeight / 2),\n\t\t\t[trackHeight],\n\t\t);\n\n\t\tconst stopOffset = (trackHeight - stopSize) / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex w-full flex-col justify-center\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: svgHeight }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{isWavy ? (\n\t\t\t\t\t\t<WavyLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tsvgHeight={svgHeight}\n\t\t\t\t\t\t\tamplitude={effectiveAmplitude}\n\t\t\t\t\t\t\twavelength={wavelength}\n\t\t\t\t\t\t\tindeterminateWavelength={indeterminateWavelength}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\twaveSpeed={waveSpeed}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t\tdeterminateAnimation={determinateAnimation}\n\t\t\t\t\t\t\tindeterminateAnimation={indeterminateAnimation}\n\t\t\t\t\t\t\ttrackShape={resolvedTrackShape}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<FlatLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{shouldShowStop && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"absolute rounded-full\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: stopSize,\n\t\t\t\t\t\t\t\theight: stopSize,\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--md-sys-color-indicator-stop)\",\n\t\t\t\t\t\t\t\ttop: svgHeight / 2 - stopSize / 2,\n\t\t\t\t\t\t\t\t...(isRtl ? { left: stopOffset } : { right: stopOffset }),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nLinearProgress.displayName = \"LinearProgress\";\n","import * as React from \"react\";\nimport { CircularProgress } from \"./circular\";\nimport { LinearProgress } from \"./linear\";\nimport type { ProgressIndicatorProps } from \"./types\";\n\n/**\n * Progress Indicator component based on Material Design 3 Expressive guidelines.\n * Flexible support for 2 presentation variants: Linear and Circular,\n * with smooth dynamic Wavy shape profiles.\n *\n * @example\n * ```tsx\n * // Determinate Flat Linear\n * <ProgressIndicator variant=\"linear\" value={60} aria-label=\"Loading profile...\" />\n *\n * // Indeterminate Wavy Linear\n * <ProgressIndicator variant=\"linear\" shape=\"wavy\" aria-label=\"Connecting to server...\" />\n *\n * // Determinate Flat Circular\n * <ProgressIndicator variant=\"circular\" value={45} size={48} aria-label=\"Syncing...\" />\n * ```\n */\n\nexport const ProgressIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tProgressIndicatorProps\n>((props, ref) => {\n\tif (props.variant === \"circular\") {\n\t\treturn <CircularProgress ref={ref} {...props} />;\n\t}\n\treturn <LinearProgress ref={ref} {...props} />;\n});\n\nProgressIndicator.displayName = \"ProgressIndicator\";\n\nexport type {\n\tCircularProgressProps,\n\tLinearProgressProps,\n\tProgressIndicatorProps,\n} from \"./types\";\n","import { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Ripple\n//\n// - Origin: pointer-down coordinates (x, y) relative to container\n// - Shape: perfectly round circle, expands from origin to diagonally fill btn\n// - Color: currentColor at 12% opacity (matches MD3 state layer spec)\n// - A11y: disabled when `prefers-reduced-motion` is active (configurable)\n// - Clipping: caller wraps in overflow-hidden; border-radius handled on parent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Represents a single ripple wave instance with position and size metadata.\n *\n * @example\n * ```tsx\n * const ripple: RippleOrigin = { id: Date.now(), x: 50, y: 30, size: 200 };\n * ```\n */\nexport interface RippleOrigin {\n\t/** Unique identifier used as React key and for removal. */\n\tid: number;\n\t/** X coordinate of the pointer event relative to the container's left edge (px). */\n\tx: number;\n\t/** Y coordinate of the pointer event relative to the container's top edge (px). */\n\ty: number;\n\t/**\n\t * Diameter of the ripple circle (px).\n\t * Typically `Math.hypot(width, height) * 2` to ensure it fills the container.\n\t */\n\tsize: number;\n}\n\n/** @internal Props for a single animated ripple element. */\ninterface RippleItemProps {\n\tripple: RippleOrigin;\n\tonDone: (id: number) => void;\n}\n\n/** @internal Memoized single ripple wave — minimises re-renders. */\nconst RippleItem = React.memo(function RippleItem({\n\tripple,\n\tonDone,\n}: RippleItemProps) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={ripple.id}\n\t\t\taria-hidden=\"true\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: ripple.x - ripple.size / 2,\n\t\t\t\ttop: ripple.y - ripple.size / 2,\n\t\t\t\twidth: ripple.size,\n\t\t\t\theight: ripple.size,\n\t\t\t\tborderRadius: \"50%\",\n\t\t\t\tbackgroundColor: \"currentColor\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\ttransformOrigin: \"center\",\n\t\t\t}}\n\t\t\tinitial={{ scale: 0, opacity: 0.12 }}\n\t\t\tanimate={{ scale: 1, opacity: 0 }}\n\t\t\texit={{ opacity: 0 }}\n\t\t\ttransition={{\n\t\t\t\tscale: { duration: 0.5, ease: [0.2, 0, 0, 1] },\n\t\t\t\topacity: { duration: 0.4, ease: \"easeOut\", delay: 0.1 },\n\t\t\t}}\n\t\t\tonAnimationComplete={() => onDone(ripple.id)}\n\t\t/>\n\t);\n});\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Ripple Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the `Ripple` presentation component.\n */\nexport interface RippleProps {\n\t/** Active ripple instances to render. Managed by the parent via `useRipple`. */\n\tripples: RippleOrigin[];\n\t/** Called when a ripple's exit animation completes — remove it from state. */\n\tonRippleDone: (id: number) => void;\n\t/**\n\t * Completely disables the ripple effect.\n\t * Use this when the parent element is disabled or interaction is not desired.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * When `true`, the ripple respects the user's OS-level\n\t * `prefers-reduced-motion` accessibility setting and renders nothing if active.\n\t *\n\t * Set to `false` to always show ripples regardless of system preference.\n\t * @default true\n\t */\n\trespectSystemMotion?: boolean;\n}\n\n/**\n * MD3 Expressive Ripple — animated touch-feedback wave layer.\n *\n * Renders absolutely-positioned ripple circles inside an `overflow-hidden`\n * container. Must be placed as a direct child of the interactive element.\n *\n * @remarks\n * - The parent element **must** have `overflow: hidden` and `position: relative`\n * (or equivalent) for clipping to work correctly.\n * - Set `disabled` to `true` on parent's disabled state to avoid stale ripples.\n * - The ripple color is `currentColor` at 12% opacity — matching MD3 state layer spec.\n *\n * @example\n * ```tsx\n * const { ripples, onPointerDown, removeRipple } = useRippleState();\n *\n * <button onPointerDown={onPointerDown} className=\"relative overflow-hidden\">\n * <Ripple ripples={ripples} onRippleDone={removeRipple} />\n * Click me\n * </button>\n * ```\n *\n * @see {@link useRippleState} for the state management hook\n * @see https://m3.material.io/foundations/interaction/states/overview\n */\nexport function Ripple({\n\tripples,\n\tonRippleDone,\n\tdisabled = false,\n\trespectSystemMotion = true,\n}: RippleProps) {\n\tconst prefersReduced = useReducedMotion();\n\n\t// Disabled prop: explicitly turned off by consumer\n\tif (disabled) return null;\n\n\t// Respect system prefers-reduced-motion when opted-in\n\tif (respectSystemMotion && prefersReduced) return null;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{ripples.map((r) => (\n\t\t\t\t<RippleItem key={r.id} ripple={r} onDone={onRippleDone} />\n\t\t\t))}\n\t\t</AnimatePresence>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useRippleState Hook\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Options for configuring `useRippleState` behaviour.\n */\nexport interface UseRippleStateOptions {\n\t/**\n\t * When `true`, the ripple is suppressed — `onPointerDown` becomes a no-op.\n\t * Use this to sync the ripple with the parent element's `disabled` state.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n}\n\n/**\n * `useRippleState` — state manager for MD3 Expressive ripple waves.\n *\n * Tracks active ripple instances and provides pointer event handlers.\n * Pair with the `<Ripple>` component for rendering.\n *\n * @remarks\n * This hook only manages ripple *state* (coordinates, size, lifecycle).\n * The actual animation is handled by `<Ripple>` via Framer Motion.\n * Respecting `prefers-reduced-motion` is handled by `<Ripple>` itself.\n *\n * @param options - Configuration options. See {@link UseRippleStateOptions}.\n * @returns `{ ripples, onPointerDown, removeRipple }` — bind to the interactive element.\n *\n * @example\n * ```tsx\n * function MyButton({ disabled, children }) {\n * const { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });\n *\n * return (\n * <button\n * disabled={disabled}\n * onPointerDown={onPointerDown}\n * className=\"relative overflow-hidden\"\n * >\n * <Ripple ripples={ripples} onRippleDone={removeRipple} disabled={disabled} />\n * {children}\n * </button>\n * );\n * }\n * ```\n *\n * @see {@link Ripple} for the rendering component\n */\nexport function useRippleState(options: UseRippleStateOptions = {}) {\n\tconst { disabled = false } = options;\n\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\n\tconst onPointerDown = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\tif (disabled) return;\n\t\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\t\tconst x = e.clientX - rect.left;\n\t\t\tconst y = e.clientY - rect.top;\n\t\t\tconst rippleSize = Math.max(\n\t\t\t\tMath.hypot(rect.width, rect.height) * 2.5,\n\t\t\t\t320,\n\t\t\t);\n\t\t\tsetRipples((prev) => [\n\t\t\t\t...prev,\n\t\t\t\t{ id: Date.now(), x, y, size: rippleSize },\n\t\t\t]);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst removeRipple = React.useCallback((id: number) => {\n\t\tsetRipples((prev) => prev.filter((r) => r.id !== id));\n\t}, []);\n\n\treturn { ripples, onPointerDown, removeRipple };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Legacy alias — preserved for backward-compatibility\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * @deprecated Use `useRippleState` instead. This alias will be removed in a future version.\n * @see {@link useRippleState}\n */\nexport const useRipple = useRippleState;\n","/**\n * @file ui/shared/motion-tokens.ts\n *\n * Framer Motion spring presets derived from the official MD3 Expressive\n * motion physics system (May 2025).\n *\n * Usage hierarchy:\n * 1. Import a named preset (e.g. `FAST_SPATIAL_SPRING`) for convenience.\n * 2. Call `getMotionSpring(speed, type)` when you need to pick dynamically.\n * 3. Call `getMotionTransitionCSS(speed, type, scheme?)` for pure-CSS contexts.\n *\n * @see https://m3.material.io/styles/motion/overview/how-it-works\n * @see https://m3.material.io/styles/motion/overview/specs\n */\n\nimport type { Transition } from \"motion/react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Spring Token Structure\n//\n// MD3 defines springs as dampingRatio (0–1) + stiffness.\n// Framer Motion uses absolute `damping` coefficient.\n//\n// Conversion (with Framer's default mass = 1):\n// damping = 2 × dampingRatio × √stiffness\n//\n// Computed values (rounded to 2 decimal places):\n//\n// fast spatial: 2 × 0.6 × √800 = 2 × 0.6 × 28.28 ≈ 33.94\n// fast effects: 2 × 1.0 × √3800 = 2 × 61.64 ≈ 123.29\n// default spatial: 2 × 0.8 × √380 = 2 × 0.8 × 19.49 ≈ 31.19\n// default effects: 2 × 1.0 × √1600 = 2 × 40 = 80\n// slow spatial: 2 × 0.8 × √200 = 2 × 0.8 × 14.14 ≈ 22.63\n// slow effects: 2 × 1.0 × √800 = 2 × 28.28 ≈ 56.57\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ── Spatial springs — use for position, size, border-radius, rotation, scale ─\n\n/**\n * MD3 Expressive — Fast Spatial Spring\n * `md.sys.motion.spring.fast.spatial` (dampingRatio: 0.6, stiffness: 800)\n *\n * Use for: small components (buttons, switches, chips).\n * Has notable bounce/overshoot — feels snappy and expressive.\n */\nexport const FAST_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 33.94,\n} as const;\n\n/**\n * MD3 Expressive — Default Spatial Spring\n * `md.sys.motion.spring.default.spatial` (dampingRatio: 0.8, stiffness: 380)\n *\n * Use for: medium elements (bottom sheets, menus, navigation rail).\n * Gentle overshoot — the go-to spring for most UI animations.\n */\nexport const DEFAULT_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 380,\n\tdamping: 31.19,\n} as const;\n\n/**\n * MD3 Expressive — Slow Spatial Spring\n * `md.sys.motion.spring.slow.spatial` (dampingRatio: 0.8, stiffness: 200)\n *\n * Use for: full-screen transitions and large layout shifts.\n * Subtle, slow overshoot.\n */\nexport const SLOW_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 22.63,\n} as const;\n\n// ── Effects springs — use for color, opacity (critically damped, no bounce) ──\n\n/**\n * MD3 Expressive — Fast Effects Spring\n * `md.sys.motion.spring.fast.effects` (dampingRatio: 1.0, stiffness: 3800)\n *\n * Use for: color changes on switches, icon swaps, badge counts.\n * Critically damped — very fast, no overshoot.\n */\nexport const FAST_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 3800,\n\tdamping: 123.29,\n} as const;\n\n/**\n * MD3 Expressive — Default Effects Spring\n * `md.sys.motion.spring.default.effects` (dampingRatio: 1.0, stiffness: 1600)\n *\n * Use for: opacity fades, color transitions for medium-sized elements.\n * Critically damped — smooth with no overshoot.\n */\nexport const DEFAULT_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 1600,\n\tdamping: 80,\n} as const;\n\n/**\n * MD3 Expressive — Slow Effects Spring\n * `md.sys.motion.spring.slow.effects` (dampingRatio: 1.0, stiffness: 800)\n *\n * Use for: full-screen opacity/color transitions.\n * Critically damped — slow and smooth.\n */\nexport const SLOW_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 56.57,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dynamic helper\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type SpringSpeed = \"fast\" | \"default\" | \"slow\";\nexport type SpringAnimationType = \"spatial\" | \"effects\";\n\nconst springMap = {\n\tfast: { spatial: FAST_SPATIAL_SPRING, effects: FAST_EFFECTS_SPRING },\n\tdefault: { spatial: DEFAULT_SPATIAL_SPRING, effects: DEFAULT_EFFECTS_SPRING },\n\tslow: { spatial: SLOW_SPATIAL_SPRING, effects: SLOW_EFFECTS_SPRING },\n} as const;\n\n/**\n * Pick a Framer Motion spring by speed and type.\n *\n * @example\n * ```tsx\n * transition={getMotionSpring(\"fast\", \"spatial\")}\n * ```\n */\nexport function getMotionSpring(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n): Transition {\n\treturn springMap[speed][type];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CSS transition strings\n// For contexts where Framer Motion is not used (plain CSS / Tailwind).\n// Uses official Web spring → CSS cubic-bezier conversion table.\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst CSS_CURVES = {\n\texpressive: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.42, 1.67, 0.21, 0.90)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.38, 1.21, 0.22, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.39, 1.29, 0.35, 0.98)\",\n\t\t\t\tdurationMs: 650,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n\tstandard: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 750,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n} as const;\n\nexport type MotionScheme = \"expressive\" | \"standard\";\n\n/**\n * Returns a CSS `transition` value string using the official MD3 web curve\n * conversion, e.g. `\"500ms cubic-bezier(0.38, 1.21, 0.22, 1.00)\"`.\n *\n * @example\n * ```ts\n * element.style.transition = `border-radius ${getMotionTransitionCSS(\"default\", \"spatial\")}`;\n * ```\n */\nexport function getMotionTransitionCSS(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n\tscheme: MotionScheme = \"expressive\",\n): string {\n\tconst { curve, durationMs } = CSS_CURVES[scheme][speed][type];\n\treturn `${durationMs}ms ${curve}`;\n}\n","/**\n * @file shared/constants.ts\n *\n * Shared animation constants for MD3 Expressive UI components.\n * Centralises spring transition configs and motion variant objects to avoid\n * duplication across button, icon-button, FAB, and other interactive components.\n *\n * @see https://m3.material.io/foundations/animation/overview\n */\n\nimport type { Target, TargetAndTransition, Transition } from \"motion/react\";\nimport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n} from \"./motion-tokens\";\n\nexport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n\tgetMotionSpring,\n\tgetMotionTransitionCSS,\n\tSLOW_EFFECTS_SPRING,\n\tSLOW_SPATIAL_SPRING,\n} from \"./motion-tokens\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Spring Transitions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Fast spring — used for border-radius morphing, icon swaps.\n * Maps to MD3 `fast.effects` (critically damped, stiffness 3800).\n *\n * @example\n * ```tsx\n * <m.button transition={{ borderRadius: SPRING_TRANSITION_FAST }}>...</m.button>\n * ```\n */\nexport const SPRING_TRANSITION_FAST: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Standard spring — used for icon/content scale animations.\n * Maps to MD3 `default.effects` (critically damped, stiffness 1600).\n *\n * @example\n * ```tsx\n * <m.span transition={SPRING_TRANSITION}>...</m.span>\n * ```\n */\nexport const SPRING_TRANSITION: Transition = DEFAULT_EFFECTS_SPRING;\n\n/**\n * MD3 Expressive spring — active indicator expand/collapse.\n * Maps to MD3 `default.spatial` (dampingRatio: 0.8, stiffness: 380).\n * Gentle bounce for the \"pop\" effect per MD3 Expressive spec.\n */\nexport const SPRING_TRANSITION_EXPRESSIVE: Transition = DEFAULT_SPATIAL_SPRING;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Icon Span Motion Variants\n// Used for icon/loading indicator swap animation inside FAB and IconButton.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Framer Motion variants for animating icon spans in/out.\n *\n * Scale from near-zero → 1 on enter; back to near-zero on exit.\n * The near-zero value (0.01) avoids the SMIL freeze bug on Chromium\n * that occurs when an element starts at exactly `scale(0)`.\n *\n * @example\n * ```tsx\n * <AnimatePresence mode=\"wait\">\n * {loading ? (\n * <m.span key=\"loading\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n * <LoadingIndicator />\n * </m.span>\n * ) : (\n * <m.span key=\"icon\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n * {icon}\n * </m.span>\n * )}\n * </AnimatePresence>\n * ```\n */\nexport const ICON_SPAN_VARIANTS: {\n\tinitial: Target;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { scale: 0.01 },\n\tanimate: { scale: 1 },\n\texit: { scale: 0.01 },\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 TextField Animation Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Standard easing curve — used for label float, active indicator expand.\n * cubic-bezier(0.2, 0, 0, 1)\n *\n * @see https://m3.material.io/foundations/animation/easing-and-duration\n */\nexport const MD3_STANDARD_EASING: [number, number, number, number] = [\n\t0.2, 0, 0, 1,\n];\n\n/**\n * Duration for floating label transition: 150ms.\n * Used when label moves between inline position ↔ floated position.\n */\nexport const MD3_LABEL_FLOAT_DURATION = 0.15;\n\n/**\n * Duration for active indicator expand/collapse: 200ms.\n * Used for the bottom border (filled) and outline (outlined) on focus.\n */\nexport const MD3_INDICATOR_DURATION = 0.2;\n\n/**\n * Duration for supporting text / error text appear/disappear: 120ms.\n */\nexport const MD3_SUPPORTING_DURATION = 0.12;\n\n/**\n * Duration for trailing icon appear/disappear (clear button, password toggle): 100ms.\n */\nexport const MD3_ICON_SWAP_DURATION = 0.1;\n","/**\n * @file shared/touch-target.tsx\n *\n * Invisible 48×48dp touch-target expander for small interactive elements.\n *\n * WCAG 2.5.5 (Level AA) requires interactive targets to be at least 44×44 CSS pixels.\n * MD3 specifies a minimum 48dp touch target for all interactive components.\n * For button sizes XS (32dp) and SM (40dp) that are smaller than this minimum,\n * an invisible absolutely-positioned `<span>` is overlaid to extend the\n * effective tap area without affecting visual layout.\n *\n * @see https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html\n * @see https://m3.material.io/foundations/accessible-design/accessibility-basics\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TouchTarget Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Invisible 48×48dp touch area expander — satisfies WCAG 2.5.5 + MD3 spec.\n *\n * Place as a direct child of any interactive element whose visual size is\n * smaller than 48dp (e.g. `xs`/`sm` buttons and icon buttons).\n * The parent element **must** have `position: relative`.\n *\n * @remarks\n * - Hidden from assistive technologies via `aria-hidden=\"true\"`.\n * - `pointer-events: none` ensures it does not intercept click events.\n * - Centred with `left: 50% / top: 50%` + negative translate for symmetry.\n *\n * @example\n * ```tsx\n * // Used inside a 32dp XS button:\n * <button className=\"relative h-8 w-auto ...\">\n * <TouchTarget />\n * Label\n * </button>\n * ```\n *\n * @see https://m3.material.io/components/buttons/specs (Touch target section)\n */\nexport function TouchTarget() {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 min-w-12 min-h-12 cursor-pointer pointer-events-none\"\n\t\t/>\n\t);\n}\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\nimport type { Transition } from \"motion\";\nimport {\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n} from \"../../shared/motion-tokens\";\n\n/**\n * Shape morphing spring animation for layout/width morphing.\n * MD3: `fast.spatial` — stiffness 800, dampingRatio 0.6 (has bounce).\n */\nexport const BUTTON_SHAPE_MORPH_SPRING: Transition = FAST_SPATIAL_SPRING;\n\n/**\n * Spring for border-radius changes on press/release and shape toggle.\n * MD3: `fast.effects` — stiffness 3800, critically damped (dampingRatio 1.0).\n * No overshoot; border-radius never goes negative.\n */\nexport const BUTTON_RADIUS_SPRING: Transition = FAST_EFFECTS_SPRING;\n\nexport const ROUND_SHAPE_RADIUS = 9999;\n\nexport const BUTTON_SIZE_TOKENS = {\n\txs: {\n\t\theight: \"2rem\", // 32dp\n\t\tleadingSpace: \"1rem\", // 16dp\n\t\ttrailingSpace: \"1rem\", // 16dp\n\t\ticonSize: \"1.25rem\", // 20dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.medium, // 12dp\n\t\tpressedShapeRadius: cornerRadius.small, // 8dp\n\t\troundShapeRadius: 16,\n\t},\n\tsm: {\n\t\theight: \"2.5rem\", // 40dp\n\t\tleadingSpace: \"1rem\", // 16dp\n\t\ttrailingSpace: \"1rem\", // 16dp\n\t\ticonSize: \"1.25rem\", // 20dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.medium, // 12dp\n\t\tpressedShapeRadius: cornerRadius.small, // 8dp\n\t\troundShapeRadius: 20,\n\t},\n\tmd: {\n\t\theight: \"3.5rem\", // 56dp\n\t\tleadingSpace: \"1.5rem\", // 24dp\n\t\ttrailingSpace: \"1.5rem\", // 24dp\n\t\ticonSize: \"1.5rem\", // 24dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.large, // 16dp\n\t\tpressedShapeRadius: cornerRadius.medium, // 12dp\n\t\troundShapeRadius: 28,\n\t},\n\tlg: {\n\t\theight: \"6rem\", // 96dp\n\t\tleadingSpace: \"3rem\", // 48dp\n\t\ttrailingSpace: \"3rem\", // 48dp\n\t\ticonSize: \"2rem\", // 32dp\n\t\ticonLabelSpace: \"0.75rem\", // 12dp\n\t\toutlineWidth: 2, // 2dp\n\t\tsquareShapeRadius: cornerRadius.extraLarge, // 28dp\n\t\tpressedShapeRadius: cornerRadius.large, // 16dp\n\t\troundShapeRadius: 48,\n\t},\n\txl: {\n\t\theight: \"8.5rem\", // 136dp\n\t\tleadingSpace: \"4rem\", // 64dp\n\t\ttrailingSpace: \"4rem\", // 64dp\n\t\ticonSize: \"2.5rem\", // 40dp\n\t\ticonLabelSpace: \"1rem\", // 16dp\n\t\toutlineWidth: 3, // 3dp\n\t\tsquareShapeRadius: cornerRadius.extraLarge, // 28dp\n\t\tpressedShapeRadius: cornerRadius.large, // 16dp\n\t\troundShapeRadius: 68,\n\t},\n} as const;\n\nexport const BUTTON_TYPOGRAPHY_TOKENS = {\n\txs: \"text-sm font-medium tracking-wide\", // labelLarge\n\tsm: \"text-sm font-medium tracking-wide\", // labelLarge\n\tmd: \"text-base font-medium\", // titleMedium\n\tlg: \"text-xl font-normal\", // headlineSmall\n\txl: \"text-[2rem] font-normal leading-none\", // headlineLarge\n} as const;\n\nexport const BUTTON_COLOR_TOKENS = {\n\televated: {\n\t\tdefault: \"bg-m3-surface-container-low text-m3-primary shadow-md\",\n\t\tselected: \"bg-m3-primary text-m3-on-primary shadow-md\",\n\t\tunselected: \"bg-m3-surface-container-low text-m3-primary shadow-md\",\n\t},\n\tfilled: {\n\t\tdefault: \"bg-m3-primary text-m3-on-primary\",\n\t\tselected: \"bg-m3-primary text-m3-on-primary\",\n\t\tunselected: \"bg-m3-surface-container text-m3-on-surface-variant\",\n\t},\n\ttonal: {\n\t\tdefault: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\tselected: \"bg-m3-secondary text-m3-on-secondary\",\n\t\tunselected: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t},\n\toutlined: {\n\t\tdefault:\n\t\t\t\"bg-transparent text-m3-on-surface-variant border-m3-outline-variant\",\n\t\tselected:\n\t\t\t\"bg-m3-inverse-surface text-m3-inverse-on-surface border-transparent\",\n\t\tunselected:\n\t\t\t\"bg-transparent text-m3-on-surface-variant border-m3-outline-variant\",\n\t},\n\ttext: {\n\t\tdefault: \"bg-transparent text-m3-primary\",\n\t\tselected: \"bg-transparent text-m3-primary\",\n\t\tunselected: \"bg-transparent text-m3-primary\",\n\t},\n\n\t// ── MD3 Expressive accent variants ──────────────────────────────────────\n\t/**\n\t * High-chroma tertiary tone. Use for hero CTAs and expressive moments where\n\t * a distinct accent beyond primary is needed (e.g., hero chip, highlight fab).\n\t */\n\ttertiary: {\n\t\tdefault: \"bg-m3-tertiary text-m3-on-tertiary\",\n\t\tselected: \"bg-m3-tertiary text-m3-on-tertiary\",\n\t\tunselected: \"bg-m3-tertiary-container text-m3-on-tertiary-container\",\n\t},\n\n\t/**\n\t * Brand-stable primary fixed. Hue stays consistent across light and dark modes.\n\t * Ideal for badges, pill chips, and elements that must carry the brand color\n\t * regardless of the active theme.\n\t */\n\t\"primary-fixed\": {\n\t\tdefault: \"bg-m3-primary-fixed text-m3-on-primary-fixed\",\n\t\tselected: \"bg-m3-primary-fixed text-m3-on-primary-fixed\",\n\t\tunselected: \"bg-m3-primary-fixed text-m3-on-primary-fixed-variant\",\n\t},\n\n\t/**\n\t * Brand-stable tertiary fixed. Use for special-state indicators, achievement\n\t * badges, or accent pills that need a fixed tertiary hue across themes.\n\t */\n\t\"tertiary-fixed\": {\n\t\tdefault: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed\",\n\t\tselected: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed\",\n\t\tunselected: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed-variant\",\n\t},\n} as const;\n","/**\n * @file button.tsx\n *\n * MD3 Expressive Button component.\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tAnimatePresence,\n\tanimate,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseMotionValue,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { LoadingIndicator } from \"../../loading-indicator\";\nimport { ProgressIndicator } from \"../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { SPRING_TRANSITION } from \"../../shared/constants\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport {\n\tBUTTON_COLOR_TOKENS,\n\tBUTTON_RADIUS_SPRING,\n\tBUTTON_SHAPE_MORPH_SPRING,\n\tBUTTON_SIZE_TOKENS,\n\tBUTTON_TYPOGRAPHY_TOKENS,\n} from \"./button-tokens\";\nimport type { ButtonProps } from \"./types\";\n\nconst MOTION_PROP_KEYS = [\n\t\"animate\",\n\t\"exit\",\n\t\"initial\",\n\t\"transition\",\n\t\"variants\",\n\t\"whileHover\",\n\t\"whileTap\",\n\t\"whileFocus\",\n\t\"whileDrag\",\n\t\"whileInView\",\n\t\"onAnimationStart\",\n\t\"onAnimationComplete\",\n\t\"onUpdate\",\n\t\"onDragStart\",\n\t\"onDragEnd\",\n\t\"onDrag\",\n\t\"onDirectionLock\",\n\t\"onDragTransitionEnd\",\n\t\"layout\",\n\t\"layoutId\",\n\t\"onLayoutAnimationComplete\",\n] as const;\n\nfunction springAnimate(\n\tvalue: ReturnType<typeof useMotionValue<number>>,\n\tto: number,\n) {\n\treturn animate(value, to, { ...BUTTON_RADIUS_SPRING, type: \"spring\" });\n}\n\ninterface AnimatedIconSlotProps {\n\ticonSize: string;\n\tchildren: React.ReactNode;\n\tariaHidden?: boolean;\n\ttransition?: Transition;\n}\n\nfunction AnimatedIconSlot({\n\ticonSize,\n\tchildren,\n\tariaHidden,\n\ttransition,\n}: AnimatedIconSlotProps) {\n\treturn (\n\t\t<m.span\n\t\t\tlayout=\"position\"\n\t\t\tinitial={{ width: 0, opacity: 0, scale: 0.5 }}\n\t\t\tanimate={{ width: iconSize, opacity: 1, scale: 1 }}\n\t\t\texit={{ width: 0, opacity: 0, scale: 0.5 }}\n\t\t\ttransition={transition}\n\t\t\taria-hidden={ariaHidden ? \"true\" : undefined}\n\t\t\tstyle={{ height: iconSize }}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden\",\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</m.span>\n\t);\n}\n\nconst ButtonComponent = React.forwardRef<HTMLButtonElement, ButtonProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"default\",\n\t\t\tcolorStyle = \"filled\",\n\t\t\tselectedColorStyle: _selectedColorStyle, // Deprecated — destructured to strip from restProps\n\t\t\tsize = \"sm\",\n\t\t\tshape = \"round\",\n\t\t\tselected,\n\t\t\ticon,\n\t\t\tselectedIcon,\n\t\t\ticonPosition = \"leading\",\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tasChild = false,\n\t\t\toutlineWidth,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabelProp,\n\t\t\ttransition: customTransition,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isToggle = variant === \"toggle\";\n\t\tconst isSelected = isToggle ? !!selected : false;\n\n\t\tconst effectiveShape = isSelected\n\t\t\t? shape === \"round\"\n\t\t\t\t? \"square\"\n\t\t\t\t: \"round\"\n\t\t\t: shape;\n\n\t\tconst sizeTokens = BUTTON_SIZE_TOKENS[size] ?? BUTTON_SIZE_TOKENS.sm;\n\t\tconst animateRadius =\n\t\t\teffectiveShape === \"round\"\n\t\t\t\t? sizeTokens.roundShapeRadius\n\t\t\t\t: sizeTokens.squareShapeRadius;\n\t\tconst pressedRadius = sizeTokens.pressedShapeRadius;\n\n\t\tconst colorState = isToggle\n\t\t\t? isSelected\n\t\t\t\t? \"selected\"\n\t\t\t\t: \"unselected\"\n\t\t\t: \"default\";\n\t\tconst colorClass = BUTTON_COLOR_TOKENS[colorStyle][colorState];\n\t\tconst typographyClass =\n\t\t\tBUTTON_TYPOGRAPHY_TOKENS[size] ?? BUTTON_TYPOGRAPHY_TOKENS.sm;\n\n\t\tconst mergedStyle = {\n\t\t\theight: sizeTokens.height,\n\t\t\tpaddingInlineStart: sizeTokens.leadingSpace,\n\t\t\tpaddingInlineEnd: sizeTokens.trailingSpace,\n\t\t\tgap: sizeTokens.iconLabelSpace,\n\t\t\tborderWidth:\n\t\t\t\toutlineWidth ??\n\t\t\t\t(colorStyle === \"outlined\" ? sizeTokens.outlineWidth : 0),\n\t\t\tborderStyle: colorStyle === \"outlined\" ? \"solid\" : undefined,\n\t\t\t...style,\n\t\t};\n\n\t\tconst labelText = React.useMemo(() => {\n\t\t\tif (asChild) {\n\t\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t}>;\n\t\t\t\treturn child.props.children;\n\t\t\t}\n\t\t\treturn children;\n\t\t}, [children, asChild]);\n\t\tconst computedAriaLabel =\n\t\t\tariaLabelProp || (typeof children === \"string\" ? children : undefined);\n\t\tconst needsTouchTarget = size === \"xs\" || size === \"sm\";\n\n\t\tconst motionRadius = useMotionValue<number>(animateRadius);\n\t\tconst asChildRef = React.useRef<HTMLElement | null>(null);\n\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLElement | null) => {\n\t\t\t\tasChildRef.current = node;\n\t\t\t\tif (typeof ref === \"function\") ref(node as HTMLButtonElement);\n\t\t\t\telse if (ref)\n\t\t\t\t\t(ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n\t\t\t\t\t\tnode as HTMLButtonElement;\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!asChild) return;\n\t\t\treturn motionRadius.on(\"change\", (v) => {\n\t\t\t\tif (asChildRef.current)\n\t\t\t\t\tasChildRef.current.style.borderRadius = `${v}px`;\n\t\t\t});\n\t\t}, [motionRadius, asChild]);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!asChild) return;\n\t\t\tconst controls = springAnimate(motionRadius, animateRadius);\n\t\t\treturn () => controls.stop();\n\t\t}, [animateRadius, motionRadius, asChild]);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return e.preventDefault();\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\tif (onClick && (e.key === \"Enter\" || e.key === \" \")) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst buttonClassName = cn(\n\t\t\t\"relative w-fit shrink-0 inline-flex flex-row items-center justify-center\",\n\t\t\t\"whitespace-nowrap select-none cursor-pointer\",\n\t\t\t\"transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200\",\n\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\"disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none\",\n\t\t\tcolorClass,\n\t\t\t\"overflow-hidden\",\n\t\t\ttypographyClass,\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst sharedTransition = customTransition ?? {\n\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\tlayout: BUTTON_SHAPE_MORPH_SPRING,\n\t\t\tdefault: SPRING_TRANSITION,\n\t\t};\n\n\t\tconst activeIcon = isSelected && selectedIcon ? selectedIcon : icon;\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<AnimatePresence initial={false} mode=\"wait\">\n\t\t\t\t\t{(loading || (activeIcon && iconPosition === \"leading\")) && (\n\t\t\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\t\t\tkey={isSelected && selectedIcon ? \"selected-icon\" : \"icon\"}\n\t\t\t\t\t\t\ticonSize={sizeTokens.iconSize}\n\t\t\t\t\t\t\tariaHidden={!loading}\n\t\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\tloadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\t\tsize={parseFloat(sizeTokens.iconSize) * 16}\n\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\t\tsize={parseFloat(sizeTokens.iconSize) * 16}\n\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tactiveIcon\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{labelText && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\tclassName=\"inline-flex items-center h-full gap-[inherit]\"\n\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labelText}\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t<AnimatePresence initial={false} mode=\"wait\">\n\t\t\t\t\t{!loading && activeIcon && iconPosition === \"trailing\" && (\n\t\t\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\t\t\tkey={isSelected && selectedIcon ? \"selected-icon\" : \"icon\"}\n\t\t\t\t\t\t\ticonSize={sizeTokens.iconSize}\n\t\t\t\t\t\t\tariaHidden\n\t\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{activeIcon}\n\t\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\tconst handleAsChildPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tspringAnimate(motionRadius, pressedRadius);\n\t\t\t\t(onPointerDown as React.PointerEventHandler<HTMLElement>)?.(e);\n\t\t\t},\n\t\t\t[motionRadius, pressedRadius, onPointerDown],\n\t\t);\n\n\t\tconst handleAsChildPointerUp = React.useCallback(() => {\n\t\t\tspringAnimate(motionRadius, animateRadius);\n\t\t}, [motionRadius, animateRadius]);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonPointerDown(e);\n\t\t\t},\n\t\t\t[onPointerDown],\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst strippedProps = { ...restProps } as Record<string, unknown>;\n\t\t\tfor (const key of MOTION_PROP_KEYS) delete strippedProps[key];\n\t\t\tconst htmlProps =\n\t\t\t\tstrippedProps as React.ButtonHTMLAttributes<HTMLButtonElement>;\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={mergedRef as React.Ref<HTMLButtonElement>}\n\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLElement>}\n\t\t\t\t\t\tonPointerDown={handleAsChildPointerDown}\n\t\t\t\t\t\tonPointerUp={handleAsChildPointerUp}\n\t\t\t\t\t\tonPointerLeave={handleAsChildPointerUp}\n\t\t\t\t\t\tonPointerCancel={handleAsChildPointerUp}\n\t\t\t\t\t\tonKeyDown={handleKeyDown as React.KeyboardEventHandler<HTMLElement>}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...(mergedStyle as React.CSSProperties),\n\t\t\t\t\t\t\tborderRadius: `${animateRadius}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={buttonClassName}\n\t\t\t\t\t\t{...htmlProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\tlayout\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\taria-busy={loading ? true : undefined}\n\t\t\t\t\taria-disabled={loading ? true : restProps.disabled}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\tanimate={{ borderRadius: animateRadius }}\n\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\tclassName={buttonClassName}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{innerContent}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nButtonComponent.displayName = \"Button\";\n\nexport const Button = React.memo(ButtonComponent);\n","import type { Transition } from \"motion/react\";\nimport type { MD3Size } from \"../../../types/md3\";\n\n/**\n * Spring motion specification for ButtonDistribute.\n * Per spec: framer-motion spring config (stiffness: 300, damping: 30) or 300ms - 450ms cubic-bezier.\n */\nexport const DISTRIBUTE_SPRING_TRANSITION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 300,\n\tdamping: 30,\n\tmass: 0.8,\n};\n\nexport const DISTRIBUTE_EASING_BEZIER = \"cubic-bezier(0.2, 0.0, 0.0, 1.0)\";\nexport const DISTRIBUTE_DURATION_MS = 350;\n\n/** Default expand ratio added to active weight in dynamic mode */\nexport const DEFAULT_EXPAND_RATIO = 0.3;\n\n/** Default fixed size for leading/trailing buttons in mixed mode */\nexport const DEFAULT_FIXED_SIZE = 48;\n\n/** Default gap between buttons */\nexport const DEFAULT_GAP = \"0.5rem\";\n\n/**\n * Circle / Pill radius values per MD3 size token for dynamic morphing.\n */\nexport const DISTRIBUTE_RADIUS_TOKENS: Record<\n\tMD3Size,\n\t{ circleRadius: number; pillRadius: number; pressedRadius: number }\n> = {\n\txs: { circleRadius: 16, pillRadius: 16, pressedRadius: 8 },\n\tsm: { circleRadius: 20, pillRadius: 20, pressedRadius: 10 },\n\tmd: { circleRadius: 28, pillRadius: 28, pressedRadius: 16 },\n\tlg: { circleRadius: 48, pillRadius: 48, pressedRadius: 28 },\n\txl: { circleRadius: 68, pillRadius: 68, pressedRadius: 40 },\n};\n\n/**\n * Container height per MD3 size token for ButtonDistribute.\n */\nexport const DISTRIBUTE_HEIGHT_TOKENS: Record<MD3Size, string> = {\n\txs: \"h-8\",\n\tsm: \"h-10\",\n\tmd: \"h-14\",\n\tlg: \"h-24\",\n\txl: \"h-[8.5rem]\",\n};\n","import * as React from \"react\";\nimport { DEFAULT_EXPAND_RATIO } from \"./button-distribute-tokens\";\n\nimport type { DistributeMode } from \"./types\";\n\ninterface UseDistributeWeightsOptions {\n\tcount: number;\n\tweights?: number[];\n\tactiveIndex: number | null;\n\texpandRatio?: number;\n\tmode?: DistributeMode;\n\tisTextItem?: boolean[];\n}\n\n/**\n * Calculates normalized flexGrow weights for ButtonDistribute items.\n *\n * Preserves the total sum of weights when an item is expanded so that\n * the total container width stays strictly at 100%.\n * Non-active items with text labels are protected with a higher min-weight\n * floor to prevent label truncation.\n */\nexport function useDistributeWeights({\n\tcount,\n\tweights,\n\tactiveIndex,\n\texpandRatio = DEFAULT_EXPAND_RATIO,\n\tmode = \"dynamic\",\n\tisTextItem,\n}: UseDistributeWeightsOptions): number[] {\n\treturn React.useMemo(() => {\n\t\tif (count <= 0) return [];\n\n\t\tif (mode === \"mixed\") {\n\t\t\tconst baseWeights = new Array(count).fill(0).map((_, idx) => {\n\t\t\t\tif (idx === 0 || idx === count - 1) return 0;\n\t\t\t\treturn weights && weights[idx] !== undefined ? weights[idx] : 1;\n\t\t\t});\n\n\t\t\tif (\n\t\t\t\tactiveIndex === null ||\n\t\t\t\tactiveIndex < 0 ||\n\t\t\t\tactiveIndex >= count ||\n\t\t\t\tcount === 1\n\t\t\t) {\n\t\t\t\treturn baseWeights;\n\t\t\t}\n\n\t\t\tconst result = [...baseWeights];\n\t\t\tconst expandAmount = expandRatio * 1.5;\n\n\t\t\tif (activeIndex === 0) {\n\t\t\t\t// Leading item active\n\t\t\t\tresult[0] = expandAmount;\n\t\t\t\tfor (let i = 1; i < count - 1; i++) {\n\t\t\t\t\tresult[i] = Math.max(0.5, baseWeights[i] - expandRatio * 0.4);\n\t\t\t\t}\n\t\t\t} else if (activeIndex === count - 1) {\n\t\t\t\t// Trailing item active\n\t\t\t\tresult[count - 1] = expandAmount;\n\t\t\t\tfor (let i = 1; i < count - 1; i++) {\n\t\t\t\t\tresult[i] = Math.max(0.5, baseWeights[i] - expandRatio * 0.4);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Center item active\n\t\t\t\tresult[activeIndex] = baseWeights[activeIndex] + expandRatio;\n\t\t\t\tfor (let i = 1; i < count - 1; i++) {\n\t\t\t\t\tif (i !== activeIndex) {\n\t\t\t\t\t\tresult[i] = Math.max(0.5, baseWeights[i] - expandRatio * 0.5);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t// Determine base weights for dynamic and fixed modes\n\t\tlet baseWeights: number[];\n\t\tif (weights && weights.length === count) {\n\t\t\tbaseWeights = [...weights];\n\t\t} else if (mode === \"dynamic\" && count === 3) {\n\t\t\t// Spec default: 1 : 2 : 1 for Prev : Play : Next in dynamic mode\n\t\t\tbaseWeights = [1, 2, 1];\n\t\t} else {\n\t\t\t// Fixed mode or equal weights default: 1 : 1 : ... : 1\n\t\t\tbaseWeights = new Array(count).fill(1);\n\t\t}\n\n\t\tif (\n\t\t\tactiveIndex === null ||\n\t\t\tactiveIndex < 0 ||\n\t\t\tactiveIndex >= count ||\n\t\t\tcount === 1\n\t\t) {\n\t\t\treturn baseWeights;\n\t\t}\n\n\t\tconst totalWeight = baseWeights.reduce((acc, w) => acc + w, 0);\n\t\tconst activeBaseWeight = baseWeights[activeIndex];\n\t\tconst expandAmount = expandRatio * totalWeight;\n\n\t\t// Minimum weight floor per item to prevent content truncation\n\t\tconst minWeights = baseWeights.map((w, idx) => {\n\t\t\tif (isTextItem?.[idx]) {\n\t\t\t\t// Text items need higher floor so label isn't clipped\n\t\t\t\treturn Math.max(0.75, w * 0.65);\n\t\t\t}\n\t\t\treturn 0.4; // Icon buttons can shrink to compact circle\n\t\t});\n\n\t\t// Available shrink capacity for non-active items\n\t\tconst shrinkCapacity = baseWeights.map((w, idx) =>\n\t\t\tidx === activeIndex ? 0 : Math.max(0, w - minWeights[idx]),\n\t\t);\n\t\tconst totalCapacity = shrinkCapacity.reduce((acc, cap) => acc + cap, 0);\n\n\t\tconst result = [...baseWeights];\n\n\t\tif (totalCapacity > 0) {\n\t\t\tconst actualExpand = Math.min(expandAmount, totalCapacity);\n\t\t\tresult[activeIndex] = activeBaseWeight + actualExpand;\n\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tif (i !== activeIndex) {\n\t\t\t\t\tconst shrinkAmount =\n\t\t\t\t\t\tactualExpand * (shrinkCapacity[i] / totalCapacity);\n\t\t\t\t\tresult[i] = Math.max(minWeights[i], baseWeights[i] - shrinkAmount);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}, [count, weights, activeIndex, expandRatio, mode, isTextItem]);\n}\n","/**\n * @file button-distribute.tsx\n *\n * MD3 Expressive ButtonDistribute component.\n * Flexible Button Group with Expressive Motion & Size Distribution (Fixed, Dynamic, Mixed).\n */\n\nimport { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { BUTTON_RADIUS_SPRING } from \"../button/button-tokens\";\nimport {\n\tDISTRIBUTE_HEIGHT_TOKENS,\n\tDISTRIBUTE_RADIUS_TOKENS,\n\tDISTRIBUTE_SPRING_TRANSITION,\n} from \"./button-distribute-tokens\";\nimport type { ButtonDistributeProps } from \"./types\";\nimport { useDistributeWeights } from \"./use-distribute-weights\";\n\nexport const ButtonDistribute = React.forwardRef<\n\tHTMLFieldSetElement,\n\tButtonDistributeProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tmode = \"dynamic\",\n\t\t\tweights,\n\t\t\texpandRatio = 0.3,\n\t\t\texpandOnHover = false,\n\t\t\tfixedSize = 48,\n\t\t\tleadingSize,\n\t\t\ttrailingSize,\n\t\t\tgap = \"0.5rem\",\n\t\t\tsize = \"sm\",\n\t\t\titemClassName,\n\t\t\tchildren,\n\t\t\tonMouseLeave,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [activeIndex, setActiveIndex] = React.useState<number | null>(null);\n\t\tconst [pressedIndex, setPressedIndex] = React.useState<number | null>(null);\n\n\t\tconst childrenArray = React.useMemo(\n\t\t\t() => React.Children.toArray(children).filter(React.isValidElement),\n\t\t\t[children],\n\t\t);\n\t\tconst count = childrenArray.length;\n\n\t\tconst isTextItem = React.useMemo(() => {\n\t\t\treturn childrenArray.map((child) => {\n\t\t\t\tconst childEl = child as React.ReactElement<{\n\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t}>;\n\t\t\t\tif (typeof childEl.props.children === \"string\") return true;\n\t\t\t\tif (Array.isArray(childEl.props.children)) {\n\t\t\t\t\treturn childEl.props.children.some(\n\t\t\t\t\t\t(c) => typeof c === \"string\" && c.trim().length > 0,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}, [childrenArray]);\n\n\t\tconst calculatedWeights = useDistributeWeights({\n\t\t\tcount,\n\t\t\tweights,\n\t\t\tactiveIndex,\n\t\t\texpandRatio,\n\t\t\tmode,\n\t\t\tisTextItem,\n\t\t});\n\n\t\tconst handleGroupMouseLeave = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLFieldSetElement>) => {\n\t\t\t\tsetActiveIndex(null);\n\t\t\t\tsetPressedIndex(null);\n\t\t\t\tonMouseLeave?.(e);\n\t\t\t},\n\t\t\t[onMouseLeave],\n\t\t);\n\n\t\tconst resolvedGap = typeof gap === \"number\" ? `${gap}px` : gap;\n\t\tconst effectiveLeadingSize =\n\t\t\ttypeof (leadingSize ?? fixedSize) === \"number\"\n\t\t\t\t? `${leadingSize ?? fixedSize}px`\n\t\t\t\t: (leadingSize ?? fixedSize);\n\t\tconst effectiveTrailingSize =\n\t\t\ttypeof (trailingSize ?? fixedSize) === \"number\"\n\t\t\t\t? `${trailingSize ?? fixedSize}px`\n\t\t\t\t: (trailingSize ?? fixedSize);\n\n\t\tconst radiusTokens =\n\t\t\tDISTRIBUTE_RADIUS_TOKENS[size] ?? DISTRIBUTE_RADIUS_TOKENS.sm;\n\t\tconst heightClass =\n\t\t\tDISTRIBUTE_HEIGHT_TOKENS[size] ?? DISTRIBUTE_HEIGHT_TOKENS.sm;\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<fieldset\n\t\t\t\t\tref={ref}\n\t\t\t\t\tonMouseLeave={handleGroupMouseLeave}\n\t\t\t\t\tonPointerCancel={() => setPressedIndex(null)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"inline-flex flex-row items-center border-none p-0 m-0 box-border overflow-hidden select-none w-full\",\n\t\t\t\t\t\theightClass,\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tgap: resolvedGap,\n\t\t\t\t\t\t...style,\n\t\t\t\t\t}}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{childrenArray.map((child, index) => {\n\t\t\t\t\t\tconst isFirst = index === 0;\n\t\t\t\t\t\tconst isLast = index === count - 1;\n\t\t\t\t\t\tconst childElement = child as React.ReactElement<{\n\t\t\t\t\t\t\tsize?: string;\n\t\t\t\t\t\t\tclassName?: string;\n\t\t\t\t\t\t\tstyle?: React.CSSProperties;\n\t\t\t\t\t\t\tonMouseEnter?: React.MouseEventHandler;\n\t\t\t\t\t\t\tonFocus?: React.FocusEventHandler;\n\t\t\t\t\t\t\tonPointerDown?: React.PointerEventHandler;\n\t\t\t\t\t\t\tonPointerUp?: React.PointerEventHandler;\n\t\t\t\t\t\t\tonClick?: React.MouseEventHandler;\n\t\t\t\t\t\t}>;\n\n\t\t\t\t\t\tconst isActive = activeIndex === index;\n\t\t\t\t\t\tconst isPressed = pressedIndex === index;\n\t\t\t\t\t\tconst isSquish = isActive || isPressed;\n\n\t\t\t\t\t\tlet flexStyle: React.CSSProperties = {};\n\t\t\t\t\t\tlet targetFlexBasis: string | number = 0;\n\n\t\t\t\t\t\tconst parsePx = (val: string | number): number => {\n\t\t\t\t\t\t\tif (typeof val === \"number\") return val;\n\t\t\t\t\t\t\tconst parsed = Number.parseFloat(val);\n\t\t\t\t\t\t\treturn Number.isNaN(parsed) ? 48 : parsed;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst leadingPx = parsePx(effectiveLeadingSize);\n\t\t\t\t\t\tconst trailingPx = parsePx(effectiveTrailingSize);\n\t\t\t\t\t\tconst leadingCompressedPx = Math.max(\n\t\t\t\t\t\t\t40,\n\t\t\t\t\t\t\tMath.round(leadingPx * (1 - expandRatio)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst trailingCompressedPx = Math.max(\n\t\t\t\t\t\t\t40,\n\t\t\t\t\t\t\tMath.round(trailingPx * (1 - expandRatio)),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (mode === \"dynamic\" || mode === \"fixed\") {\n\t\t\t\t\t\t\tconst currentWeight = calculatedWeights[index] ?? 1;\n\t\t\t\t\t\t\tflexStyle = {\n\t\t\t\t\t\t\t\tflexGrow: currentWeight,\n\t\t\t\t\t\t\t\tflexShrink: 1,\n\t\t\t\t\t\t\t\tflexBasis: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttargetFlexBasis = 0;\n\t\t\t\t\t\t} else if (mode === \"mixed\") {\n\t\t\t\t\t\t\tconst currentWeight = calculatedWeights[index] ?? 0;\n\t\t\t\t\t\t\tif (isFirst) {\n\t\t\t\t\t\t\t\ttargetFlexBasis =\n\t\t\t\t\t\t\t\t\tactiveIndex !== null && activeIndex > 0\n\t\t\t\t\t\t\t\t\t\t? `${leadingCompressedPx}px`\n\t\t\t\t\t\t\t\t\t\t: effectiveLeadingSize;\n\t\t\t\t\t\t\t\tflexStyle = {\n\t\t\t\t\t\t\t\t\tflexBasis: targetFlexBasis,\n\t\t\t\t\t\t\t\t\tflexGrow: currentWeight,\n\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else if (isLast) {\n\t\t\t\t\t\t\t\ttargetFlexBasis =\n\t\t\t\t\t\t\t\t\tactiveIndex !== null && activeIndex < count - 1\n\t\t\t\t\t\t\t\t\t\t? `${trailingCompressedPx}px`\n\t\t\t\t\t\t\t\t\t\t: effectiveTrailingSize;\n\t\t\t\t\t\t\t\tflexStyle = {\n\t\t\t\t\t\t\t\t\tflexBasis: targetFlexBasis,\n\t\t\t\t\t\t\t\t\tflexGrow: currentWeight,\n\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttargetFlexBasis = 0;\n\t\t\t\t\t\t\t\tflexStyle = {\n\t\t\t\t\t\t\t\t\tflexBasis: 0,\n\t\t\t\t\t\t\t\t\tflexGrow: calculatedWeights[index] ?? 1,\n\t\t\t\t\t\t\t\t\tflexShrink: 1,\n\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst handleMouseEnter = (e: React.MouseEvent) => {\n\t\t\t\t\t\t\tif (expandOnHover) {\n\t\t\t\t\t\t\t\tsetActiveIndex(index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchildElement.props.onMouseEnter?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst handleFocus = (e: React.FocusEvent) => {\n\t\t\t\t\t\t\tsetActiveIndex(index);\n\t\t\t\t\t\t\tchildElement.props.onFocus?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst handlePointerDown = (e: React.PointerEvent) => {\n\t\t\t\t\t\t\tsetPressedIndex(index);\n\t\t\t\t\t\t\tsetActiveIndex(index);\n\t\t\t\t\t\t\tchildElement.props.onPointerDown?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst handlePointerUp = (e: React.PointerEvent) => {\n\t\t\t\t\t\t\tsetPressedIndex(null);\n\t\t\t\t\t\t\tif (!expandOnHover) {\n\t\t\t\t\t\t\t\tsetActiveIndex(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchildElement.props.onPointerUp?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst handleClick = (e: React.MouseEvent) => {\n\t\t\t\t\t\t\tsetPressedIndex(null);\n\t\t\t\t\t\t\tif (!expandOnHover) {\n\t\t\t\t\t\t\t\tsetActiveIndex(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchildElement.props.onClick?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst clonedChild = React.cloneElement(childElement, {\n\t\t\t\t\t\t\tsize: childElement.props.size ?? size,\n\t\t\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t\t\t\"w-full! h-full! justify-center items-center flex-1 rounded-[inherit]! px-3! sm:px-4!\",\n\t\t\t\t\t\t\t\tchildElement.props.className,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\tkey={childElement.key ?? index}\n\t\t\t\t\t\t\t\tlayout\n\t\t\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tflexGrow: (flexStyle.flexGrow as number) ?? 1,\n\t\t\t\t\t\t\t\t\tflexBasis: targetFlexBasis,\n\t\t\t\t\t\t\t\t\tborderRadius: isSquish\n\t\t\t\t\t\t\t\t\t\t? radiusTokens.pressedRadius\n\t\t\t\t\t\t\t\t\t\t: radiusTokens.pillRadius,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t...DISTRIBUTE_SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"relative inline-flex items-center justify-center shrink-0 min-w-0 overflow-hidden h-full\",\n\t\t\t\t\t\t\t\t\titemClassName,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={flexStyle}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{clonedChild}\n\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</fieldset>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nButtonDistribute.displayName = \"ButtonDistribute\";\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SPRING_TRANSITION_FAST } from \"./shared/constants\";\n\n// @internal — font must be loaded via '@bug-on/m3-expressive/material-symbols.css'\nconst VARIANT_FONT: Record<NonNullable<IconProps[\"variant\"]>, string> = {\n\toutlined: \"'Material Symbols Outlined'\",\n\trounded: \"'Material Symbols Rounded'\",\n\tsharp: \"'Material Symbols Sharp'\",\n};\n\n/**\n * Props cho component {@link Icon}.\n *\n * All variable font axes are mapped directly to `font-variation-settings`.\n */\nexport interface IconProps extends React.HTMLAttributes<HTMLSpanElement> {\n\t/**\n\t * Name of the Material Symbol in snake_case format.\n\t * @example \"home\", \"arrow_forward\", \"settings\"\n\t * @see https://fonts.google.com/icons\n\t */\n\tname: string;\n\n\t/**\n\t * Geometric style variant — maps to font family.\n\t * @default \"outlined\"\n\t */\n\tvariant?: \"outlined\" | \"rounded\" | \"sharp\";\n\n\t/**\n\t * `FILL` axis. `0` = outlined, `1` = filled.\n\t * Features spring animation when `animateFill` is true.\n\t * @default 0\n\t */\n\tfill?: 0 | 1;\n\n\t/**\n\t * `wght` axis — stroke weight. Should match surrounding text weight.\n\t * @default 400\n\t */\n\tweight?: 100 | 200 | 300 | 400 | 500 | 600 | 700;\n\n\t/**\n\t * `GRAD` axis — fine-tunes visual weight without affecting layout dimensions.\n\t * Use `-25` on dark backgrounds to offset light halation effects.\n\t * @default 0\n\t */\n\tgrade?: -50 | -25 | 0 | 100 | 200;\n\n\t/**\n\t * `opsz` axis — optical size in dp. Used to set `font-size` if `size` is not specified.\n\t * Match rendered pixel size for best quality.\n\t * @default 24\n\t */\n\topticalSize?: 20 | 24 | 40 | 48;\n\n\t/**\n\t * Direct `font-size` override in px. `opsz` axis still respects `opticalSize`.\n\t * @example size={18} opticalSize={20}\n\t */\n\tsize?: number | \"inherit\";\n\n\t/**\n\t * Enables smooth spring animation when toggling FILL axis (uses `SPRING_TRANSITION_FAST`).\n\t * Requires `motion` dependency.\n\t * @default false\n\t * @example <Icon name=\"favorite\" fill={isLiked ? 1 : 0} animateFill />\n\t */\n\tanimateFill?: boolean;\n}\n\nconst IconComponent = React.forwardRef<HTMLSpanElement, IconProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tvariant = \"outlined\",\n\t\t\tfill = 0,\n\t\t\tweight = 400,\n\t\t\tgrade = 0,\n\t\t\topticalSize = 24,\n\t\t\tsize,\n\t\t\tanimateFill = false,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst fontVariationSettings = `'FILL' ${fill}, 'wght' ${weight}, 'GRAD' ${grade}, 'opsz' ${opticalSize}`;\n\n\t\tconst computedStyle: React.CSSProperties = {\n\t\t\tfontFamily: VARIANT_FONT[variant],\n\t\t\tfontSize:\n\t\t\t\tsize === \"inherit\"\n\t\t\t\t\t? \"inherit\"\n\t\t\t\t\t: size != null\n\t\t\t\t\t\t? `${size}px`\n\t\t\t\t\t\t: `${opticalSize}px`,\n\t\t\tfontVariationSettings,\n\t\t\t...style,\n\t\t};\n\n\t\tif (animateFill) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tanimate={{ fontVariationSettings }}\n\t\t\t\t\t\ttransition={SPRING_TRANSITION_FAST}\n\t\t\t\t\t\tstyle={computedStyle}\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: motion v12 HTMLMotionProps conflicts with React's event types\n\t\t\t\t\t\t{...(restProps as any)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</m.span>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={computedStyle}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</span>\n\t\t);\n\t},\n);\n\nIconComponent.displayName = \"Icon\";\n\n/**\n * Material Symbols (variable font) Icon component.\n *\n * Make sure to import the icon font CSS before usage:\n * ```ts\n * import '@bug-on/m3-expressive/material-symbols-cdn.css';\n * ```\n *\n * @remarks\n * - Use snake_case for icon names: `\"arrow_forward\"`, NOT `\"ArrowForward\"`.\n * - `aria-hidden=\"true\"` is attached automatically — provide screen reader labels on parent elements.\n *\n * @example\n * ```tsx\n * // Basic Icon\n * <Icon name=\"home\" />\n *\n * // Visual customization (filled, heavy weight)\n * <Icon name=\"favorite\" variant=\"rounded\" fill={1} weight={300} />\n *\n * // Animated transition on state change\n * <Icon name=\"bookmark\" fill={saved ? 1 : 0} animateFill />\n *\n * // Custom size override\n * <Icon name=\"close\" size={18} opticalSize={20} />\n *\n * // Combination with other components\n * <Button icon={<Icon name=\"add\" />}>Add to cart</Button>\n * ```\n *\n * @see https://fonts.google.com/icons\n * @see https://m3.material.io/styles/icons/overview\n */\nexport const Icon = React.memo(IconComponent);\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\n\n/**\n * MD3 Expressive Button Group Tokens\n * Ported from ButtonGroupSmallTokens.kt and ConnectedButtonGroupSmallTokens.kt\n */\nexport const BUTTON_GROUP_TOKENS = {\n\tstandard: {\n\t\tbetweenSpace: 12, // 12dp / 0.75rem / gap-3\n\t\tcontainerHeight: 40, // 40dp / 2.5rem\n\t},\n\tconnected: {\n\t\tbetweenSpace: 2, // 2dp / 0.125rem / gap-0.5\n\t\tcontainerHeight: 40, // 40dp / 2.5rem\n\t\tcontainerShape: cornerRadius.full, // 9999px\n\t\tinnerCorner: cornerRadius.small, // 8dp\n\t\tpressedInnerCorner: cornerRadius.extraSmall, // 4dp\n\t\tselectedCornerPercent: 50, // 50% -> full pill\n\t},\n} as const;\n","import type { MD3Size } from \"../../../types/md3\";\nimport { BUTTON_GROUP_TOKENS } from \"./button-group-tokens\";\n\n/** Pill radius (height / 2) per size. */\nexport const PILL_RADIUS_MAP: Record<MD3Size, number> = {\n\txs: 16,\n\tsm: 20,\n\tmd: 28,\n\tlg: 48,\n\txl: 68,\n};\n\n/** Morphing target radius when a standard button is pressed. */\nexport const PRESSED_RADIUS_MAP: Record<MD3Size, number> = {\n\txs: 8,\n\tsm: 10,\n\tmd: 16,\n\tlg: 28,\n\txl: 40,\n};\n\nexport interface Corners {\n\ttl: number;\n\ttr: number;\n\tbr: number;\n\tbl: number;\n}\n\nexport interface ShapeSet {\n\tdefault: Corners;\n\tpressed: Corners;\n\tchecked: Corners;\n}\n\nconst PILL_CORNERS = {\n\ttl: 9999,\n\ttr: 9999,\n\tbr: 9999,\n\tbl: 9999,\n} as const satisfies Corners;\n\nfunction buildConnectedShapes(\n\tsize: MD3Size,\n\tdefaultCorners: (outer: number, inner: number) => Corners,\n\tpressedCorners: (outer: number, pressedInner: number) => Corners,\n): ShapeSet {\n\tconst outer = PILL_RADIUS_MAP[size];\n\tconst inner = BUTTON_GROUP_TOKENS.connected.innerCorner;\n\tconst pressedInner = BUTTON_GROUP_TOKENS.connected.pressedInnerCorner;\n\treturn {\n\t\tdefault: defaultCorners(outer, inner),\n\t\tpressed: pressedCorners(outer, pressedInner),\n\t\tchecked: { ...PILL_CORNERS },\n\t};\n}\n\nexport const ButtonGroupDefaults = {\n\tconnectedLeadingButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: o, tr: i, br: i, bl: o }),\n\t\t\t(o, pi) => ({ tl: o, tr: pi, br: pi, bl: o }),\n\t\t),\n\n\tconnectedMiddleButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(_o, i) => ({ tl: i, tr: i, br: i, bl: i }),\n\t\t\t(_o, pi) => ({ tl: pi, tr: pi, br: pi, bl: pi }),\n\t\t),\n\n\tconnectedTrailingButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: i, tr: o, br: o, bl: i }),\n\t\t\t(o, pi) => ({ tl: pi, tr: o, br: o, bl: pi }),\n\t\t),\n\n\t/** For orientation=\"vertical\". */\n\tconnectedTopButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: o, tr: o, br: i, bl: i }),\n\t\t\t(o, pi) => ({ tl: o, tr: o, br: pi, bl: pi }),\n\t\t),\n\n\tconnectedBottomButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: i, tr: i, br: o, bl: o }),\n\t\t\t(o, pi) => ({ tl: pi, tr: pi, br: o, bl: o }),\n\t\t),\n};\n","import {\n\tAnimatePresence,\n\tm,\n\ttype TargetAndTransition,\n\ttype Transition,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { MD3Size } from \"../../../types/md3\";\nimport { Icon } from \"../../icon\";\nimport type { ButtonProps } from \"../button\";\nimport {\n\tBUTTON_RADIUS_SPRING,\n\tBUTTON_SHAPE_MORPH_SPRING,\n\tBUTTON_SIZE_TOKENS,\n} from \"../button/button-tokens\";\nimport {\n\tButtonGroupDefaults,\n\tPRESSED_RADIUS_MAP,\n\ttype ShapeSet,\n} from \"./button-group-defaults\";\nimport type { ButtonGroupProps } from \"./types\";\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst PILL_BORDER_RADIUS = 9999;\n\nconst CHECK_ICON_SIZE = 24;\nconst CHECK_ICON = (\n\t<Icon name=\"check\" variant=\"rounded\" size={CHECK_ICON_SIZE} weight={700} />\n);\n\nconst CHECK_ICON_GAP_MAP: Record<string, number> = {\n\txs: 6,\n\tsm: 8,\n\tmd: 8,\n\tlg: 12,\n\txl: 12,\n};\n\nconst CHECK_ICON_MOTION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 420,\n\tdamping: 34,\n\tmass: 0.75,\n};\n\n// ─── Sub-components ──────────────────────────────────────────────────────────\n\nconst AnimatedCheckLabel = React.memo(function AnimatedCheckLabel({\n\tselected,\n\tsize,\n\tchildren,\n}: {\n\tselected: boolean;\n\tsize: string;\n\tchildren: React.ReactNode;\n}) {\n\tconst gap = CHECK_ICON_GAP_MAP[size] ?? CHECK_ICON_GAP_MAP.sm;\n\n\treturn (\n\t\t<m.span\n\t\t\tlayout\n\t\t\tclassName=\"inline-flex min-w-0 items-center justify-center whitespace-nowrap align-middle\"\n\t\t>\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{selected && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tkey=\"selected-check\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tinitial={{ width: 0, opacity: 0, marginRight: 0, x: -4 }}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\twidth: CHECK_ICON_SIZE,\n\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\tmarginRight: gap,\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\texit={{ width: 0, opacity: 0, marginRight: 0, x: -4 }}\n\t\t\t\t\t\ttransition={CHECK_ICON_MOTION}\n\t\t\t\t\t\tclassName=\"inline-flex shrink-0 items-center justify-center overflow-hidden\"\n\t\t\t\t\t\tstyle={{ willChange: \"width, opacity, transform, margin-right\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"inline-flex h-6 w-6 items-center justify-center\">\n\t\t\t\t\t\t\t{CHECK_ICON}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t\t<m.span layout=\"position\" className=\"min-w-0 truncate\">\n\t\t\t\t{children}\n\t\t\t</m.span>\n\t\t</m.span>\n\t);\n});\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction resolveConnectedShapes(\n\tvariant: string,\n\torientation: string,\n\tisFirst: boolean,\n\tisLast: boolean,\n\titemSize: MD3Size,\n): ShapeSet {\n\tconst defaults = ButtonGroupDefaults.connectedLeadingButtonShapes(itemSize);\n\tif (variant !== \"connected\") return defaults;\n\n\tif (orientation === \"horizontal\") {\n\t\tif (isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedLeadingButtonShapes(itemSize);\n\t\tif (!isFirst && isLast)\n\t\t\treturn ButtonGroupDefaults.connectedTrailingButtonShapes(itemSize);\n\t\tif (!isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedMiddleButtonShapes(itemSize);\n\t} else {\n\t\tif (isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedTopButtonShapes(itemSize);\n\t\tif (!isFirst && isLast)\n\t\t\treturn ButtonGroupDefaults.connectedBottomButtonShapes(itemSize);\n\t\tif (!isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedMiddleButtonShapes(itemSize);\n\t}\n\n\treturn defaults;\n}\n\ninterface ResolvedIcon {\n\ticon: React.ReactNode;\n\tlabel: React.ReactNode;\n}\n\nfunction resolveIconAndLabel(\n\telement: React.ReactElement<ButtonProps>,\n\tisSelected: boolean,\n\titemSize: string,\n\tshowCheck: boolean,\n\ticonBehavior: ButtonGroupProps[\"iconBehavior\"],\n\tlabelBehavior: ButtonGroupProps[\"labelBehavior\"],\n): ResolvedIcon {\n\tlet icon: React.ReactNode = element.props.icon;\n\tlet label: React.ReactNode = element.props.children;\n\n\tconst animateCheckInLabel =\n\t\tshowCheck &&\n\t\ticonBehavior !== \"none\" &&\n\t\ticonBehavior !== \"selected\" &&\n\t\tlabel !== undefined;\n\n\tif (iconBehavior === \"none\" || animateCheckInLabel) {\n\t\ticon = undefined;\n\t} else if (iconBehavior === \"selected\") {\n\t\ticon = isSelected ? element.props.icon : undefined;\n\t}\n\n\tif (labelBehavior === \"none\") {\n\t\tlabel = undefined;\n\t} else if (labelBehavior === \"selected\") {\n\t\tlabel = isSelected ? element.props.children : undefined;\n\t}\n\n\tif (animateCheckInLabel && label !== undefined) {\n\t\tlabel = (\n\t\t\t<AnimatedCheckLabel selected={isSelected} size={itemSize}>\n\t\t\t\t{label}\n\t\t\t</AnimatedCheckLabel>\n\t\t);\n\t}\n\n\treturn { icon, label };\n}\n\ntype MotionOverrides = {\n\tanimate: TargetAndTransition;\n\twhileTap?: TargetAndTransition;\n\ttransition?: Transition;\n\tlayout?: boolean | \"position\" | \"size\" | \"preserve-aspect\";\n};\n\nfunction buildMotionProps(\n\tvariant: string,\n\tisSelected: boolean,\n\tisPressed: boolean,\n\titemSize: MD3Size,\n\tshapes: ShapeSet,\n\texistingAnimate: TargetAndTransition,\n\texistingWhileTap: TargetAndTransition,\n): MotionOverrides {\n\tconst props: MotionOverrides = { animate: { ...existingAnimate } };\n\n\tif (variant === \"standard\") {\n\t\tconst pressedRadius = PRESSED_RADIUS_MAP[itemSize] ?? PRESSED_RADIUS_MAP.sm;\n\t\tconst itemSizeTokens =\n\t\t\tBUTTON_SIZE_TOKENS[itemSize] ?? BUTTON_SIZE_TOKENS.sm;\n\t\tconst isSquish = isSelected || isPressed;\n\n\t\tprops.animate.borderRadius = isSquish\n\t\t\t? pressedRadius\n\t\t\t: itemSizeTokens.roundShapeRadius;\n\t\tprops.whileTap = {\n\t\t\tscale: 0.98,\n\t\t\t...existingWhileTap,\n\t\t};\n\t\tprops.transition = {\n\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\tdefault: BUTTON_SHAPE_MORPH_SPRING,\n\t\t};\n\t\tprops.layout = true;\n\t}\n\n\tif (variant === \"connected\") {\n\t\tconst { tl, tr, br, bl } = isSelected\n\t\t\t? {\n\t\t\t\t\ttl: PILL_BORDER_RADIUS,\n\t\t\t\t\ttr: PILL_BORDER_RADIUS,\n\t\t\t\t\tbr: PILL_BORDER_RADIUS,\n\t\t\t\t\tbl: PILL_BORDER_RADIUS,\n\t\t\t\t}\n\t\t\t: shapes.default;\n\n\t\tprops.animate = {\n\t\t\t...props.animate,\n\t\t\tborderRadius: undefined,\n\t\t\tborderTopLeftRadius: tl,\n\t\t\tborderTopRightRadius: tr,\n\t\t\tborderBottomRightRadius: br,\n\t\t\tborderBottomLeftRadius: bl,\n\t\t};\n\t\tprops.whileTap = {\n\t\t\tborderRadius: undefined,\n\t\t\tborderTopLeftRadius: shapes.pressed.tl,\n\t\t\tborderTopRightRadius: shapes.pressed.tr,\n\t\t\tborderBottomRightRadius: shapes.pressed.br,\n\t\t\tborderBottomLeftRadius: shapes.pressed.bl,\n\t\t\t...existingWhileTap,\n\t\t};\n\t\tprops.transition = {\n\t\t\t...BUTTON_SHAPE_MORPH_SPRING,\n\t\t\tborderTopLeftRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderTopRightRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderBottomRightRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderBottomLeftRadius: BUTTON_RADIUS_SPRING,\n\t\t};\n\t\tprops.layout = true;\n\t}\n\n\treturn props;\n}\n\n// ─── Main Component ───────────────────────────────────────────────────────────\n\nconst ButtonGroupComponent = React.forwardRef<\n\tHTMLFieldSetElement,\n\tButtonGroupProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant = \"standard\",\n\t\t\torientation = \"horizontal\",\n\t\t\tfullWidth = false,\n\t\t\tsize,\n\t\t\titemClassName,\n\t\t\tshowCheck = false,\n\t\t\tchildren,\n\t\t\ticonBehavior,\n\t\t\tlabelBehavior,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [pressedIndex, setPressedIndex] = React.useState<number | null>(null);\n\n\t\tconst childrenArray = React.useMemo(\n\t\t\t() => React.Children.toArray(children).filter(React.isValidElement),\n\t\t\t[children],\n\t\t);\n\t\tconst count = childrenArray.length;\n\n\t\tconst handlePointerLeaveAndUp = React.useCallback(() => {\n\t\t\tsetPressedIndex(null);\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex p-0 m-0 border-none max-w-full [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n\t\t\t\t\torientation === \"vertical\"\n\t\t\t\t\t\t? \"flex-col items-stretch overflow-y-auto overflow-x-hidden\"\n\t\t\t\t\t\t: \"flex-row overflow-x-auto overflow-y-hidden\",\n\t\t\t\t\tvariant === \"standard\" ? \"gap-3\" : \"gap-0.5\",\n\t\t\t\t\tfullWidth && \"w-full\",\n\t\t\t\t\tfullWidth && orientation === \"vertical\" && \"h-full\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t\tonPointerLeave={handlePointerLeaveAndUp}\n\t\t\t\tonPointerUp={handlePointerLeaveAndUp}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{childrenArray.map((child, index) => {\n\t\t\t\t\tconst element = child as React.ReactElement<ButtonProps>;\n\t\t\t\t\tconst isSelected = element.props.selected === true;\n\t\t\t\t\tconst isFirst = index === 0;\n\t\t\t\t\tconst isLast = index === count - 1;\n\t\t\t\t\tconst itemSize = (size || element.props.size || \"sm\") as MD3Size;\n\t\t\t\t\tconst isPressed = pressedIndex === index;\n\n\t\t\t\t\tconst { icon: explicitIcon, label: explicitLabel } =\n\t\t\t\t\t\tresolveIconAndLabel(\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\titemSize,\n\t\t\t\t\t\t\tshowCheck,\n\t\t\t\t\t\t\ticonBehavior,\n\t\t\t\t\t\t\tlabelBehavior,\n\t\t\t\t\t\t);\n\n\t\t\t\t\tconst shapes = resolveConnectedShapes(\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\torientation,\n\t\t\t\t\t\tisFirst,\n\t\t\t\t\t\tisLast,\n\t\t\t\t\t\titemSize,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst existingAnimate =\n\t\t\t\t\t\ttypeof element.props.animate === \"object\" &&\n\t\t\t\t\t\t!Array.isArray(element.props.animate)\n\t\t\t\t\t\t\t? element.props.animate\n\t\t\t\t\t\t\t: {};\n\t\t\t\t\tconst existingWhileTap =\n\t\t\t\t\t\ttypeof element.props.whileTap === \"object\" &&\n\t\t\t\t\t\t!Array.isArray(element.props.whileTap)\n\t\t\t\t\t\t\t? element.props.whileTap\n\t\t\t\t\t\t\t: {};\n\n\t\t\t\t\tconst motionProps = buildMotionProps(\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisPressed,\n\t\t\t\t\t\titemSize,\n\t\t\t\t\t\tshapes,\n\t\t\t\t\t\texistingAnimate as TargetAndTransition,\n\t\t\t\t\t\texistingWhileTap as TargetAndTransition,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst connectedClasses =\n\t\t\t\t\t\tvariant === \"connected\" && isSelected ? \"z-20\" : \"\";\n\n\t\t\t\t\tconst clonedElement = React.cloneElement(element, {\n\t\t\t\t\t\tkey: element.key ?? index,\n\t\t\t\t\t\ttabIndex: isFirst ? 0 : -1,\n\t\t\t\t\t\tsize: size || element.props.size,\n\t\t\t\t\t\ticon: explicitIcon,\n\t\t\t\t\t\tchildren: explicitLabel,\n\t\t\t\t\t\t...(variant === \"connected\" && {\n\t\t\t\t\t\t\tcolorStyle: element.props.colorStyle || \"tonal\",\n\t\t\t\t\t\t\tselectedColorStyle: element.props.selectedColorStyle || \"filled\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t\telement.props.className,\n\t\t\t\t\t\t\tconnectedClasses,\n\t\t\t\t\t\t\t\"focus-visible:z-10 hover:z-10 relative min-w-0\",\n\t\t\t\t\t\t\torientation === \"vertical\" && \"w-full\",\n\t\t\t\t\t\t\tfullWidth && \"flex-1\",\n\t\t\t\t\t\t\titemClassName,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tonPointerDown: (e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\t\t\t\tsetPressedIndex(index);\n\t\t\t\t\t\t\tif (element.props.onPointerDown) element.props.onPointerDown(e);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...motionProps,\n\t\t\t\t\t} as Partial<ButtonProps>);\n\n\t\t\t\t\treturn clonedElement;\n\t\t\t\t})}\n\t\t\t</fieldset>\n\t\t);\n\t},\n);\n\nButtonGroupComponent.displayName = \"ButtonGroup\";\n\nexport const ButtonGroup = React.memo(ButtonGroupComponent);\n","/**\n * @file extended-fab.tsx\n * MD3 Expressive Extended Floating Action Button.\n * @see https://m3.material.io/components/extended-fab/specs\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { LoadingIndicator } from \"../../../loading-indicator\";\nimport { ProgressIndicator } from \"../../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../../ripple\";\nimport {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n} from \"../../../shared/constants\";\n\nconst SIZE_HEIGHT: Record<string, string> = {\n\tsm: \"h-14\",\n\tmd: \"h-20\",\n\tlg: \"h-24\",\n};\n\nconst SIZE_WIDTH_COLLAPSED: Record<string, string> = {\n\tsm: \"w-14\",\n\tmd: \"w-20\",\n\tlg: \"w-24\",\n};\n\nconst SIZE_PADDING: Record<string, string> = {\n\tsm: \"px-4\",\n\tmd: \"px-[26px]\",\n\tlg: \"px-7\",\n};\n\nconst SIZE_GAP: Record<string, string> = {\n\tsm: \"gap-2\",\n\tmd: \"gap-3\",\n\tlg: \"gap-4\",\n};\n\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-7\", px: 28 },\n\tlg: { cls: \"size-9\", px: 36 },\n};\n\nconst SIZE_TEXT: Record<string, string> = {\n\tsm: \"text-base font-medium\",\n\tmd: \"text-lg font-medium\",\n\tlg: \"text-xl font-normal\",\n};\n\nconst MORPH_RADIUS: Record<string, { default: number; pressed: number }> = {\n\tsm: { default: 16, pressed: 10 },\n\tmd: { default: 20, pressed: 14 },\n\tlg: { default: 28, pressed: 18 },\n};\n\nconst COLOR_CLASSES: Record<string, { bg: string; text: string }> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t},\n\tsurface: {\n\t\tbg: \"bg-m3-surface-container-high\",\n\t\ttext: \"text-m3-on-surface\",\n\t},\n};\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/** Props for the `ExtendedFAB` component. */\nexport interface ExtendedFABProps extends MotionButtonProps {\n\t/** Required text label. Keep it short (1-2 words); it does not wrap. */\n\tlabel: string;\n\t/** Icon to render. Automatically replaced by a spinner when `loading={true}`. */\n\ticon?: React.ReactNode;\n\t/** Button size per MD3 Expressive spec. @default \"sm\" */\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\t/** MD3 color role for the container surface. @default \"primary\" */\n\tcolorStyle?: \"primary\" | \"secondary\" | \"tertiary\" | \"surface\";\n\t/** Reduces shadow to the lower elevation variant. @default false */\n\tlowered?: boolean;\n\t/** Replaces the icon with a spinner and blocks interaction. @default false */\n\tloading?: boolean;\n\t/** Spinner style shown while loading. @default \"loading-indicator\" */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/** Mounts/unmounts with an entrance/exit animation. @default true */\n\tvisible?: boolean;\n\t/** Collapses to icon-only when the user scrolls down. @default false */\n\tcollapseOnScroll?: boolean;\n\t/** Minimum scroll delta (px) required to trigger collapse/expand. @default 50 */\n\tscrollThreshold?: number;\n\t/** Controlled collapsed state. Overrides internal scroll-driven state when provided. */\n\tcollapsed?: boolean;\n\t/** Callback fired when the internal collapsed state changes. */\n\tonCollapsedChange?: (collapsed: boolean) => void;\n\t/** Layout ID for Framer Motion Container Transform transitions. */\n\tlayoutId?: string;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\n/**\n * Internal hook that listens to scroll events and manages the collapsed state.\n * @internal\n */\nfunction useScrollCollapse(\n\tenabled: boolean,\n\tscrollThreshold: number,\n\tonCollapsedChange?: (collapsed: boolean) => void,\n) {\n\tconst [collapsed, setCollapsed] = React.useState(false);\n\tconst lastScrollY = React.useRef(0);\n\n\tReact.useEffect(() => {\n\t\tif (!enabled || typeof window === \"undefined\") return;\n\n\t\tlastScrollY.current = window.scrollY;\n\n\t\tconst handleScroll = () => {\n\t\t\tconst currentScrollY = window.scrollY;\n\t\t\tconst diff = currentScrollY - lastScrollY.current;\n\n\t\t\tif (Math.abs(diff) < scrollThreshold) return;\n\n\t\t\tif (diff > 0 && !collapsed) {\n\t\t\t\tsetCollapsed(true);\n\t\t\t\tonCollapsedChange?.(true);\n\t\t\t} else if (diff < 0 && collapsed) {\n\t\t\t\tsetCollapsed(false);\n\t\t\t\tonCollapsedChange?.(false);\n\t\t\t}\n\n\t\t\tlastScrollY.current = currentScrollY;\n\t\t};\n\n\t\twindow.addEventListener(\"scroll\", handleScroll, { passive: true });\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t}, [enabled, scrollThreshold, collapsed, onCollapsedChange]);\n\n\treturn collapsed;\n}\n\nconst ExtendedFABComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tExtendedFABProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tlabel,\n\t\t\ticon,\n\t\t\tsize = \"sm\",\n\t\t\tcolorStyle = \"primary\",\n\t\t\tlowered = false,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tvisible = true,\n\t\t\tcollapseOnScroll = false,\n\t\t\tscrollThreshold = 50,\n\t\t\tcollapsed,\n\t\t\tonCollapsedChange,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\tlayoutId,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst localRef = React.useRef<HTMLButtonElement>(null);\n\t\tReact.useImperativeHandle(ref, () => localRef.current as HTMLButtonElement);\n\n\t\tconst [dir, setDir] = React.useState<\"ltr\" | \"rtl\">(\"ltr\");\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!localRef.current) return;\n\t\t\tconst closestDir = localRef.current.closest(\"[dir]\")?.getAttribute(\"dir\");\n\t\t\tif (closestDir === \"rtl\" || closestDir === \"ltr\") {\n\t\t\t\tsetDir(closestDir);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst internalCollapsed = useScrollCollapse(\n\t\t\tcollapseOnScroll,\n\t\t\tscrollThreshold,\n\t\t\tonCollapsedChange,\n\t\t);\n\n\t\tconst isCollapsed = collapsed !== undefined ? collapsed : internalCollapsed;\n\t\tconst hasIcon = !!icon || loading;\n\n\t\tconst colors = COLOR_CLASSES[colorStyle] ?? COLOR_CLASSES.primary;\n\t\tconst radiusConfig = MORPH_RADIUS[size] ?? MORPH_RADIUS.sm;\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.sm;\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\tif ((e.key === \"Enter\" || e.key === \" \") && onClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\t\"relative shrink-0 inline-flex items-center select-none cursor-pointer overflow-hidden\",\n\t\t\t\"transition-[box-shadow,filter] duration-200\",\n\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\"disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none\",\n\t\t\tcolors.bg,\n\t\t\tcolors.text,\n\t\t\tlowered ? \"shadow-sm\" : \"shadow-md\",\n\t\t\tSIZE_HEIGHT[size] ?? \"h-14\",\n\t\t\tSIZE_TEXT[size],\n\t\t\tisCollapsed\n\t\t\t\t? cn(\"px-0 justify-center\", SIZE_WIDTH_COLLAPSED[size])\n\t\t\t\t: cn(\n\t\t\t\t\t\thasIcon ? \"justify-start\" : \"justify-center\",\n\t\t\t\t\t\tSIZE_PADDING[size],\n\t\t\t\t\t\thasIcon && SIZE_GAP[size],\n\t\t\t\t\t),\n\t\t\tdir === \"rtl\" || restProps.dir === \"rtl\"\n\t\t\t\t? \"flex-row-reverse\"\n\t\t\t\t: \"flex-row\",\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{hasIcon && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\tsizeIcon.cls,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-full h-full\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\t\t\tsize={sizeIcon.px}\n\t\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\t\t\tsize={sizeIcon.px}\n\t\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\ticon && (\n\t\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-full h-full [&>svg]:w-full [&>svg]:h-full\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0, width: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, width: \"auto\" }}\n\t\t\t\t\t\t\texit={{ opacity: 0, width: 0 }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\topacity: { duration: 0.15, ease: \"linear\" },\n\t\t\t\t\t\t\t\twidth: SPRING_TRANSITION,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"overflow-hidden whitespace-nowrap\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{visible &&\n\t\t\t\t\t\t!(isCollapsed && !hasIcon) &&\n\t\t\t\t\t\t(asChild ? (\n\t\t\t\t\t\t\t<Slot\n\t\t\t\t\t\t\t\tref={localRef}\n\t\t\t\t\t\t\t\taria-label={ariaLabel || label}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\tborderRadius: `${radiusConfig.default}px`,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Slot>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<m.button\n\t\t\t\t\t\t\t\tref={localRef}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tlayout\n\t\t\t\t\t\t\t\tlayoutId={layoutId}\n\t\t\t\t\t\t\t\taria-label={ariaLabel || label}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\tscale: 0.6,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\tborderRadius: radiusConfig.default,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\tborderRadius: radiusConfig.default,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{ scale: 0.6, opacity: 0 }}\n\t\t\t\t\t\t\t\twhileTap={{ borderRadius: radiusConfig.pressed }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\tborderRadius: { type: \"spring\", stiffness: 500, damping: 30 },\n\t\t\t\t\t\t\t\t\tscale: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.2, ease: \"linear\" },\n\t\t\t\t\t\t\t\t\tlayout: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t\t\t</m.button>\n\t\t\t\t\t\t))}\n\t\t\t\t</AnimatePresence>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nExtendedFABComponent.displayName = \"ExtendedFAB\";\n\nexport const ExtendedFAB = React.memo(ExtendedFABComponent);\n","/**\n * @file fab.tsx\n *\n * MD3 Expressive Floating Action Button (FAB).\n *\n * Supports four sizes, an extended variant with animated label reveal,\n * shape morphing, a `lowered` elevation variant, and an optional\n * `FABPosition` container for absolute positioning within a layout.\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { LoadingIndicator } from \"../../../loading-indicator\";\nimport { ProgressIndicator } from \"../../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../../ripple\";\nimport {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../../shared/constants\";\nimport { TouchTarget } from \"../../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size layout classes for the FAB container.\n * MD3 sizes: SM=40dp, MD=56dp, LG=96dp, XL=136dp.\n * Extended FABs use `w-full` + `px-*` via the caller.\n * @internal\n */\nconst SIZE_STYLES: Record<string, string> = {\n\tsm: \"h-10 w-10\",\n\tmd: \"h-14 w-14\",\n\tlg: \"h-24 w-24\",\n\txl: \"h-[8.5rem] w-[8.5rem]\",\n};\n\n/**\n * Per-size icon dimensions (Tailwind class + pixel value).\n * MD3 icon sizes: SM=24dp, MD=24dp, LG=32dp, XL=40dp.\n * @internal\n */\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-6\", px: 24 },\n\tlg: { cls: \"size-8\", px: 32 },\n\txl: { cls: \"size-10\", px: 40 },\n};\n\n/**\n * Per-size label typography classes used in the extended variant.\n * @internal\n */\nconst SIZE_TEXT_CLASS: Record<string, string> = {\n\tsm: \"text-sm font-medium\",\n\tmd: \"text-base font-medium\",\n\tlg: \"text-xl font-semibold\",\n\txl: \"text-2xl font-semibold\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Shape Morphing — Border Radius Map\n//\n// IMPORTANT: Use exact height/2 values for \"round\" radii to avoid the dead-zone\n// artefact: CSS clips any radius > height/2 identically, so animating from\n// 9999 → small value produces a jump/snap at the threshold.\n// Heights: SM=40dp, MD=56dp, LG=96dp, XL=136dp\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size border-radius tokens for all interaction / selection states.\n *\n * - `default`: idle pill radius (height / 2).\n * - `pressed`: compressed on `whileTap`.\n * - `extended`: radius for the extended (label-visible) state.\n * - `extended_pressed`: compressed extended state on `whileTap`.\n *\n * @internal\n */\nconst MORPH_RADIUS: Record<\n\tstring,\n\t{\n\t\tdefault: number;\n\t\tpressed: number;\n\t\textended: number;\n\t\textended_pressed: number;\n\t}\n> = {\n\tsm: { default: 12, pressed: 8, extended: 12, extended_pressed: 8 },\n\tmd: { default: 16, pressed: 10, extended: 16, extended_pressed: 10 },\n\tlg: { default: 28, pressed: 20, extended: 28, extended_pressed: 20 },\n\txl: { default: 40, pressed: 28, extended: 40, extended_pressed: 28 },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Color Roles\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Color-role Tailwind class map for each FAB color variant.\n * @internal\n */\nconst COLOR_CLASSES: Record<\n\tstring,\n\t{ bg: string; text: string; shadow: string }\n> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\tsurface: {\n\t\tbg: \"bg-m3-surface-container-high\",\n\t\ttext: \"text-m3-primary\",\n\t\tshadow: \"shadow-md\",\n\t},\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/**\n * Props for `FAB` Floating Action Button component.\n *\n * @remarks\n * - Ensure icon-only FABs specify `aria-label` for accessibility.\n * - In extended mode (`extended={true}`), text passed to `children` acts as the label, so `aria-label` may be omitted if children is string.\n * - `lowered` prop reduces the container shadow to MD3 \"lowered\" FAB specification;\n * useful when placed on surface containers like Bottom App Bars for visual balance.\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport interface FABProps extends MotionButtonProps {\n\t/**\n\t * Icon element to render — typically an Icon component.\n\t * Swapped for loading spinner when `loading={true}`.\n\t */\n\ticon: React.ReactNode;\n\t/**\n\t * FAB size variant according to MD3 specification.\n\t * - `sm`: Small (40dp) — Recommended for tight layouts / inside content.\n\t * - `md`: Regular (56dp) — Standard primary action.\n\t * - `lg`: Large (96dp) — High-emphasis action.\n\t * - `xl`: Extra-large (136dp) — Spotlight action element.\n\t * @default \"md\"\n\t */\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n\t/**\n\t * MD3 color role container style.\n\t * @default \"primary\"\n\t */\n\tcolorStyle?: \"primary\" | \"secondary\" | \"tertiary\" | \"surface\";\n\t/**\n\t * When `true`, expands FAB to display label text alongside icon.\n\t * Width automatically expands to fit `children`.\n\t * @default false\n\t */\n\textended?: boolean;\n\t/**\n\t * Label content rendered when `extended={true}`.\n\t * Plain string recommended.\n\t */\n\tchildren?: React.ReactNode;\n\t/**\n\t * When `true`, reduces container shadow to lowered elevation.\n\t * @default false\n\t */\n\tlowered?: boolean;\n\t/**\n\t * When `true`, displays loading spinner and disables click interactions.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Loading spinner variant.\n\t * @default \"loading-indicator\"\n\t */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/**\n\t * Controls FAB visibility in layout using scale motion animation.\n\t * @default true\n\t */\n\tvisible?: boolean;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FABPosition — Layout Wrapper\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for `FABPosition` layout wrapper component.\n * Position absolute wrapper to anchor FAB to a screen corner.\n *\n * @see {@link FABPosition}\n */\nexport interface FABPositionProps {\n\t/**\n\t * Screen corner position for FAB.\n\t * @default \"bottom-right\"\n\t */\n\tposition?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\t/** Child elements — typically a `<FAB>` component */\n\tchildren: React.ReactNode;\n\t/** Additional CSS class */\n\tclassName?: string;\n}\n\nconst POSITION_CLASS: Record<string, string> = {\n\t\"bottom-right\": \"bottom-4 right-4 sm:bottom-6 sm:right-6\",\n\t\"bottom-left\": \"bottom-4 left-4 sm:bottom-6 sm:left-6\",\n\t\"top-right\": \"top-4 right-4 sm:top-6 sm:right-6\",\n\t\"top-left\": \"top-4 left-4 sm:top-6 sm:left-6\",\n};\n\n/**\n * Absolute position wrapper component for `<FAB>`.\n *\n * Anchors FAB to a screen corner with responsive offset padding.\n * Requires parent element to have `position: relative`.\n *\n * @see https://m3.material.io/components/floating-action-button/guidelines\n */\n\nexport function FABPosition({\n\tposition = \"bottom-right\",\n\tchildren,\n\tclassName,\n}: FABPositionProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute z-10\",\n\t\t\t\tPOSITION_CLASS[position] ?? POSITION_CLASS[\"bottom-right\"],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FAB Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst FABComponent = React.forwardRef<HTMLButtonElement, FABProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\ticon,\n\t\t\tsize = \"md\",\n\t\t\tcolorStyle = \"primary\",\n\t\t\textended = false,\n\t\t\tchildren,\n\t\t\tlowered = false,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tvisible = true,\n\t\t\tasChild = false,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst colors = COLOR_CLASSES[colorStyle] ?? COLOR_CLASSES.primary;\n\t\tconst radiusConfig = MORPH_RADIUS[size] ?? MORPH_RADIUS.md;\n\n\t\tconst animateRadius = extended\n\t\t\t? radiusConfig.extended\n\t\t\t: radiusConfig.default;\n\t\tconst pressedRadius = extended\n\t\t\t? radiusConfig.extended_pressed\n\t\t\t: radiusConfig.pressed;\n\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.md;\n\t\tconst iconClass = sizeIcon.cls;\n\t\tconst iconPx = sizeIcon.px;\n\n\t\t// xs/sm share the SM token; only MD FAB (40dp) needs the touch target\n\t\tconst needsTouchTarget = size === \"sm\";\n\n\t\t// ── Ripple ───────────────────────────────────────────────────────\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\tif ((e.key === \"Enter\" || e.key === \" \") && onClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst labelContent = asChild\n\t\t\t? (\n\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t}>\n\t\t\t\t).props.children\n\t\t\t: children;\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{/* Icon / Loading swap */}\n\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\ticonClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\tsize={iconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\tsize={iconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full\",\n\t\t\t\t\t\t\t\ticonClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{/* Extended label — animates in/out with the `extended` prop */}\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{extended && labelContent && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\tinitial={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ width: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\texit={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\tclassName=\"overflow-hidden whitespace-nowrap ml-3\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labelContent}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\t\"transition-[box-shadow,opacity,filter] duration-200\",\n\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\"disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none\",\n\t\t\tcolors.bg,\n\t\t\tcolors.text,\n\t\t\tlowered ? \"shadow-sm\" : colors.shadow,\n\t\t\tSIZE_STYLES[size] ?? \"h-14 w-14\",\n\t\t\textended && \"w-auto px-6\",\n\t\t\tSIZE_TEXT_CLASS[size],\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst computedAriaLabel =\n\t\t\tariaLabel || (typeof children === \"string\" ? children : undefined);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{visible &&\n\t\t\t\t\t\t(asChild ? (\n\t\t\t\t\t\t\t<Slot\n\t\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\tborderRadius: `${animateRadius}px`,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Slot>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<m.button\n\t\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t\t\t\t// ── Entrance / Exit (FAB visibility) ────────────────\n\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\tscale: 0.5,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\tborderRadius: animateRadius,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1, borderRadius: animateRadius }}\n\t\t\t\t\t\t\t\texit={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t// ── Shape Morphing (extended toggle) ────────────────\n\t\t\t\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\tborderRadius: SPRING_TRANSITION_FAST,\n\t\t\t\t\t\t\t\t\tscale: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.25, ease: \"easeOut\" },\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t\t\t</m.button>\n\t\t\t\t\t\t))}\n\t\t\t\t</AnimatePresence>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nFABComponent.displayName = \"FAB\";\n\n/**\n * Primary Floating Action Button (FAB) component adhering to MD3 Expressive.\n *\n * Supports sizes from SM to XL, multiple color roles, extended label expansion,\n * loading states, and entrance/exit scale motion animations.\n *\n * @remarks\n * - Requires `aria-label` for icon-only FABs.\n * - When `extended={true}`, string `children` is automatically used as the accessible label.\n * - Animates scale out when `visible={false}` using fluid spring animation.\n * - Combine with `FABPosition` to anchor to screen corners.\n *\n * @example\n * ```tsx\n * // Basic small icon-only FAB\n * <FAB icon={<Icon name=\"search\" />} aria-label=\"Search\" size=\"sm\" />\n *\n * // Extended FAB with label\n * const [isOpen, setOpen] = React.useState(false);\n * <FAB\n * icon={<Icon name=\"edit\" />}\n * extended={isOpen}\n * onClick={() => setOpen(!isOpen)}\n * >\n * Compose\n * </FAB>\n *\n * // Large FAB with loading state\n * <FAB\n * icon={<Icon name=\"upload\" />}\n\n * size=\"lg\"\n * loading={isUploading}\n * colorStyle=\"secondary\"\n * aria-label=\"Upload files\"\n * />\n *\n * // Fixed at bottom right\n * <FABPosition position=\"bottom-right\">\n * <FAB icon={<Icon name=\"add\" />} aria-label=\"Add item\" />\n * </FABPosition>\n * ```\n\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport const FAB = React.memo(FABComponent);\n","/**\n * @file fab-menu.tsx\n *\n * FAB Menu component adhering to MD3 Expressive.\n *\n * Provides a toggle Floating Action Button (FAB) that expands a list of action items with staggered animation.\n * Complies with MD3 FloatingActionButtonMenu specification with full accessibility support\n * (keyboard navigation, focus management, ARIA roles).\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n\tAnimatePresence,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseReducedMotion,\n\tuseSpring,\n\tuseTransform,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../../ripple\";\nimport {\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../../shared/constants\";\nimport { TouchTarget } from \"../../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens — MD3 FAB Menu Spec\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst SPRING_NORMAL = { stiffness: 700, damping: 40 } as const;\nconst SPRING_REDUCED = { stiffness: 10000, damping: 100 } as const;\nconst FOCUS_DELAY_MS = 50;\n\nconst TOGGLE_FAB_COLORS: Record<\n\tstring,\n\t{\n\t\tcontainerBg: string;\n\t\tcontainerText: string;\n\t\tcheckedBg: string;\n\t\tcheckedText: string;\n\t}\n> = {\n\tprimary: {\n\t\tcontainerBg: \"bg-m3-primary-container\",\n\t\tcontainerText: \"text-m3-on-primary-container\",\n\t\tcheckedBg: \"bg-m3-primary\",\n\t\tcheckedText: \"text-m3-on-primary\",\n\t},\n\tsecondary: {\n\t\tcontainerBg: \"bg-m3-secondary-container\",\n\t\tcontainerText: \"text-m3-on-secondary-container\",\n\t\tcheckedBg: \"bg-m3-secondary\",\n\t\tcheckedText: \"text-m3-on-secondary\",\n\t},\n\ttertiary: {\n\t\tcontainerBg: \"bg-m3-tertiary-container\",\n\t\tcontainerText: \"text-m3-on-tertiary-container\",\n\t\tcheckedBg: \"bg-m3-tertiary\",\n\t\tcheckedText: \"text-m3-on-tertiary\",\n\t},\n};\n\n/**\n * Size tokens for ToggleFAB.\n *\n * MD3 Kotlin reference:\n * - Baseline: 56dp, cornerRadius 16dp → 28dp (fully round)\n * - Medium: ~80dp (FabMediumTokens.ContainerHeight), cornerRadius 20dp → 40dp\n * - Large: 96dp, cornerRadius 28dp → 48dp\n * @internal\n */\nconst TOGGLE_FAB_SIZES: Record<\n\tstring,\n\t{\n\t\tsizeClass: string;\n\t\tinitialRadius: number;\n\t\tfinalRadius: number;\n\t}\n> = {\n\tbaseline: { sizeClass: \"h-14 w-14\", initialRadius: 16, finalRadius: 28 },\n\tmedium: { sizeClass: \"h-20 w-20\", initialRadius: 20, finalRadius: 40 },\n\tlarge: { sizeClass: \"h-24 w-24\", initialRadius: 28, finalRadius: 48 },\n};\n\nconst MENU_ITEM_STYLES = {\n\tpadding: \"ps-4 pe-6\",\n\tgap: \"gap-3\",\n\tsize: \"h-14 min-w-14\",\n\tcornerRadius: 999,\n} as const;\n\nconst MENU_ITEM_COLORS: Record<string, { bg: string; text: string }> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t},\n};\n\nconst ALIGNMENT_CONTAINER_CLASSES: Record<string, string> = {\n\tend: \"items-end bottom-4 right-4 sm:bottom-6 sm:right-6\",\n\tstart: \"items-start bottom-4 left-4 sm:bottom-6 sm:left-6\",\n\tcenter: \"items-center bottom-4 left-1/2 -translate-x-1/2 sm:bottom-6\",\n};\n\nconst ALIGNMENT_ITEMS_CLASSES: Record<string, string> = {\n\tend: \"items-end\",\n\tstart: \"items-start\",\n\tcenter: \"items-center\",\n};\n\nconst ALIGNMENT_TRANSFORM_ORIGIN: Record<string, string> = {\n\tend: \"right\",\n\tstart: \"left\",\n\tcenter: \"bottom\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Data interface for each action item in FAB menu.\n *\n * If `label` is omitted, renders as an icon-only item.\n */\nexport interface FABMenuItemData {\n\t/** Unique ID used for React keys and focus tracking. */\n\tid: string;\n\t/** Label displayed adjacent to icon (optional). Omit for icon-only item. */\n\tlabel?: string;\n\t/** Icon node — typically an SVG icon component. */\n\ticon: React.ReactNode;\n\t/** Callback invoked when item is activated (click, Enter, or Space). */\n\tonClick: () => void;\n\t/**\n\t * When `true`, visually and interactively disables the item.\n\t * Uses `aria-disabled` instead of HTML `disabled` to preserve focusability for accessibility.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/** Additional CSS class names for item wrapper. */\n\tclassName?: string;\n}\n\n/**\n * Props controlling the main `FABMenu` component.\n *\n * @remarks\n * FABMenu manages menu open/close lifecycle, focus trapping, keyboard control,\n * and staggered motion transitions. `expanded` state is controlled externally.\n */\nexport interface FABMenuProps {\n\t/** Whether the FAB Menu is open (expanded). */\n\texpanded: boolean;\n\t/** Callback invoked when Toggle FAB is interacted with or backdrop dismissed. */\n\tonToggle: (expanded: boolean) => void;\n\t/** List of action items (MD3 spec recommends 2–6 items). */\n\titems: FABMenuItemData[];\n\t/**\n\t * MD3 container color role for trigger FAB and menu items.\n\t * @default \"primary\"\n\t */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/**\n\t * Initial size variant for ToggleFAB (morphs into close icon when expanded).\n\t * @default \"baseline\"\n\t */\n\tfabSize?: \"baseline\" | \"medium\" | \"large\";\n\t/**\n\t * Menu items alignment relative to Toggle FAB.\n\t * - `\"end\"`: Items align to right edge (trailing edge, recommended for RTL).\n\t * - `\"start\"`: Items align along left edge.\n\t * - `\"center\"`: Items align vertically centered above FAB.\n\t * @default \"end\"\n\t */\n\talignment?: \"start\" | \"end\" | \"center\";\n\t/** Custom CSS className for root component. */\n\tclassName?: string;\n\t/**\n\t * When `true`, clicking backdrop overlay closes menu.\n\t * @default true\n\t */\n\tcloseOnBackdropClick?: boolean;\n\t/**\n\t * When `true`, focus automatically moves to the LAST item (closest above FAB) when expanded.\n\t * If `false`, focus moves to the FIRST item in list.\n\n\t * @default true\n\t */\n\tfocusLast?: boolean;\n\t/** Required `aria-label` for ToggleFAB for accessibility. */\n\t\"aria-label\"?: string;\n}\n\n/**\n * Props for standalone `ToggleFAB` component.\n */\nexport interface ToggleFABProps {\n\t/** Whether the button is in expanded/active state. */\n\texpanded: boolean;\n\t/** Callback fired when button toggle state changes. */\n\tonToggle: (expanded: boolean) => void;\n\t/**\n\t * Icon generator function receiving `progress` between `0` -> `1` (collapsed -> expanded).\n\t * Useful for icon morphing effects during animation (e.g., plus to close icon).\n\t *\n\t * @example\n\t * ```tsx\n\t * icon={(progress) => progress > 0.5 ? <Icon name=\"close\" /> : <Icon name=\"add\" />}\n\t * ```\n\t */\n\ticon: (progress: number) => React.ReactNode;\n\t/** MD3 container color role. @default \"primary\" */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/** Initial FAB size variant. @default \"baseline\" */\n\tfabSize?: \"baseline\" | \"medium\" | \"large\";\n\t/** Additional CSS class name. */\n\tclassName?: string;\n\t/** Accessible label requirement. Required. */\n\t\"aria-label\"?: string;\n\t/** ID link for aria-controls attribute to reference menu. */\n\t\"aria-controls\"?: string;\n\t/** Component ID. */\n\tid?: string;\n}\n\n/**\n * Props for an individual `FABMenuItem`.\n */\nexport interface FABMenuItemProps {\n\t/** Icon node to display. */\n\ticon: React.ReactNode;\n\t/** Descriptive label text adjacent to icon. */\n\tlabel?: string;\n\t/** Callback fired when item is clicked. */\n\tonClick: () => void;\n\t/** Disables interaction while keeping element focusable in tab order. @default false */\n\tdisabled?: boolean;\n\t/** Container color role. @default \"primary\" */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/** Custom CSS className. */\n\tclassName?: string;\n\t/** Item index used for staggered animation delay. */\n\tindex?: number;\n\t/** Total items count in menu array. */\n\ttotalItems?: number;\n\t/** Logic `tabIndex` value for manual keyboard navigation. */\n\ttabIndex?: number;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Animation Variants\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ITEM_SPRING = { type: \"spring\" as const, stiffness: 700, damping: 25 };\n\nconst MENU_CONTAINER_VARIANTS = {\n\topen: { transition: { staggerChildren: 0.033, staggerDirection: 1 } },\n\tclosed: { transition: { staggerChildren: 0.02, staggerDirection: -1 } },\n} as const;\n\nconst MENU_ITEM_VARIANTS = {\n\topen: { scaleX: 1, opacity: 1, transition: ITEM_SPRING },\n\tclosed: { scaleX: 0, opacity: 0, transition: ITEM_SPRING },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal Icon Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction AddIcon() {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t>\n\t\t\t<title>Add</title>\n\t\t\t<path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n\t\t</svg>\n\t);\n}\n\nfunction CloseIcon() {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t>\n\t\t\t<title>Close</title>\n\t\t\t<path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n\t\t</svg>\n\t);\n}\n\nfunction defaultFabIcon(progress: number) {\n\treturn progress > 0.5 ? <CloseIcon /> : <AddIcon />;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// ToggleFAB Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ToggleFABComponent = React.forwardRef<HTMLButtonElement, ToggleFABProps>(\n\t(\n\t\t{\n\t\t\texpanded,\n\t\t\tonToggle,\n\t\t\ticon,\n\t\t\tcolorVariant = \"primary\",\n\t\t\tfabSize = \"baseline\",\n\t\t\tclassName,\n\t\t\tid,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-controls\": ariaControls,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst prefersReduced = useReducedMotion();\n\t\tconst colors = TOGGLE_FAB_COLORS[colorVariant] ?? TOGGLE_FAB_COLORS.primary;\n\t\tconst sizeTokens = TOGGLE_FAB_SIZES[fabSize] ?? TOGGLE_FAB_SIZES.baseline;\n\n\t\tconst springConfig = prefersReduced ? SPRING_REDUCED : SPRING_NORMAL;\n\t\tconst checkedProgress = useSpring(expanded ? 1 : 0, springConfig);\n\n\t\tReact.useEffect(() => {\n\t\t\tcheckedProgress.set(expanded ? 1 : 0);\n\t\t}, [expanded, checkedProgress]);\n\n\t\tconst borderRadius = useTransform(\n\t\t\tcheckedProgress,\n\t\t\t[0, 1],\n\t\t\t[`${sizeTokens.initialRadius}px`, `${sizeTokens.finalRadius}px`],\n\t\t);\n\n\t\tconst [iconProgress, setIconProgress] = React.useState(expanded ? 1 : 0);\n\n\t\tReact.useEffect(() => {\n\t\t\treturn checkedProgress.on(\"change\", setIconProgress);\n\t\t}, [checkedProgress]);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState();\n\n\t\tconst handleClick = React.useCallback(() => {\n\t\t\tonToggle(!expanded);\n\t\t}, [expanded, onToggle]);\n\n\t\treturn (\n\t\t\t<m.button\n\t\t\t\tref={ref}\n\t\t\t\tid={id}\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-expanded={expanded}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\taria-label={ariaLabel ?? (expanded ? \"Close menu\" : \"Open menu\")}\n\t\t\t\taria-controls={ariaControls}\n\t\t\t\tdata-expanded={expanded ? \"true\" : \"false\"}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\tstyle={{ borderRadius }}\n\t\t\t\tanimate={{\n\t\t\t\t\tboxShadow: expanded\n\t\t\t\t\t\t? \"0 4px 8px 3px rgba(0,0,0,0.15), 0 1px 3px rgba(0,0,0,0.3)\"\n\t\t\t\t\t\t: \"0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)\",\n\t\t\t\t}}\n\t\t\t\twhileTap={{ scale: 0.95, transition: SPRING_TRANSITION_FAST }}\n\t\t\t\ttransition={{ boxShadow: SPRING_TRANSITION }}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\t\t\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\t\t\t\"transition-colors duration-200\",\n\t\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\t\tsizeTokens.sizeClass,\n\t\t\t\t\texpanded ? colors.checkedBg : colors.containerBg,\n\t\t\t\t\texpanded ? colors.checkedText : colors.containerText,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<TouchTarget />\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"relative z-10 flex items-center justify-center size-6 pointer-events-none\"\n\t\t\t\t>\n\t\t\t\t\t{icon(iconProgress)}\n\t\t\t\t</span>\n\t\t\t</m.button>\n\t\t);\n\t},\n);\n\nToggleFABComponent.displayName = \"ToggleFAB\";\n\n/**\n * Toggle FAB button (Morphing FAB) usable as standalone or trigger for `FABMenu`.\n *\n * Container shape transitions from squircle to circle (square → circle) and shifts colors\n * when `expanded` state changes from false → true.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n * <ToggleFAB\n * expanded={open}\n * onToggle={setOpen}\n * colorVariant=\"primary\"\n * aria-label=\"Toggle actions\"\n * icon={(progress) => progress > 0.5 ? <Icon name=\"close\" /> : <Icon name=\"add\" />}\n * />\n * ```\n */\nexport const ToggleFAB = React.memo(ToggleFABComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FABMenuItem Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Single action item within a `FABMenu`.\n *\n * Renders a pill shape enclosing icon and optional label text.\n * When `label` is omitted, renders as a square item containing only icon.\n * Includes MD3 Ripple and 48dp touch target area per WCAG 2.5.5 touch target guidelines.\n *\n * @remarks\n * Disabled items use `aria-disabled=\"true\"` rather than native HTML `disabled`\n * so they remain focusable in the tab sequence per MD3 specification.\n */\nexport function FABMenuItem({\n\ticon,\n\tlabel,\n\tonClick,\n\tdisabled = false,\n\tcolorVariant = \"primary\",\n\tclassName,\n\ttabIndex = 0,\n\tasChild = false,\n\tchildren,\n}: FABMenuItemProps) {\n\tconst colors = MENU_ITEM_COLORS[colorVariant] ?? MENU_ITEM_COLORS.primary;\n\n\tconst { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });\n\n\tconst handleClick = React.useCallback(\n\t\t(e: React.MouseEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClick();\n\t\t},\n\t\t[disabled, onClick],\n\t);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) return;\n\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonClick();\n\t\t\t}\n\t\t},\n\t\t[disabled, onClick],\n\t);\n\n\tconst innerContent = (\n\t\t<>\n\t\t\t<TouchTarget />\n\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"relative z-10 flex items-center justify-center size-6 shrink-0 [&>svg]:w-full [&>svg]:h-full pointer-events-none\"\n\t\t\t>\n\t\t\t\t{icon}\n\t\t\t</span>\n\t\t\t{label && (\n\t\t\t\t<span className=\"relative z-10 text-base font-medium leading-none pointer-events-none\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</>\n\t);\n\n\tconst containerClassName = cn(\n\t\t\"relative inline-flex flex-row items-center\",\n\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\"whitespace-nowrap\",\n\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1\",\n\t\tMENU_ITEM_STYLES.size,\n\t\tMENU_ITEM_STYLES.gap,\n\t\tlabel ? MENU_ITEM_STYLES.padding : \"px-4\",\n\t\t!label && \"justify-center\",\n\t\tcolors.bg,\n\t\tcolors.text,\n\t\tdisabled && \"opacity-[0.38] pointer-events-none\",\n\t\tclassName,\n\t);\n\n\tconst containerStyle = {\n\t\ttransformOrigin: \"right\",\n\t\tborderRadius: `${MENU_ITEM_STYLES.cornerRadius}px`,\n\t};\n\n\tif (asChild) {\n\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\tchildren?: React.ReactNode;\n\t\t}>;\n\t\treturn (\n\t\t\t<m.div variants={MENU_ITEM_VARIANTS} style={containerStyle}>\n\t\t\t\t<Slot\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\taria-disabled={disabled ? \"true\" : undefined}\n\t\t\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t>\n\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t</Slot>\n\t\t\t</m.div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<m.div\n\t\t\trole=\"menuitem\"\n\t\t\ttabIndex={tabIndex}\n\t\t\taria-disabled={disabled ? \"true\" : undefined}\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tonClick={handleClick}\n\t\t\tonPointerDown={onPointerDown}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tvariants={MENU_ITEM_VARIANTS}\n\t\t\tstyle={containerStyle}\n\t\t\tclassName={containerClassName}\n\t\t>\n\t\t\t{innerContent}\n\t\t</m.div>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FABMenu Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive FAB Menu.\n *\n * Floating Action Button expansion menu. Toggling trigger button reveals vertically stacked action items.\n *\n * Full MD3 Accessibility implementation:\n * - `role=\"menu\"` assigned to container\n * - `role=\"menuitem\"` assigned to child action items\n * - Focus lifecycle management: Open -> Focus first/last menu item; Close -> Restore focus to ToggleFAB\n * - Keyboard navigation: Escape key closes menu, ArrowUp/Down navigates items, Tab moves focus.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n *\n * const items = [\n * { id: 'share', icon: <Icon name=\"share\" />, label: 'Share', onClick: () => console.log('Share') },\n * { id: 'edit', icon: <Icon name=\"edit\" />, label: 'Edit', onClick: () => console.log('Edit') },\n * { id: 'delete', icon: <Icon name=\"delete\" />, label: 'Delete', disabled: true, onClick: () => {} }\n * ];\n *\n * <FABMenu\n * expanded={open}\n * onToggle={setOpen}\n * aria-label=\"Quick actions\"\n * alignment=\"center\"\n * colorVariant=\"tertiary\"\n\n * items={items}\n * />\n * ```\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport function FABMenu({\n\texpanded,\n\tonToggle,\n\titems,\n\tcolorVariant = \"primary\",\n\tfabSize = \"baseline\",\n\talignment = \"end\",\n\tclassName,\n\tcloseOnBackdropClick = true,\n\tfocusLast = true,\n\t\"aria-label\": ariaLabel,\n}: FABMenuProps) {\n\tconst fabId = React.useId();\n\tconst menuId = React.useId();\n\tconst toggleRef = React.useRef<HTMLButtonElement>(null);\n\tconst itemRefs = React.useRef<(HTMLDivElement | null)[]>([]);\n\tconst [focusedIndex, setFocusedIndex] = React.useState<number>(-1);\n\n\tconst reversedItems = React.useMemo(() => [...items].reverse(), [items]);\n\n\tconst focusItem = React.useCallback((index: number) => {\n\t\tconst clampedIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(index, itemRefs.current.length - 1),\n\t\t);\n\t\tsetFocusedIndex(clampedIndex);\n\t\titemRefs.current[clampedIndex]?.focus();\n\t}, []);\n\n\t// Track whether menu was previously open so we only return focus\n\t// to the toggle button after a user-initiated close, not on initial mount.\n\tconst wasExpandedRef = React.useRef(false);\n\n\tReact.useEffect(() => {\n\t\tif (expanded) {\n\t\t\twasExpandedRef.current = true;\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tfocusItem(focusLast ? items.length - 1 : 0);\n\t\t\t}, FOCUS_DELAY_MS);\n\t\t\treturn () => clearTimeout(timer);\n\t\t}\n\n\t\tif (wasExpandedRef.current) {\n\t\t\ttoggleRef.current?.focus();\n\t\t}\n\t\twasExpandedRef.current = false;\n\t\tsetFocusedIndex(-1);\n\t}, [expanded, focusLast, items.length, focusItem]);\n\n\tconst handleMenuKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (!expanded) return;\n\n\t\t\tconst lastIndex = items.length - 1;\n\n\t\t\tswitch (e.key) {\n\t\t\t\tcase \"Escape\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonToggle(false);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfocusItem(focusedIndex <= 0 ? lastIndex : focusedIndex - 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowDown\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfocusItem(focusedIndex >= lastIndex ? 0 : focusedIndex + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"Tab\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tfocusItem(focusedIndex <= 0 ? lastIndex : focusedIndex - 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfocusItem(focusedIndex >= lastIndex ? 0 : focusedIndex + 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[expanded, focusedIndex, items.length, focusItem, onToggle],\n\t);\n\n\treturn (\n\t\t<LazyMotion features={domMax} strict>\n\t\t\t{expanded && closeOnBackdropClick && (\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"fixed inset-0 z-40\"\n\t\t\t\t\tonClick={() => onToggle(false)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* biome-ignore lint/a11y/useSemanticElements: FAB menu container needs div, not fieldset — this is not a form group */}\n\t\t\t<div\n\t\t\t\trole=\"group\"\n\t\t\t\taria-label={ariaLabel ?? \"Actions menu\"}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"fixed z-50 flex flex-col gap-2\",\n\t\t\t\t\tALIGNMENT_CONTAINER_CLASSES[alignment],\n\t\t\t\t\t\"*:shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonKeyDown={handleMenuKeyDown}\n\t\t\t>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{expanded && (\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tid={menuId}\n\t\t\t\t\t\t\trole=\"menu\"\n\t\t\t\t\t\t\taria-labelledby={fabId}\n\t\t\t\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\t\t\t\tvariants={MENU_CONTAINER_VARIANTS}\n\t\t\t\t\t\t\tinitial=\"closed\"\n\t\t\t\t\t\t\tanimate=\"open\"\n\t\t\t\t\t\t\texit=\"closed\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex flex-col-reverse gap-2\",\n\t\t\t\t\t\t\t\tALIGNMENT_ITEMS_CLASSES[alignment],\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{reversedItems.map((item, reversedIndex) => {\n\t\t\t\t\t\t\t\tconst originalIndex = items.length - 1 - reversedIndex;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\t\t\tvariants={MENU_ITEM_VARIANTS}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\t\t\t\t\tALIGNMENT_TRANSFORM_ORIGIN[alignment] ?? \"right\",\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\t\t\t\titemRefs.current[originalIndex] = el;\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<FABMenuItem\n\t\t\t\t\t\t\t\t\t\t\ticon={item.icon}\n\t\t\t\t\t\t\t\t\t\t\tlabel={item.label}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (!item.disabled) {\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t\t\t\t\t\t\t\t\tonToggle(false);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\t\t\t\t\t\t\t\tclassName={item.className}\n\t\t\t\t\t\t\t\t\t\t\ttabIndex={expanded ? 0 : -1}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</m.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t<ToggleFAB\n\t\t\t\t\tref={toggleRef}\n\t\t\t\t\tid={fabId}\n\t\t\t\t\texpanded={expanded}\n\t\t\t\t\tonToggle={onToggle}\n\t\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\t\tfabSize={fabSize}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tariaLabel ?? (expanded ? \"Close actions menu\" : \"Open actions menu\")\n\t\t\t\t\t}\n\t\t\t\t\taria-controls={menuId}\n\t\t\t\t\ticon={defaultFabIcon}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</LazyMotion>\n\t);\n}\n","/**\n * @file icon-button.tsx\n *\n * MD3 Expressive Icon Button component.\n *\n * An icon-only button with shape morphing, ripple effect, loading state,\n * and toggle variant. Requires `aria-label` for accessibility since there\n * is no visible text label.\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { LoadingIndicator } from \"../../loading-indicator\";\nimport { ProgressIndicator } from \"../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../shared/constants\";\nimport { TouchTarget } from \"../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst SIZE_HEIGHT_STYLES: Record<string, string> = {\n\txs: \"h-8\",\n\tsm: \"h-10\",\n\tmd: \"h-14\",\n\tlg: \"h-24\",\n\txl: \"h-[8.5rem]\",\n};\n\n/**\n * Per-size container width variants (Tailwind utility classes).\n * MD3 Expressive width variants: default (1:1), narrow, wide.\n * @internal\n */\nconst WIDTH_SIZE_STYLES: Record<string, Record<string, string>> = {\n\txs: {\n\t\tdefault: \"w-8\",\n\t\tnarrow: \"w-8\",\n\t\twide: \"w-12\",\n\t},\n\tsm: {\n\t\tdefault: \"w-10\",\n\t\tnarrow: \"w-12\",\n\t\twide: \"w-[3.25rem]\",\n\t},\n\tmd: {\n\t\tdefault: \"w-14\",\n\t\tnarrow: \"w-12\",\n\t\twide: \"w-[4.5rem]\",\n\t},\n\tlg: {\n\t\tdefault: \"w-24\",\n\t\tnarrow: \"w-16\",\n\t\twide: \"w-32\",\n\t},\n\txl: {\n\t\tdefault: \"w-[8.5rem]\",\n\t\tnarrow: \"w-[6.5rem]\",\n\t\twide: \"w-[11.5rem]\",\n\t},\n};\n\n/**\n * Per-size icon dimensions — Tailwind class + pixel value.\n * Single source of truth to keep icon class and LoadingIndicator size in sync.\n * @internal\n */\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\txs: { cls: \"size-5\", px: 20 },\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-6\", px: 24 },\n\tlg: { cls: \"size-8\", px: 32 },\n\txl: { cls: \"size-10\", px: 40 },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Shape Morphing — Border Radius Map\n// Keys: round=CornerFull, square=CornerMedium–XL, pressed, selectedRound, selectedSquare\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size shape morphing radius configuration for all interaction states.\n *\n * - `round` / `square`: idle border-radius per shape variant.\n * - `pressed`: compressed radius on whileTap.\n * - `selectedRound` / `selectedSquare`: radius when toggle is selected\n * (shape flips — round selected → selectedRound which is squarer).\n *\n * @internal\n */\nconst RADIUS_MAP: Record<\n\tstring,\n\t{\n\t\tround: number;\n\t\tsquare: number;\n\t\tpressed: number;\n\t\tselectedRound: number;\n\t\tselectedSquare: number;\n\t}\n> = {\n\txs: {\n\t\tround: 16,\n\t\tsquare: 12,\n\t\tpressed: 8,\n\t\tselectedRound: 12,\n\t\tselectedSquare: 16,\n\t},\n\tsm: {\n\t\tround: 20,\n\t\tsquare: 12,\n\t\tpressed: 8,\n\t\tselectedRound: 12,\n\t\tselectedSquare: 20,\n\t},\n\tmd: {\n\t\tround: 28,\n\t\tsquare: 16,\n\t\tpressed: 12,\n\t\tselectedRound: 16,\n\t\tselectedSquare: 28,\n\t},\n\tlg: {\n\t\tround: 48,\n\t\tsquare: 28,\n\t\tpressed: 16,\n\t\tselectedRound: 28,\n\t\tselectedSquare: 48,\n\t},\n\txl: {\n\t\tround: 68,\n\t\tsquare: 28,\n\t\tpressed: 16,\n\t\tselectedRound: 28,\n\t\tselectedSquare: 68,\n\t},\n};\n\n/**\n * Outline border width per size for the `outlined` color style.\n * XS/SM/MD = 1dp, LG = 2dp, XL = 3dp.\n * @internal\n */\nconst SIZE_OUTLINE_WIDTH: Record<string, string> = {\n\txs: \"border\",\n\tsm: \"border\",\n\tmd: \"border\",\n\tlg: \"border-2\",\n\txl: \"border-[3px]\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Color Variants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Color-role class pairs for each `colorStyle` × selection state combination.\n * @internal\n */\nconst colorStyles = {\n\tstandard: {\n\t\tdefault:\n\t\t\t\"text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected: \"text-m3-primary hover:bg-m3-primary/8 active:bg-m3-primary/12\",\n\t},\n\tfilled: {\n\t\tdefault:\n\t\t\t\"bg-m3-surface-container text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected:\n\t\t\t\"bg-m3-primary text-m3-on-primary hover:brightness-95 active:brightness-90\",\n\t},\n\ttonal: {\n\t\tdefault:\n\t\t\t\"bg-m3-secondary-container text-m3-on-secondary-container hover:bg-m3-on-secondary-container/8 active:bg-m3-on-secondary-container/12\",\n\t\tselected:\n\t\t\t\"bg-m3-secondary text-m3-on-secondary hover:brightness-95 active:brightness-90\",\n\t},\n\toutlined: {\n\t\tdefault:\n\t\t\t\"border-m3-outline-variant text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected:\n\t\t\t\"bg-m3-inverse-surface text-m3-inverse-on-surface border-transparent hover:brightness-95 active:brightness-90\",\n\t},\n};\n\n/**\n * Base Tailwind classes shared by all icon button variants.\n * Separated from CVA to keep bundle output lean (no runtime variant lookups needed here).\n * @internal\n */\nconst baseIconButtonClasses = [\n\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\"select-none cursor-pointer\",\n\t\"transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200\",\n\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\"disabled:pointer-events-none disabled:opacity-[0.38]\",\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/**\n * Base props for the Icon Button component.\n *\n * @see {@link IconButtonProps} for the full discriminated union.\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport interface BaseIconButtonProps extends MotionButtonProps {\n\t/**\n\t * Visual color style following MD3 color roles.\n\t * @default \"standard\"\n\t */\n\tcolorStyle?: \"standard\" | \"filled\" | \"tonal\" | \"outlined\";\n\t/**\n\t * Button container size.\n\t * Sizes: XS=32dp, SM=40dp, MD=56dp, LG=96dp, XL=136dp.\n\t * @default \"sm\"\n\t */\n\tsize?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\t/**\n\t * Container width variant following MD3 Expressive specification.\n\t * - `default`: 1:1 aspect ratio square/round container.\n\t * - `narrow`: compressed width.\n\t * - `wide`: extended width.\n\t * @default \"default\"\n\t */\n\twidthVariant?: \"default\" | \"narrow\" | \"wide\";\n\t/**\n\t * Container shape controlling border-radius morphing.\n\t * - `round`: fully circular (CornerFull).\n\t * - `square`: rounded square (CornerMedium–CornerExtraLarge per size).\n\t * @default \"round\"\n\t */\n\tshape?: \"round\" | \"square\";\n\t/**\n\t * An optional icon to display when the icon button is in a selected toggle state (`variant=\"toggle\"` and `selected={true}`).\n\t * If omitted, falls back to `children`.\n\t */\n\tselectedIcon?: React.ReactNode;\n\t/**\n\t * When `true`, replaces the icon with an animated loading indicator.\n\t * Interaction is blocked and `aria-busy` is set.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Spinner style shown while `loading={true}`.\n\t * @default \"loading-indicator\"\n\t */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/** Explicit icon size override in px */\n\ticonSize?: number | \"inherit\";\n\t/** Icon content — typically a single SVG icon component. */\n\tchildren: React.ReactNode;\n\t/**\n\t * Accessible label — **REQUIRED** because icon buttons have no visible text.\n\t *\n\t * @example \"Close\", \"Add to favourites\", \"Toggle dark mode\"\n\t * @see https://m3.material.io/components/icon-buttons/accessibility\n\t */\n\t\"aria-label\": string;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n}\n\n/**\n * Complete `IconButton` props — discriminated union that enforces\n * `selected` is only valid with `variant=\"toggle\"`.\n *\n * @example\n * ```tsx\n * // Standard\n * <IconButton aria-label=\"Close\" onClick={handleClose}>\n * <XIcon />\n * </IconButton>\n *\n * // Toggle\n * <IconButton\n * variant=\"toggle\"\n * selected={isLiked}\n * aria-label={isLiked ? \"Unlike\" : \"Like\"}\n * colorStyle=\"filled\"\n * onClick={() => setIsLiked(!isLiked)}\n * >\n * <HeartIcon />\n * </IconButton>\n * ```\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport type IconButtonProps = BaseIconButtonProps &\n\t(\n\t\t| { variant?: \"default\"; selected?: never }\n\t\t| { variant: \"toggle\"; selected: boolean }\n\t);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolves the animated border-radius based on shape and toggle state.\n *\n * @param radiusConfig - The radius map entry for the current size.\n * @param shape - Current shape variant.\n * @param isToggle - Whether the button is a toggle variant.\n * @param isSelected - Current toggle selection state.\n * @returns Border radius in px.\n * @internal\n */\nfunction resolveAnimateRadius(\n\tradiusConfig: (typeof RADIUS_MAP)[string],\n\tshape: \"round\" | \"square\",\n\tisToggle: boolean,\n\tisSelected: boolean,\n): number {\n\tif (isToggle && isSelected) {\n\t\treturn shape === \"round\"\n\t\t\t? radiusConfig.selectedRound\n\t\t\t: radiusConfig.selectedSquare;\n\t}\n\treturn shape === \"round\" ? radiusConfig.round : radiusConfig.square;\n}\n\n/**\n * Returns extra disabled-state classes specific to background-bearing color styles.\n *\n * `filled` and `tonal` need a dimmed background; `outlined` needs a dimmed border.\n * `standard` only dims the icon colour (handled by global `disabled:opacity-[0.38]`).\n *\n * @param colorStyle - Current color style.\n * @returns Tailwind disabled-state override classes.\n * @internal\n */\nfunction resolveDisabledBgClass(colorStyle: string): string {\n\tif (colorStyle === \"filled\" || colorStyle === \"tonal\") {\n\t\treturn \"disabled:bg-m3-on-surface/12 disabled:text-m3-on-surface/[0.38]\";\n\t}\n\tif (colorStyle === \"outlined\") {\n\t\treturn \"disabled:text-m3-on-surface/[0.38] disabled:border-m3-on-surface/[0.12]\";\n\t}\n\treturn \"disabled:text-m3-on-surface/[0.38]\";\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst IconButtonComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tIconButtonProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"default\",\n\t\t\tcolorStyle = \"standard\",\n\t\t\tsize = \"sm\",\n\t\t\twidthVariant = \"default\",\n\t\t\tshape = \"round\",\n\t\t\tselected,\n\t\t\tselectedIcon,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\ticonSize,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isToggle = variant === \"toggle\";\n\t\tconst isSelected = isToggle && !!selected;\n\n\t\t// Derived display values — memoized to avoid recalculation on every render\n\t\tconst resolvedColorClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisSelected\n\t\t\t\t\t? colorStyles[colorStyle].selected\n\t\t\t\t\t: colorStyles[colorStyle].default,\n\t\t\t[isSelected, colorStyle],\n\t\t);\n\n\t\tconst outlineWidthClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcolorStyle === \"outlined\" && !isSelected\n\t\t\t\t\t? (SIZE_OUTLINE_WIDTH[size] ?? \"border\")\n\t\t\t\t\t: \"\",\n\t\t\t[colorStyle, isSelected, size],\n\t\t);\n\n\t\tconst disabledBgClass = React.useMemo(\n\t\t\t() => resolveDisabledBgClass(colorStyle),\n\t\t\t[colorStyle],\n\t\t);\n\n\t\tconst radiusConfig = RADIUS_MAP[size] ?? RADIUS_MAP.sm;\n\t\tconst animateRadius = resolveAnimateRadius(\n\t\t\tradiusConfig,\n\t\t\tshape,\n\t\t\tisToggle,\n\t\t\tisSelected,\n\t\t);\n\t\tconst pressedRadius = radiusConfig.pressed;\n\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.sm;\n\t\tconst iconClass = sizeIcon.cls;\n\t\tconst defaultIconPx = sizeIcon.px;\n\t\tconst iconPx = iconSize ?? defaultIconPx;\n\t\tconst isCustomSize = iconSize != null && iconSize !== \"inherit\";\n\n\t\tconst heightClass = SIZE_HEIGHT_STYLES[size] ?? SIZE_HEIGHT_STYLES.sm;\n\t\tconst widthClass =\n\t\t\t(WIDTH_SIZE_STYLES[size] ?? WIDTH_SIZE_STYLES.sm)[widthVariant] ??\n\t\t\tWIDTH_SIZE_STYLES.sm.default;\n\n\t\t// xs/sm need 48dp touch target (WCAG 2.5.5 + MD3 a11y)\n\t\tconst needsTouchTarget = size === \"xs\" || size === \"sm\";\n\n\t\t// ── Ripple ───────────────────────────────────────────────────────\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\t// Manually trigger click for Enter/Space — needed because JSDOM does not\n\t\t\t\t// fire native click events from keyboard, and some custom scroll containers\n\t\t\t\t// suppress the default browser behaviour.\n\t\t\t\tif ((e.key === \"Enter\" || e.key === \" \") && onClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{/* Extended 48dp touch target for xs/sm (WCAG 2.5.5) */}\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\ticonSize != null ? undefined : iconClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tisCustomSize\n\t\t\t\t\t\t\t\t\t? { width: `${iconSize}px`, height: `${iconSize}px` }\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\tsize={typeof iconPx === \"number\" ? iconPx : defaultIconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\tsize={typeof iconPx === \"number\" ? iconPx : defaultIconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey={isSelected && selectedIcon ? \"selected-content\" : \"content\"}\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 [&_svg]:w-full [&_svg]:h-full [&_.md-icon]:text-[length:inherit]\",\n\t\t\t\t\t\t\t\ticonSize != null ? undefined : iconClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: typeof iconPx === \"number\" ? `${iconPx}px` : iconPx,\n\t\t\t\t\t\t\t\twidth: isCustomSize ? `${iconSize}px` : undefined,\n\t\t\t\t\t\t\t\theight: isCustomSize ? `${iconSize}px` : undefined,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isSelected && selectedIcon\n\t\t\t\t\t\t\t\t? selectedIcon\n\t\t\t\t\t\t\t\t: asChild\n\t\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t\t).props.children\n\t\t\t\t\t\t\t\t\t: children}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tbaseIconButtonClasses,\n\t\t\tresolvedColorClass,\n\t\t\toutlineWidthClass,\n\t\t\tdisabledBgClass,\n\t\t\t\"overflow-hidden\",\n\t\t\theightClass,\n\t\t\twidthClass,\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...(style as React.CSSProperties),\n\t\t\t\t\t\t\tborderRadius: `${animateRadius}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tstyle={style}\n\t\t\t\t\tanimate={{ borderRadius: animateRadius }}\n\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\ttransition={{ borderRadius: SPRING_TRANSITION_FAST }}\n\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{innerContent}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nIconButtonComponent.displayName = \"IconButton\";\n\n/**\n * MD3 Expressive Icon Button.\n *\n * An icon-only button with spring shape morphing, ripple effect, loading state support,\n * and an optional toggle variant. Compliant with MD3 Expressive sizing and WCAG 2.5.5\n * (touch target minimum for XS and SM sizes).\n *\n * @remarks\n * - `aria-label` is **required** — icon buttons have no visible text label.\n * - `variant=\"toggle\"` requires `selected: boolean`.\n * - Touch target is automatically extended to 48dp for `xs` and `sm` sizes.\n *\n * @example\n * ```tsx\n * <IconButton aria-label=\"Close\" onClick={handleClose}>\n * <XIcon />\n * </IconButton>\n *\n * <IconButton\n * variant=\"toggle\"\n * selected={isBookmarked}\n * aria-label={isBookmarked ? \"Remove bookmark\" : \"Bookmark\"}\n * colorStyle=\"filled\"\n * onClick={toggleBookmark}\n * >\n * <BookmarkIcon />\n * </IconButton>\n * ```\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport const IconButton = React.memo(IconButtonComponent);\n","import * as React from \"react\";\nimport type { SplitButtonSize, SplitButtonVariant } from \"./split-button-types\";\n\nexport interface SplitButtonContextValue {\n\tsize?: SplitButtonSize;\n\tvariant?: SplitButtonVariant;\n}\n\nexport const SplitButtonContext =\n\tReact.createContext<SplitButtonContextValue | null>(null);\n\nexport function useSplitButtonContext() {\n\treturn React.useContext(SplitButtonContext);\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { SplitButtonContext } from \"./split-button-context\";\nimport type {\n\tSplitButtonLayoutProps,\n\tSplitButtonSize,\n\tSplitButtonVariant,\n} from \"./split-button-types\";\n\n/**\n * SplitButtonLayout renders a split button group consisting of a leading\n * action button and a trailing menu toggle button.\n *\n * @example\n * <SplitButtonLayout\n * leadingButton={<SplitButtonLeading onClick={handleSave}>Save</SplitButtonLeading>}\n * trailingButton={\n * <SplitButtonTrailing\n * checked={open}\n * onCheckedChange={setOpen}\n * aria-label=\"More save options\"\n * />\n * }\n * />\n */\nconst SplitButtonLayoutComponent = React.forwardRef<\n\tHTMLDivElement,\n\tSplitButtonLayoutProps\n>(\n\t(\n\t\t{\n\t\t\tleadingButton,\n\t\t\ttrailingButton,\n\t\t\tclassName,\n\t\t\tspacing = 2,\n\t\t\tvariant: layoutVariant,\n\t\t\tsize: layoutSize,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Extract size and variant from the leading button props\n\t\tconst leadingProps = React.isValidElement<{\n\t\t\tsize?: SplitButtonSize;\n\t\t\tvariant?: SplitButtonVariant;\n\t\t}>(leadingButton)\n\t\t\t? leadingButton.props\n\t\t\t: {};\n\n\t\tconst size = layoutSize || leadingProps.size;\n\t\tconst variant = layoutVariant || leadingProps.variant;\n\n\t\tconst contextValue = React.useMemo(\n\t\t\t() => ({\n\t\t\t\tsize,\n\t\t\t\tvariant,\n\t\t\t}),\n\t\t\t[size, variant],\n\t\t);\n\n\t\treturn (\n\t\t\t<SplitButtonContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"inline-flex flex-row items-stretch justify-center w-fit shrink-0 relative\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ gap: `${spacing}px` }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{leadingButton}\n\t\t\t\t\t{trailingButton}\n\t\t\t\t</div>\n\t\t\t</SplitButtonContext.Provider>\n\t\t);\n\t},\n);\n\nSplitButtonLayoutComponent.displayName = \"SplitButtonLayout\";\n\nexport const SplitButtonLayout = React.memo(SplitButtonLayoutComponent);\n","import { domMax, type HTMLMotionProps, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface StateLayerProps extends HTMLMotionProps<\"div\"> {\n\thovered?: boolean;\n\tfocused?: boolean;\n\tpressed?: boolean;\n}\n\n/**\n * StateLayer provides a standardized visual overlay for interactive states (hover, focus, pressed)\n * following MD3 specifications.\n */\nexport const StateLayer = React.forwardRef<HTMLDivElement, StateLayerProps>(\n\t({ className, hovered, focused, pressed, ...props }, ref) => {\n\t\t// Determine opacity based on MD3 specs\n\t\tlet opacity = 0;\n\t\tif (pressed) {\n\t\t\topacity = 0.12;\n\t\t} else if (focused) {\n\t\t\topacity = 0.1;\n\t\t} else if (hovered) {\n\t\t\topacity = 0.08;\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute inset-0 bg-current pointer-events-none rounded-[inherit]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tanimate={{ opacity }}\n\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nStateLayer.displayName = \"StateLayer\";\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\nimport type { Transition } from \"motion/react\";\nimport { FAST_EFFECTS_SPRING } from \"../../shared/constants\";\nimport type {\n\tSplitButtonSize,\n\tSplitButtonSizeTokens,\n} from \"./split-button-types\";\n\n// Standard (non-expressive) spring for chevron rotation per M3 spec\nexport const SPLIT_BUTTON_CHEVRON_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 20,\n\tmass: 1,\n};\n\n// Use fast effects spring (critically damped, no bounce) for border radius morphing\nexport const SPLIT_BUTTON_RADIUS_SPRING: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Split Button Tokens (Expressive)\n * Source: SplitButtonXSmallTokens.kt, SplitButtonSmallTokens.kt,\n * SplitButtonMediumTokens.kt, SplitButtonLargeTokens.kt,\n * SplitButtonXLargeTokens.kt (Android/Compose reference)\n */\nexport const SPLIT_BUTTON_TOKENS = {\n\txs: {\n\t\tcontainerHeight: 32, // XSmallTokens: ContainerHeight = 32.0.dp\n\t\tbetweenSpace: 2, // XSmallTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.small, // 8dp\n\t\t\tpressed: cornerRadius.small, // 8dp\n\t\t},\n\t\touterCornerPercent: 50, // XSmallTokens: OuterCornerCornerSizePercent = 50.0f → full pill\n\t\tleadingPadding: {\n\t\t\tstart: 12, // XSmallTokens: LeadingButtonLeadingSpace = 12.0.dp\n\t\t\tend: 10, // XSmallTokens: LeadingButtonTrailingSpace = 10.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 13, // XSmallTokens: TrailingButtonLeadingSpace = 13.0.dp\n\t\t\tend: 13, // XSmallTokens: TrailingButtonTrailingSpace = 13.0.dp\n\t\t},\n\t\ttrailingIconSize: 22, // XSmallTokens: TrailingIconSize = 22.0.dp\n\t\topticalCenterOffset: -1, // Spec: XS = -1dp from center\n\t},\n\tsm: {\n\t\tcontainerHeight: 40, // SmallTokens: ContainerHeight = 40.0.dp\n\t\tbetweenSpace: 2, // SmallTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.medium, // 12dp\n\t\t\tpressed: cornerRadius.medium, // 12dp\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 16, // SmallTokens: LeadingButtonLeadingSpace = 16.0.dp\n\t\t\tend: 12, // SmallTokens: LeadingButtonTrailingSpace = 12.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 13, // SmallTokens: TrailingButtonLeadingSpace = 13.0.dp\n\t\t\tend: 13, // SmallTokens: TrailingButtonTrailingSpace = 13.0.dp\n\t\t},\n\t\ttrailingIconSize: 22, // SmallTokens: TrailingIconSize = 22.0.dp\n\t\topticalCenterOffset: -1, // Spec: S = -1dp from center\n\t},\n\tmd: {\n\t\tcontainerHeight: 56, // MediumTokens: ContainerHeight = 56.0.dp\n\t\tbetweenSpace: 2, // MediumTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.medium, // 12dp\n\t\t\tpressed: cornerRadius.medium, // 12dp\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 24, // MediumTokens: LeadingButtonLeadingSpace = 24.0.dp\n\t\t\tend: 24, // MediumTokens: LeadingButtonTrailingSpace = 24.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 15, // MediumTokens: TrailingButtonLeadingSpace = 15.0.dp\n\t\t\tend: 15, // MediumTokens: TrailingButtonTrailingSpace = 15.0.dp\n\t\t},\n\t\ttrailingIconSize: 26, // MediumTokens: TrailingIconSize = 26.0.dp\n\t\topticalCenterOffset: -2, // Spec: M = -2dp from center\n\t},\n\tlg: {\n\t\tcontainerHeight: 96, // LargeTokens: ContainerHeight = 96.0.dp\n\t\tbetweenSpace: 2, // LargeTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.small, // 8dp\n\t\t\thovered: 28, // LargeTokens: InnerHoveredCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t\tpressed: 28, // LargeTokens: InnerPressedCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 48, // LargeTokens: LeadingButtonLeadingSpace = 48.0.dp\n\t\t\tend: 48, // LargeTokens: LeadingButtonTrailingSpace = 48.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 29, // LargeTokens: TrailingButtonLeadingSpace = 29.0.dp\n\t\t\tend: 29, // LargeTokens: TrailingButtonTrailingSpace = 29.0.dp\n\t\t},\n\t\ttrailingIconSize: 38, // LargeTokens: TrailingIconSize = 38.0.dp\n\t\topticalCenterOffset: -3, // Spec: L = -3dp from center\n\t},\n\txl: {\n\t\tcontainerHeight: 136, // XLargeTokens: ContainerHeight = 136.0.dp\n\t\tbetweenSpace: 2, // XLargeTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.medium, // 12dp\n\t\t\thovered: 28, // XLargeTokens: InnerHoveredCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t\tpressed: 28, // XLargeTokens: InnerPressedCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 64, // XLargeTokens: LeadingButtonLeadingSpace = 64.0.dp\n\t\t\tend: 64, // XLargeTokens: LeadingButtonTrailingSpace = 64.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 43, // XLargeTokens: TrailingButtonLeadingSpace = 43.0.dp\n\t\t\tend: 43, // XLargeTokens: TrailingButtonTrailingSpace = 43.0.dp\n\t\t},\n\t\ttrailingIconSize: 50, // XLargeTokens: TrailingIconSize = 50.0.dp\n\t\topticalCenterOffset: -6, // Spec: XL = -6dp from center\n\t},\n} as const satisfies Record<SplitButtonSize, SplitButtonSizeTokens>;\n\n/**\n * Leading icon size per size variant.\n * From Compose ButtonDefaults.iconSizeFor logic.\n */\nexport const LEADING_ICON_SIZE_FOR_SIZE = {\n\txs: 18,\n\tsm: 20,\n\tmd: 24,\n\tlg: 32,\n\txl: 40,\n} as const;\n","import { cva } from \"class-variance-authority\";\n\n/**\n * Size variants for the Split Button components.\n * These map to the MD3 Expressive container heights.\n */\nconst splitButtonSizeVariants = {\n\txs: \"min-h-[32px]\",\n\tsm: \"min-h-[40px]\",\n\tmd: \"min-h-[56px]\",\n\tlg: \"min-h-[96px]\",\n\txl: \"min-h-[136px]\",\n};\n\n/**\n * Color variants for the Split Button components using CVA.\n */\nexport const splitButtonVariants = cva(\n\t\"group relative w-fit shrink-0 inline-flex flex-row items-center justify-center whitespace-nowrap select-none cursor-pointer transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-m3-primary z-10 overflow-hidden\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tfilled: \"bg-m3-primary text-m3-on-primary\",\n\t\t\t\ttonal: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\t\t\televated:\n\t\t\t\t\t\"bg-m3-surface-container-low text-m3-primary shadow-md hover:shadow-lg\",\n\t\t\t\toutlined: \"bg-transparent text-m3-primary border border-m3-outline\",\n\t\t\t},\n\t\t\tsize: splitButtonSizeVariants,\n\t\t\tdisabled: {\n\t\t\t\ttrue: \"pointer-events-none\",\n\t\t\t\tfalse: \"\",\n\t\t\t},\n\t\t},\n\t\tcompoundVariants: [\n\t\t\t{\n\t\t\t\tvariant: \"filled\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"tonal\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"elevated\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38] shadow-none\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"outlined\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"text-m3-on-surface/[0.38] border-m3-on-surface/[0.12]\",\n\t\t\t},\n\t\t],\n\t\tdefaultVariants: {\n\t\t\tvariant: \"filled\",\n\t\t\tsize: \"sm\",\n\t\t\tdisabled: false,\n\t\t},\n\t},\n);\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { BUTTON_TYPOGRAPHY_TOKENS } from \"../button/button-tokens\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tLEADING_ICON_SIZE_FOR_SIZE,\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonLeadingProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonLeadingComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonLeadingProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\ticon,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tasChild = false,\n\t\t\tonClick,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst typographyClass =\n\t\t\tBUTTON_TYPOGRAPHY_TOKENS[actualSize] ?? BUTTON_TYPOGRAPHY_TOKENS.sm;\n\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\t// Outer corner is always a full pill (50% of height)\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Format: TL TR BR BL\n\t\t// Left outer corners are fully rounded, right inner corners animate\n\t\tconst borderRadius = `${outerRadius}px ${innerCornerRadius}px ${innerCornerRadius}px ${outerRadius}px`;\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (disabled) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[disabled, onClick],\n\t\t);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\tconst leadingIconSize = LEADING_ICON_SIZE_FOR_SIZE[actualSize];\n\n\t\tconst labelContent = asChild\n\t\t\t? (\n\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t}>\n\t\t\t\t).props.children\n\t\t\t: children;\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<StateLayer\n\t\t\t\t\thovered={isHovered}\n\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\tpressed={isPressed}\n\t\t\t\t/>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{icon && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden [&_.md-icon]:text-[length:inherit]!\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: leadingIconSize,\n\t\t\t\t\t\t\twidth: leadingIconSize,\n\t\t\t\t\t\t\theight: leadingIconSize,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t{labelContent && (\n\t\t\t\t\t<span className=\"inline-flex items-center h-full gap-[inherit]\">\n\t\t\t\t\t\t{labelContent}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tsplitButtonVariants({\n\t\t\t\tvariant: actualVariant,\n\t\t\t\tsize: actualSize,\n\t\t\t\tdisabled,\n\t\t\t}),\n\t\t\ttypographyClass,\n\t\t\tclassName,\n\t\t);\n\n\t\tconst mergedStyle = {\n\t\t\tpaddingInlineStart: tokens.leadingPadding.start,\n\t\t\tpaddingInlineEnd: tokens.leadingPadding.end,\n\t\t\tgap: \"8px\",\n\t\t\tborderRadius,\n\t\t\t...(style as React.CSSProperties),\n\t\t};\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t{asChild ? (\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Slot>\n\t\t\t\t) : (\n\t\t\t\t\t<m.button\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpaddingInlineStart: tokens.leadingPadding.start,\n\t\t\t\t\t\t\tpaddingInlineEnd: tokens.leadingPadding.end,\n\t\t\t\t\t\t\tgap: \"8px\",\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t</m.button>\n\t\t\t\t)}\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonLeadingComponent.displayName = \"SplitButtonLeading\";\n\nexport const SplitButtonLeading = React.memo(SplitButtonLeadingComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => <SplitButtonLeading ref={ref} variant=\"filled\" {...props} />);\nFilledSplitButtonLeading.displayName = \"FilledSplitButtonLeading\";\n\nexport const TonalSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => <SplitButtonLeading ref={ref} variant=\"tonal\" {...props} />);\nTonalSplitButtonLeading.displayName = \"TonalSplitButtonLeading\";\n\nexport const ElevatedSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonLeading ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonLeading.displayName = \"ElevatedSplitButtonLeading\";\n\nexport const OutlinedSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonLeading ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonLeading.displayName = \"OutlinedSplitButtonLeading\";\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { domMax, LazyMotion, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Icon } from \"../../icon\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tSPLIT_BUTTON_CHEVRON_SPRING,\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonTrailingProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonTrailingComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonTrailingProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\tchecked,\n\t\t\tonCheckedChange,\n\t\t\ticon,\n\t\t\tdisabled,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst prefersReducedMotion = useReducedMotion();\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Format: TL TR BR BL\n\t\t// If checked (menu open), it morphs into a full circle (pill)\n\t\t// If unchecked, the left inner corners are animated, right outer are pill\n\t\tconst borderRadius = checked\n\t\t\t? `${outerRadius}px ${outerRadius}px ${outerRadius}px ${outerRadius}px`\n\t\t\t: `${innerCornerRadius}px ${outerRadius}px ${outerRadius}px ${innerCornerRadius}px`;\n\n\t\tconst handleToggle = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tonCheckedChange(!checked);\n\t\t\t}\n\t\t}, [disabled, checked, onCheckedChange]);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<StateLayer\n\t\t\t\t\thovered={isHovered}\n\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\tpressed={isPressed}\n\t\t\t\t/>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<m.div\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\trotate: checked ? 180 : 0,\n\t\t\t\t\t\tx: checked ? 0 : tokens.opticalCenterOffset,\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tprefersReducedMotion ? { duration: 0 } : SPLIT_BUTTON_CHEVRON_SPRING\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0\"\n\t\t\t\t>\n\t\t\t\t\t{icon ?? (\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tname=\"arrow_drop_down\"\n\t\t\t\t\t\t\tsize={tokens.trailingIconSize}\n\t\t\t\t\t\t\topticalSize={24}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</m.div>\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tsplitButtonVariants({\n\t\t\t\tvariant: actualVariant,\n\t\t\t\tsize: actualSize,\n\t\t\t\tdisabled,\n\t\t\t}),\n\t\t\tclassName,\n\t\t);\n\n\t\tconst mergedStyle = {\n\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\tborderRadius,\n\t\t\t...(style as React.CSSProperties),\n\t\t};\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t{asChild ? (\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-expanded={checked}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Slot>\n\t\t\t\t) : (\n\t\t\t\t\t<m.button\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-expanded={checked}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\t\t\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t</m.button>\n\t\t\t\t)}\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonTrailingComponent.displayName = \"SplitButtonTrailing\";\n\nexport const SplitButtonTrailing = React.memo(SplitButtonTrailingComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"filled\" {...props} />\n));\nFilledSplitButtonTrailing.displayName = \"FilledSplitButtonTrailing\";\n\nexport const TonalSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => <SplitButtonTrailing ref={ref} variant=\"tonal\" {...props} />);\nTonalSplitButtonTrailing.displayName = \"TonalSplitButtonTrailing\";\n\nexport const ElevatedSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonTrailing.displayName = \"ElevatedSplitButtonTrailing\";\n\nexport const OutlinedSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonTrailing.displayName = \"OutlinedSplitButtonTrailing\";\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonTrailingUncheckableProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonTrailingUncheckableComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonTrailingUncheckableProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\ticon,\n\t\t\tdisabled,\n\t\t\tonClick,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Uncheckable variant always has the asymmetric shape\n\t\tconst borderRadius = `${innerCornerRadius}px ${outerRadius}px ${outerRadius}px ${innerCornerRadius}px`;\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\t\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\t\t\t\t...style,\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tsplitButtonVariants({\n\t\t\t\t\t\t\tvariant: actualVariant,\n\t\t\t\t\t\t\tsize: actualSize,\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t\t<StateLayer\n\t\t\t\t\t\thovered={isHovered}\n\t\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\t\tpressed={isPressed}\n\t\t\t\t\t/>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tanimate={{ x: tokens.opticalCenterOffset }}\n\t\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: tokens.trailingIconSize,\n\t\t\t\t\t\t\theight: tokens.trailingIconSize,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</m.div>\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonTrailingUncheckableComponent.displayName =\n\t\"SplitButtonTrailingUncheckable\";\n\nexport const SplitButtonTrailingUncheckable = React.memo(\n\tSplitButtonTrailingUncheckableComponent,\n);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"filled\" {...props} />\n));\nFilledSplitButtonTrailingUncheckable.displayName =\n\t\"FilledSplitButtonTrailingUncheckable\";\n\nexport const TonalSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"tonal\" {...props} />\n));\nTonalSplitButtonTrailingUncheckable.displayName =\n\t\"TonalSplitButtonTrailingUncheckable\";\n\nexport const ElevatedSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonTrailingUncheckable.displayName =\n\t\"ElevatedSplitButtonTrailingUncheckable\";\n\nexport const OutlinedSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonTrailingUncheckable.displayName =\n\t\"OutlinedSplitButtonTrailingUncheckable\";\n"]}
|