@mieweb/ui 0.11.0-dev.43 → 0.11.0-dev.45

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.
Files changed (186) hide show
  1. package/agent/skills/mieweb-ui-catalog/selection-guidance.md +1 -1
  2. package/dist/ag-grid.cjs +2 -2
  3. package/dist/ag-grid.js +1 -1
  4. package/dist/{chunk-AHYDJN4H.cjs → chunk-2XHPPOXY.cjs} +32 -32
  5. package/dist/{chunk-AHYDJN4H.cjs.map → chunk-2XHPPOXY.cjs.map} +1 -1
  6. package/dist/{chunk-3IKIRGHI.cjs → chunk-3H6BQV2D.cjs} +6 -6
  7. package/dist/{chunk-3IKIRGHI.cjs.map → chunk-3H6BQV2D.cjs.map} +1 -1
  8. package/dist/{chunk-IIV5GNSK.cjs → chunk-3PT4B4JT.cjs} +4 -4
  9. package/dist/{chunk-IIV5GNSK.cjs.map → chunk-3PT4B4JT.cjs.map} +1 -1
  10. package/dist/{chunk-GLG6UE2H.cjs → chunk-3SEQVGLH.cjs} +4 -4
  11. package/dist/{chunk-GLG6UE2H.cjs.map → chunk-3SEQVGLH.cjs.map} +1 -1
  12. package/dist/{chunk-JUY2JLFL.js → chunk-3XDU7XIC.js} +3 -3
  13. package/dist/{chunk-JUY2JLFL.js.map → chunk-3XDU7XIC.js.map} +1 -1
  14. package/dist/{chunk-LQ22CY7X.js → chunk-46ZUORUE.js} +5 -5
  15. package/dist/{chunk-LQ22CY7X.js.map → chunk-46ZUORUE.js.map} +1 -1
  16. package/dist/{chunk-CKECOCYJ.js → chunk-4IOIDS2Z.js} +3 -3
  17. package/dist/{chunk-CKECOCYJ.js.map → chunk-4IOIDS2Z.js.map} +1 -1
  18. package/dist/{chunk-F7SZSOB3.js → chunk-6PCA5H47.js} +3 -3
  19. package/dist/{chunk-F7SZSOB3.js.map → chunk-6PCA5H47.js.map} +1 -1
  20. package/dist/{chunk-ULEX7OOJ.js → chunk-6Y6W5DUY.js} +4 -4
  21. package/dist/{chunk-ULEX7OOJ.js.map → chunk-6Y6W5DUY.js.map} +1 -1
  22. package/dist/{chunk-S7AMZ4RD.cjs → chunk-7K6SW4VB.cjs} +4 -4
  23. package/dist/{chunk-S7AMZ4RD.cjs.map → chunk-7K6SW4VB.cjs.map} +1 -1
  24. package/dist/{chunk-KY67AMQ5.cjs → chunk-7MF3O3BU.cjs} +4 -4
  25. package/dist/{chunk-KY67AMQ5.cjs.map → chunk-7MF3O3BU.cjs.map} +1 -1
  26. package/dist/{chunk-Z3WMDVMR.cjs → chunk-7QNBPB7F.cjs} +9 -5
  27. package/dist/chunk-7QNBPB7F.cjs.map +1 -0
  28. package/dist/{chunk-YFWDS6MX.js → chunk-AB24H2RM.js} +3 -3
  29. package/dist/{chunk-YFWDS6MX.js.map → chunk-AB24H2RM.js.map} +1 -1
  30. package/dist/{chunk-DSGFWT4D.js → chunk-AQBZEN43.js} +5 -5
  31. package/dist/{chunk-DSGFWT4D.js.map → chunk-AQBZEN43.js.map} +1 -1
  32. package/dist/{chunk-2W73UQ3T.js → chunk-BPYI7BDC.js} +3 -3
  33. package/dist/{chunk-2W73UQ3T.js.map → chunk-BPYI7BDC.js.map} +1 -1
  34. package/dist/{chunk-7U7SONM5.js → chunk-CVCUQ2MZ.js} +3 -3
  35. package/dist/{chunk-7U7SONM5.js.map → chunk-CVCUQ2MZ.js.map} +1 -1
  36. package/dist/{chunk-PWXDRFJL.cjs → chunk-DHEOWRIE.cjs} +6 -6
  37. package/dist/{chunk-PWXDRFJL.cjs.map → chunk-DHEOWRIE.cjs.map} +1 -1
  38. package/dist/{chunk-OYUIEJPN.js → chunk-GTRYDFMT.js} +38 -10
  39. package/dist/chunk-GTRYDFMT.js.map +1 -0
  40. package/dist/{chunk-2FZYZ4HT.cjs → chunk-HDSYYQYM.cjs} +4 -4
  41. package/dist/{chunk-2FZYZ4HT.cjs.map → chunk-HDSYYQYM.cjs.map} +1 -1
  42. package/dist/{chunk-MM32RSX4.cjs → chunk-HOE2U27V.cjs} +185 -18
  43. package/dist/chunk-HOE2U27V.cjs.map +1 -0
  44. package/dist/{chunk-JCIQIR5V.js → chunk-IGUDEWIW.js} +4 -4
  45. package/dist/{chunk-JCIQIR5V.js.map → chunk-IGUDEWIW.js.map} +1 -1
  46. package/dist/{chunk-GGLISETW.cjs → chunk-IKHK4GTF.cjs} +4 -4
  47. package/dist/{chunk-GGLISETW.cjs.map → chunk-IKHK4GTF.cjs.map} +1 -1
  48. package/dist/{chunk-YVKBXNPK.js → chunk-JBNQ2L3K.js} +10 -6
  49. package/dist/chunk-JBNQ2L3K.js.map +1 -0
  50. package/dist/{chunk-GU6TPVXF.cjs → chunk-JK2IWOI7.cjs} +6 -6
  51. package/dist/{chunk-GU6TPVXF.cjs.map → chunk-JK2IWOI7.cjs.map} +1 -1
  52. package/dist/{chunk-TZKBW4GA.cjs → chunk-K76UNS22.cjs} +6 -6
  53. package/dist/{chunk-TZKBW4GA.cjs.map → chunk-K76UNS22.cjs.map} +1 -1
  54. package/dist/{chunk-DAAJ3B2T.js → chunk-KP72MDFB.js} +4 -4
  55. package/dist/{chunk-DAAJ3B2T.js.map → chunk-KP72MDFB.js.map} +1 -1
  56. package/dist/{chunk-MLCIINXT.js → chunk-LBUXS6FJ.js} +4 -4
  57. package/dist/{chunk-MLCIINXT.js.map → chunk-LBUXS6FJ.js.map} +1 -1
  58. package/dist/{chunk-GG3IK5TL.cjs → chunk-MQK2D6I6.cjs} +9 -9
  59. package/dist/{chunk-GG3IK5TL.cjs.map → chunk-MQK2D6I6.cjs.map} +1 -1
  60. package/dist/{chunk-67X7L7JX.js → chunk-MQSGJB2B.js} +173 -6
  61. package/dist/chunk-MQSGJB2B.js.map +1 -0
  62. package/dist/{chunk-2GBVJHWN.cjs → chunk-NH5JOZLG.cjs} +13 -13
  63. package/dist/{chunk-2GBVJHWN.cjs.map → chunk-NH5JOZLG.cjs.map} +1 -1
  64. package/dist/{chunk-NWU634SO.cjs → chunk-O2EAHOXM.cjs} +4 -4
  65. package/dist/{chunk-NWU634SO.cjs.map → chunk-O2EAHOXM.cjs.map} +1 -1
  66. package/dist/{chunk-JUYBJLPI.cjs → chunk-O7Y56J4R.cjs} +4 -4
  67. package/dist/{chunk-JUYBJLPI.cjs.map → chunk-O7Y56J4R.cjs.map} +1 -1
  68. package/dist/{chunk-BQSREBF2.cjs → chunk-OJ2NCQ2R.cjs} +14 -14
  69. package/dist/{chunk-BQSREBF2.cjs.map → chunk-OJ2NCQ2R.cjs.map} +1 -1
  70. package/dist/{chunk-GLRKXJCR.js → chunk-OX32ITWC.js} +3 -3
  71. package/dist/{chunk-GLRKXJCR.js.map → chunk-OX32ITWC.js.map} +1 -1
  72. package/dist/{chunk-L4APW65W.cjs → chunk-PJ4XEBMU.cjs} +4 -4
  73. package/dist/{chunk-L4APW65W.cjs.map → chunk-PJ4XEBMU.cjs.map} +1 -1
  74. package/dist/{chunk-OZKJYLN6.js → chunk-PSCSU63K.js} +3 -3
  75. package/dist/{chunk-OZKJYLN6.js.map → chunk-PSCSU63K.js.map} +1 -1
  76. package/dist/{chunk-EI4JU5JF.js → chunk-RKM4VGAN.js} +3 -3
  77. package/dist/{chunk-EI4JU5JF.js.map → chunk-RKM4VGAN.js.map} +1 -1
  78. package/dist/{chunk-ME7EVT6F.js → chunk-RYGVILUR.js} +3 -3
  79. package/dist/{chunk-ME7EVT6F.js.map → chunk-RYGVILUR.js.map} +1 -1
  80. package/dist/{chunk-EGPDT7SM.js → chunk-S7NJV335.js} +3 -3
  81. package/dist/{chunk-EGPDT7SM.js.map → chunk-S7NJV335.js.map} +1 -1
  82. package/dist/{chunk-AHT2HRHC.cjs → chunk-TNRANQVI.cjs} +16 -16
  83. package/dist/{chunk-AHT2HRHC.cjs.map → chunk-TNRANQVI.cjs.map} +1 -1
  84. package/dist/{chunk-TERHGQ73.cjs → chunk-U7XWWU5H.cjs} +5 -5
  85. package/dist/{chunk-TERHGQ73.cjs.map → chunk-U7XWWU5H.cjs.map} +1 -1
  86. package/dist/{chunk-G35LXI2A.js → chunk-UIFN2LYT.js} +3 -3
  87. package/dist/{chunk-G35LXI2A.js.map → chunk-UIFN2LYT.js.map} +1 -1
  88. package/dist/{chunk-IYDPGQJA.js → chunk-UQAWXY6R.js} +3 -3
  89. package/dist/{chunk-IYDPGQJA.js.map → chunk-UQAWXY6R.js.map} +1 -1
  90. package/dist/{chunk-YWCHUUY3.js → chunk-VOPRL4RF.js} +7 -7
  91. package/dist/{chunk-YWCHUUY3.js.map → chunk-VOPRL4RF.js.map} +1 -1
  92. package/dist/{chunk-KB2PLV5Q.js → chunk-VQGRMCVT.js} +4 -4
  93. package/dist/{chunk-KB2PLV5Q.js.map → chunk-VQGRMCVT.js.map} +1 -1
  94. package/dist/{chunk-AWJBJYLZ.cjs → chunk-X6THHGTZ.cjs} +37 -37
  95. package/dist/{chunk-AWJBJYLZ.cjs.map → chunk-X6THHGTZ.cjs.map} +1 -1
  96. package/dist/{chunk-Q6QLGCL7.cjs → chunk-XCCH5KHW.cjs} +9 -9
  97. package/dist/{chunk-Q6QLGCL7.cjs.map → chunk-XCCH5KHW.cjs.map} +1 -1
  98. package/dist/{chunk-KQXD6BFO.cjs → chunk-XM3D4KAF.cjs} +9 -9
  99. package/dist/{chunk-KQXD6BFO.cjs.map → chunk-XM3D4KAF.cjs.map} +1 -1
  100. package/dist/{chunk-PINIBEIU.cjs → chunk-XRXOGMMG.cjs} +39 -11
  101. package/dist/chunk-XRXOGMMG.cjs.map +1 -0
  102. package/dist/{chunk-XPWFIDZM.cjs → chunk-XU3X2AUL.cjs} +4 -4
  103. package/dist/{chunk-XPWFIDZM.cjs.map → chunk-XU3X2AUL.cjs.map} +1 -1
  104. package/dist/{chunk-3A4N5E6P.js → chunk-XZ65FX6T.js} +3 -3
  105. package/dist/{chunk-3A4N5E6P.js.map → chunk-XZ65FX6T.js.map} +1 -1
  106. package/dist/{chunk-CRR7AE5D.js → chunk-Z6I4XFPC.js} +3 -3
  107. package/dist/{chunk-CRR7AE5D.js.map → chunk-Z6I4XFPC.js.map} +1 -1
  108. package/dist/{chunk-LTCHD3K5.cjs → chunk-Z7ZOSENN.cjs} +5 -5
  109. package/dist/{chunk-LTCHD3K5.cjs.map → chunk-Z7ZOSENN.cjs.map} +1 -1
  110. package/dist/{chunk-NZUQL42A.cjs → chunk-ZDA6FEKA.cjs} +5 -5
  111. package/dist/{chunk-NZUQL42A.cjs.map → chunk-ZDA6FEKA.cjs.map} +1 -1
  112. package/dist/{chunk-UY2EZYIC.js → chunk-ZSBG6C3P.js} +3 -3
  113. package/dist/{chunk-UY2EZYIC.js.map → chunk-ZSBG6C3P.js.map} +1 -1
  114. package/dist/{chunk-KAQNYX7B.js → chunk-ZVRJVUFX.js} +3 -3
  115. package/dist/{chunk-KAQNYX7B.js.map → chunk-ZVRJVUFX.js.map} +1 -1
  116. package/dist/components/AudioPlayer/index.cjs +7 -7
  117. package/dist/components/AudioPlayer/index.js +2 -2
  118. package/dist/components/BoardView/index.cjs +5 -5
  119. package/dist/components/BoardView/index.js +2 -2
  120. package/dist/components/CollabStatus/index.cjs +5 -5
  121. package/dist/components/CollabStatus/index.js +2 -2
  122. package/dist/components/Dropdown/index.cjs +9 -9
  123. package/dist/components/Dropdown/index.d.cts +6 -1
  124. package/dist/components/Dropdown/index.d.ts +6 -1
  125. package/dist/components/Dropdown/index.js +2 -2
  126. package/dist/components/EmailEditor/index.cjs +16 -16
  127. package/dist/components/EmailEditor/index.js +7 -7
  128. package/dist/components/MediaEditor/index.cjs +10 -10
  129. package/dist/components/MediaEditor/index.js +5 -5
  130. package/dist/components/MediaFeed/index.cjs +6 -6
  131. package/dist/components/MediaFeed/index.js +5 -5
  132. package/dist/components/MediaPlayer/index.cjs +8 -8
  133. package/dist/components/MediaPlayer/index.js +4 -4
  134. package/dist/components/MegaMenu/index.cjs +5 -5
  135. package/dist/components/MegaMenu/index.js +2 -2
  136. package/dist/components/RecordHeader/index.cjs +5 -5
  137. package/dist/components/RecordHeader/index.js +3 -3
  138. package/dist/components/RecordLayout/index.cjs +5 -5
  139. package/dist/components/RecordLayout/index.js +3 -3
  140. package/dist/components/RichTextEditor/index.cjs +6 -6
  141. package/dist/components/RichTextEditor/index.js +3 -3
  142. package/dist/components/Slider/index.cjs +6 -6
  143. package/dist/components/Slider/index.js +2 -2
  144. package/dist/components/SliderCalculator/index.cjs +5 -5
  145. package/dist/components/SliderCalculator/index.js +3 -3
  146. package/dist/components/SuperChat/index.cjs +23 -23
  147. package/dist/components/SuperChat/index.js +8 -8
  148. package/dist/components/SuperChat/plugins/index.cjs +5 -5
  149. package/dist/components/SuperChat/plugins/index.js +4 -4
  150. package/dist/components/Tabs/index.cjs +8 -8
  151. package/dist/components/Tabs/index.js +2 -2
  152. package/dist/components/Textarea/index.cjs +8 -8
  153. package/dist/components/Textarea/index.js +5 -5
  154. package/dist/components/ThemeProvider/index.cjs +9 -9
  155. package/dist/components/ThemeProvider/index.js +3 -3
  156. package/dist/components/Tooltip/index.cjs +3 -3
  157. package/dist/components/Tooltip/index.js +2 -2
  158. package/dist/components/ViewSet/index.cjs +5 -5
  159. package/dist/components/ViewSet/index.js +4 -4
  160. package/dist/components/ViewSwitcher/index.cjs +4 -4
  161. package/dist/components/ViewSwitcher/index.js +2 -2
  162. package/dist/deck.cjs +3 -3
  163. package/dist/deck.js +1 -1
  164. package/dist/esheet.cjs +107 -107
  165. package/dist/esheet.js +10 -10
  166. package/dist/hooks/index.cjs +5 -5
  167. package/dist/hooks/index.js +1 -1
  168. package/dist/index.cjs +284 -284
  169. package/dist/index.d.cts +6 -1
  170. package/dist/index.d.ts +6 -1
  171. package/dist/index.js +40 -40
  172. package/dist/kerebron.cjs +6 -6
  173. package/dist/kerebron.js +4 -4
  174. package/dist/{model-5PB6KNYH.cjs → model-2TISYEYF.cjs} +20 -20
  175. package/dist/{model-5PB6KNYH.cjs.map → model-2TISYEYF.cjs.map} +1 -1
  176. package/dist/{model-OGWTZEXR.js → model-BCS5BUK3.js} +6 -6
  177. package/dist/{model-OGWTZEXR.js.map → model-BCS5BUK3.js.map} +1 -1
  178. package/dist/org-chart.cjs +2 -2
  179. package/dist/org-chart.js +1 -1
  180. package/package.json +1 -1
  181. package/dist/chunk-67X7L7JX.js.map +0 -1
  182. package/dist/chunk-MM32RSX4.cjs.map +0 -1
  183. package/dist/chunk-OYUIEJPN.js.map +0 -1
  184. package/dist/chunk-PINIBEIU.cjs.map +0 -1
  185. package/dist/chunk-YVKBXNPK.js.map +0 -1
  186. package/dist/chunk-Z3WMDVMR.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/SliderCalculator/SliderCalculator.tsx"],"names":["usePrefersReducedMotion","React","jsx","cn","jsxs","Slider","ChevronUp","ChevronDown"],"mappings":"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","file":"chunk-JUYBJLPI.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Slider } from '../Slider';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type CalculatorFormat =\n | 'number'\n | 'currency'\n | 'compactCurrency'\n | 'percent'\n | 'hours'\n | ((value: number) => string);\n\nexport interface CalculatorInput {\n /** Key in the values object passed to `compute`. */\n id: string;\n label: string;\n min: number;\n max: number;\n step?: number;\n /** Starting value. */\n defaultValue: number;\n /** How the current value renders next to the label. Default `number`. */\n format?: CalculatorFormat;\n description?: string;\n}\n\nexport interface CalculatorBreakdown {\n label: string;\n value: number;\n}\n\nexport interface CalculatorMathRow {\n label: string;\n value: string;\n}\n\nexport interface CalculatorResult {\n /** The headline number. */\n total: number;\n /** One-line context under the headline, e.g. \"42% of today's spend · 1,200 hours returned\". */\n summary?: string;\n /** Horizontal bars showing what makes up `total`. */\n breakdown?: CalculatorBreakdown[];\n /** Rows revealed by \"Show the math\". */\n math?: CalculatorMathRow[];\n /** Free-text assumptions listed under the math. */\n assumptions?: string[];\n}\n\nexport interface SliderCalculatorProps {\n inputs: CalculatorInput[];\n /** Pure function from current values to a result. Runs on every change. */\n compute: (values: Record<string, number>) => CalculatorResult;\n /** Copy for the controls column. */\n eyebrow?: string;\n heading?: string;\n description?: string;\n headingLevel?: 'h2' | 'h3';\n /** Label above the headline number. Default \"Estimated annual value\". */\n resultLabel?: string;\n /** Format for the headline. Default `compactCurrency`. */\n resultFormat?: CalculatorFormat;\n /** Format for breakdown values. Default `currency`. */\n breakdownFormat?: CalculatorFormat;\n /** Actions under the result (Buttons, links). */\n actions?: React.ReactNode;\n /** Small print under the actions. */\n footnote?: string;\n /** Labels for the math toggle. */\n mathLabels?: { show?: string; hide?: string };\n /** Currency for the built-in formatters. Default `USD`. */\n currency?: string;\n locale?: string;\n /** Fires with the latest values and result on every change. */\n onChange?: (values: Record<string, number>, result: CalculatorResult) => void;\n className?: string;\n}\n\n// =============================================================================\n// Formatting\n// =============================================================================\n\nfunction makeFormatter(\n format: CalculatorFormat | undefined,\n locale: string,\n currency: string\n): (v: number) => string {\n if (typeof format === 'function') return format;\n switch (format) {\n case 'currency':\n return (v) =>\n v.toLocaleString(locale, {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n });\n case 'compactCurrency':\n return (v) =>\n v.toLocaleString(locale, {\n style: 'currency',\n currency,\n notation: 'compact',\n maximumFractionDigits: v >= 1_000_000 ? 2 : 0,\n });\n case 'percent':\n return (v) => `${v.toLocaleString(locale)}%`;\n case 'hours':\n return (v) => `${v.toLocaleString(locale)} hr`;\n default:\n return (v) => v.toLocaleString(locale);\n }\n}\n\n// =============================================================================\n// AnimatedNumber\n// =============================================================================\n\nexport interface AnimatedNumberProps {\n value: number;\n format?: (v: number) => string;\n /** Tween length in ms. Default 480. */\n duration?: number;\n className?: string;\n}\n\n/** Tweens between numeric values with an ease-out; snaps under reduced motion. */\nexport function AnimatedNumber({\n value,\n format = (v) => v.toLocaleString(),\n duration = 480,\n className,\n}: AnimatedNumberProps) {\n const reduced = usePrefersReducedMotion();\n const [shown, setShown] = React.useState(value);\n const shownRef = React.useRef(value);\n\n React.useEffect(() => {\n if (reduced || typeof window === 'undefined') {\n shownRef.current = value;\n setShown(value);\n return;\n }\n const from = shownRef.current;\n const start = performance.now();\n let raf = 0;\n const tick = (t: number) => {\n const p = Math.min(1, (t - start) / duration);\n const eased = 1 - Math.pow(1 - p, 3);\n const v = from + (value - from) * eased;\n shownRef.current = v;\n setShown(v);\n if (p < 1) raf = requestAnimationFrame(tick);\n };\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }, [value, duration, reduced]);\n\n return (\n <span className={cn('tabular-nums', className)} data-slot=\"animated-number\">\n {format(shown)}\n </span>\n );\n}\n\n// =============================================================================\n// SliderCalculator\n// =============================================================================\n\n/**\n * A two-column interactive calculator: labelled sliders on the left, a live\n * result panel on the right with an animated headline number, a one-line\n * summary, proportional breakdown bars, a \"Show the math\" disclosure and an\n * actions slot. Bring your own `compute` — the component owns only the\n * interaction. Ported from the Enterprise Health ROI calculator.\n *\n * @example\n * ```tsx\n * <SliderCalculator\n * heading=\"What is consolidation worth?\"\n * inputs={[\n * { id: 'people', label: 'People covered', min: 500, max: 60000, step: 500, defaultValue: 8000 },\n * { id: 'cost', label: 'Cost per exam', min: 20, max: 400, step: 5, defaultValue: 120, format: 'currency' },\n * ]}\n * compute={({ people, cost }) => ({ total: people * cost * 0.18 })}\n * actions={<Button effect=\"sheen\">Request a demo</Button>}\n * />\n * ```\n */\nexport function SliderCalculator({\n inputs,\n compute,\n eyebrow,\n heading,\n description,\n headingLevel: Heading = 'h2',\n resultLabel = 'Estimated annual value',\n resultFormat = 'compactCurrency',\n breakdownFormat = 'currency',\n actions,\n footnote,\n mathLabels,\n currency = 'USD',\n locale = 'en-US',\n onChange,\n className,\n}: SliderCalculatorProps) {\n const [values, setValues] = React.useState<Record<string, number>>(() =>\n Object.fromEntries(inputs.map((i) => [i.id, i.defaultValue]))\n );\n const [showMath, setShowMath] = React.useState(false);\n const id = React.useId();\n\n const result = React.useMemo(() => compute(values), [compute, values]);\n\n // Notify from an effect keyed on `values` only. `result` and `onChange` are\n // read through a ref: an inline `compute` or `onChange` prop gets a new\n // identity on every parent render, and depending on either would re-fire the\n // notification (and potentially loop) without any actual slider change.\n const skipInitialNotify = React.useRef(true);\n const notifyRef = React.useRef({ onChange, result });\n notifyRef.current = { onChange, result };\n React.useEffect(() => {\n if (skipInitialNotify.current) {\n skipInitialNotify.current = false;\n return;\n }\n notifyRef.current.onChange?.(values, notifyRef.current.result);\n }, [values]);\n\n const fmtResult = React.useMemo(\n () => makeFormatter(resultFormat, locale, currency),\n [resultFormat, locale, currency]\n );\n const fmtBreakdown = makeFormatter(breakdownFormat, locale, currency);\n\n // Announce only the settled total. The result container previously carried\n // aria-live while `AnimatedNumber` updated every animation frame, so screen\n // readers could queue or repeat intermediate values during a drag.\n const [announced, setAnnounced] = React.useState('');\n const skipInitialAnnounce = React.useRef(true);\n React.useEffect(() => {\n if (skipInitialAnnounce.current) {\n skipInitialAnnounce.current = false;\n return;\n }\n const t = window.setTimeout(\n () => setAnnounced(fmtResult(result.total)),\n 600\n );\n return () => window.clearTimeout(t);\n }, [result.total, fmtResult]);\n\n const labels = {\n show: 'Show the math',\n hide: 'Hide the math',\n ...mathLabels,\n };\n\n const set = (key: string, v: number) => {\n setValues((prev) => ({ ...prev, [key]: v }));\n };\n\n return (\n <div\n data-slot=\"slider-calculator\"\n className={cn(\n 'border-border bg-card text-card-foreground grid overflow-hidden rounded-2xl border shadow-md',\n 'lg:grid-cols-[1.1fr_1fr]',\n className\n )}\n >\n {/* Controls */}\n <div className=\"p-6 sm:p-8\">\n {eyebrow && (\n <p className=\"text-primary-800 dark:text-primary-300 mb-2 text-[11px] font-bold tracking-[0.14em] uppercase\">\n {eyebrow}\n </p>\n )}\n {heading && (\n <Heading className=\"text-foreground text-2xl leading-tight font-semibold sm:text-3xl\">\n {heading}\n </Heading>\n )}\n {description && (\n <p className=\"text-muted-foreground mt-3 text-sm\">{description}</p>\n )}\n\n <div className={cn('space-y-5', (heading || description) && 'mt-7')}>\n {inputs.map((input) => (\n <Slider\n key={input.id}\n id={`${id}-${input.id}`}\n label={input.label}\n description={input.description}\n min={input.min}\n max={input.max}\n step={input.step}\n value={values[input.id]}\n onValueChange={(v) => set(input.id, v)}\n showValue\n formatValue={makeFormatter(input.format, locale, currency)}\n />\n ))}\n </div>\n </div>\n\n {/* Result */}\n <div\n data-slot=\"slider-calculator-result\"\n className=\"bg-primary-950 flex flex-col gap-6 p-6 text-white [background:radial-gradient(120%_120%_at_100%_0%,var(--mieweb-primary-800),var(--mieweb-primary-950)_70%)] sm:p-8\"\n >\n <span aria-live=\"polite\" className=\"sr-only\">\n {announced ? `${resultLabel}: ${announced}` : ''}\n </span>\n <div>\n <p className=\"text-[11px] font-bold tracking-[0.14em] text-white/70 uppercase\">\n {resultLabel}\n </p>\n <p className=\"mt-2 text-5xl leading-none font-semibold tracking-tight sm:text-6xl\">\n <AnimatedNumber value={result.total} format={fmtResult} />\n </p>\n {result.summary && (\n <p className=\"mt-3 text-sm text-white/80\">{result.summary}</p>\n )}\n </div>\n\n {result.breakdown && result.breakdown.length > 0 && (\n <div className=\"space-y-3\">\n {result.breakdown.map((b) => {\n const pct =\n result.total > 0\n ? Math.max(2, Math.min(100, (b.value / result.total) * 100))\n : 0;\n return (\n <div key={b.label}>\n <div className=\"mb-1 flex items-baseline justify-between gap-3 text-sm\">\n <span className=\"text-white/80\">{b.label}</span>\n <b className=\"tabular-nums\">\n <AnimatedNumber\n value={Math.max(b.value, 0)}\n format={fmtBreakdown}\n />\n </b>\n </div>\n <div className=\"h-1.5 overflow-hidden rounded-full bg-white/15\">\n <span\n className=\"block h-full rounded-full transition-[width] duration-500 ease-out [background:linear-gradient(90deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-300))]\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {(result.math?.length || result.assumptions?.length) && (\n <div>\n <button\n type=\"button\"\n onClick={() => setShowMath((v) => !v)}\n aria-expanded={showMath}\n aria-controls={`${id}-math`}\n className=\"inline-flex items-center gap-1 text-sm font-semibold text-white/80 underline-offset-4 hover:text-white hover:underline\"\n >\n {showMath ? labels.hide : labels.show}\n {showMath ? (\n <ChevronUp size={14} aria-hidden />\n ) : (\n <ChevronDown size={14} aria-hidden />\n )}\n </button>\n {showMath && (\n <div\n id={`${id}-math`}\n className=\"mt-3 rounded-xl border border-white/15 bg-white/5 p-4 text-sm\"\n >\n {result.math?.map((row) => (\n <div\n key={row.label}\n className=\"flex justify-between gap-4 border-b border-white/10 py-1.5 last:border-0\"\n >\n <span className=\"text-white/75\">{row.label}</span>\n <b className=\"tabular-nums\">{row.value}</b>\n </div>\n ))}\n {result.assumptions && result.assumptions.length > 0 && (\n <ul className=\"mt-3 list-disc space-y-1 ps-5 text-xs text-white/70\">\n {result.assumptions.map((a) => (\n <li key={a}>{a}</li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n )}\n\n {actions && (\n <div className=\"mt-auto flex flex-wrap gap-3\">{actions}</div>\n )}\n {footnote && <p className=\"text-xs text-white/60\">{footnote}</p>}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/SliderCalculator/SliderCalculator.tsx"],"names":["usePrefersReducedMotion","React","jsx","cn","jsxs","Slider","ChevronUp","ChevronDown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FA,SAAS,aAAA,CACP,MAAA,EACA,MAAA,EACA,QAAA,EACuB;AACvB,EAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,OAAO,MAAA;AACzC,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,UAAA;AACH,MAAA,OAAO,CAAC,CAAA,KACN,CAAA,CAAE,cAAA,CAAe,MAAA,EAAQ;AAAA,QACvB,KAAA,EAAO,UAAA;AAAA,QACP,QAAA;AAAA,QACA,qBAAA,EAAuB;AAAA,OACxB,CAAA;AAAA,IACL,KAAK,iBAAA;AACH,MAAA,OAAO,CAAC,CAAA,KACN,CAAA,CAAE,cAAA,CAAe,MAAA,EAAQ;AAAA,QACvB,KAAA,EAAO,UAAA;AAAA,QACP,QAAA;AAAA,QACA,QAAA,EAAU,SAAA;AAAA,QACV,qBAAA,EAAuB,CAAA,IAAK,GAAA,GAAY,CAAA,GAAI;AAAA,OAC7C,CAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,OAAO,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,cAAA,CAAe,MAAM,CAAC,CAAA,CAAA,CAAA;AAAA,IAC3C,KAAK,OAAA;AACH,MAAA,OAAO,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,cAAA,CAAe,MAAM,CAAC,CAAA,GAAA,CAAA;AAAA,IAC3C;AACE,MAAA,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,CAAe,MAAM,CAAA;AAAA;AAE3C;AAeO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,MAAA,GAAS,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,EACjC,QAAA,GAAW,GAAA;AAAA,EACX;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,UAAUA,yCAAA,EAAwB;AACxC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUC,0BAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAiBA,wBAAO,KAAK,CAAA;AAEnC,EAAMA,2BAAU,MAAM;AACpB,IAAA,IAAI,OAAA,IAAW,OAAO,MAAA,KAAW,WAAA,EAAa;AAC5C,MAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,MAAA,QAAA,CAAS,KAAK,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAO,QAAA,CAAS,OAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAC9B,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAc;AAC1B,MAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,CAAA,GAAI,SAAS,QAAQ,CAAA;AAC5C,MAAA,MAAM,QAAQ,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,GAAG,CAAC,CAAA;AACnC,MAAA,MAAM,CAAA,GAAI,IAAA,GAAA,CAAQ,KAAA,GAAQ,IAAA,IAAQ,KAAA;AAClC,MAAA,QAAA,CAAS,OAAA,GAAU,CAAA;AACnB,MAAA,QAAA,CAAS,CAAC,CAAA;AACV,MAAA,IAAI,CAAA,GAAI,CAAA,EAAG,GAAA,GAAM,qBAAA,CAAsB,IAAI,CAAA;AAAA,IAC7C,CAAA;AACA,IAAA,GAAA,GAAM,sBAAsB,IAAI,CAAA;AAChC,IAAA,OAAO,MAAM,qBAAqB,GAAG,CAAA;AAAA,EACvC,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,OAAO,CAAC,CAAA;AAE7B,EAAA,uBACEC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWC,oBAAA,CAAG,cAAA,EAAgB,SAAS,CAAA,EAAG,WAAA,EAAU,iBAAA,EACvD,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EACf,CAAA;AAEJ;AA0BO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAc,OAAA,GAAU,IAAA;AAAA,EACxB,WAAA,GAAc,wBAAA;AAAA,EACd,YAAA,GAAe,iBAAA;AAAA,EACf,eAAA,GAAkB,UAAA;AAAA,EAClB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,MAAA,GAAS,OAAA;AAAA,EACT,QAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUF,gBAAA,CAAA,QAAA;AAAA,IAAiC,MACjE,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,YAAY,CAAC,CAAC;AAAA,GAC9D;AACA,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUA,0BAAS,KAAK,CAAA;AACpD,EAAA,MAAM,KAAWA,gBAAA,CAAA,KAAA,EAAM;AAEvB,EAAA,MAAM,MAAA,GAAeA,yBAAQ,MAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,CAAC,OAAA,EAAS,MAAM,CAAC,CAAA;AAMrE,EAAA,MAAM,iBAAA,GAA0BA,wBAAO,IAAI,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAkBA,gBAAA,CAAA,MAAA,CAAO,EAAE,QAAA,EAAU,QAAQ,CAAA;AACnD,EAAA,SAAA,CAAU,OAAA,GAAU,EAAE,QAAA,EAAU,MAAA,EAAO;AACvC,EAAMA,2BAAU,MAAM;AACpB,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,OAAA,CAAQ,QAAA,GAAW,MAAA,EAAQ,SAAA,CAAU,QAAQ,MAAM,CAAA;AAAA,EAC/D,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,SAAA,GAAkBA,gBAAA,CAAA,OAAA;AAAA,IACtB,MAAM,aAAA,CAAc,YAAA,EAAc,MAAA,EAAQ,QAAQ,CAAA;AAAA,IAClD,CAAC,YAAA,EAAc,MAAA,EAAQ,QAAQ;AAAA,GACjC;AACA,EAAA,MAAM,YAAA,GAAe,aAAA,CAAc,eAAA,EAAiB,MAAA,EAAQ,QAAQ,CAAA;AAKpE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,0BAAS,EAAE,CAAA;AACnD,EAAA,MAAM,mBAAA,GAA4BA,wBAAO,IAAI,CAAA;AAC7C,EAAMA,2BAAU,MAAM;AACpB,IAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,MAAA,mBAAA,CAAoB,OAAA,GAAU,KAAA;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAI,MAAA,CAAO,UAAA;AAAA,MACf,MAAM,YAAA,CAAa,SAAA,CAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC1C;AAAA,KACF;AACA,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,CAAC,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,MAAA,CAAO,KAAA,EAAO,SAAS,CAAC,CAAA;AAE5B,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,IAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAM,eAAA;AAAA,IACN,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,GAAA,EAAa,CAAA,KAAc;AACtC,IAAA,SAAA,CAAU,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAA,EAAE,CAAE,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,uBACEG,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAWD,oBAAA;AAAA,QACT,8FAAA;AAAA,QACA,0BAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EACZ,QAAA,EAAA;AAAA,UAAA,OAAA,oBACCF,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+FAAA,EACV,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,UAED,OAAA,oBACCA,cAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,oEAChB,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,UAED,WAAA,oBACCA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,0BAGjEA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,oBAAA,CAAG,WAAA,EAAA,CAAc,OAAA,IAAW,WAAA,KAAgB,MAAM,CAAA,EAC/D,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXD,cAAA;AAAA,YAACG,wBAAA;AAAA,YAAA;AAAA,cAEC,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,MAAM,EAAE,CAAA,CAAA;AAAA,cACrB,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,KAAK,KAAA,CAAM,GAAA;AAAA,cACX,KAAK,KAAA,CAAM,GAAA;AAAA,cACX,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA;AAAA,cACtB,eAAe,CAAC,CAAA,KAAM,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,cACrC,SAAA,EAAS,IAAA;AAAA,cACT,WAAA,EAAa,aAAA,CAAc,KAAA,CAAM,MAAA,EAAQ,QAAQ,QAAQ;AAAA,aAAA;AAAA,YAVpD,KAAA,CAAM;AAAA,WAYd,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAD,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,0BAAA;AAAA,YACV,SAAA,EAAU,qKAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAF,cAAA,CAAC,MAAA,EAAA,EAAK,WAAA,EAAU,QAAA,EAAS,SAAA,EAAU,SAAA,EAChC,QAAA,EAAA,SAAA,GAAY,CAAA,EAAG,WAAW,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,GAAK,EAAA,EAChD,CAAA;AAAA,8CACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iEAAA,EACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,gCACAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qEAAA,EACX,QAAA,kBAAAA,cAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,CAAA,EAC1D,CAAA;AAAA,gBACC,OAAO,OAAA,oBACNA,cAAA,CAAC,OAAE,SAAA,EAAU,4BAAA,EAA8B,iBAAO,OAAA,EAAQ;AAAA,eAAA,EAE9D,CAAA;AAAA,cAEC,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,oBAC7CA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AAC3B,gBAAA,MAAM,MACJ,MAAA,CAAO,KAAA,GAAQ,CAAA,GACX,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAM,EAAE,KAAA,GAAQ,MAAA,CAAO,KAAA,GAAS,GAAG,CAAC,CAAA,GACzD,CAAA;AACN,gBAAA,uCACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAE,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EACb,QAAA,EAAA;AAAA,oCAAAF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,oCACzCA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EACX,QAAA,kBAAAA,cAAA;AAAA,sBAAC,cAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,wBAC1B,MAAA,EAAQ;AAAA;AAAA,qBACV,EACF;AAAA,mBAAA,EACF,CAAA;AAAA,kCACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,iLAAA;AAAA,sBACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA;AAAI;AAAA,mBAC5B,EACF;AAAA,iBAAA,EAAA,EAfQ,EAAE,KAgBZ,CAAA;AAAA,cAEJ,CAAC,CAAA,EACH,CAAA;AAAA,cAAA,CAGA,OAAO,IAAA,EAAM,MAAA,IAAU,OAAO,WAAA,EAAa,MAAA,qCAC1C,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAE,eAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,SAAS,MAAM,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,oBACpC,eAAA,EAAe,QAAA;AAAA,oBACf,eAAA,EAAe,GAAG,EAAE,CAAA,KAAA,CAAA;AAAA,oBACpB,SAAA,EAAU,wHAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sBAAA,QAAA,GAAW,MAAA,CAAO,OAAO,MAAA,CAAO,IAAA;AAAA,sBAChC,QAAA,mBACCF,cAAA,CAACI,qBAAA,EAAA,EAAU,IAAA,EAAM,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,CAAA,mBAEjCJ,cAAA,CAACK,uBAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,eAAW,IAAA,EAAC;AAAA;AAAA;AAAA,iBAEvC;AAAA,gBACC,QAAA,oBACCH,eAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,GAAG,EAAE,CAAA,KAAA,CAAA;AAAA,oBACT,SAAA,EAAU,+DAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sBAAA,MAAA,CAAO,IAAA,EAAM,GAAA,CAAI,CAAC,GAAA,qBACjBA,eAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BAEC,SAAA,EAAU,0EAAA;AAAA,0BAEV,QAAA,EAAA;AAAA,4CAAAF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,GAAA,CAAI,KAAA,EAAM,CAAA;AAAA,4CAC3CA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAgB,cAAI,KAAA,EAAM;AAAA;AAAA,yBAAA;AAAA,wBAJlC,GAAA,CAAI;AAAA,uBAMZ,CAAA;AAAA,sBACA,MAAA,CAAO,eAAe,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA,oBACjDA,cAAA,CAAC,QAAG,SAAA,EAAU,qDAAA,EACX,iBAAO,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,qBACvBA,cAAA,CAAC,QAAY,QAAA,EAAA,CAAA,EAAA,EAAJ,CAAM,CAChB,CAAA,EACH;AAAA;AAAA;AAAA;AAEJ,eAAA,EAEJ,CAAA;AAAA,cAGD,OAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAgC,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,cAExD,QAAA,oBAAYA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yBAAyB,QAAA,EAAA,QAAA,EAAS;AAAA;AAAA;AAAA;AAC9D;AAAA;AAAA,GACF;AAEJ","file":"chunk-O7Y56J4R.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Slider } from '../Slider';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type CalculatorFormat =\n | 'number'\n | 'currency'\n | 'compactCurrency'\n | 'percent'\n | 'hours'\n | ((value: number) => string);\n\nexport interface CalculatorInput {\n /** Key in the values object passed to `compute`. */\n id: string;\n label: string;\n min: number;\n max: number;\n step?: number;\n /** Starting value. */\n defaultValue: number;\n /** How the current value renders next to the label. Default `number`. */\n format?: CalculatorFormat;\n description?: string;\n}\n\nexport interface CalculatorBreakdown {\n label: string;\n value: number;\n}\n\nexport interface CalculatorMathRow {\n label: string;\n value: string;\n}\n\nexport interface CalculatorResult {\n /** The headline number. */\n total: number;\n /** One-line context under the headline, e.g. \"42% of today's spend · 1,200 hours returned\". */\n summary?: string;\n /** Horizontal bars showing what makes up `total`. */\n breakdown?: CalculatorBreakdown[];\n /** Rows revealed by \"Show the math\". */\n math?: CalculatorMathRow[];\n /** Free-text assumptions listed under the math. */\n assumptions?: string[];\n}\n\nexport interface SliderCalculatorProps {\n inputs: CalculatorInput[];\n /** Pure function from current values to a result. Runs on every change. */\n compute: (values: Record<string, number>) => CalculatorResult;\n /** Copy for the controls column. */\n eyebrow?: string;\n heading?: string;\n description?: string;\n headingLevel?: 'h2' | 'h3';\n /** Label above the headline number. Default \"Estimated annual value\". */\n resultLabel?: string;\n /** Format for the headline. Default `compactCurrency`. */\n resultFormat?: CalculatorFormat;\n /** Format for breakdown values. Default `currency`. */\n breakdownFormat?: CalculatorFormat;\n /** Actions under the result (Buttons, links). */\n actions?: React.ReactNode;\n /** Small print under the actions. */\n footnote?: string;\n /** Labels for the math toggle. */\n mathLabels?: { show?: string; hide?: string };\n /** Currency for the built-in formatters. Default `USD`. */\n currency?: string;\n locale?: string;\n /** Fires with the latest values and result on every change. */\n onChange?: (values: Record<string, number>, result: CalculatorResult) => void;\n className?: string;\n}\n\n// =============================================================================\n// Formatting\n// =============================================================================\n\nfunction makeFormatter(\n format: CalculatorFormat | undefined,\n locale: string,\n currency: string\n): (v: number) => string {\n if (typeof format === 'function') return format;\n switch (format) {\n case 'currency':\n return (v) =>\n v.toLocaleString(locale, {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n });\n case 'compactCurrency':\n return (v) =>\n v.toLocaleString(locale, {\n style: 'currency',\n currency,\n notation: 'compact',\n maximumFractionDigits: v >= 1_000_000 ? 2 : 0,\n });\n case 'percent':\n return (v) => `${v.toLocaleString(locale)}%`;\n case 'hours':\n return (v) => `${v.toLocaleString(locale)} hr`;\n default:\n return (v) => v.toLocaleString(locale);\n }\n}\n\n// =============================================================================\n// AnimatedNumber\n// =============================================================================\n\nexport interface AnimatedNumberProps {\n value: number;\n format?: (v: number) => string;\n /** Tween length in ms. Default 480. */\n duration?: number;\n className?: string;\n}\n\n/** Tweens between numeric values with an ease-out; snaps under reduced motion. */\nexport function AnimatedNumber({\n value,\n format = (v) => v.toLocaleString(),\n duration = 480,\n className,\n}: AnimatedNumberProps) {\n const reduced = usePrefersReducedMotion();\n const [shown, setShown] = React.useState(value);\n const shownRef = React.useRef(value);\n\n React.useEffect(() => {\n if (reduced || typeof window === 'undefined') {\n shownRef.current = value;\n setShown(value);\n return;\n }\n const from = shownRef.current;\n const start = performance.now();\n let raf = 0;\n const tick = (t: number) => {\n const p = Math.min(1, (t - start) / duration);\n const eased = 1 - Math.pow(1 - p, 3);\n const v = from + (value - from) * eased;\n shownRef.current = v;\n setShown(v);\n if (p < 1) raf = requestAnimationFrame(tick);\n };\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }, [value, duration, reduced]);\n\n return (\n <span className={cn('tabular-nums', className)} data-slot=\"animated-number\">\n {format(shown)}\n </span>\n );\n}\n\n// =============================================================================\n// SliderCalculator\n// =============================================================================\n\n/**\n * A two-column interactive calculator: labelled sliders on the left, a live\n * result panel on the right with an animated headline number, a one-line\n * summary, proportional breakdown bars, a \"Show the math\" disclosure and an\n * actions slot. Bring your own `compute` — the component owns only the\n * interaction. Ported from the Enterprise Health ROI calculator.\n *\n * @example\n * ```tsx\n * <SliderCalculator\n * heading=\"What is consolidation worth?\"\n * inputs={[\n * { id: 'people', label: 'People covered', min: 500, max: 60000, step: 500, defaultValue: 8000 },\n * { id: 'cost', label: 'Cost per exam', min: 20, max: 400, step: 5, defaultValue: 120, format: 'currency' },\n * ]}\n * compute={({ people, cost }) => ({ total: people * cost * 0.18 })}\n * actions={<Button effect=\"sheen\">Request a demo</Button>}\n * />\n * ```\n */\nexport function SliderCalculator({\n inputs,\n compute,\n eyebrow,\n heading,\n description,\n headingLevel: Heading = 'h2',\n resultLabel = 'Estimated annual value',\n resultFormat = 'compactCurrency',\n breakdownFormat = 'currency',\n actions,\n footnote,\n mathLabels,\n currency = 'USD',\n locale = 'en-US',\n onChange,\n className,\n}: SliderCalculatorProps) {\n const [values, setValues] = React.useState<Record<string, number>>(() =>\n Object.fromEntries(inputs.map((i) => [i.id, i.defaultValue]))\n );\n const [showMath, setShowMath] = React.useState(false);\n const id = React.useId();\n\n const result = React.useMemo(() => compute(values), [compute, values]);\n\n // Notify from an effect keyed on `values` only. `result` and `onChange` are\n // read through a ref: an inline `compute` or `onChange` prop gets a new\n // identity on every parent render, and depending on either would re-fire the\n // notification (and potentially loop) without any actual slider change.\n const skipInitialNotify = React.useRef(true);\n const notifyRef = React.useRef({ onChange, result });\n notifyRef.current = { onChange, result };\n React.useEffect(() => {\n if (skipInitialNotify.current) {\n skipInitialNotify.current = false;\n return;\n }\n notifyRef.current.onChange?.(values, notifyRef.current.result);\n }, [values]);\n\n const fmtResult = React.useMemo(\n () => makeFormatter(resultFormat, locale, currency),\n [resultFormat, locale, currency]\n );\n const fmtBreakdown = makeFormatter(breakdownFormat, locale, currency);\n\n // Announce only the settled total. The result container previously carried\n // aria-live while `AnimatedNumber` updated every animation frame, so screen\n // readers could queue or repeat intermediate values during a drag.\n const [announced, setAnnounced] = React.useState('');\n const skipInitialAnnounce = React.useRef(true);\n React.useEffect(() => {\n if (skipInitialAnnounce.current) {\n skipInitialAnnounce.current = false;\n return;\n }\n const t = window.setTimeout(\n () => setAnnounced(fmtResult(result.total)),\n 600\n );\n return () => window.clearTimeout(t);\n }, [result.total, fmtResult]);\n\n const labels = {\n show: 'Show the math',\n hide: 'Hide the math',\n ...mathLabels,\n };\n\n const set = (key: string, v: number) => {\n setValues((prev) => ({ ...prev, [key]: v }));\n };\n\n return (\n <div\n data-slot=\"slider-calculator\"\n className={cn(\n 'border-border bg-card text-card-foreground grid overflow-hidden rounded-2xl border shadow-md',\n 'lg:grid-cols-[1.1fr_1fr]',\n className\n )}\n >\n {/* Controls */}\n <div className=\"p-6 sm:p-8\">\n {eyebrow && (\n <p className=\"text-primary-800 dark:text-primary-300 mb-2 text-[11px] font-bold tracking-[0.14em] uppercase\">\n {eyebrow}\n </p>\n )}\n {heading && (\n <Heading className=\"text-foreground text-2xl leading-tight font-semibold sm:text-3xl\">\n {heading}\n </Heading>\n )}\n {description && (\n <p className=\"text-muted-foreground mt-3 text-sm\">{description}</p>\n )}\n\n <div className={cn('space-y-5', (heading || description) && 'mt-7')}>\n {inputs.map((input) => (\n <Slider\n key={input.id}\n id={`${id}-${input.id}`}\n label={input.label}\n description={input.description}\n min={input.min}\n max={input.max}\n step={input.step}\n value={values[input.id]}\n onValueChange={(v) => set(input.id, v)}\n showValue\n formatValue={makeFormatter(input.format, locale, currency)}\n />\n ))}\n </div>\n </div>\n\n {/* Result */}\n <div\n data-slot=\"slider-calculator-result\"\n className=\"bg-primary-950 flex flex-col gap-6 p-6 text-white [background:radial-gradient(120%_120%_at_100%_0%,var(--mieweb-primary-800),var(--mieweb-primary-950)_70%)] sm:p-8\"\n >\n <span aria-live=\"polite\" className=\"sr-only\">\n {announced ? `${resultLabel}: ${announced}` : ''}\n </span>\n <div>\n <p className=\"text-[11px] font-bold tracking-[0.14em] text-white/70 uppercase\">\n {resultLabel}\n </p>\n <p className=\"mt-2 text-5xl leading-none font-semibold tracking-tight sm:text-6xl\">\n <AnimatedNumber value={result.total} format={fmtResult} />\n </p>\n {result.summary && (\n <p className=\"mt-3 text-sm text-white/80\">{result.summary}</p>\n )}\n </div>\n\n {result.breakdown && result.breakdown.length > 0 && (\n <div className=\"space-y-3\">\n {result.breakdown.map((b) => {\n const pct =\n result.total > 0\n ? Math.max(2, Math.min(100, (b.value / result.total) * 100))\n : 0;\n return (\n <div key={b.label}>\n <div className=\"mb-1 flex items-baseline justify-between gap-3 text-sm\">\n <span className=\"text-white/80\">{b.label}</span>\n <b className=\"tabular-nums\">\n <AnimatedNumber\n value={Math.max(b.value, 0)}\n format={fmtBreakdown}\n />\n </b>\n </div>\n <div className=\"h-1.5 overflow-hidden rounded-full bg-white/15\">\n <span\n className=\"block h-full rounded-full transition-[width] duration-500 ease-out [background:linear-gradient(90deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-300))]\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {(result.math?.length || result.assumptions?.length) && (\n <div>\n <button\n type=\"button\"\n onClick={() => setShowMath((v) => !v)}\n aria-expanded={showMath}\n aria-controls={`${id}-math`}\n className=\"inline-flex items-center gap-1 text-sm font-semibold text-white/80 underline-offset-4 hover:text-white hover:underline\"\n >\n {showMath ? labels.hide : labels.show}\n {showMath ? (\n <ChevronUp size={14} aria-hidden />\n ) : (\n <ChevronDown size={14} aria-hidden />\n )}\n </button>\n {showMath && (\n <div\n id={`${id}-math`}\n className=\"mt-3 rounded-xl border border-white/15 bg-white/5 p-4 text-sm\"\n >\n {result.math?.map((row) => (\n <div\n key={row.label}\n className=\"flex justify-between gap-4 border-b border-white/10 py-1.5 last:border-0\"\n >\n <span className=\"text-white/75\">{row.label}</span>\n <b className=\"tabular-nums\">{row.value}</b>\n </div>\n ))}\n {result.assumptions && result.assumptions.length > 0 && (\n <ul className=\"mt-3 list-disc space-y-1 ps-5 text-xs text-white/70\">\n {result.assumptions.map((a) => (\n <li key={a}>{a}</li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n )}\n\n {actions && (\n <div className=\"mt-auto flex flex-wrap gap-3\">{actions}</div>\n )}\n {footnote && <p className=\"text-xs text-white/60\">{footnote}</p>}\n </div>\n </div>\n );\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkS7AMZ4RD_cjs = require('./chunk-S7AMZ4RD.cjs');
3
+ var chunk7K6SW4VB_cjs = require('./chunk-7K6SW4VB.cjs');
4
4
  var chunkPLMXN23Q_cjs = require('./chunk-PLMXN23Q.cjs');
5
- var chunkGGLISETW_cjs = require('./chunk-GGLISETW.cjs');
5
+ var chunkIKHK4GTF_cjs = require('./chunk-IKHK4GTF.cjs');
6
6
  var chunkUPWIJC6I_cjs = require('./chunk-UPWIJC6I.cjs');
7
7
  var chunkCPDNX3LS_cjs = require('./chunk-CPDNX3LS.cjs');
8
- var chunkAHT2HRHC_cjs = require('./chunk-AHT2HRHC.cjs');
8
+ var chunkTNRANQVI_cjs = require('./chunk-TNRANQVI.cjs');
9
9
  var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
10
10
  var chunkFSARTLUE_cjs = require('./chunk-FSARTLUE.cjs');
11
11
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
@@ -800,7 +800,7 @@ function TextField({
800
800
  multiline,
801
801
  ...props
802
802
  }) {
803
- const Control = multiline ? chunkGGLISETW_cjs.Textarea : chunkZ5S5JEJD_cjs.Input;
803
+ const Control = multiline ? chunkIKHK4GTF_cjs.Textarea : chunkZ5S5JEJD_cjs.Input;
804
804
  return /* @__PURE__ */ jsxRuntime.jsx(
805
805
  Control,
806
806
  {
@@ -985,7 +985,7 @@ function EmailBlockSettings({
985
985
  case "text":
986
986
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
987
987
  /* @__PURE__ */ jsxRuntime.jsx(
988
- chunkAHT2HRHC_cjs.RichTextEditorBase,
988
+ chunkTNRANQVI_cjs.RichTextEditorBase,
989
989
  {
990
990
  "aria-label": f.content,
991
991
  value: block.content === emitted.current ? block.content : sanitizeEmailHtml(block.content) ?? "",
@@ -1271,7 +1271,7 @@ function EmailBlockSettings({
1271
1271
  ] });
1272
1272
  case "html":
1273
1273
  return /* @__PURE__ */ jsxRuntime.jsx(
1274
- chunkGGLISETW_cjs.Textarea,
1274
+ chunkIKHK4GTF_cjs.Textarea,
1275
1275
  {
1276
1276
  label: f.html,
1277
1277
  value: block.html,
@@ -2364,16 +2364,16 @@ var EmailEditor = React3__namespace.forwardRef(
2364
2364
  "data-slot": "email-editor-palette",
2365
2365
  className: chunkS5RVSXDV_cjs.cn(panel, "border-b lg:w-64 lg:border-e lg:border-b-0"),
2366
2366
  children: /* @__PURE__ */ jsxRuntime.jsxs(
2367
- chunkS7AMZ4RD_cjs.Tabs,
2367
+ chunk7K6SW4VB_cjs.Tabs,
2368
2368
  {
2369
2369
  defaultValue: "blocks",
2370
2370
  className: "flex min-h-0 flex-1 flex-col",
2371
2371
  children: [
2372
- /* @__PURE__ */ jsxRuntime.jsxs(chunkS7AMZ4RD_cjs.TabsList, { className: "px-2", children: [
2373
- /* @__PURE__ */ jsxRuntime.jsx(chunkS7AMZ4RD_cjs.TabsTrigger, { value: "blocks", children: labels.blocks }),
2374
- onDesignChange && /* @__PURE__ */ jsxRuntime.jsx(chunkS7AMZ4RD_cjs.TabsTrigger, { value: "design", children: labels.design })
2372
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk7K6SW4VB_cjs.TabsList, { className: "px-2", children: [
2373
+ /* @__PURE__ */ jsxRuntime.jsx(chunk7K6SW4VB_cjs.TabsTrigger, { value: "blocks", children: labels.blocks }),
2374
+ onDesignChange && /* @__PURE__ */ jsxRuntime.jsx(chunk7K6SW4VB_cjs.TabsTrigger, { value: "design", children: labels.design })
2375
2375
  ] }),
2376
- /* @__PURE__ */ jsxRuntime.jsx(chunkS7AMZ4RD_cjs.TabsContent, { value: "blocks", className: "overflow-y-auto p-3", children: /* @__PURE__ */ jsxRuntime.jsx(
2376
+ /* @__PURE__ */ jsxRuntime.jsx(chunk7K6SW4VB_cjs.TabsContent, { value: "blocks", className: "overflow-y-auto p-3", children: /* @__PURE__ */ jsxRuntime.jsx(
2377
2377
  "div",
2378
2378
  {
2379
2379
  className: "flex gap-2 overflow-x-auto pb-1 lg:grid lg:grid-cols-2 lg:overflow-visible lg:pb-0",
@@ -2390,7 +2390,7 @@ var EmailEditor = React3__namespace.forwardRef(
2390
2390
  ))
2391
2391
  }
2392
2392
  ) }),
2393
- onDesignChange && /* @__PURE__ */ jsxRuntime.jsx(chunkS7AMZ4RD_cjs.TabsContent, { value: "design", className: panelBody, children: /* @__PURE__ */ jsxRuntime.jsx(
2393
+ onDesignChange && /* @__PURE__ */ jsxRuntime.jsx(chunk7K6SW4VB_cjs.TabsContent, { value: "design", className: panelBody, children: /* @__PURE__ */ jsxRuntime.jsx(
2394
2394
  EmailDesignPanel,
2395
2395
  {
2396
2396
  design: resolveDesignSettings(designProp),
@@ -2569,5 +2569,5 @@ exports.createEmptyEmailContentTree = createEmptyEmailContentTree;
2569
2569
  exports.defaultEmailEditorLabels = defaultEmailEditorLabels;
2570
2570
  exports.generateEmailBlockId = generateEmailBlockId;
2571
2571
  exports.renderEmailMjml = renderEmailMjml;
2572
- //# sourceMappingURL=chunk-BQSREBF2.cjs.map
2573
- //# sourceMappingURL=chunk-BQSREBF2.cjs.map
2572
+ //# sourceMappingURL=chunk-OJ2NCQ2R.cjs.map
2573
+ //# sourceMappingURL=chunk-OJ2NCQ2R.cjs.map